Esempio n. 1
0
        public void Execute(Document document)
        {
            if (document.IsBeforeSystemStart)
            {
                return;
            }

            if (document.Source != null &&
                (document.Source.Attribute("type").Value == "order" || document.CheckSourceType(SourceType.SalesOrderRealization)))
            {
                DocumentMapper     mapper = DependencyContainerManager.Container.Get <DocumentMapper>();
                CommercialDocument order  = (CommercialDocument)mapper.LoadBusinessObject(BusinessObjectType.CommercialDocument, new Guid(document.Source.Attribute("commercialDocumentId").Value));

                List <WarehouseDocument> warehouses = new List <WarehouseDocument>();
                warehouses.Add((WarehouseDocument)document);

                CommercialWarehouseDocumentFactory.RelateWarehousesLinesToOrderLines(warehouses, order, document.Source, true, false);

                /*if (SalesOrderFactory.TryCloseSalesOrder(order))
                 *  document.AddRelatedObject(order);*/
            }
            else if (document.Source != null && document.Source.Attribute("type").Value == "multipleReservations")
            {
                DocumentMapper            mapper       = DependencyContainerManager.Container.Get <DocumentMapper>();
                List <CommercialDocument> reservations = new List <CommercialDocument>();

                foreach (var orderXml in document.Source.Elements())
                {
                    CommercialDocument order = (CommercialDocument)mapper.LoadBusinessObject(BusinessObjectType.CommercialDocument, new Guid(orderXml.Value));
                    reservations.Add(order);
                }

                List <WarehouseDocument> warehouses = new List <WarehouseDocument>();
                warehouses.Add((WarehouseDocument)document);

                CommercialWarehouseDocumentFactory.RelateWarehousesLinesToMultipleOrdersLines(warehouses, reservations, true, false);
            }
        }
Esempio n. 2
0
        public static ICollection <WarehouseDocument> GenerateDifferentialDocuments(InventoryDocument document, ICollection <InventorySheet> sheets)
        {
            string incomeTemplate  = document.DocumentType.InventoryDocumentOptions.IncomeDifferentialDocumentTemplate;
            string outcomeTemplate = document.DocumentType.InventoryDocumentOptions.OutcomeDifferentialDocumentTemplate;

            WarehouseItemQuantityInventoryDocumentDictionary dict = new WarehouseItemQuantityInventoryDocumentDictionary();

            foreach (InventorySheet sheet in sheets)
            {
                if (sheet.WarehouseId == null)
                {
                    throw new ClientException(ClientExceptionId.NoWarehouseIdOnInventorySheet, null, "ordinalNumber:" + sheet.OrdinalNumber.ToString(CultureInfo.InvariantCulture));
                }

                foreach (InventorySheetLine line in sheet.Lines)
                {
                    if (line.Direction == 0)
                    {
                        continue;
                    }

                    if (line.UserQuantity == null)
                    {
                        throw new ClientException(ClientExceptionId.NoUserQuantityOnInventorySheetLine, null, "lineOrdinalNumber:" + line.OrdinalNumber.ToString(CultureInfo.InvariantCulture), "sheetOrdinalNumber:" + sheet.OrdinalNumber.ToString(CultureInfo.InvariantCulture));
                    }

                    dict.Add(sheet.WarehouseId.Value, line.ItemId, line.UserQuantity.Value, line.SystemQuantity, line.UnitId);
                }
            }

            //majac juz wszystkie towary i ilosci posumowane sprawdzamy w ktorym przypadku userQuantity != systemQuantity i generujemy odpowiedni dokumencik

            List <WarehouseDocument> incomeDocuments  = new List <WarehouseDocument>();
            List <WarehouseDocument> outcomeDocuments = new List <WarehouseDocument>();

            foreach (Guid warehouseId in dict.Dictionary.Keys)
            {
                var innerDict = dict.Dictionary[warehouseId];

                foreach (Guid itemId in innerDict.Keys)
                {
                    var qty = innerDict[itemId];

                    if (qty.Quantity != qty.SystemQuantity)
                    {
                        WarehouseDocument doc = null;

                        if (qty.Quantity > qty.SystemQuantity)
                        {
                            doc = InventoryDocumentFactory.GetDocumentFromList(warehouseId, incomeTemplate, incomeDocuments);
                        }
                        else
                        {
                            doc = InventoryDocumentFactory.GetDocumentFromList(warehouseId, outcomeTemplate, outcomeDocuments);
                        }

                        WarehouseDocumentLine line = doc.Lines.CreateNew();
                        line.ItemId   = itemId;
                        line.Quantity = Math.Abs(qty.Quantity - qty.SystemQuantity);
                        line.UnitId   = qty.UnitId;
                    }
                }
            }

            foreach (WarehouseDocument wDoc in outcomeDocuments)
            {
                if (DictionaryMapper.Instance.GetWarehouse(wDoc.WarehouseId).ValuationMethod == ValuationMethod.DeliverySelection)
                {
                    CommercialWarehouseDocumentFactory.GenerateRelationsAndShiftsForOutcomeWarehouseDocument(wDoc);
                }
            }

            List <WarehouseDocument> retList = new List <WarehouseDocument>();

            foreach (var doc in incomeDocuments)
            {
                retList.Add(doc);
            }

            foreach (var doc in outcomeDocuments)
            {
                retList.Add(doc);
            }

            return(retList);
        }
