Esempio n. 1
0
        /// <summary>
        /// Генерация входящего номера
        /// </summary>
        /// <param name="document">Материал</param>
        public void GenerateDocumentIncomingNumber(Document document)
        {
            if (!string.IsNullOrEmpty(document.IncomingNumber))
            {
                return;
            }

            var documentType = _niisContext.DicDocumentTypes.FirstOrDefault(d => d.Id == document.TypeId);

            if (DicDocumentTypeCodes.IgnoreGenerateIncomingNumber().Contains(documentType?.Code))
            {
                return;
            }

            if (document.DocumentType != DocumentType.Incoming)
            {
                throw new Exception("Can not generate incoming number for not incoming document!");
            }

            var commonDivision = GetDicDivisionByCode(DicDivisionCodes.RGP_NIIS);
            var division       = GetDicDivisionById(document.DivisionId ?? 0);

            if (division == null)
            {
                division = commonDivision;
            }

            var count = GetNextCount(NumberGenerator.DocumentIncomingNumberCodePrefix + division.Code);

            document.IncomingNumber = $"{DateTime.Now.Year}-{count:D5}";
        }
        public async Task ExecuteAsync(Document document)
        {
            if (!string.IsNullOrEmpty(document.IncomingNumber))
            {
                return;
            }

            var documentType = await Executor.GetQuery <GetDicDocumentTypeByIdQuery>().Process(q => q.ExecuteAsync(document.TypeId));

            if (DicDocumentTypeCodes.IgnoreGenerateIncomingNumber().Contains(documentType?.Code))
            {
                return;
            }

            if (document.DocumentType != DocumentType.Incoming)
            {
                throw new Exception("Can not generate incoming number for not incoming document!");
            }

            var division = Executor.GetQuery <GetDicDivisionByIdQuery>()
                           .Process(q => q.Execute(document.DivisionId ?? 0));

            if (division == null)
            {
                throw new DataNotFoundException(nameof(DicDepartment), DataNotFoundException.OperationType.Read,
                                                document.Id);
            }
            int count;

            if (division.Code.Equals(DicDivisionCodes.RGP_NIIS))
            {
                count = Executor.GetHandler <GetNextCountHandler>().Process(h =>
                                                                            h.Execute(NumberGenerator.DocumentIncomingNumberCodePrefix + division.Code));

                document.IncomingNumber =
                    $"{DateTime.Now.Year}-{count:D5}";
            }
            else
            {
                if (document.IncomingNumberFilial != null)
                {
                    return;
                }
                count = Executor.GetHandler <GetNextCountHandler>().Process(h =>
                                                                            h.Execute(NumberGenerator.DocumentIncomingNumberFilialCodePrefix + division.Code));

                document.IncomingNumberFilial =
                    $"{count:D5}-{division.IncomingNumberCode}";
            }
        }