Esempio n. 1
0
        /// <summary>
        /// Добавление в спсиок печати документов маршрутного листа <paramref name="routeList"/> с выделением типов,
        /// указанных в массиве <paramref name="routeListPrintableDocumentTypes"/>, а также добавление в этот спсиок
        /// документов всех заказов из маршрутного листа <paramref name="routeList"/> с выделением типов, указанных в
        /// массиве <paramref name="orderDocumentTypes"/>. Если <paramref name="orderDocumentTypes"/> не указывать, то
        /// печать документов заказов произведена не будет.
        /// </summary>
        /// <param name="uow">Unit Of Work</param>
        /// <param name="routeList">Маршрутный лист</param>
        /// <param name="routeListPrintableDocumentTypes">Типы документов МЛ, которые необходимо отметить</param>
        /// <param name="orderDocumentTypes">Типы документов заказа, которые необходимо отметить</param>
        public EntitiyDocumentsPrinter(IUnitOfWork uow, RouteList routeList, RouteListPrintableDocuments[] routeListPrintableDocumentTypes, IList <OrderDocumentType> orderDocumentTypes = null)
        {
            this.uow         = uow;
            currentRouteList = routeList;
            DocPrinterInit();

            //Эти документы не будут добавлены в список печати вообще
            RouteListPrintableDocuments[] documentsToSkip =
            {
                RouteListPrintableDocuments.All,
                RouteListPrintableDocuments.LoadSofiyskaya,
                RouteListPrintableDocuments.TimeList,
                RouteListPrintableDocuments.OrderOfAddresses
            };

            foreach (RouteListPrintableDocuments rlDocType in Enum.GetValues(typeof(RouteListPrintableDocuments)))
            {
                if (!documentsToSkip.Contains(rlDocType))
                {
                    var  rlDoc                  = new RouteListPrintableDocs(uow, routeList, rlDocType);
                    bool isSelected             = routeListPrintableDocumentTypes.Contains(RouteListPrintableDocuments.All) || routeListPrintableDocumentTypes.Contains(rlDocType);
                    SelectablePrintDocument doc = new SelectablePrintDocument(rlDoc)
                    {
                        Selected = isSelected
                    };
                    DocumentsToPrint.Add(doc);
                }
            }
            if (orderDocumentTypes != null)
            {
                PrintOrderDocumentsFromTheRouteList(routeList, orderDocumentTypes);
            }
        }
        /// <summary>
        /// Добавление в спсиок печати документов маршрутного листа <paramref name="routeList"/> с выделением типов,
        /// указанных в массиве <paramref name="routeListPrintableDocumentTypes"/>, а также добавление в этот спсиок
        /// документов всех заказов из маршрутного листа <paramref name="routeList"/> с выделением типов, указанных в
        /// массиве <paramref name="orderDocumentTypes"/>. Если <paramref name="orderDocumentTypes"/> не указывать, то
        /// печать документов заказов произведена не будет.
        /// </summary>
        /// <param name="uow">Unit Of Work</param>
        /// <param name="routeList">Маршрутный лист</param>
        /// <param name="entityDocumentsPrinterFactory">Фабрика принтеров</param>
        /// <param name="routeListPrintableDocumentTypes">Типы документов МЛ, которые необходимо отметить</param>
        /// <param name="orderDocumentTypes">Типы документов заказа, которые необходимо отметить</param>
        public EntityDocumentsPrinter(
            IUnitOfWork uow,
            RouteList routeList,
            IEntityDocumentsPrinterFactory entityDocumentsPrinterFactory,
            RouteListPrintableDocuments[] routeListPrintableDocumentTypes,
            IList <OrderDocumentType> orderDocumentTypes = null)
        {
            if (entityDocumentsPrinterFactory == null)
            {
                throw new ArgumentNullException(nameof(entityDocumentsPrinterFactory));
            }

            DocPrinterInit();

            //Эти документы не будут добавлены в список печати вообще
            RouteListPrintableDocuments[] documentsToSkip =
            {
                RouteListPrintableDocuments.All,
                RouteListPrintableDocuments.LoadSofiyskaya,
                RouteListPrintableDocuments.TimeList,
                RouteListPrintableDocuments.OrderOfAddresses
            };

            foreach (RouteListPrintableDocuments rlDocType in Enum.GetValues(typeof(RouteListPrintableDocuments)))
            {
                if (!documentsToSkip.Contains(rlDocType))
                {
                    var rlDoc      = new RouteListPrintableDocs(uow, routeList, rlDocType);
                    var isSelected = routeListPrintableDocumentTypes.Contains(RouteListPrintableDocuments.All) ||
                                     routeListPrintableDocumentTypes.Contains(rlDocType);

                    var doc = new SelectablePrintDocument(rlDoc)
                    {
                        Selected = isSelected
                    };

                    DocumentsToPrint.Add(doc);
                }
            }

            if (orderDocumentTypes != null)
            {
                PrintOrderDocumentsFromTheRouteList(routeList, entityDocumentsPrinterFactory, orderDocumentTypes);
            }
        }
        private void FindODTTemplates(Order currentOrder, IList <OrderDocumentType> orderDocumentTypesToSelect = null)
        {
            List <string> msgs             = null;
            bool?         successfulUpdate = null;

            foreach (var item in currentOrder.OrderDocuments.OfType <PrintableOrderDocument>())
            {
                if (item is IPrintableOdtDocument document)
                {
                    switch (item.Type)
                    {
                    case OrderDocumentType.Contract:
                        if (document.GetTemplate() == null)
                        {
                            successfulUpdate =
                                (document as OrderContract)?.Contract.UpdateContractTemplate(currentOrder.UoW, _docTemplateRepository);
                        }

                        (document as OrderContract)?.PrepareTemplate(currentOrder.UoW, _docTemplateRepository);
                        break;

                    case OrderDocumentType.M2Proxy:
                        if (document.GetTemplate() == null)
                        {
                            successfulUpdate =
                                (document as OrderM2Proxy)?.M2Proxy.UpdateM2ProxyDocumentTemplate(currentOrder.UoW, _docTemplateRepository);
                        }

                        (document as OrderM2Proxy)?.PrepareTemplate(currentOrder.UoW, _docTemplateRepository);
                        break;

                    case OrderDocumentType.AdditionalAgreement:
                        break;

                    default:
                        throw new NotSupportedException("Документ не поддерживается");
                    }
                    if (successfulUpdate == false)
                    {
                        if (msgs == null)
                        {
                            msgs = new List <string>();
                        }

                        msgs.Add(string.Format("Документ '{0}' в комплект печати добавлен не был, т.к. для него не установлен шаблон документа и не удалось найти подходящий.", item.Name));
                        continue;
                    }
                }

                if (_hideSignaturesAndStamps.HasValue && item is ISignableDocument doc)
                {
                    doc.HideSignature = _hideSignaturesAndStamps.Value;
                }

                DocumentsToPrint.Add(
                    new SelectablePrintDocument(item)
                {
                    Selected = orderDocumentTypesToSelect == null ||
                               orderDocumentTypesToSelect.Contains(item.Type)
                }
                    );
            }

            if (msgs != null)
            {
                ODTTemplateNotFoundMessages = string.Join("\n", msgs);
            }
        }