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); } }
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); }
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); } } }