protected static FR_L5SG_GDfSR_1618 Execute(DbConnection Connection, DbTransaction Transaction, P_L5SG_GDfSR_1618 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_L5SG_GDfSR_1618();

            var getArticleParameter = new P_L3AR_GAfAL_0942();
            getArticleParameter.ProductID_List    = new Guid[1];
            getArticleParameter.ProductID_List[0] = Parameter.ProductID;
            var article = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, getArticleParameter, securityTicket).Result.First();

            var getStorageDetailsParameter = new P_L5SG_GSDfPIDoSID_1612();
            getStorageDetailsParameter.ProductID = Parameter.ProductID;
            var storageDetails = cls_Get_StorageDetails_for_ProductIDorShelfID.Invoke(Connection, Transaction, getStorageDetailsParameter, securityTicket).Result.ToList();

            List <L5SG_GDfSR_1618a> articleStorageDetails = new List <L5SG_GDfSR_1618a>();

            foreach (var storageDetail in storageDetails)
            {
                L5SG_GDfSR_1618a temporaryDetail = new L5SG_GDfSR_1618a();
                temporaryDetail.Article        = article;
                temporaryDetail.StorageDetails = storageDetail;

                articleStorageDetails.Add(temporaryDetail);
            }

            returnValue.Result = new L5SG_GDfSR_1618();
            returnValue.Result.ArticleStorageDetails = articleStorageDetails.ToArray();

            //Put your code here
            return(returnValue);

            #endregion UserCode
        }
示例#2
0
        protected static FR_L5RS_GRSPwAfP_1526_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L5RS_GRSPwAfP_1526 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_L5RS_GRSPwAfP_1526_Array();

            #region Get Return Shipment Positions
            var returnShipmentPositions = cls_Get_ReturnShipmentPositions_for_PositionIDs.Invoke(Connection, Transaction, Parameter.SearchCriteria, securityTicket).Result;
            #endregion

            #region Get Articles
            var articleIDs = returnShipmentPositions.Select(rsp => rsp.CMN_PRO_Product_RefID).Distinct().ToArray <Guid>();

            var articles = new L3AR_GAfAL_0942[0];
            var prices   = new L3PR_GSPfPIL_1645[0];

            if (articleIDs.Length != 0)
            {
                var parameterArticles = new P_L3AR_GAfAL_0942
                {
                    ProductID_List = articleIDs
                };
                articles = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, parameterArticles, securityTicket).Result;

                var parameterPrices = new P_L3PR_GSPfPIL_1645
                {
                    ProductIDList = articleIDs
                };
                prices = cls_Get_StandardPrices_for_ProductIDList.Invoke(Connection, Transaction, parameterPrices, securityTicket).Result;
            }
            #endregion

            #region Set Return Value
            var returnElements = new List <L5RS_GRSPwAfP_1526>();
            foreach (var position in returnShipmentPositions)
            {
                var returnElement = new L5RS_GRSPwAfP_1526
                {
                    Article  = articles.FirstOrDefault(a => a.CMN_PRO_ProductID == position.CMN_PRO_Product_RefID),
                    Price    = prices.FirstOrDefault(a => a.ProductID == position.CMN_PRO_Product_RefID),
                    Position = position
                };
                returnElements.Add(returnElement);
            }
            returnValue.Result = returnElements.ToArray();
            #endregion

            return(returnValue);

            #endregion UserCode
        }
