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