Esempio n. 3
0
        public void Execute(Document document)
        {
            if (document.IsBeforeSystemStart)
            {
                return;
            }

            CommercialDocument commercialDocument = document as CommercialDocument;

            #region Outcome From Sales

            if (this.method == OutcomeFromSalesMethod)
            {
                //Pobranie konfiguracji dla typu dokumentu
                XElement configurationSettings = commercialDocument.DocumentType.Options;
                String   templateName;
                try
                {
                    templateName = (string)configurationSettings.Descendants("generateDocument").Attributes("templateName").Single();
                }
                catch (Exception)
                {
                    //RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:4");
                    templateName = "externalOutcome";
                }

                ICollection <WarehouseDocument> warehouses = CommercialWarehouseDocumentFactory.Generate(commercialDocument, templateName, true, false);

                if (warehouses.Count > 0)
                {
                    CommercialWarehouseDocumentFactory.RelateCommercialLinesToWarehousesLines(commercialDocument, warehouses, false, false, true, false);

                    XElement source = document.Source;

                    if (source != null && (source.Attribute("type").Value == "order" || source.Attribute("type").Value == SourceType.SalesOrderRealization))
                    {
                        DocumentMapper     mapper = DependencyContainerManager.Container.Get <DocumentMapper>();
                        CommercialDocument order  = (CommercialDocument)mapper.LoadBusinessObject(BusinessObjectType.CommercialDocument, new Guid(source.Attribute("commercialDocumentId").Value));

                        CommercialWarehouseDocumentFactory.RelateWarehousesLinesToOrderLines(warehouses, order, commercialDocument.Source, true, false);

                        /*if (SalesOrderFactory.TryCloseSalesOrder(order))
                         *      commercialDocument.AddRelatedObject(order);*/
                    }
                    else if (source != null && source.Attribute("type").Value == "multipleReservations")
                    {
                        DocumentMapper            mapper       = DependencyContainerManager.Container.Get <DocumentMapper>();
                        List <CommercialDocument> reservations = new List <CommercialDocument>();

                        foreach (var orderXml in source.Elements().Where(e => e.Name != "extraParams"))
                        {
                            CommercialDocument order = (CommercialDocument)mapper.LoadBusinessObject(BusinessObjectType.CommercialDocument, new Guid(orderXml.Value));
                            reservations.Add(order);
                        }

                        CommercialWarehouseDocumentFactory.RelateWarehousesLinesToMultipleOrdersLines(warehouses, reservations, true, false);
                    }
                }
            }

            #endregion

            #region Income From Purchase

            else if (this.method == IncomeFromPurchaseMethod)
            {
                ICollection <WarehouseDocument> warehouses = CommercialWarehouseDocumentFactory.Generate(commercialDocument, "externalIncome", true, false);

                if (warehouses.Count > 0)
                {
                    CommercialWarehouseDocumentFactory.RelateCommercialLinesToWarehousesLines(commercialDocument, warehouses, true, false, true, false);

                    XElement source = document.Source;

                    if (source != null && source.Attribute("type").Value == "order")
                    {
                        DocumentMapper     mapper = DependencyContainerManager.Container.Get <DocumentMapper>();
                        CommercialDocument order  = (CommercialDocument)mapper.LoadBusinessObject(BusinessObjectType.CommercialDocument, new Guid(source.Attribute("commercialDocumentId").Value));

                        CommercialWarehouseDocumentFactory.RelateWarehousesLinesToOrderLines(warehouses, order, commercialDocument.Source, true, false);
                    }
                }
            }

            #endregion

            else if (this.method == FinancialFromCommercialMethod)
            {
                //Warunek na istnienie jakiego kolwiek settlementu, bez tego nie chciał się dogenerować dokument finansowy
                //Błąd mówił o niejednoznacznych relacjach uniemożliwiających zaktualizowanie dokumentu finansowego
                bool cos = commercialDocument.Payments.Any(p => p.Settlements.Children.Count > 0);
                if (document.IsNew || !cos)
                {
                    FinancialDocumentFactory.GenerateFinancialDocumentToCommercialDocument(commercialDocument);
                }
                else
                {
                    FinancialDocumentFactory.UpdateFinancialDocumentsInCommercialDocument(commercialDocument);
                }
            }
        }