Esempio n. 1
0
        private bool ValidateXLSX(bool saveChanges)
        {
            //получаем коллекцию ключей
            Dictionary <string, ElementType> keys = new Dictionary <string, ElementType>();



            ElementImport.CustomerRequest = _context.CustomerRequests
                                            .Include(e => e.Customer)
                                            .Include(m => m.Program)
                                            .ThenInclude(e => e.ElementntTypes)
                                            .ThenInclude(e => e.Keys)
                                            .FirstOrDefault(e => e.CustomerRequestID == ElementImport.CustomerRequestID);


            //заполняем коллецию ключей
            foreach (var itemET in ElementImport.CustomerRequest.Program.ElementntTypes)
            {
                foreach (var itemKey in itemET.Keys)
                {
                    keys.Add(itemKey.Key, itemET);
                }
            }

            //функция возвращает true  только когда все элементы валидны;
            bool returnValue = true;

            if (ElementImport.XLSXElementTypes == null)
            {
                return(false);
            }
            //перебираем все загрузки
            foreach (var itemXLSX in ElementImport.XLSXElementTypes)
            {
                itemXLSX.Valid        = false;
                itemXLSX.ErrorMessage = "";

                itemXLSX.ElementName ??= "";
                itemXLSX.ElementTypeKey ??= "";

                if (!itemXLSX.InList & saveChanges)
                {
                    _context.Attach(itemXLSX).State = EntityState.Deleted;
                    XLSXElementType item = _context.XLSXElementTypes.FirstOrDefault(m => m.ID == itemXLSX.ID);
                    //ElementImport.XLSXElementTypes.Remove(itemXLSX);
                    continue;
                }

                //нет имени - не загружаем
                if (PrepareStr(itemXLSX.ElementName) == "")
                {
                    itemXLSX.ErrorMessage = "Имя элемента не заполнено";
                    returnValue           = false;
                    continue;
                }
                if (PrepareStr(itemXLSX.ElementTypeKey) == "")
                {
                    itemXLSX.ErrorMessage = "Ключ для элемента не заполнен.";
                    returnValue           = false;
                    continue;
                }
                XLSXElementType beforeItem = new XLSXElementType();
                beforeItem = BeforeUploadedXLSXElementType(itemXLSX.ElementName, itemXLSX.ID, ElementImport.CustomerRequest.TestProgramID);
                //Если предыдущий типономина найден и ему присвоен тип
                if (!((beforeItem != null? beforeItem.ElementTypeID:0) > 0))
                {
                    // ищем в коллекции ключей
                    foreach (var key in keys)
                    {
                        if (PrepareStr(itemXLSX.ElementTypeKey) == PrepareStr(key.Key))
                        {
                            itemXLSX.ElementTypeID   = keys[key.Key].ElementTypeID;
                            itemXLSX.ErrorMessage    = "";
                            itemXLSX.Valid           = true;
                            itemXLSX.ElementTypeName = keys[key.Key].Name;
                            break;
                        }
                    }
                }
                else
                {
                    // берем значения из ранее загруженного изделия
                    itemXLSX.ElementTypeID  = beforeItem.ElementTypeID;
                    itemXLSX.ElementTypeKey = beforeItem.ElementTypeKey;
                    itemXLSX.ErrorMessage   = "";
                    itemXLSX.Valid          = true;
                    itemXLSX.BeforeUploadedXLSXElementTypeID = beforeItem.ID;

                    itemXLSX.ElementTypeName = ElementImport.CustomerRequest.Program.ElementntTypes.FirstOrDefault(m => m.ElementTypeID == itemXLSX.ElementTypeID).Name ?? "";
                }
                if (itemXLSX.ElementTypeID > 0)
                {
                    //Ищем такой элемент в ASU, если надо
                    bool checkElemenTypeInAsu = ElementImport.CustomerRequest.Program.ElementntTypes.FirstOrDefault(m => m.ElementTypeID == itemXLSX.ElementTypeID).CheckInAsu;

                    if (UseAsu & itemXLSX.Valid & checkElemenTypeInAsu)
                    {
                        string protokolName = LastAsuProtokolNumber(itemXLSX.ElementName);
                        if (!String.IsNullOrWhiteSpace(protokolName))
                        {
                            itemXLSX.AsuProtokolCode = protokolName;
                        }
                    }
                }
                if (!itemXLSX.Valid)
                {
                    itemXLSX.ErrorMessage = "Ключ не найден.";
                    returnValue           = false;
                }
                if (saveChanges)
                {
                    XLSXElementType item = _context.XLSXElementTypes.FirstOrDefault(m => m.ID == itemXLSX.ID);
                    item.ElementTypeKey = itemXLSX.ElementTypeKey ?? "";
                    item.ElementName    = itemXLSX.ElementName ?? "";
                    item.ElementCount   = itemXLSX.ElementCount;
                    item.ElementTypeID  = itemXLSX.ElementTypeID;
                    item.BeforeUploadedXLSXElementTypeID = itemXLSX.BeforeUploadedXLSXElementTypeID;
                    _context.Entry(item).State           = EntityState.Modified;
                }
            }
            return(returnValue);
        }
Esempio n. 2
0
        public List <Estimator.Models.XLSXElementType> Convert(Stream memStream, Estimator.Models.ElementImport importSettings)
        {
            List <Models.XLSXElementType> returnValue = new List <XLSXElementType>();

            using (SpreadsheetDocument doc = SpreadsheetDocument.Open(memStream, false))
            {
                XLSXElementType elementType;

                memStream.Position = 0;
                ///shared ячейки (в которых хранятся повторяемые значения). Так вот, из объекта класса SpreadsheetDocument их можно получить так:
                SharedStringTable sharedStringTable = doc.WorkbookPart.SharedStringTablePart.SharedStringTable;
                //используем только первый лист!
                WorksheetPart worksheetPart = doc.WorkbookPart.WorksheetParts.First();
                //перебираем все строки
                foreach (SheetData sheetData in worksheetPart.Worksheet.Elements <SheetData>())
                {
                    if (sheetData.HasChildren)
                    {
                        foreach (Row row in sheetData.Elements <Row>())
                        {
                            //  if (importSettings.FirstRowIsHeader)
                            if (row.RowIndex > 1 | !importSettings.FirstRowIsHeader)
                            {
                                elementType = new XLSXElementType();

                                foreach (Cell cell in row.Elements <Cell>())
                                {
                                    string cellValue = string.Empty;

                                    string refName  = importSettings.ElementNameColumn.ToString() + row.RowIndex.ToString();
                                    string refKey   = importSettings.ElementTypeKeyColumn.ToString() + row.RowIndex.ToString();
                                    string refCount = importSettings.ElementCountColumn.ToString() + row.RowIndex.ToString();



                                    if (cell.CellReference.Value.ToString() == refName)
                                    {
                                        elementType.ElementName = getCellvalue(cell, sharedStringTable);
                                    }
                                    else if (cell.CellReference.Value.ToString() == refKey)
                                    {
                                        elementType.ElementTypeKey = getCellvalue(cell, sharedStringTable);
                                    }

                                    else if (cell.CellReference.Value.ToString() == refCount)
                                    {
                                        int i;
                                        int.TryParse(getCellvalue(cell, sharedStringTable), out i);
                                        elementType.ElementCount = i;
                                    }
                                }
                                // если колличествов данной строке = 0 то нефиг его и импортировать
                                if (elementType.ElementCount > 0)
                                {
                                    returnValue.Add(elementType);
                                }
                            }
                        }
                    }
                }
            }
            return(returnValue);
        }