private void ProcessLocalOutcomeShift(WarehouseDocument document)
        {
            if (document.Status != BusinessObjectStatus.New && document.Status != BusinessObjectStatus.Modified &&
                !document.Attributes.IsAnyChildNew() && !document.Attributes.IsAnyChildModified())
            {
                return;
            }

            if (document.IsLocalShift()) //mamy MMke lokalna
            {
                XElement outcomeShiftDbXml = this.mapper.LoadWarehouseDocumentDbXml(document.Id.Value);

                //zeby xml byl zgodny z takim jaki uzywa komunikacja (bo ja bedziemy "emulowac") to musimy na wycenach poustawiac
                //ordinal number pozycji ktorych dotycza
                foreach (XElement valuation in outcomeShiftDbXml.Element("warehouseDocumentValuation").Elements())
                {
                    string outcomeWarehouseDocumentLineId = valuation.Element("outcomeWarehouseDocumentLineId").Value;
                    string ordinalNumber = outcomeShiftDbXml.Element("warehouseDocumentLine").Elements().Where(l => l.Element("id").Value == outcomeWarehouseDocumentLineId).First().Element("ordinalNumber").Value;
                    valuation.Add(new XAttribute("outcomeShiftOrdinalNumber", ordinalNumber));
                }

                outcomeShiftDbXml.Element("warehouseDocumentValuation").Add(new XAttribute("outcomeShiftId", document.Id.ToUpperString()));

                using (DocumentCoordinator c = new DocumentCoordinator(false, false))
                {
                    c.CreateOrUpdateIncomeShiftDocumentFromOutcomeShift(outcomeShiftDbXml);
                    c.ValuateIncomeShiftDocument(outcomeShiftDbXml);
                }
            }
        }
Ejemplo n.º 2
0
        public static void CreateInventorySheetToInventoryDocument(InventorySheet destination, XElement source)
        {
            Guid inventoryDocumentId = new Guid(source.Element("inventoryDocumentId").Value);

            destination.InventoryDocumentHeaderId = inventoryDocumentId;

            using (DocumentCoordinator c = new DocumentCoordinator(false, false))
            {
                InventoryDocument inventoryDocument = (InventoryDocument)c.LoadBusinessObject(BusinessObjectType.InventoryDocument, inventoryDocumentId);
                destination.Tag           = inventoryDocument.Version.ToUpperString();
                destination.OrdinalNumber = inventoryDocument.Sheets.Children.Count + 1;
                destination.InventoryDocumentFullNumber = inventoryDocument.Number.FullNumber;
                destination.WarehouseId = inventoryDocument.WarehouseId;
            }
        }
Ejemplo n.º 3
0
        private static void AddShiftPosition(ServiceDocument serviceDocument, Guid sourceWarehouseId, Guid destinationWarehouseId, List <WarehouseDocument> shiftDocumentsList, Guid itemId, decimal quantity, Guid unitId)
        {
            WarehouseDocument shift = (from doc in shiftDocumentsList
                                       where doc.WarehouseId == sourceWarehouseId &&
                                       doc.Attributes.Children.Where(a => a.DocumentFieldName == DocumentFieldName.ShiftDocumentAttribute_OppositeWarehouseId)
                                       .First().Value.Value.ToUpperInvariant() == destinationWarehouseId.ToUpperString()
                                       select doc).FirstOrDefault();

            if (shift == null) //tworzymy takiego szifta
            {
                using (DocumentCoordinator c = new DocumentCoordinator(false, false))
                {
                    string processType = serviceDocument.Attributes[DocumentFieldName.Attribute_ProcessType].Value.Value;
                    string template    = ProcessManager.Instance.GetDocumentTemplate(serviceDocument, "outcomeShift");
                    shift = (WarehouseDocument)c.CreateNewBusinessObject(BusinessObjectType.WarehouseDocument, template, null);
                    ProcessManager.Instance.AppendProcessAttributes(shift, processType, "outcomeShift", serviceDocument.Id, DocumentRelationType.ServiceToOutcomeShift);
                    DuplicableAttributeFactory.DuplicateAttributes(serviceDocument, shift);
                    serviceDocument.AddRelatedObject(shift);
                    shiftDocumentsList.Add(shift);
                    shift.WarehouseId = sourceWarehouseId;
                    var dstWarehouseId = shift.Attributes[DocumentFieldName.ShiftDocumentAttribute_OppositeWarehouseId];

                    if (dstWarehouseId == null)
                    {
                        dstWarehouseId = shift.Attributes.CreateNew();
                        dstWarehouseId.DocumentFieldName = DocumentFieldName.ShiftDocumentAttribute_OppositeWarehouseId;
                    }

                    dstWarehouseId.Value.Value = destinationWarehouseId.ToUpperString();
                }
            }

            //sprawdzamy czy moze juz jest pozycja na ten sam towar. jak jest to edytujemy quantity, jak nie to tworzymy nowa
            WarehouseDocumentLine line = shift.Lines.Children.Where(l => l.ItemId == itemId).FirstOrDefault();

            if (line == null)
            {
                line        = shift.Lines.CreateNew();
                line.ItemId = itemId;
                line.UnitId = unitId;
            }

            line.Quantity += quantity;
        }
Ejemplo n.º 4
0
        private static WarehouseDocument GetDocumentFromList(Guid warehouseId, string template, List <WarehouseDocument> list)
        {
            WarehouseDocument doc = list.Where(d => d.WarehouseId == warehouseId).FirstOrDefault();

            if (doc != null)
            {
                return(doc);
            }
            else
            {
                using (DocumentCoordinator c = new DocumentCoordinator(false, false))
                {
                    doc = (WarehouseDocument)c.CreateNewBusinessObject(BusinessObjectType.WarehouseDocument, template, null);
                }

                doc.WarehouseId = warehouseId;
                list.Add(doc);
                return(doc);
            }
        }
