Ejemplo n.º 1
0
        public void PopulateDocument(int markId, MemoryStream memory)
        {
            var mark = _markRepo.GetById(markId);

            if (mark == null)
            {
                throw new ArgumentNullException(nameof(mark));
            }
            var subnode = mark.Subnode;
            var node    = subnode.Node;
            var project = node.Project;

            var constructionBolts = _constructionBoltRepo.GetAllByMarkId(markId);
            var boltLengths       = new List <BoltLength> {
            };

            foreach (var bolt in constructionBolts)
            {
                var arr = _boltLengthRepo.GetAllByDiameterId(bolt.Diameter.Id);
                var bl  = arr.Where(
                    v => v.Length >= bolt.Packet + v.ScrewLength).Aggregate(
                    (i1, i2) => i1.Length < i2.Length ? i1 : i2);
                boltLengths.Add(bl);
            }
            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(memory, true))
            {
                var markName = MarkHelper.MakeMarkName(
                    project.BaseSeries, node.Code, subnode.Code, mark.Code);
                AppendToTable(wordDoc, constructionBolts.ToList(), boltLengths);
                Word.AppendToSmallFooterTable(wordDoc, markName);
                Word.AppendToMainSmallFooterTable(wordDoc, markName);
            }
        }
        public void PopulateDocument(int markId, MemoryStream memory)
        {
            var mark = _markRepo.GetById(markId);

            if (mark == null)
            {
                throw new ArgumentNullException(nameof(mark));
            }
            var subnode = mark.Subnode;
            var node    = subnode.Node;
            var project = node.Project;

            var departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                mark.Department.Id, _appSettings.DepartmentHeadPosId);

            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.ActingDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.DeputyDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.ActingDeputyDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                throw new ConflictException();
            }

            var constructions         = _constructionRepo.GetAllByMarkId(markId);
            var standardConstructions = _standardConstructionRepo.GetAllByMarkId(markId);

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(memory, true))
            {
                var markName = MarkHelper.MakeMarkName(
                    project.BaseSeries, node.Code, subnode.Code, mark.Code);
                (var complexName, var objectName) = MarkHelper.MakeComplexAndObjectName(
                    project.Name, node.Name, subnode.Name, mark.Name);

                AppendConstructionToTable(wordDoc,
                                          constructions.ToList(),
                                          standardConstructions.ToList());
                Word.AppendToMediumFooterTable(
                    wordDoc,
                    markName,
                    complexName,
                    objectName,
                    mark,
                    departmentHead);
                Word.AppendToSmallFooterTable(wordDoc, markName);
            }
        }
