Esempio n. 1
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);
        }