private void AddAltUoms(IPricingInputDocumentItemBase inputItem, string materialNumber, IEnumerable <MaterialAltUomBO> allMaterialAltUoms, bool isRunningOnIsoCode, IDictionary <string, string> physicalUnitDictionary) { List <MaterialAltUomBO> list = allMaterialAltUoms.Where <MaterialAltUomBO>((Func <MaterialAltUomBO, bool>)(ma => ma.MaterialNumber == materialNumber)).ToList <MaterialAltUomBO>(); if (!list.Any <MaterialAltUomBO>()) { return; } List <MaterialAltUomBO> .Enumerator enumerator = list.GetEnumerator(); try { while (enumerator.MoveNext()) { MaterialAltUomBO current = enumerator.Current; string altUom; if (!isRunningOnIsoCode) { altUom = current.AltUom; } else { altUom = this.ConvertToCommercialCode(current.AltUom, physicalUnitDictionary); if (string.IsNullOrEmpty(altUom)) { continue; } } inputItem.AddAltUom(altUom, current.CNumerator, current.CDenominator); } } finally { enumerator.Dispose(); } }
/* * public async override Task<IPricingInputDocumentBase> PrepareInputDocumentAsync(PricingParameters pricingParameters) * { * this.LogDebug("*** ZPricingManager:PrepareInputDocumentAsync - count " + (pricingParameters.Conditions.Count())); * var inputDocument = await base.PrepareInputDocumentAsync(pricingParameters); * * IEnumerator<DocumentCondBO> enumerator = pricingParameters.Conditions.GetEnumerator(); * try * { * while (enumerator.MoveNext()) * { * DocumentCondBO current = enumerator.Current; * this.LogDebug("*** ZPricingManager:PrepareInputDocumentAsync " + current.DealConditionNumber); * this.LogDebug("*** ZPricingManager:PrepareInputDocumentAsync " + current.ConditionType); * this.LogDebug("*** ZPricingManager:PrepareInputDocumentAsync " + current.ItemNumber); * this.LogDebug("*** ZPricingManager:PrepareInputDocumentAsync " + current.PromotionDiscount); * this.LogDebug("*** ZPricingManager:PrepareInputDocumentAsync " + current.PercentageType); * this.LogDebug("*** ZPricingManager:PrepareInputDocumentAsync " + current.Amount + " " + current.Currency); * * } * } * catch { * * } * * return inputDocument; * } */ public override void FillInputDocumentItem(IPricingInputDocumentBase inputDocument, IDocumentItemEntity documentItem, ActivityEntity activity, CustomizingSalesAreaBO customizingSalesArea, IList <MaterialBO> materials, IList <MaterialAltUomBO> materialAltUoms, IList <MaterialSalesOrgBO> materialSalesOrgs, IList <MaterialTaxBO> materialTaxes, CustomerSalesAreaBO customerSalesArea, CustomerBO customer, bool isRunningOnIsoCode, IList <DocumentCondBO> conditionsForItems, IDictionary <string, string> materialCampaigns, IDictionary <string, string> physicalUnitDictionary, IDictionary <string, CustomizingBO> reasonCodesCustomizingDictionary) { IPricingInputDocumentItemBase inputItem = inputDocument.AddItem(documentItem.DocumentItemNumber, documentItem.MaterialNumber); inputItem.AddAttribute("SHKZG", (object)documentItem.IsReturn.ToAbapString()); inputItem.AddAttribute("RETPO", (object)documentItem.IsReturn.ToAbapString()); string str1 = activity.ActivityType == SAPCD.DSD.MobileClient.Business.Objects.Common.Enums.ActivityType.FreeGoodsDelivery || activity.ActivityType == SAPCD.DSD.MobileClient.Business.Objects.Common.Enums.ActivityType.FreeGoodsOrder ? this.DeterminePricingIndicatorForFGDocument(activity, documentItem, customizingSalesArea) : this.DeterminePricingIndicator(documentItem, reasonCodesCustomizingDictionary); inputItem.AddAttribute("PRSFD", (object)str1); inputItem.AddAttribute("IS_EMPTIES_ITEM", (object)documentItem.IsUntiedEmpty.ToAbapString()); MaterialBO material = materials.First <MaterialBO>((Func <MaterialBO, bool>)(m => m.MaterialNumber == documentItem.MaterialNumber)); inputItem.AddMaterialInfo(material); inputItem.AddQuantities(documentItem); inputItem.AddCustomerSalesAreaInfo(customerSalesArea, customer); MaterialSalesOrgBO materialSalesOrg = materialSalesOrgs.First <MaterialSalesOrgBO>((Func <MaterialSalesOrgBO, bool>)(m => m.MaterialNumber == documentItem.MaterialNumber)); inputItem.AddMaterialSalesAreaInfo(materialSalesOrg); this.AddAltUoms(inputItem, documentItem.MaterialNumber, (IEnumerable <MaterialAltUomBO>)materialAltUoms, isRunningOnIsoCode, physicalUnitDictionary); string uom = !isRunningOnIsoCode ? documentItem.ActualUnitOfMeasure : this.ConvertToCommercialCode(documentItem.ActualUnitOfMeasure, physicalUnitDictionary); string volumeUom = !isRunningOnIsoCode ? material.VolumeUom : this.ConvertToCommercialCode(material.VolumeUom, physicalUnitDictionary); string weightUom = !isRunningOnIsoCode ? material.WeightUom : this.ConvertToCommercialCode(material.WeightUom, physicalUnitDictionary); string baseUom = !isRunningOnIsoCode ? material.BaseUom : this.ConvertToCommercialCode(material.BaseUom, physicalUnitDictionary); inputItem.AddUoms(uom, volumeUom, weightUom, baseUom); if (conditionsForItems != null) { IEnumerable <DocumentCondBO> documentCondBos = conditionsForItems.Where <DocumentCondBO>((Func <DocumentCondBO, bool>)(x => x.ItemNumber == inputItem.ItemId)); if (documentCondBos != null) { /* * this.LogDebug("*** ZPricingManager:FillInputDocumentItem - count " + (documentCondBos.Count())); * * if (documentCondBos.Count() > 1) * { * throw new PricingException("No es permitido mas de una condición de ventas activa para el mismo producto [" + material.MaterialNumber + "]"); * } */ // Add Manual conditions IEnumerator <DocumentCondBO> enumerator = documentCondBos.GetEnumerator(); try { // This loop will assume there is only one deal condition applied to this line item while (enumerator.MoveNext()) { DocumentCondBO current = enumerator.Current; inputItem.AddManualCondRecord(current.ConditionType, current.Amount, current.Currency); } } finally { if (enumerator != null) { enumerator.Dispose(); } } } } // Add DC type to be used by routine 959 if (lineItemConditionMet.TryGetValue(inputItem.ItemId, out string conditionID)) { if (dealConditionsMetList.TryGetValue(conditionID, out DealConditionHeaderBO dealConditionHeaderBO)) { this.LogDebug("*** ZPricingManager:FillInputDocumentItem - Add contition type for " + inputItem.ItemId + "/" + dealConditionHeaderBO.DealConditionID + "/" + dealConditionHeaderBO.DealConditionType); inputItem.AddAttribute("ZZTYPE", dealConditionHeaderBO.DealConditionType); // value to be used by routine 959. } } /* * MaterialTaxBO materialTax = materialTaxes.FirstOrDefault<MaterialTaxBO>((Func<MaterialTaxBO, bool>)(mt => * { * if (mt.MaterialNumber == documentItem.MaterialNumber) * return mt.Country == customer.Country; * return false; * })); */ MaterialTaxBO materialTax = materialTaxes.FirstOrDefault <MaterialTaxBO>((Func <MaterialTaxBO, bool>) (mt => ((mt.MaterialNumber == documentItem.MaterialNumber) && (mt.Country == customer.Country)))); if (materialTax != null) { this.LogDebug("*** ZPricingManager:FillInputDocumentItem-CustomerCountry - " + materialTax.Country); this.LogDebug("*** ZPricingManager:FillInputDocumentItem-TAXM1 - " + materialTax.TaxClass1); this.LogDebug("*** ZPricingManager:FillInputDocumentItem-TAXM2 - " + materialTax.TaxClass2); this.LogDebug("*** ZPricingManager:FillInputDocumentItem-TAXM3 - " + materialTax.TaxClass3); inputItem.AddMaterialTaxInfo(materialTax); } string str2; if (materialCampaigns.TryGetValue(documentItem.MaterialNumber, out str2)) { inputItem.AddAttribute("CMPGN_ID", (object)str2); } else { inputItem.AddAttribute("CMPGN_ID", (object)string.Empty); } inputItem.AddAttribute("SDATE", (object)DateTime.Now); try { if (MaterialExt.Count > 0) { FieldExtensionBO fieldExtension = MaterialExt.FirstOrDefault <FieldExtensionBO>((Func <FieldExtensionBO, bool>)(m => m.ElementKey == documentItem.MaterialNumber)); if (fieldExtension != null) { this.LogDebug("ZZIIEE: " + fieldExtension.ElementKey + "=" + fieldExtension.Value); inputItem.AddAttribute("ZZIIEE", fieldExtension.Value); } } if (materialSalesOrg.ProductHierarchy.Length > 7) { string prdh4 = materialSalesOrg.ProductHierarchy.Substring(6, 2); inputItem.AddAttribute("ZZPRODH4", prdh4); } inputItem.AddAttribute("ZZMVGR1_P", materialSalesOrg.MaterialGroup1); inputItem.AddAttribute("ZZMVGR2_P", materialSalesOrg.MaterialGroup2); inputItem.AddAttribute("ZZMVGR3_P", materialSalesOrg.MaterialGroup3); inputItem.AddAttribute("UPMAT", material.MaterialNumber); } catch (Exception ex) { this.LogError("ZPricingManager:FillInputDocumentItem - Linea " + inputItem.ItemId + " Material: " + material.MaterialNumber, ex); } /* * if (inputDocument.GetStringHeaderAttribute("HIENR") != null) * { * inputDocument.AddAttribute("HIENR", inputDocument.GetStringHeaderAttribute("HIENR01")); * } * * /* * if (inputDocument.GetStringHeaderAttribute("HIENR02") != null) * { * inputDocument.AddAttribute("HIENR46", inputDocument.GetStringHeaderAttribute("HIENR02")); * } */ //this.LogDebug("*** ZPricingManager:FillInputDocumentItemHIENR03 - " + inputItem.GetStringAttribute("HIENR03")); //this.LogDebug("*** ZPricingManager:FillInputDocumentItemPMATN - " + inputItem.GetStringAttribute("PMATN")); }