示例#3
0
        protected static FR_Guids Execute(DbConnection Connection, DbTransaction Transaction, P_L5PR_CCRR_1327 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guids();
            //Put your code here

            List <Guid> createdResponses = new List <Guid>();

            foreach (var request in Parameter.ProposalRequests)
            {
                List <Guid> articlesList = new List <Guid>();
                foreach (var position in request.RequestPositions)
                {
                    articlesList.Add(position.ProductID);
                }

                var articlesParameter = new P_L3AR_GAfAL_0942();
                articlesParameter.ProductID_List = articlesList.ToArray();

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

                ORM_ORD_CUO_RFP_IssuedProposalResponse_Header responseHeader = new ORM_ORD_CUO_RFP_IssuedProposalResponse_Header();
                responseHeader.ORD_CUO_RFP_IssuedProposalResponse_HeaderID = Guid.NewGuid();

                foreach (var position in request.RequestPositions)
                {
                    ORM_ORD_CUO_RFP_IssuedProposalResponse_Position tempPosition = new ORM_ORD_CUO_RFP_IssuedProposalResponse_Position();
                    tempPosition.ORD_CUO_RFP_IssuedProposalResponse_PositionID = Guid.NewGuid();
                    tempPosition.Quantity = position.Quantity;
                    tempPosition.CMN_PRO_Product_RefID = position.ProductID;
                    tempPosition.IssuedProposalResponseHeader_RefID            = responseHeader.ORD_CUO_RFP_IssuedProposalResponse_HeaderID;
                    tempPosition.ProposalResponsePositionITPL                  = tempPosition.ORD_CUO_RFP_IssuedProposalResponse_PositionID.ToString();
                    tempPosition.CreatedFrom_RequestForProposal_Position_RefID = position.RequestPositionID;
                    tempPosition.Tenant_RefID = securityTicket.TenantID;
                    tempPosition.Save(Connection, Transaction);
                }

                responseHeader.ProposalResponseHeaderITPL = responseHeader.ORD_CUO_RFP_IssuedProposalResponse_HeaderID.ToString();
                responseHeader.CreatedFor_RequestForProposal_Header_RefID = request.RequestHeaderID;
                responseHeader.ValidThrough = request.ValidThrough;
                responseHeader.Save(Connection, Transaction);

                createdResponses.Add(responseHeader.ORD_CUO_RFP_IssuedProposalResponse_HeaderID);
            }

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

            #endregion UserCode
        }
        protected static FR_L5PR_GCRPwADfTID_1710 Execute(DbConnection Connection, DbTransaction Transaction, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_L5PR_GCRPwADfTID_1710();
            //Put your code here


            var proposals = cls_Get_RequestProposals_Customer_for_TenantID.Invoke(Connection, Transaction, securityTicket).Result.ToList();

            List <Guid> articlesList = new List <Guid>();
            foreach (var proposal in proposals)
            {
                articlesList.Add(proposal.CMN_PRO_Product_RefID);
            }

            var articlesParameter = new P_L3AR_GAfAL_0942();
            articlesParameter.ProductID_List = articlesList.ToArray();

            var articles = new List <L3AR_GAfAL_0942>();

            if (articlesList.Count > 0)
            {
                articles = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, articlesParameter, securityTicket).Result.ToList();
            }

            List <L5PR_GCRPwADfTID_1710a> proposalsWithDetails = new List <L5PR_GCRPwADfTID_1710a>();

            foreach (var proposal in proposals)
            {
                L5PR_GCRPwADfTID_1710a tempProposalWithDetails = new L5PR_GCRPwADfTID_1710a();
                tempProposalWithDetails.Proposal = proposal;
                tempProposalWithDetails.Article  = articles.Where(ar => ar.CMN_PRO_ProductID == proposal.CMN_PRO_Product_RefID).Single();
                proposalsWithDetails.Add(tempProposalWithDetails);
            }

            returnValue.Result = new L5PR_GCRPwADfTID_1710();
            returnValue.Result.ProposalsWithArticleDetails = proposalsWithDetails.ToArray();


            return(returnValue);

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

            List <L5PO_GOEDPwAD_1719> list = new List <L5PO_GOEDPwAD_1719>();

            var extraDemandProducts = cls_Get_Open_ExtraDemandProducts.Invoke(Connection, Transaction, securityTicket).Result;

            L3AR_GAfAL_0942[]   articles = new L3AR_GAfAL_0942[0];
            L3PR_GSPfPIL_1645[] prices   = new L3PR_GSPfPIL_1645[0];
            if (extraDemandProducts.Count() != 0)
            {
                var articleIds = extraDemandProducts.Select(x => x.Product_RefID).Distinct().ToArray();

                var articleParam = new P_L3AR_GAfAL_0942 {
                    ProductID_List = articleIds
                };
                articles = CL3_Articles.Atomic.Retrieval.cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, articleParam, securityTicket).Result;

                var priceParam = new P_L3PR_GSPfPIL_1645 {
                    ProductIDList = articleIds
                };
                prices = cls_Get_StandardPrices_for_ProductIDList.Invoke(Connection, Transaction, priceParam, securityTicket).Result;
            }

            L5PO_GOEDPwAD_1719 listItem = null;
            foreach (var item in extraDemandProducts)
            {
                listItem = new L5PO_GOEDPwAD_1719();

                listItem.ExtraDemandProduct = item;
                listItem.Article            = articles.Single(x => x.CMN_PRO_ProductID == item.Product_RefID);
                listItem.Price = prices.Single(x => x.ProductID == item.Product_RefID);

                list.Add(listItem);
            }

            returnValue.Result = list.ToArray();

            return(returnValue);

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

            #region Get ReturnShipmentheaders
            var parameterHeaderId = new P_L5RS_GRSPfH_1105 {
                ReturnShipmentHeaderID = Parameter.Header_ID
            };
            var shipmentPositions = cls_Get_ReturnShipmentPositions_for_HeaderID.Invoke(Connection, Transaction, parameterHeaderId, securityTicket).Result;
            #endregion

            #region Get Articles
            var parameterProductIds = new P_L3AR_GAfAL_0942();
            parameterProductIds.ProductID_List = shipmentPositions.Select(sh => sh.ProductId).ToArray <Guid>();
            var articles = new L3AR_GAfAL_0942[0];
            if (parameterProductIds.ProductID_List.Length != 0)
            {
                articles = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, parameterProductIds, securityTicket).Result;
            }
            #endregion

            #region Set Return Value
            var returnElements = new List <L5RS_GRSPwAfH_1024>();
            foreach (var shipmentPosition in shipmentPositions)
            {
                var returnElement = new L5RS_GRSPwAfH_1024
                {
                    Article   = articles.FirstOrDefault(a => a.CMN_PRO_ProductID == shipmentPosition.ProductId),
                    Position  = shipmentPosition,
                    Header_ID = Parameter.Header_ID
                };
                returnElements.Add(returnElement);
            }

            returnValue.Result = returnElements.ToArray();
            #endregion


            return(returnValue);

            #endregion UserCode
        }
        protected static FR_L5RS_GRSPfT_1636_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L5RS_GRSPfT_1636 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode

            var returnValue       = new FR_L5RS_GRSPfT_1636_Array();
            var shipmentPositions = cls_Get_ReturnShipmentPositions.Invoke(Connection, Transaction, Parameter.SearchParam, securityTicket).Result;

            #region Get Articles
            var parameterProductIds = new P_L3AR_GAfAL_0942();
            parameterProductIds.ProductID_List = shipmentPositions.Select(s => s.CMN_PRO_Product_RefID).ToArray();
            var articles = new L3AR_GAfAL_0942[0];
            if (parameterProductIds.ProductID_List.Length != 0)
            {
                articles = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, parameterProductIds, securityTicket).Result;
            }
            #endregion

            #region Set Return Value
            var returnElements = new List <L5RS_GRSPfT_1636>();
            foreach (var shipmentPosition in shipmentPositions)
            {
                var returnElement = new L5RS_GRSPfT_1636
                {
                    Article  = articles.FirstOrDefault(a => a.CMN_PRO_ProductID == shipmentPosition.CMN_PRO_Product_RefID),
                    Position = shipmentPosition
                };
                returnElements.Add(returnElement);
            }

            returnValue.Result = returnElements.ToArray();
            #endregion

            //Put your code here
            return(returnValue);

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

            L5SO_GSaCOHDfSH_1446 shipmentAndCustomerOrderDetails = null;

            #region Retrieve Shipment and CustomerOrder Details

            P_L5SO_GSaCOHDfSH_1446 shipmentAndCustomerOrderDetailsParameter = new P_L5SO_GSaCOHDfSH_1446();
            shipmentAndCustomerOrderDetailsParameter.ShippingHeaderID = Parameter.ShipmentHeaderID;

            FR_L5SO_GSaCOHDfSH_1446 shipmentAndCustomerOrderDetailsResult = CL5_APOLogistic_ShippingOrder.Atomic.Retrieval.cls_Get_Shipment_and_CustomerOrderHeaderDetails_for_ShipmentHeaderID.Invoke(Connection, Transaction, shipmentAndCustomerOrderDetailsParameter, securityTicket);
            shipmentAndCustomerOrderDetails = shipmentAndCustomerOrderDetailsResult.Result;

            #endregion

            #region Customer name

            var customerName = "";
            if (shipmentAndCustomerOrderDetails != null && shipmentAndCustomerOrderDetails.OrderingCustomer_BusinessParticipant_RefID != Guid.Empty)
            {
                ORM_CMN_BPT_BusinessParticipant bp = new ORM_CMN_BPT_BusinessParticipant();
                var bpResult = bp.Load(Connection, Transaction, shipmentAndCustomerOrderDetails.OrderingCustomer_BusinessParticipant_RefID);
                if (bpResult.Status == FR_Status.Success && bp.CMN_BPT_BusinessParticipantID != Guid.Empty)
                {
                    customerName = bp.DisplayName;
                }
            }

            #endregion

            #region CustomerAddress
            var CustomerAddress = CL5_APOLogistic_ShippingOrder.Atomic.Retrieval.cls_Get_CustomerAddress_from_ShipmentHeaderID.Invoke(Connection, Transaction, new P_L5SO_GCAfSHI_1127 {
                ShipmentHeaderID = Parameter.ShipmentHeaderID
            }, securityTicket);
            #endregion

            #region Organisational unit

            Dict organizationalUnitName = null;
            if (shipmentAndCustomerOrderDetails != null && shipmentAndCustomerOrderDetails.CMN_BPT_CTM_OrganizationalUnit_RefID != Guid.Empty)
            {
                ORM_CMN_BPT_CTM_OrganizationalUnit orgUnit = new ORM_CMN_BPT_CTM_OrganizationalUnit();
                var orgUnitResult = orgUnit.Load(Connection, Transaction, shipmentAndCustomerOrderDetails.CMN_BPT_CTM_OrganizationalUnit_RefID);
                if (orgUnitResult.Status == FR_Status.Success && orgUnit.CMN_BPT_CTM_OrganizationalUnitID != Guid.Empty)
                {
                    organizationalUnitName = orgUnit.OrganizationalUnit_Name;
                }
            }

            #endregion

            L6SO_GASPbtWSvR_1413[] shipmentPositions = new L6SO_GASPbtWSvR_1413[0];

            #region Retrieve Shipment Positions with reservation details (including storage place)

            P_L6SO_GASPbtWSvR_1413 shipmentPositionsParameter = new P_L6SO_GASPbtWSvR_1413();
            shipmentPositionsParameter.ShipmentHeaderID = Parameter.ShipmentHeaderID;
            FR_L6SO_GASPbtWSvR_1413_Array shipmentPositionsForPickingListResult = cls_Get_AllShipmentPositions_bound_to_WarehouseStructure_via_Reservations.Invoke(Connection, Transaction, shipmentPositionsParameter, securityTicket);
            shipmentPositions = shipmentPositionsForPickingListResult.Result;

            #endregion

            #region Retrieve Customer Order Positions for Shipment Positions which are not shipped.

            P_L5CO_GACOPfUSP_1038 customerOrderPositionsForUnshippedShipmentPositionsParameter = new P_L5CO_GACOPfUSP_1038();
            customerOrderPositionsForUnshippedShipmentPositionsParameter.ShipmentHeaderID     = Parameter.ShipmentHeaderID;
            customerOrderPositionsForUnshippedShipmentPositionsParameter.OrganizationalUnitID = Parameter.OrganizationalUnitID;
            FR_L5CO_GACOPfUSP_1038_Array customerOrderPositionsForUnshippedShipmentPositionsResult = cls_Get_AllCustomerOrderPositions_for_Unshipped_ShipmentPositions.Invoke(Connection, Transaction, customerOrderPositionsForUnshippedShipmentPositionsParameter, securityTicket);
            L5CO_GACOPfUSP_1038[]        customerOrderPositions = customerOrderPositionsForUnshippedShipmentPositionsResult.Result;

            #endregion


            //
            // Taking product array from shipment positions previously retrieved.
            // Product array is used for taking product information
            //

            IEnumerable <Guid> productIdList1 = shipmentPositions.Select(x => x.CMN_PRO_Product_RefID).Distinct();
            IEnumerable <Guid> productIdList2 = customerOrderPositions.Select(x => x.CMN_PRO_Product_RefID).Distinct();

            Guid[] productIdArray = productIdList1.Concat(productIdList2).Distinct().ToArray();

            L3AR_GAfAL_0942[] articlesForArticleList = new L3AR_GAfAL_0942[0];

            #region Retrive product details

            if (productIdArray.Length > 0)
            {
                P_L3AR_GAfAL_0942 articlesForArticleListParameter = new P_L3AR_GAfAL_0942();
                articlesForArticleListParameter.ProductID_List = productIdArray;
                FR_L3AR_GAfAL_0942_Array articlesForArticleListResult = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, articlesForArticleListParameter, securityTicket);
                articlesForArticleList = articlesForArticleListResult.Result;
            }

            #endregion

            List <ORM_LOG_SHP_Shipment_Note> shipmentNoteList = new List <ORM_LOG_SHP_Shipment_Note>();

            if (shipmentAndCustomerOrderDetails != null)
            {
                shipmentNoteList = ORM_LOG_SHP_Shipment_Note.Query
                                   .Search(Connection, Transaction,
                                           new ORM_LOG_SHP_Shipment_Note.Query {
                    IsDeleted = false, IsNotePrintedOnDeliveryPaper = true, Shipment_Header_RefID = shipmentAndCustomerOrderDetails.LOG_SHP_Shipment_HeaderID
                })
                                   .OrderBy(i => i.Creation_Timestamp).ToList();
            }

            List <L6LG_GDfDLR_1522c> commentList = new List <L6LG_GDfDLR_1522c>();
            foreach (ORM_LOG_SHP_Shipment_Note shipmentNote in shipmentNoteList)
            {
                L6LG_GDfDLR_1522c comment = new L6LG_GDfDLR_1522c();

                ORM_CMN_BPT_BusinessParticipant businessParticipant = new ORM_CMN_BPT_BusinessParticipant();
                FR_Base bpLoad = businessParticipant.Load(Connection, Transaction, shipmentNote.CreatedBy_BusinessParticipant_RefID);
                if (bpLoad.Status == FR_Status.Success)
                {
                    comment.Name = businessParticipant.DisplayName;
                }
                comment.Comment = shipmentNote.Comment;
                commentList.Add(comment);
            }

            #region Building return object

            List <L6LG_GDfDLR_1522a> tempShipmentPositions = new List <L6LG_GDfDLR_1522a>();

            foreach (L6SO_GASPbtWSvR_1413 shipmentPosition in shipmentPositions)
            {
                L6LG_GDfDLR_1522a tempShipmentPosition = new L6LG_GDfDLR_1522a();
                tempShipmentPosition.ShipmentPositionDetails = shipmentPosition;
                tempShipmentPosition.ProductDetails          = articlesForArticleList.FirstOrDefault(a => a.CMN_PRO_ProductID == shipmentPosition.CMN_PRO_Product_RefID);
                tempShipmentPositions.Add(tempShipmentPosition);
            }

            List <L6LG_GDfDLR_1522b> tempCustomerOrderPositions = new List <L6LG_GDfDLR_1522b>();

            foreach (L5CO_GACOPfUSP_1038 customerOrderPosition in customerOrderPositions)
            {
                L6LG_GDfDLR_1522b tempCustomerOrderPosition = new L6LG_GDfDLR_1522b();
                tempCustomerOrderPosition.CustomerOrderPositionDetails = customerOrderPosition;
                tempCustomerOrderPosition.ProductDetails = articlesForArticleList.FirstOrDefault(a => a.CMN_PRO_ProductID == customerOrderPosition.CMN_PRO_Product_RefID);
                tempCustomerOrderPositions.Add(tempCustomerOrderPosition);
            }

            returnValue.Result = new L6LG_GDfDLR_1522();
            returnValue.Result.CustomerName                    = customerName;
            returnValue.Result.StreetAndNumber                 = CustomerAddress != null && CustomerAddress.Result != null  ? CustomerAddress.Result.Street_Name + " " + CustomerAddress.Result.Street_Number : "keine Kundenadresse";
            returnValue.Result.ZipAndCity                      = CustomerAddress != null && CustomerAddress.Result != null ? CustomerAddress.Result.ZIP + " " + CustomerAddress.Result.Town : "keine Kundenadresse";
            returnValue.Result.OrganizationalUnitName          = organizationalUnitName;
            returnValue.Result.ShipmentPositionList            = tempShipmentPositions.ToArray();
            returnValue.Result.CustomerOrderPositionList       = tempCustomerOrderPositions.ToArray();
            returnValue.Result.ShipmentAndCustomerOrderDetails = shipmentAndCustomerOrderDetails;
            returnValue.Result.CommentList                     = commentList.ToArray();

            #endregion

            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_Bool Execute(DbConnection Connection, DbTransaction Transaction, P_L5IN_SCRR_1056 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Bool();



            #region save new items
            Boolean proceed = true;
            List <P_L5IN_SCR_1056a> newItemsList = new List <P_L5IN_SCR_1056a>();
            foreach (var item in Parameter.NewItemsData)
            {
                Guid productTrackingInstanceID = Guid.Empty;
                Guid shelfContentID            = new Guid();

                P_L5SG_GPfSbP_1109 parameter = new P_L5SG_GPfSbP_1109();
                parameter.BatchNumber    = item.BatchNumber;
                parameter.ExparationDate = item.ExpirationDate;
                parameter.ProductID      = item.Product_RefID;
                parameter.ShelfID        = item.ShelfID;

                var articles = cls_Get_Product_from_Shelf_by_ProductID.Invoke(Connection, Transaction, parameter, securityTicket).Result.ToList();

                if (articles.Count > 0)
                {
                    P_L5IN_SIJPSCaTI_1418 paramSaveInvJob = new P_L5IN_SIJPSCaTI_1418();
                    paramSaveInvJob.InvJobProcessShelfID             = item.InvJobProcessShelfID;
                    paramSaveInvJob.ShelfContentID                   = articles.First().LOG_WRH_Shelf_ContentID;
                    paramSaveInvJob.ProductTrackingInstanceID        = articles.First().LOG_ProductTrackingInstanceID;
                    paramSaveInvJob.ShelfExpectedQuantity            = item.ExpectedQuantity;
                    paramSaveInvJob.TrackingInstanceExpectedQuantity = item.ExpectedQuantity;

                    shelfContentID = articles.First().LOG_WRH_Shelf_ContentID;

                    var invJob = cls_Save_InventoryJob_Process_ShelfContent_and_TrackingInstance.Invoke(Connection, Transaction, paramSaveInvJob, securityTicket).Result;
                }
                else
                {
                    List <Guid> articleIDs = new List <Guid>();
                    articleIDs.Add(item.Product_RefID);
                    P_L3AR_GAfAL_0942 paramArticleData = new P_L3AR_GAfAL_0942();
                    paramArticleData.ProductID_List = articleIDs.ToArray();

                    var articleData = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, paramArticleData, securityTicket).Result.First();
                    if (articleData.IsStorage_BatchNumberMandatory && (item.BatchNumber == string.Empty || item.BatchNumber == null))
                    {
                        proceed = false;
                    }
                    else if (articleData.IsStorage_ExpiryDateMandatory && (item.ExpirationDate == null || item.ExpirationDate == DateTime.MinValue))
                    {
                        proceed = false;
                    }
                    else
                    {
                        P_L3WH_SSCfP_1635 paramShelfContent = new P_L3WH_SSCfP_1635();
                        paramShelfContent.BatchNumber    = item.BatchNumber;
                        paramShelfContent.ExpirationDate = item.ExpirationDate;
                        paramShelfContent.ProductID      = item.Product_RefID;
                        paramShelfContent.Quantity       = item.ExpectedQuantity;
                        paramShelfContent.ShelfID        = item.ShelfID;

                        var shelfContent = cls_Save_Shelf_Content_for_ProductID.Invoke(Connection, Transaction, paramShelfContent, securityTicket).Result;

                        P_L5IN_SIJPSCaTI_1418 paramSaveInvJob = new P_L5IN_SIJPSCaTI_1418();
                        paramSaveInvJob.InvJobProcessShelfID             = item.InvJobProcessShelfID;
                        paramSaveInvJob.ShelfContentID                   = shelfContent.ShelfContentID;
                        paramSaveInvJob.ProductTrackingInstanceID        = shelfContent.TrackingInstanceID;
                        paramSaveInvJob.ShelfExpectedQuantity            = item.ExpectedQuantity;
                        paramSaveInvJob.TrackingInstanceExpectedQuantity = item.ExpectedQuantity;

                        shelfContentID = shelfContent.ShelfContentID;

                        productTrackingInstanceID = shelfContent.TrackingInstanceID;

                        var invJob = cls_Save_InventoryJob_Process_ShelfContent_and_TrackingInstance.Invoke(Connection, Transaction, paramSaveInvJob, securityTicket).Result;
                    }
                }

                if (!(item.CountedQuantity == 0 || item.CountedQuantity == null))
                {
                    P_L5IN_SCR_1056a result = new P_L5IN_SCR_1056a();
                    result.Quantity          = item.CountedQuantity.Value;
                    result.ShelfContentID    = shelfContentID;
                    result.ProductRefID      = item.Product_RefID;
                    result.ProcessShelfRefID = item.InvJobProcessShelfID;
                    if (productTrackingInstanceID != Guid.Empty)
                    {
                        result.ProductTrackingInstanceID = productTrackingInstanceID;
                    }

                    newItemsList.Add(result);
                }
            }
            #endregion

            #region Edit items

            var editItems = Parameter.Results.Where(x => x.IsEdited == true).ToList();
            List <P_L5IN_SCR_1056a> countingResults = new List <P_L5IN_SCR_1056a>();
            if (editItems.Count > 0)
            {
                List <L3WH_UPTI_1439a>   batchNrResultsList = new List <L3WH_UPTI_1439a>();
                List <P_L3WH_UPTI_1439a> param = new List <P_L3WH_UPTI_1439a>();
                foreach (var item in editItems)
                {
                    if (item.ProductTrackingInstanceID == null)
                    {
                        continue;
                    }

                    //check if batch number has changed
                    var existingTrackingInstance = new ORM_LOG_ProductTrackingInstance();
                    existingTrackingInstance.Load(Connection, Transaction, (Guid)item.ProductTrackingInstanceID);
                    if (existingTrackingInstance.BatchNumber != item.BatchNumber)
                    {
                        //create new tracking instance
                        var newTrackingInstance = new ORM_LOG_ProductTrackingInstance();
                        newTrackingInstance.LOG_ProductTrackingInstanceID = Guid.NewGuid();
                        newTrackingInstance.BatchNumber    = item.BatchNumber;
                        newTrackingInstance.ExpirationDate = item.ExpirationDate;
                        newTrackingInstance.CurrentQuantityOnTrackingInstance = item.Quantity;
                        newTrackingInstance.TrackingInstanceTakenFromSourceTrackingInstance_RefID = existingTrackingInstance.TrackingInstanceTakenFromSourceTrackingInstance_RefID;
                        newTrackingInstance.TrackingCode = existingTrackingInstance.TrackingCode;
                        newTrackingInstance.SerialNumber = existingTrackingInstance.SerialNumber;
                        newTrackingInstance.OwnedBy_BusinessParticipant_RefID = existingTrackingInstance.OwnedBy_BusinessParticipant_RefID;
                        newTrackingInstance.CMN_PRO_Product_RefID             = existingTrackingInstance.CMN_PRO_Product_RefID;
                        newTrackingInstance.CMN_PRO_Product_Variant_RefID     = existingTrackingInstance.CMN_PRO_Product_Variant_RefID;
                        newTrackingInstance.CMN_PRO_Product_Release_RefID     = existingTrackingInstance.CMN_PRO_Product_Release_RefID;
                        newTrackingInstance.IsDeleted    = false;
                        newTrackingInstance.Tenant_RefID = securityTicket.TenantID;
                        newTrackingInstance.InitialQuantityOnTrackingInstance = existingTrackingInstance.InitialQuantityOnTrackingInstance;
                        newTrackingInstance.R_FreeQuantity     = existingTrackingInstance.R_FreeQuantity;
                        newTrackingInstance.R_ReservedQuantity = existingTrackingInstance.R_ReservedQuantity;
                        newTrackingInstance.Save(Connection, Transaction);

                        //delete old and create new shelf content and tracking instance assotiation
                        var existingSCtoTIQuery = new ORM_LOG_WRH_ShelfContent_2_TrackingInstance.Query();
                        existingSCtoTIQuery.LOG_ProductTrackingInstance_RefID = existingTrackingInstance.LOG_ProductTrackingInstanceID;
                        existingSCtoTIQuery.Tenant_RefID = securityTicket.TenantID;
                        existingSCtoTIQuery.IsDeleted    = false;
                        var existingSCtoTI = ORM_LOG_WRH_ShelfContent_2_TrackingInstance.Query.Search(Connection, Transaction, existingSCtoTIQuery).FirstOrDefault();

                        existingSCtoTI.IsDeleted = true;
                        existingSCtoTI.Save(Connection, Transaction);

                        var newSCtoTI = new ORM_LOG_WRH_ShelfContent_2_TrackingInstance();
                        newSCtoTI.AssignmentID = Guid.NewGuid();
                        newSCtoTI.LOG_ProductTrackingInstance_RefID = newTrackingInstance.LOG_ProductTrackingInstanceID;
                        newSCtoTI.LOG_WRH_Shelf_Content_RefID       = existingSCtoTI.LOG_WRH_Shelf_Content_RefID;
                        newSCtoTI.Tenant_RefID       = securityTicket.TenantID;
                        newSCtoTI.Creation_Timestamp = DateTime.Now;
                        newSCtoTI.Save(Connection, Transaction);

                        //delete old and create new content adjustment and tracking instance assotiation and content adjustment
                        var existingCAtoTIQuery = new ORM_LOG_WRH_Shelf_ContentAdjustment_TrackingInstance.Query();
                        existingCAtoTIQuery.LOG_ProductTrackingInstance_RefID = existingTrackingInstance.LOG_ProductTrackingInstanceID;
                        existingCAtoTIQuery.IsDeleted    = false;
                        existingCAtoTIQuery.Tenant_RefID = securityTicket.TenantID;
                        var existingCAtoTI = ORM_LOG_WRH_Shelf_ContentAdjustment_TrackingInstance.Query.Search(Connection, Transaction, existingCAtoTIQuery).FirstOrDefault();

                        existingCAtoTI.IsDeleted = true;
                        existingCAtoTI.Save(Connection, Transaction);

                        var existingContentAdjustment = new ORM_LOG_WRH_Shelf_ContentAdjustment();
                        existingContentAdjustment.Load(Connection, Transaction, existingCAtoTI.LOG_WRH_Shelf_ContentAdjustment_RefID);

                        var newContentAdjustment = new ORM_LOG_WRH_Shelf_ContentAdjustment();
                        newContentAdjustment.LOG_WRH_Shelf_ContentAdjustmentID = Guid.NewGuid();
                        newContentAdjustment.ShelfContent_RefID       = existingContentAdjustment.ShelfContent_RefID;
                        newContentAdjustment.QuantityChangedAmount    = item.Quantity;
                        newContentAdjustment.QuantityChangedDate      = DateTime.Now;
                        newContentAdjustment.IsInitialReceipt         = false;
                        newContentAdjustment.IsInventoryJobCorrection = existingContentAdjustment.IsInventoryJobCorrection;
                        newContentAdjustment.IfInventoryJobCorrection_InvenoryJobProcess_RefID = existingContentAdjustment.IfInventoryJobCorrection_InvenoryJobProcess_RefID;
                        newContentAdjustment.IsShipmentWithdrawal = existingContentAdjustment.IsShipmentWithdrawal;
                        newContentAdjustment.IfShipmentWithdrawal_ShipmentPosition_RefID = existingContentAdjustment.IfShipmentWithdrawal_ShipmentPosition_RefID;
                        newContentAdjustment.IsManualCorrection = existingContentAdjustment.IsManualCorrection;
                        newContentAdjustment.IfManualCorrection_InventoryChangeReason_RefID = existingContentAdjustment.IfManualCorrection_InventoryChangeReason_RefID;
                        newContentAdjustment.PerformedAt_Date               = existingContentAdjustment.PerformedAt_Date;
                        newContentAdjustment.PerformedBy_Account_RefID      = existingContentAdjustment.PerformedBy_Account_RefID;
                        newContentAdjustment.ContentAdjustmentComment       = existingContentAdjustment.ContentAdjustmentComment;
                        newContentAdjustment.IsBatchNumberOrSerialKeyUpdate = true;
                        newContentAdjustment.IfBatchNumberOrSerialKeyUpdate_CorrespondingAdjustment_RefID = existingContentAdjustment.LOG_WRH_Shelf_ContentAdjustmentID;
                        newContentAdjustment.IsRelocation = false;
                        newContentAdjustment.IfRelocation_CorrespondingAdjustment_RefID = Guid.Empty;
                        newContentAdjustment.Creation_Timestamp = DateTime.Now;
                        newContentAdjustment.Tenant_RefID       = securityTicket.TenantID;
                        newContentAdjustment.Save(Connection, Transaction);

                        var newCAtoTI = new ORM_LOG_WRH_Shelf_ContentAdjustment_TrackingInstance();
                        newCAtoTI.LOG_WRH_Shelf_ContentAdjustment_TrackingInstanceID = Guid.NewGuid();
                        newCAtoTI.LOG_ProductTrackingInstance_RefID     = newTrackingInstance.LOG_ProductTrackingInstanceID;
                        newCAtoTI.LOG_WRH_Shelf_ContentAdjustment_RefID = newContentAdjustment.LOG_WRH_Shelf_ContentAdjustmentID;
                        newCAtoTI.LOG_WRH_Shelf_ContentAdjustment_TrackingInstanceID = newTrackingInstance.LOG_ProductTrackingInstanceID;
                        newCAtoTI.QuantityChangedAmount = item.Quantity - existingContentAdjustment.QuantityChangedAmount;
                        newCAtoTI.IsDeleted             = false;
                        newCAtoTI.Tenant_RefID          = securityTicket.TenantID;
                        newCAtoTI.Creation_Timestamp    = DateTime.Now;
                        newCAtoTI.Save(Connection, Transaction);

                        item.ProductTrackingInstanceID = newTrackingInstance.LOG_ProductTrackingInstanceID;

                        L3WH_UPTI_1439a batchNrChangedResults = new L3WH_UPTI_1439a();
                        batchNrChangedResults.TrackingInstanceID      = newTrackingInstance.LOG_ProductTrackingInstanceID;
                        batchNrChangedResults.ProductID               = newTrackingInstance.CMN_PRO_Product_RefID;
                        batchNrChangedResults.LOG_WRH_Shelf_ContentID = newContentAdjustment.ShelfContent_RefID;

                        existingTrackingInstance.IsDeleted = true;
                        existingTrackingInstance.Save(Connection, Transaction);

                        batchNrResultsList.Add(batchNrChangedResults);
                    }
                    else
                    {
                        P_L3WH_UPTI_1439a p = new P_L3WH_UPTI_1439a();
                        p.BatchNumber               = item.BatchNumber;
                        p.ExpirationDate            = item.ExpirationDate;
                        p.ProductTrackingInstanceID = (Guid)item.ProductTrackingInstanceID;
                        p.ShelfContentID            = item.ShelfContentID;
                        p.Quantity  = item.Quantity;
                        p.ProductID = item.ProductRefID;
                        param.Add(p);
                    }
                }
                P_L3WH_UPTI_1439 paramUpdateTrackingInstance = new P_L3WH_UPTI_1439();
                paramUpdateTrackingInstance.ProductTrackingInstance = param.ToArray();
                var result = cls_Update_ProductTrackingInstance.Invoke(Connection, Transaction, paramUpdateTrackingInstance, securityTicket).Result;

                List <L3WH_UPTI_1439a> finalList = new List <L3WH_UPTI_1439a>();
                finalList = result.newTrackingInstance.ToList();
                finalList.AddRange(batchNrResultsList);
                result.newTrackingInstance = finalList.ToArray();

                foreach (var item in editItems)
                {
                    if (item.ProductTrackingInstanceID == null)
                    {
                        continue;
                    }
                    //var oldProcessShelf = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_Process_Shelf().Load(Connection, Transaction, item.ProcessShelfRefID);
                    //var newProcessShelf = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_Process_Shelf();
                    var oldProcessShelfContent = CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_Process_ShelfContent.Query.Search(Connection, Transaction, new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_Process_ShelfContent.Query()
                    {
                        LOG_WRH_INJ_InventoryJob_Process_Shelf_RefID = item.ProcessShelfRefID,
                        LOG_WRH_Shelf_Content_RefID = item.ShelfContentID,
                        Tenant_RefID = securityTicket.TenantID,
                        IsDeleted    = false
                    }).Single();

                    var newProcessShelfContent = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_Process_ShelfContent();
                    newProcessShelfContent.Creation_Timestamp             = DateTime.Now;
                    newProcessShelfContent.ExpectedQuantityOnShelfContent = oldProcessShelfContent.ExpectedQuantityOnShelfContent;
                    newProcessShelfContent.IsDeleted = false;
                    newProcessShelfContent.LOG_WRH_INJ_InventoryJob_Process_Shelf_RefID    = oldProcessShelfContent.LOG_WRH_INJ_InventoryJob_Process_Shelf_RefID;
                    newProcessShelfContent.LOG_WRH_INJ_InventoryJob_Process_ShelfContentID = Guid.NewGuid();
                    newProcessShelfContent.LOG_WRH_Shelf_Content_RefID = result.newTrackingInstance.Where(x => x.ProductID == item.ProductRefID).Single().LOG_WRH_Shelf_ContentID;
                    newProcessShelfContent.Tenant_RefID = securityTicket.TenantID;

                    newProcessShelfContent.Save(Connection, Transaction);

                    oldProcessShelfContent.IsDeleted = true;
                    oldProcessShelfContent.Save(Connection, Transaction);


                    var oldProcessShelfContentTrackingInstance = CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_Process_ShelfContents_TrackingInstance.Query.Search(Connection, Transaction, new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_Process_ShelfContents_TrackingInstance.Query()
                    {
                        LOG_WRH_INJ_InventoryJob_Process_ShelfContent_RefID = oldProcessShelfContent.LOG_WRH_INJ_InventoryJob_Process_ShelfContentID,
                        Tenant_RefID = securityTicket.TenantID,
                        IsDeleted    = false
                    }).Single();

                    var newProcessShelfContentTrackingInstance = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_Process_ShelfContents_TrackingInstance();
                    newProcessShelfContentTrackingInstance.Creation_Timestamp = DateTime.Now;
                    newProcessShelfContentTrackingInstance.ExpectedQuantityOnTrackingInstance = oldProcessShelfContentTrackingInstance.ExpectedQuantityOnTrackingInstance;
                    newProcessShelfContentTrackingInstance.LOG_ProductTrackingInstance_RefID  = result.newTrackingInstance.Where(x => x.ProductID == item.ProductRefID).Single().TrackingInstanceID;
                    newProcessShelfContentTrackingInstance.LOG_WRH_INJ_InventoryJob_Process_ShelfContent_RefID  = newProcessShelfContent.LOG_WRH_INJ_InventoryJob_Process_ShelfContentID;
                    newProcessShelfContentTrackingInstance.LOG_WRH_INJ_Process_ShelfContents_TrackingInstanceID = Guid.NewGuid();
                    newProcessShelfContentTrackingInstance.Tenant_RefID = securityTicket.TenantID;

                    newProcessShelfContentTrackingInstance.Save(Connection, Transaction);
                    oldProcessShelfContentTrackingInstance.IsDeleted = true;
                    oldProcessShelfContentTrackingInstance.Save(Connection, Transaction);
                }

                foreach (var item in Parameter.Results.ToList())
                {
                    if (result.newTrackingInstance.Any(x => x.ProductID == item.ProductRefID))
                    {
                        var res = result.newTrackingInstance.Where(x => x.ProductID == item.ProductRefID).Single();
                        item.ProductTrackingInstanceID = res.TrackingInstanceID;
                        item.ShelfContentID            = res.LOG_WRH_Shelf_ContentID;
                    }
                    countingResults.Add(item);
                }
            }
            else
            {
                countingResults = Parameter.Results.ToList();
            }

            #endregion
            List <P_L5IN_SCR_1056a> completeList = new List <P_L5IN_SCR_1056a>();
            completeList.AddRange(newItemsList);
            completeList.AddRange(countingResults);


            if (proceed)
            {
                var countingRun = CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_CountingRun.Query.Search(Connection, Transaction,
                                                                                                        new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventoryJob_CountingRun.Query
                {
                    LOG_WRH_INJ_InventoryJob_CountingRunID = Parameter.CountingRunID,
                    IsCounting_Started   = true,
                    IsCounting_Completed = false,
                    IsDeleted            = false,
                    Tenant_RefID         = securityTicket.TenantID
                }).Single();

                var countingResult = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventryJob_CountingResult();
                var countingResultTrackingInstance = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_CountingResult_TrackingInstance();

                foreach (var item in completeList)
                {
                    bool isTrackingInstance = (item.ProductTrackingInstanceID != Guid.Empty);

                    #region Load or create new Counting Result
                    // try to find counting result for the same ShelfContentID
                    countingResult = CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventryJob_CountingResult.Query.Search(Connection, Transaction,
                                                                                                             new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventryJob_CountingResult.Query
                    {
                        CountingRun_RefID   = Parameter.CountingRunID,
                        Product_RefID       = item.ProductRefID,
                        Process_Shelf_RefID = item.ProcessShelfRefID,
                        IsDeleted           = false,
                        Tenant_RefID        = securityTicket.TenantID
                    }).SingleOrDefault();

                    #region Create new counting result if none is found by ShelfContent_RefID
                    if (countingResult == null)
                    {
                        countingResult = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_InventryJob_CountingResult
                        {
                            LOG_WRH_INJ_InventoryJob_CountingResultID = Guid.NewGuid(),
                            Creation_Timestamp = DateTime.Now,
                            Tenant_RefID       = securityTicket.TenantID,
                            CountedAmount      = 0.0,
                            CountingRun_RefID  = Parameter.CountingRunID,
                            IsDifferenceToExpectedQuantityFound = false,
                            Product_RefID       = item.ProductRefID,
                            Process_Shelf_RefID = item.ProcessShelfRefID,
                        };
                        countingResult.Save(Connection, Transaction);
                    }
                    #endregion
                    #endregion

                    if (isTrackingInstance)
                    {
                        if (item.InventoryJob_CountingResultID == Guid.Empty || item.CountingResult_TrackingInstanceID == Guid.Empty)
                        {
                            countingResultTrackingInstance = new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_CountingResult_TrackingInstance
                            {
                                LOG_WRH_INJ_CountingResult_TrackingInstanceID = Guid.NewGuid(),
                                Creation_Timestamp = DateTime.Now,
                                Tenant_RefID       = securityTicket.TenantID,
                                LOG_WRH_INJ_InventoryJob_CountingResult_RefID = countingResult.LOG_WRH_INJ_InventoryJob_CountingResultID,
                                LOG_ProductTrackingInstanceID = item.ProductTrackingInstanceID.Value
                            };
                        }
                        else
                        {
                            countingResultTrackingInstance.Load(Connection, Transaction, item.CountingResult_TrackingInstanceID);
                        }
                        countingResultTrackingInstance.CountedAmount = item.Quantity;
                        countingResultTrackingInstance.Save(Connection, Transaction);

                        var tiResults = CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_CountingResult_TrackingInstance.Query.Search(Connection, Transaction,
                                                                                                                     new CL1_LOG_WRH_INJ.ORM_LOG_WRH_INJ_CountingResult_TrackingInstance.Query
                        {
                            LOG_WRH_INJ_InventoryJob_CountingResult_RefID = countingResult.LOG_WRH_INJ_InventoryJob_CountingResultID,
                            IsDeleted    = false,
                            Tenant_RefID = securityTicket.TenantID
                        });

                        countingResult.CountedAmount = tiResults.Sum(x => x.CountedAmount);
                        countingResult.Save(Connection, Transaction);
                    }
                }
            }

            returnValue.Result = proceed;

            return(returnValue);

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

            #region Get Storage Places
            var filterCriteria = new P_L3WH_GSPfFC_1504()
            {
                WarehouseGroupID    = null,
                WarehouseID         = null,
                AreaID              = null,
                RackID              = null,
                UseShelfIDList      = false,
                ShelfIDs            = new Guid[] { Guid.Empty },
                UseProductIDList    = false,
                ProductIDs          = new Guid[] { Guid.Empty },
                BottomShelfQuantity = 1,
                TopShelfQuantity    = null,
                UseProductTrackingInstanceIDList = Parameter.ProductTrackingInstanceIds != null,
                ProductTrackingInstanceIDs       = Parameter.ProductTrackingInstanceIds == null
                    ? new Guid[] { Guid.Empty } : Parameter.ProductTrackingInstanceIds,
                StartExpirationDate = Parameter.StartDate,
                EndExpirationDate   = Parameter.EndDate
            };
            var resultStoragePlaces = cls_Get_StoragePlaces_for_FilterCriteria.Invoke(
                Connection,
                Transaction,
                filterCriteria,
                securityTicket);

            if (resultStoragePlaces.Status != FR_Status.Success || resultStoragePlaces.Result == null || resultStoragePlaces.Result.Count() == 0)
            {
                returnValue.Status = FR_Status.Error_Internal;
                returnValue.Result = new L6ED_GPTIwAaS_0816[] { };
                return(returnValue);
            }
            #endregion

            #region Get Articles
            var parameterProductIds = new P_L3AR_GAfAL_0942();
            parameterProductIds.ProductID_List = resultStoragePlaces.Result.Select(rsp => rsp.Product_RefID).Distinct().ToArray <Guid>();
            var articles = new L3AR_GAfAL_0942[0];
            if (parameterProductIds.ProductID_List.Length != 0)
            {
                articles = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, parameterProductIds, securityTicket).Result;
            }
            #endregion

            #region Get Supplier
            var parameterProductsBatchNumbers = new P_L6ED_GSRtTIbBNaP_1353();
            parameterProductsBatchNumbers.ProductIDs   = parameterProductIds.ProductID_List;
            parameterProductsBatchNumbers.BatchNumbers = resultStoragePlaces.Result.Select(rsp => rsp.BatchNumber).Distinct().ToArray <string>();
            var resultSuppliers = cls_Get_StockReceipt_through_TrackingInstance_by_BatchNumbers_and_ProductIDs.Invoke(Connection, Transaction, parameterProductsBatchNumbers, securityTicket);
            if (resultSuppliers.Status != FR_Status.Success)
            {
                returnValue.Status = FR_Status.Error_Internal;
                returnValue.Result = new L6ED_GPTIwAaS_0816[] { };
                return(returnValue);
            }
            #endregion

            #region Get MSR
            Guid[] productIds     = articles.Select(x => x.CMN_PRO_ProductID).ToArray();
            var    msrForProducts = cls_Get_MSR_for_ProductIDList.Invoke(
                Connection,
                Transaction,
                new P_L3AS_GSMRfPL_1508 {
                ProductIDList = productIds
            },
                securityTicket
                ).Result;
            #endregion


            #region Set Result
            var result = new List <L6ED_GPTIwAaS_0816>();
            foreach (var storagePlace in resultStoragePlaces.Result)
            {
                var suppliers = resultSuppliers.Result
                                .Where(rs => rs.BatchNumber == storagePlace.BatchNumber && rs.ReceiptPosition_Product_RefID == storagePlace.Product_RefID)
                                .GroupBy(s => s.SupplierId, (key, group) => group.First());

                var msrForProduct = msrForProducts.SingleOrDefault(x => x.ProductID == storagePlace.Product_RefID);

                result.Add(new L6ED_GPTIwAaS_0816()
                {
                    StoragePlaces = storagePlace,
                    Article       = articles.FirstOrDefault(a => a.CMN_PRO_ProductID == storagePlace.Product_RefID),
                    Suppliers     = suppliers.ToArray(),
                    MSR           = (msrForProduct != null) ? msrForProduct.MSR : 0.0
                });
            }
            returnValue.Result = result.ToArray();
            returnValue.Status = FR_Status.Success;
            #endregion


            return(returnValue);

            #endregion UserCode
        }
