Пример #1
0
        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();
            }
        }
Пример #2
0
        /*
         * 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"));
        }