Ejemplo n.º 5
0
        internal void CheckDoesRealizeClosedSalesOrder(DocumentCoordinator coordinator)
        {
            //to ma działać tylko dla RW i tylko gdy jest on zapisywany bezpośrednio a nie jako powiązany dokument
            if (!this.IsNew &&
                this.WarehouseDirection == Enums.WarehouseDirection.Outcome &&
                !this.HasAnyCommercialCommercialWarehouseRelations)
            {
                DocumentMapper mapper =
                    (DocumentMapper)DependencyContainerManager.Container.Get <DocumentMapper>();

                IEnumerable <Document> relatedSalesOrders = this.Relations.GetRelatedDocuments(DocumentRelationType.SalesOrderToWarehouseDocument);

                foreach (Document relatedSalesOrder in relatedSalesOrders)
                {
                    CommercialDocument salesOrder = (CommercialDocument)mapper.LoadBusinessObject(BusinessObjectType.CommercialDocument, relatedSalesOrder.Id.Value);
                    if (relatedSalesOrder.Id.HasValue && SalesOrderFactory.IsSalesOrderClosed(salesOrder))
                    {
                        throw new ClientException(ClientExceptionId.DocumentEditForbiddenRelatedSalesOrderClosed);
                    }
                }
            }
        }
Ejemplo n.º 6
0
        private void ProcessLocalIncomeShift(WarehouseDocument document)
        {
            if (document.Status != BusinessObjectStatus.New && document.Status != BusinessObjectStatus.Modified)
            {
                return;
            }

            if (document.IsLocalShift()) //mamy MMke lokalna
            {
                Guid outcomeShiftId = new Guid(document.Attributes.Children.Where(aa => aa.DocumentFieldName == DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentId).First().Value.Value);

                using (DocumentCoordinator c = new DocumentCoordinator(false, false))
                {
                    WarehouseDocument outcomeShift = (WarehouseDocument)c.LoadBusinessObject(BusinessObjectType.WarehouseDocument, outcomeShiftId);

                    var oppositeDocAttr = outcomeShift.Attributes.Children.Where(o => o.DocumentFieldName == DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentId).FirstOrDefault();

                    if (oppositeDocAttr == null)
                    {
                        oppositeDocAttr = outcomeShift.Attributes.CreateNew();
                        oppositeDocAttr.DocumentFieldName = DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentId;
                        oppositeDocAttr.Value.Value       = document.Id.ToUpperString();
                    }

                    var oppositeStatusAttr = outcomeShift.Attributes.Children.Where(s => s.DocumentFieldName == DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentStatus).FirstOrDefault();

                    if (oppositeStatusAttr == null)
                    {
                        oppositeStatusAttr = outcomeShift.Attributes.CreateNew();
                        oppositeStatusAttr.DocumentFieldName = DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentStatus;
                    }

                    oppositeStatusAttr.Value.Value = ((int)document.DocumentStatus).ToString(CultureInfo.InvariantCulture);

                    c.SaveBusinessObject(outcomeShift);
                }
            }
        }