示例#12
0
        protected static FR_L6LG_GDfDLR_1634 Execute(DbConnection Connection, DbTransaction Transaction, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L6LG_GDfDLR_1634();
            returnValue.Result = new L6LG_GDfDLR_1634();

            var languages = cls_Get_All_Languages_ForTenantID.Invoke(Connection, Transaction, new P_L2LN_GALFTID_1530()
            {
                Tenant_RefID = securityTicket.TenantID
            }, securityTicket).Result;


            var account = cls_Get_DisplayName_of_Account.Invoke(Connection, Transaction, securityTicket).Result;

            List <L6LG_GDfDLR_1634a> returnList           = new List <L6LG_GDfDLR_1634a>();
            var         produtDemandAndSupplyQuantityList = cls_Get_Product_Demand_and_Supply_Quantity.Invoke(Connection, Transaction, securityTicket).Result;
            List <Guid> productIdList = produtDemandAndSupplyQuantityList.Select(p => p.ProductID).Distinct().ToList();

            L3AR_GAfAL_0942[] articlesForArticleList = new L3AR_GAfAL_0942[0];
            if (productIdList != null && productIdList.Count > 0)
            {
                P_L3AR_GAfAL_0942 articlesForArticleListParameter = new P_L3AR_GAfAL_0942();
                articlesForArticleListParameter.ProductID_List = productIdList.ToArray();
                FR_L3AR_GAfAL_0942_Array articlesForArticleListResult = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, articlesForArticleListParameter, securityTicket);
                articlesForArticleList = articlesForArticleListResult.Result;
            }


            foreach (L6LG_GPDaSQ_1636 productDemandAndSupplyQuantity in produtDemandAndSupplyQuantityList)
            {
                L3AR_GAfAL_0942 article = articlesForArticleList.FirstOrDefault(a => a.CMN_PRO_ProductID == productDemandAndSupplyQuantity.ProductID);

                if (article == null)
                {
                    continue;
                }


                L6LG_GDfDLR_1634a product = new L6LG_GDfDLR_1634a();
                product.ProductID       = article.CMN_PRO_ProductID;
                product.DossageFormName = article.DossageFormName;
                product.ProducerName    = article.ProducerName;
                product.Product_Name    = new Dictionary <string, string>();

                foreach (L2LN_GALFTID_1530 lang in languages)
                {
                    string iso     = lang.ISO_639_1;
                    string content = "";
                    if (article.Product_Name != null && article.Product_Name.Contents != null)
                    {
                        DictEntry dicEntry = article.Product_Name.Contents.FirstOrDefault(c => c.LanguageID == lang.CMN_LanguageID);
                        if (dicEntry != null)
                        {
                            content = dicEntry.Content;
                        }
                    }
                    product.Product_Name.Add(iso, content);
                }

                product.Product_Number      = article.Product_Number;
                product.UnitAmount          = article.UnitAmount;
                product.UnitIsoCode         = article.UnitIsoCode;
                product.DemandQuantity      = productDemandAndSupplyQuantity.DemandQuantity;
                product.SupplyQuantity      = productDemandAndSupplyQuantity.SupplyQuantity;
                product.ToBeOrderedQuantity = productDemandAndSupplyQuantity.DemandQuantity - productDemandAndSupplyQuantity.SupplyQuantity;
                returnList.Add(product);
            }

            returnValue.Result.Products = returnList.ToArray();
            returnValue.Result.Account  = account;

            return(returnValue);

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

            var priceForAllProducts = new List <L3PR_GSPfPIL_1645>();
            var articles            = new List <L3AR_GAfAL_0942>();
            var productsBySupplier  = new List <L3SP_GPfSvSR_1524>();
            var productListId       = new List <Guid>();

            #region Filter by storage and quantity
            var filterCriteria = new P_L3WH_GSPfFC_1504()
            {
                WarehouseGroupID = Parameter.WarehouseStructure.Warehouse_GroupID,
                WarehouseID      = Parameter.WarehouseStructure.WarehouseID,
                AreaID           = Parameter.WarehouseStructure.AreaID,
                RackID           = Parameter.WarehouseStructure.RackID,
                UseShelfIDList   = Parameter.WarehouseStructure.ShelfID != null,
                ShelfIDs         = new Guid[] { Parameter.WarehouseStructure.ShelfID == null
                    ? Guid.Empty : new Guid(Parameter.WarehouseStructure.ShelfID.ToString()) },
                UseProductIDList    = false,
                ProductIDs          = new Guid[] { Guid.Empty },
                BottomShelfQuantity = (int?)Parameter.QuantityBottom,
                TopShelfQuantity    = (int?)Parameter.QuantityTop,
                UseProductTrackingInstanceIDList = false,
                ProductTrackingInstanceIDs       = new Guid[] { Guid.Empty },
                StartExpirationDate = null,
                EndExpirationDate   = null
            };
            var resultStoragePlaces = cls_Get_StoragePlaces_for_FilterCriteria.Invoke(
                Connection,
                Transaction,
                filterCriteria,
                securityTicket);
            if (resultStoragePlaces.Status != FR_Status.Success || resultStoragePlaces.Result == null || resultStoragePlaces.Result.Count() <= 0)
            {
                returnValue.Status = FR_Status.Error_Internal;
                returnValue.Result = new L6SC_GFDfSC_1424()
                {
                };
                return(returnValue);
            }
            var productsByStorage = resultStoragePlaces.Result.ToList();
            var productIDsByStorageAndQuantity = productsByStorage.Select(x => x.Product_RefID).Distinct().ToList();
            #endregion

            #region Filter by Supplier
            if (productIDsByStorageAndQuantity.Count != 0)
            {
                productsBySupplier = cls_Get_ProductIDs_for_SupplierID_via_StockReceipts.Invoke(Connection, Transaction,
                                                                                                new P_L3SP_GPfSvSR_1524
                {
                    ProvidingSupplier = Parameter.ProvidingSupplier
                },
                                                                                                securityTicket).Result.ToList();

                if (Parameter.ProvidingSupplier != null)
                {
                    var productIDsBySupplier = productsBySupplier.Select(x => x.ReceiptPosition_Product_RefID).ToList();
                    productListId = productIDsBySupplier.Intersect(productIDsByStorageAndQuantity).ToList();
                }
                else
                {
                    productListId = productIDsByStorageAndQuantity;
                }
            }
            #endregion

            #region Filter by date of shipment
            if (Parameter.DateOfShipmentFrom != null || Parameter.DateOfShipmentTo != null)
            {
                var dateOfShipmentParam = new P_L6SC_GDSfAL_1418();
                dateOfShipmentParam.ProductID_List = productListId.ToArray();
                dateOfShipmentParam.shipmentStatus = null;
                dateOfShipmentParam.DateFrom       = Parameter.DateOfShipmentFrom;
                var filterByDate = Get_DateOfShipment_for_ArticleList.Invoke(Connection, Transaction, dateOfShipmentParam, securityTicket).Result;
                productListId = filterByDate
                                .Where(x => x.GlobalPropertyMatchingID != EnumUtils.GetEnumDescription(EShipmentStatus.Shipped))
                                .Select(x => x.CMN_PRO_Product_RefID).Distinct().ToList();
            }
            #endregion

            #region Filter by Price
            if (productListId.Count != 0)
            {
                var  filteredPrice     = new List <L3PR_GSPfPIL_1645>();
                var  priceParams       = new P_L3PR_GSPfPIL_1645();
                bool isFilteredByPrice = false;
                priceParams.ProductIDList = productListId.ToArray();
                priceForAllProducts       = cls_Get_StandardPrices_for_ProductIDList.Invoke(
                    Connection,
                    Transaction,
                    priceParams,
                    securityTicket).Result.ToList();

                if (Parameter.Price.DefaultSalesPriceFrom != null || Parameter.Price.DefaultSalesPriceTo != null)
                {
                    filteredPrice = priceForAllProducts.Where(x =>
                                                              (Parameter.Price.DefaultSalesPriceFrom == null || x.SalesPrice >= Parameter.Price.DefaultSalesPriceFrom) &&
                                                              (Parameter.Price.DefaultSalesPriceTo == null || x.SalesPrice <= Parameter.Price.DefaultSalesPriceTo)).ToList();
                    isFilteredByPrice = true;
                }

                if (Parameter.Price.AverageProcurementPriceFrom != null || Parameter.Price.AverageProcurementPriceTo != null)
                {
                    if (isFilteredByPrice)
                    {
                        filteredPrice = filteredPrice.Where(x =>
                                                            (Parameter.Price.AverageProcurementPriceFrom == null || x.AverageProcurementPrice >= Parameter.Price.AverageProcurementPriceFrom) &&
                                                            (Parameter.Price.AverageProcurementPriceTo == null || x.AverageProcurementPrice <= Parameter.Price.AverageProcurementPriceTo)).ToList();
                    }
                    else
                    {
                        filteredPrice = priceForAllProducts.Where(x =>
                                                                  (Parameter.Price.AverageProcurementPriceFrom == null || x.AverageProcurementPrice >= Parameter.Price.AverageProcurementPriceFrom) &&
                                                                  (Parameter.Price.AverageProcurementPriceTo == null || x.AverageProcurementPrice <= Parameter.Price.AverageProcurementPriceTo)).ToList();
                        isFilteredByPrice = true;
                    }
                }

                if (isFilteredByPrice)
                {
                    var productListByPrice = filteredPrice.Select(x => x.ProductID).ToList();
                    productListId = productListId.Intersect(productListByPrice).ToList();
                }
            }
            #endregion

            #region Get_Articles_for_ArticleList add producerID
            if (productListId.Count != 0)
            {
                var getArticlesParams = new P_L3AR_GAfAL_0942();
                getArticlesParams.ProducingBusinessParticipant = Parameter.ProducingBusinessParticipant;
                getArticlesParams.ProductID_List = productListId.ToArray();
                getArticlesParams.ProductGroupID = Parameter.ProductGroupID;

                articles = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, getArticlesParams, securityTicket).Result.ToList();
            }
            #endregion

            #region filter by producer
            if ((articles.Count != 0) && (String.IsNullOrEmpty(Parameter.Producer) == false))
            {
                articles = articles.Where(x => x.ProducerName.Contains(Parameter.Producer)).ToList();
            }
            #endregion

            #region Get Msr for products

            var productIDs     = articles.Select(x => x.CMN_PRO_ProductID).ToArray();
            var msrForProducts = cls_Get_MSR_for_ProductIDList.Invoke(
                Connection,
                Transaction,
                new P_L3AS_GSMRfPL_1508 {
                ProductIDList = productIDs
            },
                securityTicket
                ).Result;

            #endregion

            if (productListId.Count != 0)
            {
                var returnItemList = new List <L6SC_GFDfSC_1424a>();
                foreach (var item in productsByStorage)
                {
                    var article           = articles.SingleOrDefault(x => x.CMN_PRO_ProductID == item.Product_RefID);
                    var productMst        = msrForProducts.SingleOrDefault(x => x.ProductID == item.Product_RefID);
                    var trackingInstances = cls_GetTrackingInstances_for_ShelfContent.Invoke(
                        Connection,
                        Transaction,
                        new P_L3TI_GTIfSC_1455()
                    {
                        ShelfContentID = item.LOG_WRH_Shelf_ContentID
                    },
                        securityTicket).Result;
                    if (article != null && trackingInstances != null && trackingInstances.Count() > 0)
                    {
                        var returnItem = new L6SC_GFDfSC_1424a();
                        returnItem.Storage          = productsByStorage.Single(x => x.LOG_WRH_Shelf_ContentID == item.LOG_WRH_Shelf_ContentID);
                        returnItem.Price            = priceForAllProducts.SingleOrDefault(x => x.ProductID == item.Product_RefID);
                        returnItem.Article          = article;
                        returnItem.Supplier         = productsBySupplier.Where(x => x.ReceiptPosition_Product_RefID == item.Product_RefID).ToArray();
                        returnItem.TrackingInstance = trackingInstances[0];
                        returnItem.MSR = (productMst != null) ? productMst.MSR : 0.0;
                        returnItemList.Add(returnItem);
                    }
                }
                returnValue.Result.FullGridData = returnItemList.ToArray();
            }

            return(returnValue);

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

            #region Get Storage Places
            var filterCriteria = new P_L3WH_GSPfFC_1504()
            {
                WarehouseGroupID    = null,
                WarehouseID         = null,
                AreaID              = null,
                RackID              = null,
                UseShelfIDList      = false,
                ShelfIDs            = new Guid[] { Guid.Empty },
                UseProductIDList    = false,
                ProductIDs          = new Guid[] { Guid.Empty },
                BottomShelfQuantity = 1,
                TopShelfQuantity    = null,
                UseProductTrackingInstanceIDList = true,
                ProductTrackingInstanceIDs       = Parameter.ProductTrackingInstanceIdList,
                StartExpirationDate = null,
                EndExpirationDate   = null
            };

            var resultStoragePlaces = cls_Get_StoragePlaces_for_FilterCriteria.Invoke(Connection, Transaction, filterCriteria, securityTicket);
            if (resultStoragePlaces.Status != FR_Status.Success || resultStoragePlaces.Result == null || resultStoragePlaces.Result.Count() <= 0)
            {
                returnValue.Status = FR_Status.Error_Internal;
                returnValue.Result = new L6ED_GEDRSPDfPTI_1649[] { };
                return(returnValue);
            }
            #endregion

            #region Get Articles

            var parameterProductIds = new P_L3AR_GAfAL_0942();
            parameterProductIds.ProductID_List = resultStoragePlaces.Result.Select(rsp => rsp.Product_RefID).Distinct().ToArray <Guid>();
            var articles = new L3AR_GAfAL_0942[0];
            if (parameterProductIds.ProductID_List.Length != 0)
            {
                articles = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction, parameterProductIds, securityTicket).Result;
            }

            #endregion

            #region Set Result

            var groupingCriterias = resultStoragePlaces.Result.Select(i => new { ProductID = i.Product_RefID, BatchNumber = i.BatchNumber, ExpirationDate = i.ExpirationDate }).Distinct();

            var result = new List <L6ED_GEDRSPDfPTI_1649>();
            foreach (var groupingCriteria in groupingCriterias)
            {
                var trackingInstances = resultStoragePlaces.Result.Where(i => i.Product_RefID == groupingCriteria.ProductID && i.BatchNumber == groupingCriteria.BatchNumber && i.ExpirationDate == groupingCriteria.ExpirationDate).ToList();

                result.Add(new L6ED_GEDRSPDfPTI_1649()
                {
                    FakeID            = Guid.NewGuid(), //this is important, because we don't have unique criteria for id on Front
                    Article           = articles.FirstOrDefault(a => a.CMN_PRO_ProductID == groupingCriteria.ProductID),
                    BachNumber        = groupingCriteria.BatchNumber,
                    ExpiryDate        = groupingCriteria.ExpirationDate,
                    TrackingInstances = trackingInstances.Select(i => new L6ED_GEDRSPDfPTI_1649a()
                    {
                        ProductTrackingInstanceID = i.LOG_ProductTrackingInstanceID,
                        ReceiptPositionID         = Guid.Empty,
                        ShelfContentID            = i.LOG_WRH_Shelf_ContentID,
                        SupplierID         = Guid.Empty,
                        SupplierName       = "",
                        ReturnableQuantity = 10,
                        PricePerUnit       = 0
                    }).ToArray()
                });
            }
            returnValue.Result = result.ToArray();
            returnValue.Status = FR_Status.Success;
            #endregion

            return(returnValue);

            #endregion UserCode
        }