public string GetDesignation(ExcelProject position)
 {
     var des = position.GetField(3) == null ? string.Empty : position.GetField(3).ToString().Trim();
     if (des.Contains("\\") || des.Contains("/"))
         return String.Empty;
     return des;
 }
        public string GetNumberBySpec(ExcelProject position)
        {
            var spec = position.GetField(2) == null ? string.Empty : position.GetField(2).ToString().Trim();
           

            return spec;
        }
        public int? GetLength(ExcelProject position)
        {
            var sep = position.GetField(11) == null ? string.Empty : position.GetField(11).ToString().Trim();
            if (!string.IsNullOrWhiteSpace(sep))
            {
                return Convert.ToInt32(sep);
            }

            return null;
        }
 public string GetMarkSteal(ExcelProject position)
 {
     return position.GetField(9) == null ? string.Empty : position.GetField(9).ToString().Trim();
 }
 public string GetStandartSize(ExcelProject position)
 {
     return position.GetField(6) == null ? string.Empty : position.GetField(6).ToString().Trim();
 }
 public string GetGOSTS(ExcelProject position)
 {
     return position.GetField(8) == null ? string.Empty : position.GetField(8).ToString().Trim();
 }
        protected virtual List<ExcelProject> GetListRows(string fileName)
        {
            var stream = File.OpenRead(fileName);
            var excelPack = new ExcelPackage();
            excelPack.Load(stream);
            stream.Close();

            var header = excelPack.Workbook.Worksheets[1].Cells[2, 1, 2, 18];

            var listRows = new List<ExcelProject>();

            var listCaption = new List<string>();
            for (int i = 0; i < 18; i++)
            {
                listCaption.Add(((object[,])header.Value)[0, i].ToString());
            }

            for (int i = 3; i <= excelPack.Workbook.Worksheets[1].Dimension.Rows; i++)
            {
                var structure = new ExcelProject();
                
                var dataRow = excelPack.Workbook.Worksheets[1].Cells[i, 1, i, 18];
                structure.Row = new object[18];
                for (int j = 0; j < 18; j++)
                {
                    structure.Row[j] = ((object[,])dataRow.Value)[0, j];
                }

                structure.ColumnsCaptions = listCaption;
                structure.FileNames = _docsFileName.GetFilesByNameDrawing(structure.GetField(3)?.ToString());
                listRows.Add(structure);
            }

            return listRows;
        }
        private void LoadFromProject(ExcelProject excelProject, Drawing drawing, TempDrawingsStorage drawStorage)
        {
            var childrenProject = new List<Drawing>();

            drawing.Name = excelProject.GetField(4)?.ToString().Trim();
            drawing.Designation = excelProject.GetField(3)?.ToString().Trim();
            drawing.Designation = drawing.Designation?.Replace("СБ", String.Empty).Trim() ?? String.Empty;
            drawing.GostOnMaterial = string.Empty;
            drawing.GostOnSort = string.Empty;
            drawing.MarkSteal = string.Empty;
            drawing.StandartSize = string.Empty;
            drawing.Profile = string.Empty;
            drawing.Files = excelProject.FileNames.Select(x => new UppyFileInfo() { FileName = x }).ToList();
            drawing.OP = excelProject.GetField(17) == null ? String.Empty : excelProject.GetField(17).ToString();

            DrawingStandartezer?.WriteToDrawingsStandartsField(drawing);

            if (DrawingExcluder?.IsNeedExclude(drawing) == true)
                return;

            drawStorage.Add(drawing);

            foreach (ExcelProject position in excelProject.Positions)
            {
                var subProject = new Drawing
                {
                    ParentId = drawing.Id,
                    Count = Convert.ToInt32(position.GetField(13)),
                    Note = string.Empty,
                    NumberOnSpec = Normalizer.NormalizePositionNumber(position.GetField(3)?.ToString()),
                    Profile = string.Empty
                };

                subProject.CountAll = subProject.Count * drawing.CountAll;

                if (position.Positions == null || position.Positions.Count == 0)
                {
                    //дальше лезть не надо
                    subProject.Name = position.GetField(4)?.ToString().Trim();
                    subProject.Designation = ExcelMaterialParser.GetDesignation(position) == string.Empty ? subProject.Designation : ExcelMaterialParser.GetDesignation(position);
                    subProject.NumberOnSpec = ExcelMaterialParser.GetNumberBySpec(position);

                    if (subProject.Designation == string.Empty)
                    {
                        subProject.Designation = $"{drawing.Designation} поз. {subProject.NumberOnSpec}".Trim();
                    }

                    try
                    {
                        subProject.Length = ExcelMaterialParser.GetLength(position);
                        subProject.Width = ExcelMaterialParser.GetWidth(position);
                    }
                    catch (Exception ex)
                    {
                        AppendMessageToLog(new LogMessage("Ошибка парсиинга длина и/или ширины.", drawing, TypeMessage.Error));
                    }

                    subProject.GostOnSort = Normalizer.SetEmptySpacesGost(ExcelMaterialParser.GetGOSTS(position));
                    subProject.StandartSize = ExcelMaterialParser.GetStandartSize(position);
                    
                    subProject.MarkSteal = ExcelMaterialParser.GetMarkSteal(position);
                    subProject.Profile = NameMaterialSearch.GetNameMaterialByGost(subProject.GostOnSort);
                    //subProject.Dimension = string.Empty;
                    subProject.GostOnMaterial = string.Empty;
                    subProject.Weight = Convert.ToDecimal(position.GetField(15));
                    subProject.WeightAll = subProject.CountAll * subProject.Weight;
                    subProject.MarkSteal = Normalizer.RemoveUnUseInfoAboutMarkSteal(subProject.MarkSteal);
                    DrawingStandartezer?.WriteToDrawingsStandartsField(subProject);
                    //DrawingStandartezer?.WriteToDrawingsStandartsRates(drawing);
                    subProject.OP = position.GetField(17) == null ? String.Empty : position.GetField(17).ToString();
                    subProject.Files = position.FileNames.Select(x => new UppyFileInfo() { FileName = x }).ToList();

                    if (DrawingExcluder?.IsNeedExclude(subProject) == true)
                        continue;

                    childrenProject.Add(subProject);
                    drawStorage.Add(subProject);
                }
                else
                {
                    LoadFromProject(position, subProject, drawStorage);
                    childrenProject.Add(subProject);
                }
            }

            drawing.WeightAll = childrenProject.Sum(x => x.WeightAll);


            if (Math.Round(drawing.WeightAll) == 0)
            {
                drawing.WeightAll = Convert.ToDecimal(excelProject.GetField(15)) * drawing.CountAll;
            }

            drawing.Weight = drawing.WeightAll / drawing.CountAll;
        }