Ejemplo n.º 7
0
 private static void UpdateDocumentStatus(XDocument commPkg)
 {
     using (DocumentCoordinator cord = new DocumentCoordinator(false, false))
     {
         Guid documentId = new Guid(commPkg.Root.Element("shiftDocumentStatus").Attribute("outcomeShiftId").Value);
         WarehouseDocument outcomeShiftDocument = (WarehouseDocument)cord.LoadBusinessObject(Makolab.Fractus.Kernel.Enums.BusinessObjectType.WarehouseDocument, documentId);
         DocumentAttrValue oppositeDocStatus    = outcomeShiftDocument.Attributes.Children.Where(attr => attr.DocumentFieldName == Makolab.Fractus.Kernel.Enums.DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentStatus).SingleOrDefault();
         if (oppositeDocStatus == null)
         {
             oppositeDocStatus = outcomeShiftDocument.Attributes.CreateNew();
             oppositeDocStatus.DocumentFieldName = Makolab.Fractus.Kernel.Enums.DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentStatus;
         }
         DocumentAttrValue oppositeDocId = outcomeShiftDocument.Attributes.Children.Where(attr => attr.DocumentFieldName == Makolab.Fractus.Kernel.Enums.DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentId).SingleOrDefault();
         if (oppositeDocId == null)
         {
             oppositeDocId = outcomeShiftDocument.Attributes.CreateNew();
             oppositeDocId.DocumentFieldName = Makolab.Fractus.Kernel.Enums.DocumentFieldName.ShiftDocumentAttribute_OppositeDocumentId;
             oppositeDocId.Value.Value       = commPkg.Root.Element("shiftDocumentStatus").Attribute("incomeShiftId").Value;
         }
         oppositeDocStatus.Value.Value = commPkg.Root.Element("shiftDocumentStatus").Attribute("status").Value;
         cord.SaveBusinessObject(outcomeShiftDocument);
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Saves the business object.
        /// </summary>
        /// <param name="document"><see cref="CommercialDocument"/> to save.</param>
        /// <returns>Xml containing result of oper</returns>
        public XDocument SaveBusinessObject(InventoryDocument document)
        {
            DictionaryMapper.Instance.CheckForChanges();

            //load alternate version
            if (!document.IsNew)
            {
                IBusinessObject alternateBusinessObject = this.mapper.LoadBusinessObject(document.BOType, document.Id.Value);
                document.SetAlternateVersion(alternateBusinessObject);
            }

            foreach (var sheet in document.Sheets)
            {
                sheet.SkipLinesSave = true;

                InventorySheet alternateSheet = sheet.AlternateVersion as InventorySheet;

                if (alternateSheet != null && alternateSheet.DocumentStatus != sheet.DocumentStatus && sheet.DocumentStatus == DocumentStatus.Canceled)
                {
                    //jezeli anulowalismy arkusz z poziomu inwentaryzacji to nalezy caly arkusz wczytac, zmienic jego status i dodac do zapisu zeby
                    //wykonala sie tez inna jego logika zwiazana ze zmiana statusu
                    InventorySheet sh = (InventorySheet)this.mapper.LoadBusinessObject(BusinessObjectType.InventorySheet, sheet.Id.Value);
                    sh.DocumentStatus = DocumentStatus.Canceled;
                    document.AddRelatedObject(sh);
                }
            }

            //update status
            document.UpdateStatus(true);

            if (document.AlternateVersion != null)
            {
                document.AlternateVersion.UpdateStatus(false);
            }

            document.Validate();

            this.ExecuteCustomLogic(document);
            this.ExecuteDocumentOptions(document);

            //validate
            document.Validate();

            //update status
            document.UpdateStatus(true);

            if (document.AlternateVersion != null)
            {
                document.AlternateVersion.UpdateStatus(false);
            }

            SqlConnectionManager.Instance.BeginTransaction();

            try
            {
                DictionaryMapper.Instance.CheckForChanges();
                this.mapper.CheckBusinessObjectVersion(document);

                DocumentLogicHelper.AssignNumber(document, this.mapper);

                //Make operations list
                XDocument operations = XDocument.Parse("<root/>");

                document.SaveChanges(operations);

                if (document.AlternateVersion != null)
                {
                    document.AlternateVersion.SaveChanges(operations);
                }

                if (operations.Root.HasElements)
                {
                    this.mapper.ExecuteOperations(operations);
                    if (document.DocumentStatus == DocumentStatus.Committed)
                    {
                        this.mapper.CreateCommunicationXml(document);
                    }
                    this.mapper.UpdateDictionaryIndex(document);
                }

                Coordinator.LogSaveBusinessObjectOperation();

                foreach (var sheet in document.SheetsToSave)
                {
                    using (DocumentCoordinator c = new DocumentCoordinator(false, false))
                    {
                        c.SaveBusinessObject(sheet);
                    }
                }

                if (document.UnblockItems)
                {
                    this.itemMapper.UnblockItems();
                }

                document.SaveRelatedObjects();

                operations = XDocument.Parse("<root/>");

                document.SaveRelations(operations);

                if (document.AlternateVersion != null)
                {
                    ((InventoryDocument)document.AlternateVersion).SaveRelations(operations);
                }

                if (operations.Root.HasElements)
                {
                    this.mapper.ExecuteOperations(operations);
                }


                if (operations.Root.HasElements)
                {
                    this.mapper.CreateCommunicationXmlForDocumentRelations(operations); //generowanie paczek dla relacji dokumentow
                }
                XDocument returnXml = XDocument.Parse(String.Format(CultureInfo.InvariantCulture, "<root><id>{0}</id></root>", document.Id.ToUpperString()));

                //Custom validation
                this.mapper.ExecuteOnCommitValidationCustomProcedure(document);

                if (this.coordinator.CanCommitTransaction)
                {
                    if (!ConfigurationMapper.Instance.ForceRollbackTransaction)
                    {
                        SqlConnectionManager.Instance.CommitTransaction();
                    }
                    else
                    {
                        SqlConnectionManager.Instance.RollbackTransaction();
                    }
                }

                return(returnXml);
            }
            catch (SqlException sqle)
            {
                RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:72");
                Coordinator.ProcessSqlException(sqle, document.BOType, this.coordinator.CanCommitTransaction);
                throw;
            }
            catch (Exception)
            {
                RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:73");
                if (this.coordinator.CanCommitTransaction)
                {
                    SqlConnectionManager.Instance.RollbackTransaction();
                }
                throw;
            }
        }
Ejemplo n.º 9
0
 public CorrectiveOutcomeWarehouseDocumentLogic(DocumentCoordinator coordinator)
     : base(coordinator)
 {
 }
Ejemplo n.º 10
0
 public FinancialDocumentLogic(DocumentCoordinator coordinator)
 {
     this.mapper      = (DocumentMapper)coordinator.Mapper;
     this.coordinator = coordinator;
 }
Ejemplo n.º 11
0
        /// <summary>
        /// Executes the custom logic.
        /// </summary>
        /// <param name="document">The document to execute custom logic for.</param>
        private void ExecuteCustomLogic(CommercialDocument document)
        {
            //sprawdzamy czy zlecenie/technologia nie posiada pozycji uslugowych
            this.mapper.AddItemsToItemTypesCache(document);
            var cache = SessionManager.VolatileElements.ItemTypesCache;

            //foreach (var line in document.Lines)
            //{
            //    Guid itemTypeId = cache[line.ItemId];
            //    // Tutaj jest walidacja typów produktów ale nie potrzebnie, usługa w kontekście robocizny, powinna dać się zapisać w
            //    // procesie produkcyjnym
            //    if (!DictionaryMapper.Instance.GetItemType(itemTypeId).IsWarehouseStorable)
            //        throw new ClientException(ClientExceptionId.InvalidItemType);
            //}

            CommercialDocument alternateDocument = document.AlternateVersion as CommercialDocument;

            //zamykanie ZP
            if (alternateDocument != null && alternateDocument.DocumentStatus == DocumentStatus.Saved &&
                document.DocumentStatus == DocumentStatus.Committed && document.DocumentType.DocumentCategory == DocumentCategory.ProductionOrder)
            {
                Dictionary <Guid, CommercialDocument> technologies = new Dictionary <Guid, CommercialDocument>();
                WarehouseDocument internalOutcome         = null;
                WarehouseDocument internalIncome          = null;
                WarehouseDocument internalIncomeByproduct = null;

                using (DocumentCoordinator c = new DocumentCoordinator(false, false))
                {
                    internalOutcome         = (WarehouseDocument)c.CreateNewBusinessObject(BusinessObjectType.WarehouseDocument, ProcessManager.Instance.GetDocumentTemplate(document, "internalOutcome"), null);
                    internalIncome          = (WarehouseDocument)c.CreateNewBusinessObject(BusinessObjectType.WarehouseDocument, ProcessManager.Instance.GetDocumentTemplate(document, "internalIncome"), null);
                    internalIncomeByproduct = (WarehouseDocument)c.CreateNewBusinessObject(BusinessObjectType.WarehouseDocument, ProcessManager.Instance.GetDocumentTemplate(document, "internalIncomeByproduct"), null);
                }

                ProcessManager.Instance.AppendProcessAttributes(internalIncome, document.Attributes[DocumentFieldName.Attribute_ProcessType].Value.Value,
                                                                "internalIncome", null, null);

                internalIncome.WarehouseId = ProcessManager.Instance.GetProductWarehouse(document);

                ProcessManager.Instance.AppendProcessAttributes(internalOutcome, document.Attributes[DocumentFieldName.Attribute_ProcessType].Value.Value,
                                                                "internalOutcome", null, null);

                internalOutcome.WarehouseId = ProcessManager.Instance.GetMaterialWarehouse(document);

                ProcessManager.Instance.AppendProcessAttributes(internalIncomeByproduct, document.Attributes[DocumentFieldName.Attribute_ProcessType].Value.Value,
                                                                "internalIncomeByproduct", null, null);

                internalIncomeByproduct.WarehouseId = ProcessManager.Instance.GetByproductWarehouse(document);

                //wczytujemy wszystkie technologie
                //generujemy jeden wielki RW i PW dla wzsystkich technologii i podczepiamy go do zlecenia produkcyjnego

                foreach (CommercialDocumentLine line in document.Lines)
                {
                    var attr = line.Attributes[DocumentFieldName.LineAttribute_ProductionTechnologyName];

                    Guid technologyId = new Guid(attr.Value.Value);

                    if (!technologies.ContainsKey(technologyId))
                    {
                        CommercialDocument t = (CommercialDocument)this.mapper.LoadBusinessObject(BusinessObjectType.CommercialDocument, technologyId);
                        technologies.Add(technologyId, t);
                    }

                    this.ProcessTechnology(technologies[technologyId], line.Quantity, internalIncome, internalOutcome, internalIncomeByproduct, line.OrdinalNumber);
                }

                DocumentRelation relation = null;

                relation = internalOutcome.Relations.CreateNew();
                relation.RelationType    = DocumentRelationType.ProductionOrderToOutcome;
                relation.RelatedDocument = document;

                relation = document.Relations.CreateNew();
                relation.RelationType    = DocumentRelationType.ProductionOrderToOutcome;
                relation.RelatedDocument = internalOutcome;
                relation.DontSave        = true;
                DuplicableAttributeFactory.DuplicateAttributes(document, internalOutcome);
                document.AddRelatedObject(internalOutcome);

                relation = internalIncome.Relations.CreateNew();
                relation.RelationType    = DocumentRelationType.ProductionOrderToIncome;
                relation.RelatedDocument = document;

                relation = document.Relations.CreateNew();
                relation.RelationType    = DocumentRelationType.ProductionOrderToIncome;
                relation.RelatedDocument = internalIncome;
                relation.DontSave        = true;
                DuplicableAttributeFactory.DuplicateAttributes(document, internalIncome);
                document.AddRelatedObject(internalIncome);

                if (internalIncomeByproduct.Lines.Children.Count > 0)
                {
                    relation = internalIncomeByproduct.Relations.CreateNew();
                    relation.RelationType    = DocumentRelationType.ProductionOrderToIncome;
                    relation.RelatedDocument = document;

                    relation = document.Relations.CreateNew();
                    relation.RelationType    = DocumentRelationType.ProductionOrderToIncome;
                    relation.RelatedDocument = internalIncomeByproduct;
                    relation.DontSave        = true;
                    DuplicableAttributeFactory.DuplicateAttributes(document, internalIncomeByproduct);
                    document.AddRelatedObject(internalIncomeByproduct);
                }
            }
        }
Ejemplo n.º 12
0
        private static void GenerateFinancialDocumentToPayment(Payment payment, CommercialDocument document)
        {
            DocumentMapper mapper = DependencyContainerManager.Container.Get <DocumentMapper>();

            using (DocumentCoordinator coordinator = new DocumentCoordinator(false, false))
            {
                PaymentMethod paymentMethod = DictionaryMapper.Instance.GetPaymentMethod(payment.PaymentMethodId.Value);

                Guid branchId = SessionManager.User.BranchId;

                if (DictionaryMapper.Instance.IsPaymentMethodSupportedByRegister(paymentMethod.Id.Value, branchId))
                {
                    FinancialRegister register = DictionaryMapper.Instance.GetFinancialRegisterForSpecifiedPaymentMethod(paymentMethod.Id.Value, branchId, payment.PaymentCurrencyId);

                    if (register == null)
                    {
                        throw new ClientException(ClientExceptionId.UnableToIssueFinancialDocument3);
                    }

                    FinancialDirection direction = FinancialDocumentFactory.GetFinancialDirectionForPayment(document, payment);

                    Guid?reportId = mapper.GetOpenedFinancialReportId(register.Id.Value);

                    if (reportId == null)
                    {
                        throw new ClientException(ClientExceptionId.UnableToIssueDocumentToClosedFinancialReport);
                    }

                    FinancialDocument financialDoc = new FinancialDocument();
                    financialDoc.RelatedCommercialDocument = document;
                    coordinator.TrySaveProfileIdAttribute(financialDoc);

                    if (direction == FinancialDirection.Income)
                    {
                        financialDoc.DocumentTypeId         = register.IncomeDocumentTypeId;
                        financialDoc.Number.NumberSettingId = register.IncomeNumberSettingId;
                    }
                    else
                    {
                        financialDoc.DocumentTypeId         = register.OutcomeDocumentTypeId;
                        financialDoc.Number.NumberSettingId = register.OutcomeNumberSettingId;
                    }

                    financialDoc.Contractor          = payment.Contractor;
                    financialDoc.ContractorAddressId = payment.ContractorAddressId;
                    FinancialReport report = new FinancialReport();
                    report.Id = reportId;
                    report.FinancialRegisterId   = register.Id.Value;
                    financialDoc.FinancialReport = report;
                    financialDoc.DocumentStatus  = DocumentStatus.Committed;
                    DuplicableAttributeFactory.DuplicateAttributes(document, financialDoc);

                    Payment pt = financialDoc.Payments.CreateNew();
                    pt.Amount                       = Math.Abs(payment.Amount);
                    pt.ExchangeRate                 = financialDoc.ExchangeRate = document.ExchangeRate;
                    pt.ExchangeScale                = financialDoc.ExchangeScale = document.ExchangeScale;
                    pt.ExchangeDate                 = financialDoc.ExchangeDate = document.ExchangeDate;
                    financialDoc.Amount             = pt.Amount;
                    financialDoc.DocumentCurrencyId = payment.PaymentCurrencyId;
                    PaymentSettlement settlement = pt.Settlements.CreateNew();
                    settlement.IsAutoGenerated = true;
                    settlement.RelatedPayment  = payment;
                    settlement.Amount          = pt.Amount;

                    document.AddRelatedObject(financialDoc);
                }
            }
        }
Ejemplo n.º 13
0
 public WarehouseDocumentLogic(DocumentCoordinator coordinator)
 {
     this.mapper      = (DocumentMapper)coordinator.Mapper;
     this.coordinator = coordinator;
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CommercialDocumentLogic"/> class.
 /// </summary>
 /// <param name="coordinator">The parent coordinator.</param>
 public ProductionLogic(DocumentCoordinator coordinator)
 {
     this.mapper      = (DocumentMapper)coordinator.Mapper;
     this.coordinator = coordinator;
 }
Ejemplo n.º 15
0
        private void ValuateIncomeFromOutcome(IEnumerable <IGrouping <string, DBRow> > shiftLines)
        {
            XDocument valuationTemplate = XDocument.Parse("<root><warehouseDocumentValuation /></root>");

            using (var whDocCoord = new DocumentCoordinator(false, false))
            {
                foreach (var warehouseDocGroup in shiftLines)
                {
                    WarehouseDocument shift = null;
                    try
                    {
                        shift = (WarehouseDocument)whDocCoord.LoadBusinessObject(Makolab.Fractus.Kernel.Enums.BusinessObjectType.WarehouseDocument,
                                                                                 new Guid(warehouseDocGroup.Key));
                    }
                    catch (ClientException) { }

                    //there is a valuated document in database so we can forward valuation - no document = skip income valuation for this doc
                    if (shift != null)
                    {
                        DocumentAttrValue oppositeWarehouseIdAttr = shift.Attributes.Children.Where(attr => attr.DocumentFieldName == DocumentFieldName.ShiftDocumentAttribute_OppositeWarehouseId).SingleOrDefault();
                        string            oppositeWarehouseId     = oppositeWarehouseIdAttr != null ? oppositeWarehouseIdAttr.Value.Value : null;
                        if (oppositeWarehouseId != null)
                        {
                            Warehouse oppositeWarehouse = DictionaryMapper.Instance.GetWarehouse(new Guid(oppositeWarehouseId));
                            Warehouse warehouse         = DictionaryMapper.Instance.GetWarehouse(shift.WarehouseId);

                            //skip local shift document valuations
                            if (warehouse.BranchId == oppositeWarehouse.BranchId)
                            {
                                continue;
                            }

                            // skip valuation in headquarter if not a target branch
                            if (this.IsHeadquarter == true && DictionaryMapper.Instance.GetBranch(oppositeWarehouse.BranchId).DatabaseId != Makolab.Fractus.Kernel.Mappers.ConfigurationMapper.Instance.DatabaseId)
                            {
                                continue;
                            }

                            foreach (var valuation in warehouseDocGroup)
                            {
                                var whDocLine = shift.Lines.Children.Where(line => line.Id.ToString()
                                                                           .Equals(valuation.Element("outcomeWarehouseDocumentLineId").Value, StringComparison.OrdinalIgnoreCase))
                                                .SingleOrDefault();
                                valuation.Xml.Add(new XAttribute("outcomeShiftOrdinalNumber", whDocLine.OrdinalNumber));
                            }

                            var valuationPkg = new XDocument(valuationTemplate);
                            valuationPkg.Root.Element("warehouseDocumentValuation").Add(new XAttribute("outcomeShiftId", shift.Id));
                            valuationPkg.Root.Element("warehouseDocumentValuation").Add(warehouseDocGroup);

                            try
                            {
                                whDocCoord.ValuateIncomeShiftDocument(valuationPkg.Root);
                            }
                            catch (ClientException e)
                            {
                                if (e.Id != Makolab.Fractus.Kernel.Enums.ClientExceptionId.ObjectNotFound)
                                {
                                    throw;
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 16
0
 public ServiceDocumentLogic(DocumentCoordinator coordinator)
 {
     this.mapper      = (DocumentMapper)coordinator.Mapper;
     this.coordinator = coordinator;
 }
Ejemplo n.º 17
0
 public SalesOrderLogic(DocumentCoordinator coordinator)
 {
     this.mapper      = (DocumentMapper)coordinator.Mapper;
     this.coordinator = coordinator;
 }
Ejemplo n.º 18
0
        public void ChangeDocumentStatus(Document document, DocumentStatus requestedStatus)
        {
            WarehouseDocument  warehouseDocument  = document as WarehouseDocument;
            FinancialDocument  financialDocument  = document as FinancialDocument;
            ServiceDocument    serviceDocument    = document as ServiceDocument;
            InventoryDocument  inventoryDocument  = document as InventoryDocument;
            ComplaintDocument  complaintDocument  = document as ComplaintDocument;
            CommercialDocument commercialDocument = document as CommercialDocument;

            DocumentStatus actualStatus = document.DocumentStatus;
            Guid           documentId   = document.Id.Value;

            bool useStandardCancelProcessing = false;

            #region MM+
            if (warehouseDocument != null && warehouseDocument.WarehouseDirection == WarehouseDirection.IncomeShift)             //MM+
            {
                if (actualStatus == DocumentStatus.Saved && requestedStatus == DocumentStatus.Committed)
                {
                    warehouseDocument.DocumentStatus = DocumentStatus.Committed;
                    warehouseDocument.IssueDate      = SessionManager.VolatileElements.CurrentDateTime;

                    foreach (WarehouseDocumentLine line in warehouseDocument.Lines.Children)
                    {
                        line.Direction  = 1;
                        line.IncomeDate = SessionManager.VolatileElements.CurrentDateTime;
                    }

                    this.coordinator.SaveBusinessObject(warehouseDocument);
                }
                else if ((actualStatus == DocumentStatus.Committed || actualStatus == DocumentStatus.Saved) && requestedStatus == DocumentStatus.Canceled)
                {
                    useStandardCancelProcessing = true;
                }
            }
            #endregion
            #region MM-
            else if (warehouseDocument != null && warehouseDocument.WarehouseDirection == WarehouseDirection.OutcomeShift)             //MM-
            {
                if (actualStatus == DocumentStatus.Committed && requestedStatus == DocumentStatus.Canceled)
                {
                    useStandardCancelProcessing = true;

                    foreach (var line in warehouseDocument.Lines)
                    {
                        line.IncomeOutcomeRelations.RemoveAll();
                    }
                }
            }
            #endregion
            #region FinancialDocument
            else if (financialDocument != null)
            {
                if (actualStatus == DocumentStatus.Committed && requestedStatus == DocumentStatus.Canceled)
                {
                    DocumentStatusChangeLogic.CancelFinancialDocument(financialDocument);

                    this.coordinator.SaveBusinessObject(financialDocument);
                }
            }
            #endregion
            #region WarehouseDocumentCorrection
            else if (warehouseDocument != null && (warehouseDocument.DocumentType.DocumentCategory == DocumentCategory.IncomeWarehouseCorrection ||
                                                   warehouseDocument.DocumentType.DocumentCategory == DocumentCategory.OutcomeWarehouseCorrection))
            {
                SqlConnectionManager.Instance.BeginTransaction();

                try
                {
                    if (ConfigurationMapper.Instance.IsWmsEnabled)
                    {
                        DependencyContainerManager.Container.Get <WarehouseMapper>().DeleteShiftsForDocument(warehouseDocument.Id.Value);
                    }

                    this.mapper.CancelWarehouseDocument(warehouseDocument.Id.Value);
                    Coordinator.LogSaveBusinessObjectOperation();

                    if (!ConfigurationMapper.Instance.ForceRollbackTransaction)
                    {
                        SqlConnectionManager.Instance.CommitTransaction();
                    }
                    else
                    {
                        SqlConnectionManager.Instance.RollbackTransaction();
                    }
                }
                catch (SqlException sqle)
                {
                    RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:59");
                    Coordinator.ProcessSqlException(sqle, document.BOType, true);
                    throw;
                }
                catch (Exception)
                {
                    RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:60");
                    SqlConnectionManager.Instance.RollbackTransaction();
                    throw;
                }
            }
            #endregion
            #region ServiceDocument
            else if (serviceDocument != null)
            {
                if (actualStatus == DocumentStatus.Saved && requestedStatus == DocumentStatus.Canceled)
                {
                    using (DocumentCoordinator c = new DocumentCoordinator(false, true))
                    {
                        c.CancelServiceDocument(serviceDocument);
                    }
                }
            }
            #endregion
            #region InventoryDocument
            else if (inventoryDocument != null)
            {
                if (actualStatus == DocumentStatus.Saved && (requestedStatus == DocumentStatus.Committed || requestedStatus == DocumentStatus.Canceled))
                {
                    inventoryDocument.DocumentStatus = requestedStatus;

                    using (DocumentCoordinator c = new DocumentCoordinator(false, true))
                    {
                        c.SaveBusinessObject(inventoryDocument);
                    }
                }
            }
            #endregion
            #region ComplaintDocument
            else if (complaintDocument != null)
            {
                if (actualStatus == DocumentStatus.Saved && requestedStatus == DocumentStatus.Canceled)
                {
                    SqlConnectionManager.Instance.BeginTransaction();
                    this.coordinator.CanCommitTransaction = false;

                    foreach (DocumentRelation relation in complaintDocument.Relations)
                    {
                        if (relation.RelationType == DocumentRelationType.ComplaintToInternalIncome ||
                            relation.RelationType == DocumentRelationType.ComplaintToInternalOutcome)
                        {
                            using (DocumentCoordinator c = new DocumentCoordinator(false, false))
                            {
                                XDocument xml = new XDocument(new XElement("root"));
                                xml.Root.Add(new XElement("warehouseDocumentId", relation.RelatedDocument.Id.ToUpperString()));
                                xml.Root.Add(new XElement("status", "-20"));
                                c.ChangeDocumentStatus(xml);
                            }
                        }
                    }

                    complaintDocument.DocumentStatus = DocumentStatus.Canceled;
                    complaintDocument.Attributes[DocumentFieldName.Attribute_ProcessState].Value.Value = "closed";

                    try
                    {
                        this.coordinator.SaveBusinessObject(complaintDocument);

                        if (!ConfigurationMapper.Instance.ForceRollbackTransaction)
                        {
                            SqlConnectionManager.Instance.CommitTransaction();
                        }
                        else
                        {
                            SqlConnectionManager.Instance.RollbackTransaction();
                        }
                    }
                    catch (SqlException sqle)
                    {
                        RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:61");
                        Coordinator.ProcessSqlException(sqle, document.BOType, this.coordinator.CanCommitTransaction);
                        throw;
                    }
                    catch (Exception)
                    {
                        RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:62");
                        SqlConnectionManager.Instance.RollbackTransaction();
                        throw;
                    }
                }
                else if (actualStatus == DocumentStatus.Saved && requestedStatus == DocumentStatus.Committed)
                {
                    if (complaintDocument.DocumentOptions.Where(o => o is CloseProcessOption).FirstOrDefault() == null)
                    {
                        complaintDocument.DocumentOptions.Add(new CloseProcessOption());
                    }

                    this.coordinator.SaveBusinessObject(complaintDocument);
                }
            }
            #endregion
            #region SalesOrder
            else if (commercialDocument != null && commercialDocument.DocumentType.DocumentCategory == DocumentCategory.SalesOrder)
            {
                if (actualStatus == DocumentStatus.Committed && requestedStatus == DocumentStatus.Saved)                 //anulowanie rozliczenia
                {
                    SalesOrderFactory.OpenSalesOrder(commercialDocument);
                    commercialDocument.Attributes.Remove(commercialDocument.Attributes[DocumentFieldName.Attribute_SettlementDate]);
                    commercialDocument.DocumentStatus = DocumentStatus.Saved;
                }
                else if (actualStatus == DocumentStatus.Saved && requestedStatus == DocumentStatus.Canceled)
                {
                    commercialDocument.Attributes[DocumentFieldName.Attribute_ProcessState].Value.Value = "canceled";
                    commercialDocument.DocumentStatus = DocumentStatus.Canceled;

                    foreach (CommercialDocumentLine line in commercialDocument.Lines.Children)
                    {
                        line.CommercialDirection = 0;
                        line.OrderDirection      = 0;
                        line.CommercialWarehouseRelations.RemoveAll();
                    }
                }
                else if (actualStatus == DocumentStatus.Saved && requestedStatus == DocumentStatus.Committed)
                {
                    bool result = SalesOrderFactory.TryCloseSalesOrder(commercialDocument);

                    if (!result)
                    {
                        throw new ClientException(ClientExceptionId.ErrorClosingSalesOrder);
                    }
                }

                this.coordinator.SaveBusinessObject(document);
            }
            #endregion
            #region ProductionOrder
            else if (commercialDocument != null && commercialDocument.DocumentType.DocumentCategory == DocumentCategory.ProductionOrder)
            {
                if (actualStatus == DocumentStatus.Saved && requestedStatus == DocumentStatus.Committed)
                {
                    commercialDocument.Attributes[DocumentFieldName.Attribute_ProcessState].Value.Value = "closed";
                    commercialDocument.DocumentStatus = DocumentStatus.Committed;
                }
                else if (actualStatus == DocumentStatus.Saved && requestedStatus == DocumentStatus.Canceled)
                {
                    commercialDocument.Attributes[DocumentFieldName.Attribute_ProcessState].Value.Value = "canceled";
                    commercialDocument.DocumentStatus = DocumentStatus.Canceled;
                }

                this.coordinator.SaveBusinessObject(document);
            }
            #endregion
            else if (actualStatus == DocumentStatus.Committed && requestedStatus == DocumentStatus.Canceled)
            {
                useStandardCancelProcessing = true;
            }

            //standardowa część anulowania dokumentu
            if (useStandardCancelProcessing)
            {
                SqlConnectionManager.Instance.BeginTransaction();
                this.coordinator.CanCommitTransaction = false;

                document.DocumentStatus = DocumentStatus.Canceled;

                if (document.BOType == BusinessObjectType.CommercialDocument)
                {
                    commercialDocument.ValidateSalesOrderRealizedLines(false);                    //muszę najpierw sprawdzić są pow. z ZS bo potem usuwam atrybut
                    this.ResetCommercialDocumentLinesFlags(commercialDocument);
                }
                else
                {
                    warehouseDocument.CheckDoesRealizeClosedSalesOrder(coordinator);                    //sprawdzenie przed usunięciem relacji
                    this.ResetWarehouseDocumentLinesFlags(warehouseDocument);
                }
                document.Relations.RemoveAll();

                try
                {
                    this.coordinator.SaveBusinessObject(document);

                    if (document.BOType == BusinessObjectType.CommercialDocument)
                    {
                        this.mapper.UnrelateCommercialDocumentFromWarehouseDocuments(documentId);
                    }
                    else
                    {
                        this.mapper.DeleteWarehouseDocumentRelations((WarehouseDocument)document);
                    }

                    if (!ConfigurationMapper.Instance.ForceRollbackTransaction)
                    {
                        SqlConnectionManager.Instance.CommitTransaction();
                    }
                    else
                    {
                        SqlConnectionManager.Instance.RollbackTransaction();
                    }
                }
                catch (SqlException sqle)
                {
                    RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:63");
                    Coordinator.ProcessSqlException(sqle, document.BOType, this.coordinator.CanCommitTransaction);
                    throw;
                }
                catch (Exception)
                {
                    RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:64");
                    SqlConnectionManager.Instance.RollbackTransaction();
                    throw;
                }
            }
        }
Ejemplo n.º 19
0
 public DocumentStatusChangeLogic(DocumentCoordinator coordinator)
 {
     this.coordinator = coordinator;
     this.mapper      = (DocumentMapper)coordinator.Mapper;
 }
Ejemplo n.º 20
0
 public InventorySheetLogic(DocumentCoordinator coordinator)
 {
     this.mapper      = (DocumentMapper)coordinator.Mapper;
     this.coordinator = coordinator;
 }
Ejemplo n.º 21
0
        private static void ForwardValuations(ICommunicationPackage communicationPackage, XDocument commPkg, ICommunicationPackageRepository repository)
        {
            var distributedLines = commPkg.Root.Element("warehouseDocumentValuation").Elements("entry")
                                   .Where(
                row => row.Element("isDistributed") != null &&
                row.Element("isDistributed").Value.Equals("True", StringComparison.OrdinalIgnoreCase) &&
                row.Element("warehouseDocumentHeaderId") != null &&
                (row.Attribute("action") == null || row.Attribute("action").Value.Equals("delete", StringComparison.OrdinalIgnoreCase) == false))
                                   .GroupBy(row => row.Element("warehouseDocumentHeaderId").Value);

            //this valuation is not for shift document, so we don't forward it
            if (distributedLines.Count() == 0)
            {
                return;
            }

            XDocument valuationTemplate  = XDocument.Parse("<root><warehouseDocumentValuation /></root>");
            Guid      localTransactionId = Guid.NewGuid();

            using (var wrapper = repository.Context.ConnectionManager.SynchronizeConnection())
            {
                SqlConnectionManager.Instance.SetConnection(wrapper.Connection, (SqlTransaction)repository.Context.Transaction);
            }
            using (var whDocCoord = new DocumentCoordinator(false, false))
            {
                foreach (var warehouseDocGroup in distributedLines)
                {
                    WarehouseDocument shift = null;
                    try
                    {
                        shift = (WarehouseDocument)whDocCoord.LoadBusinessObject(Makolab.Fractus.Kernel.Enums.BusinessObjectType.WarehouseDocument,
                                                                                 new Guid(warehouseDocGroup.Key));
                    }
                    catch (ClientException) { }

                    //there is a valuated document in database so we can forward valuation - no document = skip valuations for this doc
                    if (shift != null)
                    {
                        string oppositeWarehouseId = (shift.Attributes.Count() > 0 && shift.Attributes.Children.Any(attr => attr.DocumentFieldName == DocumentFieldName.ShiftDocumentAttribute_OppositeWarehouseId))
                                                    ? shift.Attributes[DocumentFieldName.ShiftDocumentAttribute_OppositeWarehouseId].Value.Value
                                                    : null;
                        if (oppositeWarehouseId != null)
                        {
                            Warehouse oppositeWarehouse = DictionaryMapper.Instance.GetWarehouse(new Guid(oppositeWarehouseId));
                            Warehouse warehouse         = DictionaryMapper.Instance.GetWarehouse(shift.WarehouseId);

                            //skip local shift document valuations
                            if (warehouse.BranchId == oppositeWarehouse.BranchId)
                            {
                                continue;
                            }

                            foreach (var valuation in warehouseDocGroup)
                            {
                                var whDocLine = shift.Lines.Children.Where(line => line.Id.ToString()
                                                                           .Equals(valuation.Element("outcomeWarehouseDocumentLineId").Value, StringComparison.OrdinalIgnoreCase))
                                                .SingleOrDefault();
                                valuation.Add(new XAttribute("outcomeShiftOrdinalNumber", whDocLine.OrdinalNumber));
                            }

                            var valuationPkg = new XDocument(valuationTemplate);
                            valuationPkg.Root.Element("warehouseDocumentValuation").Add(new XAttribute("outcomeShiftId", shift.Id));
                            valuationPkg.Root.Element("warehouseDocumentValuation").Add(warehouseDocGroup);

                            XmlTransferObject valuationData = new XmlTransferObject
                            {
                                DeferredTransactionId = communicationPackage.XmlData.DeferredTransactionId,
                                Id = Guid.NewGuid(),
                                LocalTransactionId = localTransactionId,
                                XmlType            = "WarehouseDocumentValuation",
                                Content            = valuationPkg.ToString(SaveOptions.DisableFormatting)
                            };
                            ICommunicationPackage pkg = new CommunicationPackage(valuationData);
                            pkg.DatabaseId = DictionaryMapper.Instance.GetBranch(oppositeWarehouse.BranchId).DatabaseId;
                            repository.PutToOutgoingQueue(pkg);
                        }
                    }
                }
            }
        }
 public OutcomeShiftWarehouseDocumentLogic(DocumentCoordinator coordinator)
     : base(coordinator)
 {
 }
Ejemplo n.º 23
0
        private void AddPositionToWarehouseDocument(ComplaintDocument complaintDocument, Guid warehouseId, List <WarehouseDocument> generatedWhDocs, Guid itemId, decimal quantity, Guid unitId, WarehouseDirection direction)
        {
            WarehouseDocument document = (from whDoc in generatedWhDocs
                                          where whDoc.WarehouseId == warehouseId &&
                                          whDoc.WarehouseDirection == direction
                                          select whDoc).FirstOrDefault();

            if (document == null)
            {
                string documentName = null;

                if (direction == WarehouseDirection.Outcome)
                {
                    documentName = "internalOutcome";
                }
                else
                {
                    documentName = "internalIncome";
                }

                string template = ProcessManager.Instance.GetDocumentTemplate(complaintDocument, documentName);

                using (DocumentCoordinator c = new DocumentCoordinator(false, false))
                {
                    document             = (WarehouseDocument)c.CreateNewBusinessObject(BusinessObjectType.WarehouseDocument, template, null);
                    document.WarehouseId = warehouseId;
                    string processType = complaintDocument.Attributes[DocumentFieldName.Attribute_ProcessType].Value.Value;
                    ProcessManager.Instance.AppendProcessAttributes(document, processType, documentName, null, null);
                    document.Contractor = complaintDocument.Contractor;
                    DuplicableAttributeFactory.DuplicateAttributes(complaintDocument, document);
                    complaintDocument.AddRelatedObject(document);
                    generatedWhDocs.Add(document);

                    var relation = complaintDocument.Relations.CreateNew();
                    relation.RelationType    = DocumentRelationType.ComplaintToInternalOutcome;
                    relation.RelatedDocument = document;

                    relation = document.Relations.CreateNew();
                    relation.RelationType    = DocumentRelationType.ComplaintToInternalOutcome;
                    relation.RelatedDocument = complaintDocument;
                    relation.DontSave        = true;
                }
            }

            WarehouseDocumentLine line = document.Lines.Children.Where(l => l.ItemId == itemId).FirstOrDefault();

            if (line == null)
            {
                line        = document.Lines.CreateNew();
                line.ItemId = itemId;
                line.UnitId = unitId;
            }

            line.Quantity += quantity;

            /* sprawdzamy czy jest to rozchod z magazynu wmsowego. jezeli tak to tworzymy shift transaction
             * dodajemy nowego shifta zgodnie z tym co jest w complaintDocument.Shifts, potem
             * shifta wiazemy z pozycja
             */

            if (DictionaryMapper.Instance.GetWarehouse(document.WarehouseId).ValuationMethod == ValuationMethod.DeliverySelection)
            {
                ShiftTransaction shiftTransaction = document.ShiftTransaction;

                if (shiftTransaction == null)
                {
                    shiftTransaction          = new ShiftTransaction(null);
                    document.ShiftTransaction = shiftTransaction;
                }

                //wyciagamy shifty z complaintDocumenta
                var shifts = complaintDocument.AllocationCollection.Allocations.Where(s => s.ItemId == itemId && s.WarehouseId == warehouseId).Select(x => x.AllocationShifts).FirstOrDefault();

                decimal quantityToGo = quantity; //kopiujemy shifty na ilosc niewieksza niz na pozycji jest wybrane

                foreach (var shift in shifts)
                {
                    if (shift.Quantity == 0)
                    {
                        continue;
                    }

                    decimal quantityTaken = 0;

                    if (quantityToGo > shift.Quantity)
                    {
                        quantityTaken = shift.Quantity;
                    }
                    else //quantityToGo <= shift.Quantity
                    {
                        quantityTaken = quantityToGo;
                    }

                    shift.Quantity -= quantityTaken;
                    quantityToGo   -= quantityTaken;

                    if (shift.SourceShiftId != null) //te ktore nie maja sourceShiftId pomijamy bo tutaj takie luzem w ogole nie maja shifta
                    {
                        var newShift = shiftTransaction.Shifts.CreateNew();
                        newShift.ItemId        = itemId;
                        newShift.WarehouseId   = warehouseId;
                        newShift.SourceShiftId = shift.SourceShiftId.Value;
                        newShift.IncomeWarehouseDocumentLineId = shift.IncomeWarehouseDocumentLineId;
                        newShift.Quantity = quantityTaken;
                        newShift.RelatedWarehouseDocumentLine = line;
                        newShift.LineOrdinalNumber            = line.OrdinalNumber;
                    }

                    //teraz incomeOutcomeRelation dodajemy
                    IncomeOutcomeRelation relation = line.IncomeOutcomeRelations.Children.Where(i => i.RelatedLine.Id.Value == shift.IncomeWarehouseDocumentLineId).FirstOrDefault();

                    if (relation == null)
                    {
                        relation = line.IncomeOutcomeRelations.CreateNew();

                        var incLine = new WarehouseDocumentLine(null);
                        incLine.Id           = shift.IncomeWarehouseDocumentLineId;
                        relation.RelatedLine = incLine;
                    }

                    relation.Quantity += quantityTaken;

                    if (quantityToGo == 0)
                    {
                        break;
                    }
                }
            }
        }
Ejemplo n.º 24
0
 public ComplaintDocumentLogic(DocumentCoordinator coordinator)
 {
     this.mapper      = (DocumentMapper)coordinator.Mapper;
     this.coordinator = coordinator;
 }
Ejemplo n.º 25
0
 public IncomeWarehouseDocumentLogic(DocumentCoordinator coordinator)
     : base(coordinator)
 {
 }