Ejemplo n.º 3
0
        public void PopulateDocument(int markId, MemoryStream memory)
        {
            var mark = _markRepo.GetById(markId);

            if (mark == null)
            {
                throw new ArgumentNullException(nameof(mark));
            }
            var subnode = mark.Subnode;
            var node    = subnode.Node;
            var project = node.Project;

            var sheets                = _docService.GetAllSheetsByMarkId(markId).ToList();
            var docs                  = _docService.GetAllAttachedByMarkId(markId).ToList();
            var attachedDocs          = _attachedDocRepo.GetAllByMarkId(markId).ToList();
            var additionalWork        = _additionalWorkService.GetAllByMarkId(markId).ToList();
            var constructions         = _constructionRepo.GetAllByMarkId(markId).ToList();
            var standardConstructions = _standardConstructionRepo.GetAllByMarkId(markId).ToList();

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(memory, true))
            {
                var markName = MarkHelper.MakeMarkName(
                    project.BaseSeries, node.Code, subnode.Code, mark.Code);
                (var complexName, var objectName) = MarkHelper.MakeComplexAndObjectName(
                    project.Name, node.Name, subnode.Name, mark.Name);

                Word.ReplaceText(wordDoc, "A", markName);
                Word.ReplaceText(wordDoc, "B", complexName);
                Word.ReplaceText(wordDoc, "C", objectName);
                Word.ReplaceText(wordDoc, "D", mark.Subnode.Node.ChiefEngineer.Name);
                Word.ReplaceText(wordDoc, "E", mark.GroupLeader.Name);
                Word.ReplaceText(
                    wordDoc, "F", mark.IssueDate.GetValueOrDefault().ToString("dd.MM.yyyy"));
                Word.ReplaceText(wordDoc, "G", FindWeight(constructions, standardConstructions).ToStringWithComma());
                AppendToSheetsTable(wordDoc, sheets);
                AppendToDocsTable(wordDoc, docs);
                AppendToAttachedDocsTable(wordDoc, attachedDocs);
                AppendToAdditionalWorkTable(wordDoc, additionalWork);

                Word.AppendToMainSmallFooterTable(wordDoc, markName);
                Word.AppendToSmallFooterTable(wordDoc, markName);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 子句结束处理函数
        /// </summary>
        private void subSentenceEnd(char ch)
        {
            /****************
             * 确定是否为子句添加一个标点
             * 如果子句以空格结束
             * ************************/
            var w = new _WordInnfo();

            if (MarkHelper.IsSubSentenceEndMark(ch))
            {
                w.Name = ch.ToString();
            }
            else if (MarkHelper.IsSentenceEndMark(ch))
            {
                w.Name = ch.ToString();
            }
            else
            {
                w.Name = '。'.ToString();
            }
            w.MaxType = WordType.Mark;
            _susentence.Words.Add(w);

            _susentence.Position.End = _currentPos;
            _isSubsentenceStarted    = false;

            /******************
            * 是否执行分次结果检测
            * ****************/
            if (_config.IsReflex)
            {
                _checker.Check(_susentence.Words);
            }

            /*************************
             * 发布子句解析完成事件
             * ********************/
            if (SubSenceFinish != null)
            {
                SubSenceFinish(_paragraph);
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// 检查是否是句子结束
 /// 如果是,结束句子
 /// </summary>
 /// <returns></returns>
 private bool isSentenceEnd()
 {
     if (!MarkHelper.IsSentenceEndMark(_token))
     {
         return(false);
     }
     else
     {
         /***************
          * 不等于0
          * 说明此时工作在searchtree
          * 不进行结束句子的操作
          * *************************/
         if (_serachTime != 0)
         {
             return(false);
         }
         else
         {
             sentenceEnd(_token);
             return(true);
         }
     }
 }
        public void PopulateDocument(int markId, MemoryStream memory)
        {
            var mark = _markRepo.GetById(markId);

            if (mark == null)
            {
                throw new ArgumentNullException(nameof(mark));
            }
            var subnode = mark.Subnode;
            var node    = subnode.Node;
            var project = node.Project;

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(memory, true))
            {
                var markName = MarkHelper.MakeMarkName(
                    project.BaseSeries, node.Code, subnode.Code, mark.Code);
                (var complexName, var objectName) = MarkHelper.MakeComplexAndObjectName(
                    project.Name, node.Name, subnode.Name, mark.Name);

                AddMarkInfo(wordDoc, complexName, objectName, markName);
                AddChiefEngineer(wordDoc, mark.Subnode.Node.ChiefEngineer.Name);
                AddYear(wordDoc);
            }
        }
        public void PopulateDocument(int markId, MemoryStream memory)
        {
            var mark = _markRepo.GetById(markId);

            if (mark == null)
            {
                throw new ArgumentNullException(nameof(mark));
            }
            var markApprovals = _markApprovalRepo.GetAllByMarkId(markId);
            var subnode       = mark.Subnode;
            var node          = subnode.Node;
            var project       = node.Project;

            var departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                mark.Department.Id, _appSettings.DepartmentHeadPosId);

            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.ActingDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.DeputyDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.ActingDeputyDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                throw new ConflictException();
            }

            var opCond = _markOperatingConditionsRepo.GetByMarkId(markId);

            if (opCond == null)
            {
                throw new ArgumentNullException(nameof(opCond));
            }
            var markGeneralDataPoints = _markGeneralDataPointRepo.GetAllByMarkId(
                markId).OrderByDescending(
                v => v.Section.OrderNum).ThenByDescending(v => v.OrderNum);
            var sheets = _docRepo.GetAllByMarkIdAndDocType(markId, _sheetDocTypeId);

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(memory, true))
            {
                var markName = MarkHelper.MakeMarkName(
                    project.BaseSeries, node.Code, subnode.Code, mark.Code);
                (var complexName, var objectName) = MarkHelper.MakeComplexAndObjectName(
                    project.Name, node.Name, subnode.Name, mark.Name);

                AppendList(wordDoc, markGeneralDataPoints, opCond);
                AppendToSheetTable(wordDoc, sheets.ToList());
                AppendToLinkedAndAttachedDocsTable(
                    wordDoc,
                    _markLinkedDocRepo.GetAllByMarkId(markId).ToList(),
                    _attachedDocRepo.GetAllByMarkId(markId).ToList());
                Word.AppendToBigFooterTable(
                    wordDoc,
                    markName,
                    complexName,
                    objectName,
                    sheets.Count(),
                    mark,
                    markApprovals.ToList(),
                    departmentHead);
                Word.AppendToSmallFooterTable(wordDoc, markName);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 主分词函数
        /// 从头到尾扫描字符串一遍,
        /// 并进行相应的处理
        /// </summary>
        ///
        private void work()
        {
            while (true)
            {
                if (_currentPos < _context.Length - 1)
                {
                    _token = next();
                }
                else
                {
                    if (_serachTime == 0)
                    {
                        break;
                    }
                    else
                    {
                        endFlex();
                        continue;
                    }
                }
                if (_isParagraphStarted)
                {
                    if (isParagraphEnd())
                    {
                        continue;
                    }

                    if (_isSentenceStarted)
                    {
                        if (_isSubsentenceStarted)
                        {
                            /****************************
                             * 无效字符 \r\n \b \f
                             * **********************/
                            if (MarkHelper.IsInvalidChar(_token))
                            {
                                continue;
                            }

                            /***********************
                             * 子句结束符 ,
                             * ************************/
                            if (isSubsentenceEnd())
                            {
                                continue;
                            }

                            /***************************
                             * 句子结束符 。 ; …… !?
                             * ************************/
                            if (isSentenceEnd())
                            {
                                continue;
                            }

                            /************************
                             * 分割特殊字符
                             * **********************************/
                            if (_serachTime == 0)
                            {
                                if (workSpecialChars())
                                {
                                    continue;
                                }
                            }
                            searchInTheTree();
                        }
                        else
                        {
                            subSentenceStart();
                        }
                    }
                    else
                    {
                        sentenceStart();
                    }
                }
                else
                {
                    if (CharHelper.IsBlank(_token))
                    {
                        continue;
                    }
                    paragraphStart();
                }
            }
        }
        public void PopulateDocument(int markId, MemoryStream memory)
        {
            var mark = _markRepo.GetById(markId);

            if (mark == null)
            {
                throw new ArgumentNullException(nameof(mark));
            }
            var subnode = mark.Subnode;
            var node    = subnode.Node;
            var project = node.Project;

            var departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                mark.Department.Id, _appSettings.DepartmentHeadPosId);

            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.ActingDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.DeputyDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                departmentHead = _employeeRepo.GetByDepartmentIdAndPosition(
                    mark.Department.Id, _appSettings.ActingDeputyDepartmentHeadPosId);
            }
            if (departmentHead == null)
            {
                throw new ConflictException();
            }

            // Вкл в состав спецификации
            var constructions         = _constructionRepo.GetAllByMarkId(markId);
            var standardConstructions = _standardConstructionRepo.GetAllByMarkId(markId);
            var opCond = _markOperatingConditionsRepo.GetByMarkId(markId);

            if (opCond == null)
            {
                throw new ArgumentNullException(nameof(opCond));
            }
            var estTask = _estimateTaskRepo.GetByMarkId(markId);

            if (estTask == null)
            {
                throw new ArgumentNullException(nameof(estTask));
            }
            var markApprovals = new List <MarkApproval> {
            };

            if (estTask.ApprovalEmployee != null)
            {
                markApprovals.Add(new MarkApproval
                {
                    MarkId   = markId,
                    Employee = estTask.ApprovalEmployee,
                });
            }

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(memory, true))
            {
                var markName = MarkHelper.MakeMarkName(
                    project.BaseSeries, node.Code, subnode.Code, mark.Code);
                (var complexName, var objectName) = MarkHelper.MakeComplexAndObjectName(
                    project.Name, node.Name, subnode.Name, mark.Name);

                AppendText(wordDoc, estTask.TaskText);

                var arr = new List <ListText>
                {
                    new ListText
                    {
                        Text            = "Изготовление и монтаж конструкций",
                        LevelNum        = 0,
                        IsBold          = true,
                        WithSuperscript = false,
                    },
                    new ListText
                    {
                        Text            = "Дополнительно учитывать:",
                        LevelNum        = 4,
                        IsBold          = false,
                        WithSuperscript = false,
                    },
                    new ListText
                    {
                        Text            = $"коэффициент надежности по ответственности: {opCond.SafetyCoeff}",
                        LevelNum        = 2,
                        IsBold          = false,
                        WithSuperscript = false,
                    },
                    new ListText
                    {
                        Text            = $"среда: {opCond.EnvAggressiveness.Name}",
                        LevelNum        = 2,
                        IsBold          = false,
                        WithSuperscript = false,
                    },
                    new ListText
                    {
                        Text            = $"расчетная температура эксплуатации: {(opCond.Temperature < 0 ? ("минус " + -opCond.Temperature) : opCond.Temperature)}",
                        LevelNum        = 2,
                        IsBold          = false,
                        WithSuperscript = false,
                    },
                };
                AppendList(wordDoc, arr);

                arr = new List <ListText> {
                };
                double overallInitialWeightSum = 0.0;
                double overallAreaSum          = 0.0;
                foreach (var construction in constructions)
                {
                    arr.Add(new ListText
                    {
                        Text            = construction.Name,
                        LevelNum        = 1,
                        IsBold          = false,
                        WithSuperscript = false,
                    });
                    if (construction.Valuation != null)
                    {
                        arr.Add(new ListText
                        {
                            Text            = $"Расценка: {construction.Valuation}",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                    }
                    if (construction.StandardAlbumCode != null)
                    {
                        arr.Add(new ListText
                        {
                            Text            = $"Шифр типового альбома конструкций: {construction.StandardAlbumCode}",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                    }
                    if (construction.NumOfStandardConstructions != 0)
                    {
                        arr.Add(new ListText
                        {
                            Text            = $"Число типовых конструкций: {construction.NumOfStandardConstructions}",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                    }
                    if (construction.HasEdgeBlunting)
                    {
                        arr.Add(new ListText
                        {
                            Text            = "Притупление кромок",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                    }
                    if (construction.HasDynamicLoad)
                    {
                        arr.Add(new ListText
                        {
                            Text            = "Динамическая нагрузка",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                    }
                    if (construction.HasFlangedConnections)
                    {
                        arr.Add(new ListText
                        {
                            Text            = "Фланцевые соединения",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                    }
                    if (construction.WeldingControl.Id > 1)
                    {
                        arr.Add(new ListText
                        {
                            Text            = $"Контроль плотности сварных швов {construction.WeldingControl.Name}",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                    }
                    var constructionElements = _constructionElementRepo.GetAllByConstructionId(construction.Id);
                    if (constructionElements.Count() > 0)
                    {
                        var groupedSteel = constructionElements.Where(
                            v => v.Steel != null).GroupBy(v => v.Steel).Select(
                            v => new GroupedSteel
                        {
                            Name   = v.First().Steel.Name,
                            Length = v.Sum(v => v.Length),
                            Weight = v.Sum(v => v.Profile.Weight),
                            Area   = v.Sum(v => v.Profile.Area),
                        });
                        arr.Add(new ListText
                        {
                            Text            = "в том числе по маркам стали:",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                        double initialWeightSum = 0.0;
                        double areaSum          = 0.0;
                        foreach (var s in groupedSteel)
                        {
                            // var initialWeightValue = s.Weight * s.Length * 0.001;
                            // var initialWeightValueRounded = Math.Ceiling(initialWeightValue * 1000) / 1000;
                            var initialWeightValueRounded = Math.Ceiling(
                                s.Weight * s.Length) / 1000;
                            var finalWeightValueRounded = Math.Ceiling(
                                initialWeightValueRounded * 1040) / 1000;
                            arr.Add(new ListText
                            {
                                // Text = $"{s.Name} {initialWeightValueRounded} x 1,04 = {Math.Ceiling(initialWeightValueRounded * 1.04 * 1000) / 1000} т",
                                Text            = $"{s.Name} {initialWeightValueRounded.ToStringWithComma()} x 1,04 = {finalWeightValueRounded.ToStringWithComma()} т",
                                LevelNum        = 6,
                                IsBold          = false,
                                WithSuperscript = false,
                            });
                            // initialWeightSum += initialWeightValue;
                            initialWeightSum += initialWeightValueRounded;
                            areaSum          += s.Area * s.Length;
                        }
                        overallInitialWeightSum += initialWeightSum;
                        var initialWeightSumRounded = Math.Ceiling(
                            initialWeightSum * 1000) / 1000;
                        var finalWeightSumRounded = Math.Ceiling(
                            initialWeightSumRounded * 1040) / 1000;
                        arr.Add(new ListText
                        {
                            // Text = $"Итого масса металла: {initialWeightSumRounded} x 1,04 = {Math.Ceiling(initialWeightSumRounded * 1.04 * 1000) / 1000} т",
                            Text            = $"Итого масса металла: {initialWeightSumRounded.ToStringWithComma()} x 1,04 = {finalWeightSumRounded.ToStringWithComma()} т",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                        var areaSumRounded = Math.Round(areaSum, 3);
                        // overallAreaSum += areaSum;
                        overallAreaSum += areaSumRounded;
                        arr.Add(new ListText
                        {
                            // Text = $"Площадь поверхности для окраски: {Math.Round(areaSum, 3).ToStringWithComma()} x 100 м^2",
                            Text            = $"Площадь поверхности для окраски: {areaSumRounded.ToStringWithComma()} x 100 м^2",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = true,
                        });
                        arr.Add(new ListText
                        {
                            // Text = $"Относительная площадь окраски: {Math.Round(areaSum * 100 / (initialWeightSum * 1.04), 3).ToStringWithComma()} м^2/т",
                            Text            = $"Относительная площадь окраски: {Math.Round(areaSumRounded * 100 / (initialWeightSumRounded * 1.04), 1).ToStringWithComma()} м^2/т",
                            LevelNum        = 5,
                            IsBold          = false,
                            WithSuperscript = true,
                        });
                    }
                }

                foreach (var standardConstruction in standardConstructions)
                {
                    arr.Add(new ListText
                    {
                        Text            = $"{standardConstruction.Name}: {(Math.Ceiling(standardConstruction.Weight * 1000) / 1000).ToStringWithComma()} т",
                        LevelNum        = 1,
                        IsBold          = false,
                        WithSuperscript = false,
                    });
                }

                arr.Add(new ListText
                {
                    Text            = "Окраска конструкций",
                    LevelNum        = 0,
                    IsBold          = true,
                    WithSuperscript = false,
                });

                var overallInitialWeightSumRounded = Math.Ceiling(
                    overallInitialWeightSum * 1000) / 1000;
                var overallFinalWeightSumRounded = Math.Ceiling(
                    overallInitialWeightSumRounded * 1040) / 1000;
                arr.Add(new ListText
                {
                    // Text = $"Масса металла для окраски: {Math.Round(overallInitialWeightSum, 3)} x 1,04 = {Math.Round(Math.Round(overallInitialWeightSum, 3) * 1.04, 3)} т",
                    Text            = $"Масса металла для окраски: {overallInitialWeightSumRounded.ToStringWithComma()} x 1,04 = {overallFinalWeightSumRounded.ToStringWithComma()} т",
                    LevelNum        = 4,
                    IsBold          = false,
                    WithSuperscript = false,
                });
                arr.Add(new ListText
                {
                    Text            = $"Площадь поверхности для окраски: {Math.Round(overallAreaSum, 3).ToStringWithComma()} x 100 м^2",
                    LevelNum        = 4,
                    IsBold          = false,
                    WithSuperscript = true,
                });

                var points = _markGeneralDataPointRepo.GetAllByMarkAndSectionId(
                    markId, _paintingGeneralDataSectionId);
                for (int i = 1; i < points.Count(); i++)
                {
                    var pointText = points.ToList()[i].Text;
                    if (pointText[0] == '#' && pointText[1] == ' ')
                    {
                        pointText = pointText.Substring(2) + ".";
                    }
                    else if (pointText[0] == '-' && pointText[1] == ' ')
                    {
                        pointText = pointText.Substring(2) + ".";
                    }
                    arr.Add(new ListText
                    {
                        Text            = pointText,
                        LevelNum        = 3,
                        IsBold          = false,
                        WithSuperscript = false,
                    });
                }

                if (estTask.AdditionalText != null && estTask.AdditionalText != "")
                {
                    arr.Add(new ListText
                    {
                        Text            = "Дополнительно",
                        LevelNum        = 0,
                        IsBold          = true,
                        WithSuperscript = false,
                    });
                    var split = estTask.AdditionalText.Split("\n");
                    foreach (var splitText in split)
                    {
                        arr.Add(new ListText
                        {
                            Text            = splitText,
                            LevelNum        = 3,
                            IsBold          = false,
                            WithSuperscript = false,
                        });
                    }
                }
                AppendList(wordDoc, arr);

                Word.AppendToBigFooterTable(
                    wordDoc,
                    markName,
                    complexName,
                    objectName,
                    -1,
                    mark,
                    markApprovals.ToList(),
                    departmentHead);
                Word.AppendToSmallFooterTable(wordDoc, markName);
            }
        }
Ejemplo n.º 10
0
        public void Create(
            Mark mark,
            int userId,
            int subnodeId,
            int departmentId,
            int?chiefSpecialistId,
            int?groupLeaderId,
            int?normContrId)
        {
            if (mark == null)
            {
                throw new ArgumentNullException(nameof(mark));
            }
            var subnode = _subnodeRepo.GetById(subnodeId);

            if (subnode == null)
            {
                throw new ArgumentNullException(nameof(subnode));
            }

            var uniqueConstraintViolationCheck = _repository.GetByUniqueKey(
                subnode.Id, mark.Code);

            if (uniqueConstraintViolationCheck != null)
            {
                throw new ConflictException(nameof(uniqueConstraintViolationCheck));
            }

            mark.Subnode = subnode;
            var department = _departmentRepo.GetById(departmentId);

            if (department == null)
            {
                throw new ArgumentNullException(nameof(department));
            }
            mark.Department = department;

            if (chiefSpecialistId != null)
            {
                var chiefSpecialist = _employeeRepo.GetById(
                    chiefSpecialistId.GetValueOrDefault());
                if (chiefSpecialist == null)
                {
                    throw new ArgumentNullException(nameof(chiefSpecialist));
                }
                if (chiefSpecialist.Department.Id != departmentId)
                {
                    throw new ConflictException(nameof(departmentId));
                }
                mark.ChiefSpecialist = chiefSpecialist;
            }
            if (groupLeaderId != null)
            {
                var groupLeader = _employeeRepo.GetById(groupLeaderId.GetValueOrDefault());
                if (groupLeader == null)
                {
                    throw new ArgumentNullException(nameof(groupLeader));
                }
                if (groupLeader.Department.Id != departmentId)
                {
                    throw new ConflictException(nameof(departmentId));
                }
                mark.GroupLeader = groupLeader;
            }
            if (normContrId != null)
            {
                var normContr = _employeeRepo.GetById(
                    normContrId.GetValueOrDefault());
                if (normContr == null)
                {
                    throw new ArgumentNullException(nameof(normContr));
                }
                if (normContr.Department.Id != departmentId)
                {
                    throw new ConflictException(nameof(departmentId));
                }
                mark.NormContr = normContr;
            }

            _repository.Add(mark);
            _specificationService.Create(mark.Id);

            _estimateTaskRepo.Add(new EstimateTask
            {
                Mark     = mark,
                TaskText = "Разработать сметную документацию к чертежам " + MarkHelper.MakeMarkName(
                    subnode.Node.Project.BaseSeries, subnode.Node.Code, subnode.Code, mark.Code
                    ) + "\nСостав и объемы работ:",
            });

            _markGeneralDataPointService.AddDefaultPoints(userId, mark);
        }