Beispiel #1
0
        protected static FR_L5AR_GWSAfAG_0908_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L5AR_GWSAfAG_0908 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L5AR_GWSAfAG_0908_Array();

            var paramArticles = new CL3_Articles.Atomic.Retrieval.P_L3AR_GAfT_0942
            {
                ActiveComponent                     = Parameter.ActiveComponent,
                ActiveComponentStartWith            = Parameter.ActiveComponentStartWith,
                CustomArticlesGroupGlobalPropertyID = Parameter.ArticlesGroupGlobalPropertyID,
                DosageFormQuery                     = Parameter.DosageFormQuery,
                GeneralQuery           = Parameter.GeneralQuery,
                IsAvailableForOrdering = true,
                LanguageID             = Parameter.LanguageID,
                ProducerName           = Parameter.ProducerName,
                ProductNameStartWith   = Parameter.ProductNameStartWith,
                PZNQuery  = Parameter.PZNQuery,
                UnitQuery = Parameter.UnitQuery,
            };

            List <L3AR_GAfT_0942> articles = cls_Get_Articles_for_Tenant.Invoke(Connection, Transaction, paramArticles, securityTicket).Result.ToList();

            #region Get Prices

            var subscribedCatalogID = articles.Select(i => i.IfImportedFromExternalCatalog_CatalogSubscription_RefID).Distinct().SingleOrDefault();

            var subscribedCatalog = new ORM_CMN_PRO_SubscribedCatalog();
            subscribedCatalog.Load(Connection, Transaction, subscribedCatalogID);

            var param = new P_L2PR_GPVfSC_1424()
            {
                SubscribedCatalogITL = subscribedCatalog.CatalogCodeITL
            };

            var prices = cls_Get_PriceValues_for_SubscribedCatalogITL.Invoke(Connection, Transaction, param, securityTicket).Result;
            #endregion

            List <L5AR_GWSAfAG_0908> results = new List <L5AR_GWSAfAG_0908>();
            foreach (var article in articles)
            {
                var articlesWithPrices = new L5AR_GWSAfAG_0908();

                articlesWithPrices.Article = article;
                articlesWithPrices.Price   = prices.Where(x => x.CMN_PRO_Product_RefID == article.CMN_PRO_ProductID).Select(j => j.PriceAmount).SingleOrDefault();
                results.Add(articlesWithPrices);
            }

            returnValue.Result = results.ToArray();

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_L5SO_GSPwPaSfSH_1141_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L5SO_GSPwPaSfSH_1141 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L5SO_GSPwPaSfSH_1141_Array();

            #region Get Shipment Positions

            P_L2SH_GSPfToSH_1334 positionsGetParam = new P_L2SH_GSPfToSH_1334();
            positionsGetParam.ShipmentHeaderID = Parameter.ShippmentHeaderID;
            var shipmentPositions = cls_Get_ShipmentPositions_for_Tenant_or_ShipmentHeaderID.Invoke(Connection, Transaction, positionsGetParam, securityTicket).Result.ToList();

            #endregion

            if (shipmentPositions.Count() == 0)
            {
                returnValue.Result = new L5SO_GSPwPaSfSH_1141[0];
                return(returnValue);
            }

            #region Get Articles For ShipmentPositions

            P_L3AR_GAfAL_0942 articlesGetParam = new P_L3AR_GAfAL_0942();
            articlesGetParam.ProductID_List = shipmentPositions.Select(i => i.CMN_PRO_Product_RefID).Distinct().ToArray();

            var articles = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, articlesGetParam, securityTicket).Result;

            #endregion

            #region Get Quantities on Shelf contents per product

            var articleIDs     = shipmentPositions.Select(x => x.CMN_PRO_Product_RefID).Distinct();
            var qntsPerProduct = new L3WH_GASCQfPL_1239[] { };
            if (articleIDs.Count() > 0)
            {
                var qntParam = new P_L3WH_GASCQfPL_1239 {
                    ProductIDList = articleIDs.ToArray()
                };
                qntsPerProduct = cls_Get_All_ShelfContent_Quantities_for_ProductListID.Invoke(Connection, Transaction, qntParam, securityTicket).Result;
            }

            #endregion

            #region Get ABDAPrices

            var abdaPricesParam = new P_L2PR_GPVfSC_1424()
            {
                SubscribedCatalogITL = EnumUtils.GetEnumDescription(EPublicCatalogs.ABDA)
            };

            var abdaPrices = cls_Get_PriceValues_for_SubscribedCatalogITL.Invoke(Connection, Transaction, abdaPricesParam, securityTicket).Result;

            #endregion

            #region cls_Get_AllGeneralAverageProcurementPrices_for_TenantID

            var avgProcPrice = cls_Get_AllGeneralAverageProcurementPrices_for_TenantID.Invoke(Connection, Transaction, securityTicket).Result;

            #endregion

            List <L5SO_GSPwPaSfSH_1141> listOfPositionsWithPrices = new List <L5SO_GSPwPaSfSH_1141>();

            foreach (var position in shipmentPositions)
            {
                var quantity = qntsPerProduct.Where(i => i.Product_RefID == position.CMN_PRO_Product_RefID).SingleOrDefault();
                if (quantity == null)
                {
                    quantity = new L3WH_GASCQfPL_1239()
                    {
                        Product_RefID          = position.CMN_PRO_Product_RefID,
                        Sum_Quantity_Current   = 0,
                        Sum_R_ReservedQuantity = 0,
                        Sum_R_FreeQuantity     = 0
                    };
                }

                var tempPositionWithPrice = new L5SO_GSPwPaSfSH_1141();
                tempPositionWithPrice.ShipmentPositionID = position.LOG_SHP_Shipment_PositionID;

                var reservationSum = ORM_LOG_RSV_Reservation.Query.Search(Connection, Transaction, new ORM_LOG_RSV_Reservation.Query()
                {
                    LOG_SHP_Shipment_Position_RefID = position.LOG_SHP_Shipment_PositionID,
                    IsDeleted             = false,
                    IsReservationExecuted = false
                }).Sum(x => x.ReservedQuantity);

                var correspodingCustomerOrderPosition = new ORM_ORD_CUO_CustomerOrder_Position();

                var positionArticle = articles.Where(ar => ar.CMN_PRO_ProductID == position.CMN_PRO_Product_RefID).Single();
                tempPositionWithPrice.Product_Number    = positionArticle.Product_Number;
                tempPositionWithPrice.Product_Name      = positionArticle.Product_Name;
                tempPositionWithPrice.UnitAmount        = positionArticle.UnitAmount;
                tempPositionWithPrice.UnitIsoCode       = positionArticle.UnitIsoCode;
                tempPositionWithPrice.DossageFormName   = positionArticle.DossageFormName;
                tempPositionWithPrice.Producer          = positionArticle.ProducerName;
                tempPositionWithPrice.CMN_PRO_ProductID = positionArticle.CMN_PRO_ProductID;

                tempPositionWithPrice.ReservedQuantity  = reservationSum;
                tempPositionWithPrice.QuantityToShip    = position.QuantityToShip;
                tempPositionWithPrice.QuantityInStock   = quantity.Sum_Quantity_Current;
                tempPositionWithPrice.QuantityAvailable = quantity.Sum_R_FreeQuantity;

                tempPositionWithPrice.ABDAPrice  = abdaPrices.Where(i => i.CMN_PRO_Product_RefID == position.CMN_PRO_Product_RefID).Select(j => j.PriceAmount).SingleOrDefault();
                tempPositionWithPrice.SalesPrice = position.ShipmentPosition_ValueWithoutTax;
                tempPositionWithPrice.AverageProcurementPrice = avgProcPrice.Where(i => i.Product_RefID == position.CMN_PRO_Product_RefID).Select(j => j.PriceValue_Amount).SingleOrDefault();
                tempPositionWithPrice.ShipmentPosition_PricePerUnitValueWithoutTax = position.ShipmentPosition_PricePerUnitValueWithoutTax;

                #region Product Replacement Allowed

                var assignmentToCustomerOrderPositionQuery = new ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition.Query();
                assignmentToCustomerOrderPositionQuery.LOG_SHP_Shipment_Position_RefID = position.LOG_SHP_Shipment_PositionID;
                assignmentToCustomerOrderPositionQuery.Tenant_RefID = securityTicket.TenantID;
                assignmentToCustomerOrderPositionQuery.IsDeleted    = false;
                var foundAssignment = ORM_ORD_CUO_CustomerOrder_Position_2_ShipmentPosition.Query.
                                      Search(Connection, Transaction, assignmentToCustomerOrderPositionQuery).SingleOrDefault();

                if (foundAssignment != null)
                {
                    correspodingCustomerOrderPosition.Load(Connection, Transaction, foundAssignment.ORD_CUO_CustomerOrder_Position_RefID);
                    tempPositionWithPrice.IsProductReplacementAllowed = correspodingCustomerOrderPosition.IsProductReplacementAllowed;
                }
                else
                {
                    tempPositionWithPrice.IsProductReplacementAllowed = true;
                }

                #endregion

                listOfPositionsWithPrices.Add(tempPositionWithPrice);
            }

            returnValue.Result = listOfPositionsWithPrices.ToArray();

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_L3PR_GSPfPIL_1645_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L3PR_GSPfPIL_1645 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L3PR_GSPfPIL_1645_Array();
            returnValue.Result = new L3PR_GSPfPIL_1645[0] {
            };

            #region ProductIDs
            var param = new P_L2PR_GPfPID_1321()
            {
                ProductIDs = Parameter.ProductIDList
            };

            var products = cls_Get_ProductITLs_for_ProductIDs.Invoke(Connection, Transaction, param, securityTicket).Result;

            if (products == null || products.Count() == 0)
            {
                return(returnValue);
            }

            #endregion

            #region Get ABDAPrices

            var abdaPricesParam = new P_L2PR_GPVfSC_1424()
            {
                SubscribedCatalogITL = EnumUtils.GetEnumDescription(EPublicCatalogs.ABDA)
            };

            var abdaPrices = cls_Get_PriceValues_for_SubscribedCatalogITL.Invoke(Connection, Transaction, abdaPricesParam, securityTicket).Result;

            #endregion

            #region Prices for specific PriceList

            var recommendedABDASalsesPrice_priceList = ORM_CMN_SLS_Pricelist.Query.Search(Connection, Transaction, new ORM_CMN_SLS_Pricelist.Query()
            {
                GlobalPropertyMatchingID = EnumUtils.GetEnumDescription(EPriceList.RecommendedABDASalesPriceList),
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted = false
            }).SingleOrDefault();


            var recommendedABDASalesPrices = new List <L2PR_GPVfPLR_1620>();
            if (recommendedABDASalsesPrice_priceList != null)
            {
                var recommendedABDASalsesPrice_pricelist_Release = ORM_CMN_SLS_Pricelist_Release.Query.Search(Connection, Transaction, new ORM_CMN_SLS_Pricelist_Release.Query()
                {
                    Pricelist_RefID = recommendedABDASalsesPrice_priceList.CMN_SLS_PricelistID,
                    IsDeleted       = false
                }).Single();

                var recommendedABDASalesPricelistParam = new P_L2PR_GPVfPLR_1620();
                recommendedABDASalesPricelistParam.PriceListRelaseID = recommendedABDASalsesPrice_pricelist_Release.CMN_SLS_Pricelist_ReleaseID;

                recommendedABDASalesPrices = cls_Get_PriceValues_for_PriceListReleaseID.Invoke(Connection, Transaction, recommendedABDASalesPricelistParam, securityTicket).Result.ToList();
            }

            #endregion

            #region cls_Get_AllGeneralAverageProcurementPrices_for_TenantID

            var avgProcPrice = cls_Get_AllGeneralAverageProcurementPrices_for_TenantID.Invoke(Connection, Transaction, securityTicket).Result;

            #endregion

            #region Default Prices

            var defaultPrices = cls_Get_PriceValues_for_DefaultPricelist_and_CurrentDate.Invoke(Connection, Transaction, securityTicket).Result.ToList();

            #endregion

            #region Customers Default Pricelist

            var customerDefaultPrices = new List <L2PR_GPVfPLR_1620>();

            var customerPriceListReleaseID = Guid.Empty;

            var customerPriceList = ORM_CMN_BPT_CTM_Customer_Pricelist.Query.Search(Connection, Transaction, new ORM_CMN_BPT_CTM_Customer_Pricelist.Query()
            {
                CMN_BPT_CTM_Customer_RefID = Parameter.CustomerID,
                Tenant_RefID = securityTicket.TenantID,
                IsDeleted    = false
            }).SingleOrDefault();

            if (customerPriceList != null)
            {
                var releases = ORM_CMN_SLS_Pricelist_Release.Query.Search(Connection, Transaction,
                                                                          new ORM_CMN_SLS_Pricelist_Release.Query()
                {
                    Pricelist_RefID = customerPriceList.CMN_SLS_Pricelist_RefID,
                    IsDeleted       = false,
                    Tenant_RefID    = securityTicket.TenantID
                });

                var currentRelease = releases.SingleOrDefault(i => i.PricelistRelease_ValidFrom <= DateTime.Now && DateTime.Now <= i.PricelistRelease_ValidTo);

                if (currentRelease != null)
                {
                    customerPriceListReleaseID = currentRelease.CMN_SLS_Pricelist_ReleaseID;
                }
            }

            if (customerPriceListReleaseID != Guid.Empty)
            {
                var specificPricelistParam = new P_L2PR_GPVfPLR_1620();
                specificPricelistParam.PriceListRelaseID = customerPriceListReleaseID;

                customerDefaultPrices = cls_Get_PriceValues_for_PriceListReleaseID.Invoke(Connection, Transaction, specificPricelistParam, securityTicket).Result.ToList();
            }

            #endregion

            var result = new List <L3PR_GSPfPIL_1645>();
            foreach (var productID in Parameter.ProductIDList)
            {
                decimal?salesPrice = null;

                var abdaPrice = abdaPrices.Where(i => i.CMN_PRO_Product_RefID == productID).Select(j => j.PriceAmount).SingleOrDefault();
                var symbol    = abdaPrices.Where(i => i.CMN_PRO_Product_RefID == productID).Select(j => j.Symbol).SingleOrDefault();
                var averageProcurementPrice = avgProcPrice.Where(i => i.Product_RefID == productID).Select(j => j.PriceValue_Amount).SingleOrDefault();

                #region Sales Price

                //This is how the correct price is retrieved:
                //  1. Retrieve the sales price from the price list configured.
                //      1.1 If the customer has a default price list assigned, try to find a price in there.
                //      1.2 If the customer assigend price list has no price for the product or the customer has no assigned price list,
                //          then we have to check if there is a price in the price list that is set as default
                //  2. If the first case does not apply then take the AEK as the sales price

                #region 1.1 Customer has a default price list assigned

                var defaultCustomerPrice = customerDefaultPrices.SingleOrDefault(i => i.CMN_PRO_Product_RefID == productID);

                if (defaultCustomerPrice != null)
                {
                    salesPrice = defaultCustomerPrice.PriceAmount;

                    if (defaultCustomerPrice.IsDynamicPricingUsed)
                    {
                        var standardPrices = new Dictionary <EPriceFormula, decimal>();
                        standardPrices.Add(EPriceFormula.ABDAPrice, abdaPrice);
                        standardPrices.Add(EPriceFormula.AverageProcurementPrice, averageProcurementPrice);

                        salesPrice = PriceFormulaUtil.GetCalculatedValue(defaultCustomerPrice.DynamicPricingFormula, standardPrices);
                    }
                }

                #endregion

                #region 1.2 PriceList that is set as Default

                if (salesPrice == null)
                {
                    var defaultPrice = defaultPrices.Where(i => i.CMN_PRO_Product_RefID == productID).SingleOrDefault();

                    if (defaultPrice != null)
                    {
                        salesPrice = defaultPrice.PriceAmount;

                        if (defaultPrice.IsDynamicPricingUsed)
                        {
                            var standardPrices = new Dictionary <EPriceFormula, decimal>();
                            standardPrices.Add(EPriceFormula.ABDAPrice, abdaPrice);
                            standardPrices.Add(EPriceFormula.AverageProcurementPrice, averageProcurementPrice);

                            salesPrice = PriceFormulaUtil.GetCalculatedValue(defaultPrice.DynamicPricingFormula, standardPrices);
                        }
                    }
                }

                #endregion

                #region 2. Abda Price

                if (salesPrice == null)
                {
                    salesPrice = abdaPrice;
                }

                #endregion

                #endregion

                #region Recommended ABDA Sales Price

                var recommendedABDASalesPrice = recommendedABDASalesPrices.Where(i => i.CMN_PRO_Product_RefID == productID).SingleOrDefault();

                #endregion

                result.Add(
                    new L3PR_GSPfPIL_1645()
                {
                    ProductID  = productID,
                    ProductITL = products.Where(i => i.CMN_PRO_ProductID == productID).Select(j => j.ProductITL).SingleOrDefault(),
                    AbdaPrice  = abdaPrice,
                    RecommendedAbdaSalesPrice = (recommendedABDASalesPrice == null) ? 0 : recommendedABDASalesPrice.PriceAmount,
                    AverageProcurementPrice   = averageProcurementPrice,
                    SalesPrice = salesPrice ?? 0,
                    Symbol     = symbol
                }
                    );
            }

            returnValue.Result = result.ToArray();
            return(returnValue);

            #endregion UserCode
        }