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