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

            //Put your code here
            if (Parameter.ShoppingCartID == Guid.Empty)
            {
                return(null);
            }

            returnValue.Result = new L6WS_GSCDfSCID_1458();

            #region ShoppingCart

            returnValue.Result.ShoppingCart = cls_Get_ShoppingCart_for_ShoppingCartID.Invoke(Connection, Transaction, new P_L6WS_GSCfSCID_1448()
            {
                ShoppingCartID = Parameter.ShoppingCartID
            }, securityTicket).Result;
            if (returnValue.Result.ShoppingCart == null)
            {
                return(null);
            }
            #endregion

            #region ShoppingCart_Notes

            returnValue.Result.ShoppingCart_Notes = cls_Get_ShoppingCart_Notes_for_ShoppingCartID.Invoke(Connection, Transaction, new P_L5AWSAR_GSCNfSC_1454()
            {
                ShoppingCartID = Parameter.ShoppingCartID
            }, securityTicket).Result.OrderBy(i => i.UpdatedOn).ToArray();

            #endregion

            #region Articles

            ORM_ORD_PRC_ShoppingCart_Product.Query shoppingCartProductsQuery = new ORM_ORD_PRC_ShoppingCart_Product.Query();
            shoppingCartProductsQuery.ORD_PRC_ShoppingCart_RefID = returnValue.Result.ShoppingCart.ORD_PRC_ShoppingCartID;
            shoppingCartProductsQuery.IsDeleted    = false;
            shoppingCartProductsQuery.IsCanceled   = false;
            shoppingCartProductsQuery.Tenant_RefID = securityTicket.TenantID;
            List <ORM_ORD_PRC_ShoppingCart_Product> productList = ORM_ORD_PRC_ShoppingCart_Product.Query.Search(Connection, Transaction, shoppingCartProductsQuery);

            List <Guid> articleIds = new List <Guid>();
            if (productList != null && productList.Count > 0)
            {
                articleIds.AddRange(productList.Select(i => i.CMN_PRO_Product_RefID));
            }

            List <L3AR_GAfAL_0942> articleInfos = new List <L3AR_GAfAL_0942>();

            if (articleIds.Count > 0)
            {
                articleInfos = cls_Get_Articles_for_ArticleList.Invoke(Connection, Transaction,
                                                                       new P_L3AR_GAfAL_0942()
                {
                    ProductID_List = articleIds.ToArray()
                }, securityTicket).Result.ToList();
            }


            List <L6WS_GSCDfSCID_1458_Product> products = new List <L6WS_GSCDfSCID_1458_Product>();
            L6WS_GSCDfSCID_1458_Product        product;
            L3AR_GAfAL_0942 articleInfo;
            double          taxRate = 0;
            #region ORM and Querie objects
            ORM_CMN_PRO_Product     orm_product;
            ORM_CMN_SLS_Price.Query priceQuery;
            ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query taxAssignmentQuery;
            ORM_ACC_TAX_Tax orm_tax;
            #endregion
            foreach (var productItem in productList)
            {
                #region check procurement order date and number
                if (returnValue.Result.OrderDate == null || returnValue.Result.OrderDate.Ticks == 0)
                {
                    ORM_ORD_PRC_ShoppingCart_2_ProcurementOrderPosition.Query shoppingCartOrderPositionQuery = new ORM_ORD_PRC_ShoppingCart_2_ProcurementOrderPosition.Query();
                    shoppingCartOrderPositionQuery.IsDeleted    = false;
                    shoppingCartOrderPositionQuery.Tenant_RefID = securityTicket.TenantID;
                    shoppingCartOrderPositionQuery.ORD_PRC_ShoppingCart_Product_RefID = productItem.ORD_PRC_ShoppingCart_ProductID;
                    List <ORM_ORD_PRC_ShoppingCart_2_ProcurementOrderPosition> shoppingCartOrderPositionList = ORM_ORD_PRC_ShoppingCart_2_ProcurementOrderPosition.Query.Search(Connection, Transaction, shoppingCartOrderPositionQuery);
                    foreach (var shoppingCartOrderPosition in shoppingCartOrderPositionList)
                    {
                        ORM_ORD_PRC_ProcurementOrder_Position procurementOrder_Position = new ORM_ORD_PRC_ProcurementOrder_Position();
                        var procurementOrder_PositionResult = procurementOrder_Position.Load(Connection, Transaction, shoppingCartOrderPosition.ORD_PRC_ProcurementOrder_Position_RefID);

                        if (procurementOrder_PositionResult.Status != FR_Status.Success || procurementOrder_Position.ORD_PRC_ProcurementOrder_PositionID == Guid.Empty)
                        {
                            continue;
                        }

                        ORM_ORD_PRC_ProcurementOrder_Header procurementOrder_Header = new ORM_ORD_PRC_ProcurementOrder_Header();
                        var procurementOrder_HeaderResult = procurementOrder_Header.Load(Connection, Transaction, procurementOrder_Position.ProcurementOrder_Header_RefID);

                        if (procurementOrder_HeaderResult.Status != FR_Status.Success || procurementOrder_Header.ORD_PRC_ProcurementOrder_HeaderID == Guid.Empty)
                        {
                            continue;
                        }

                        returnValue.Result.OrderDate   = procurementOrder_Header.ProcurementOrder_Date;
                        returnValue.Result.OrderNumber = procurementOrder_Header.ProcurementOrder_Number;
                        break;
                    }
                }
                #endregion

                #region get product
                orm_product = new ORM_CMN_PRO_Product();
                var productResult = orm_product.Load(Connection, Transaction, productItem.CMN_PRO_Product_RefID);
                if (productResult.Status != FR_Status.Success || orm_product.CMN_PRO_ProductID == Guid.Empty)
                {
                    continue;
                }
                #endregion

                #region get price
                ORM_CMN_PRO_SubscribedCatalog.Query catalogQuery = new ORM_CMN_PRO_SubscribedCatalog.Query();
                catalogQuery.Tenant_RefID = securityTicket.TenantID;
                catalogQuery.IsDeleted    = false;
                List <ORM_CMN_PRO_SubscribedCatalog> catalogList = ORM_CMN_PRO_SubscribedCatalog.Query.Search(Connection, Transaction, catalogQuery);

                priceQuery = new ORM_CMN_SLS_Price.Query();
                priceQuery.CMN_PRO_Product_RefID = orm_product.CMN_PRO_ProductID;
                priceQuery.Tenant_RefID          = securityTicket.TenantID;
                priceQuery.IsDeleted             = false;
                List <ORM_CMN_SLS_Price> prices = ORM_CMN_SLS_Price.Query.Search(Connection, Transaction, priceQuery);
                ORM_CMN_SLS_Price        price  = prices.Where(i => catalogList.Select(j => j.SubscribedCatalog_PricelistRelease_RefID).Contains(i.PricelistRelease_RefID)).FirstOrDefault();
                #endregion

                #region get taxes
                taxRate            = 0;
                taxAssignmentQuery = new ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query();
                taxAssignmentQuery.Product_RefID = orm_product.CMN_PRO_ProductID;
                taxAssignmentQuery.Tenant_RefID  = securityTicket.TenantID;
                taxAssignmentQuery.IsDeleted     = false;
                List <ORM_CMN_PRO_Product_SalesTaxAssignmnet> taxAssignmentList = ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query.Search(Connection, Transaction, taxAssignmentQuery);

                foreach (var taxAssignment in taxAssignmentList)
                {
                    orm_tax = new ORM_ACC_TAX_Tax();
                    var taxResult = orm_tax.Load(Connection, Transaction, taxAssignment.ApplicableSalesTax_RefID);
                    if (taxResult.Status == FR_Status.Success && orm_tax.ACC_TAX_TaxeID != Guid.Empty)
                    {
                        taxRate += orm_tax.TaxRate;
                    }
                }
                #endregion

                #region set product item
                product = new L6WS_GSCDfSCID_1458_Product();
                product.CMN_PRO_Product_RefID = orm_product.CMN_PRO_ProductID;
                product.PriceAmount           = price == null ? 0 : (price.PriceAmount == null ? 0 : Double.Parse(price.PriceAmount.ToString()));
                product.TaxRate           = taxRate;
                product.Quantity          = productItem.Quantity.ToString();
                product.IsProductCanceled = productItem.IsCanceled;
                if (!String.IsNullOrEmpty(productItem.Comment))
                {
                    string[] comments = productItem.Comment.Split('@');
                    if (comments.Length == 2)
                    {
                        product.ProductComment = comments[1];
                    }
                }
                product.IsProductReplacementAllowed = productItem.IsProductReplacementAllowed;

                articleInfo = articleInfos.FirstOrDefault(i => i.CMN_PRO_ProductID == orm_product.CMN_PRO_ProductID);
                if (articleInfo != null)
                {
                    product.Product_Name    = articleInfo.Product_Name;
                    product.Product_Number  = articleInfo.Product_Number;
                    product.UnitAmount      = articleInfo.UnitAmount.ToString();
                    product.UnitIsoCode     = articleInfo.UnitIsoCode;
                    product.DossageFormName = articleInfo.DossageFormName;
                }
                #endregion

                products.Add(product);
            }

            returnValue.Result.Products = products.ToArray();

            #endregion

            #region Person info
            // current user
            ORM_CMN_PER_PersonInfo_2_Account.Query accountQuery = new ORM_CMN_PER_PersonInfo_2_Account.Query();
            accountQuery.USR_Account_RefID = securityTicket.AccountID;
            accountQuery.Tenant_RefID      = securityTicket.TenantID;
            accountQuery.IsDeleted         = false;
            ORM_CMN_PER_PersonInfo_2_Account account = ORM_CMN_PER_PersonInfo_2_Account.Query.Search(Connection, Transaction, accountQuery).FirstOrDefault();

            if (account != null)
            {
                ORM_CMN_PER_PersonInfo personInfo = new ORM_CMN_PER_PersonInfo();
                var personInfoResult = personInfo.Load(Connection, Transaction, account.CMN_PER_PersonInfo_RefID);
                if (personInfoResult.Status == FR_Status.Success && personInfo.CMN_PER_PersonInfoID != Guid.Empty)
                {
                    returnValue.Result.CurrentUser = personInfo.FirstName + " " + personInfo.LastName;
                }
            }

            #region Approved by user

            ORM_ORD_PRC_ShoppingCart_Status.Query stusesQuery = new ORM_ORD_PRC_ShoppingCart_Status.Query();
            stusesQuery.Tenant_RefID = securityTicket.TenantID;
            stusesQuery.IsDeleted    = false;
            List <ORM_ORD_PRC_ShoppingCart_Status> statuses       = ORM_ORD_PRC_ShoppingCart_Status.Query.Search(Connection, Transaction, stusesQuery);
            ORM_ORD_PRC_ShoppingCart_Status        approvedStatus = statuses.FirstOrDefault(i => i.GlobalPropertyMatchingID.Contains("approved"));

            if (approvedStatus != null)
            {
                ORM_ORD_PRC_ShoppingCartStatus_History.Query statusHistoryQuery = new ORM_ORD_PRC_ShoppingCartStatus_History.Query();
                statusHistoryQuery.Tenant_RefID = securityTicket.TenantID;
                statusHistoryQuery.IsDeleted    = false;
                statusHistoryQuery.ORD_PRC_ShoppingCart_RefID        = returnValue.Result.ShoppingCart.ORD_PRC_ShoppingCartID;
                statusHistoryQuery.ORD_PRC_ShoppingCart_Status_RefID = approvedStatus.ORD_PRC_ShoppingCart_StatusID;
                ORM_ORD_PRC_ShoppingCartStatus_History statusHistory = ORM_ORD_PRC_ShoppingCartStatus_History.Query.Search(Connection, Transaction, statusHistoryQuery).FirstOrDefault();
                if (statusHistory != null)
                {
                    accountQuery = new ORM_CMN_PER_PersonInfo_2_Account.Query();
                    accountQuery.USR_Account_RefID = statusHistory.PerformedBy_Account_RefID;
                    accountQuery.Tenant_RefID      = securityTicket.TenantID;
                    accountQuery.IsDeleted         = false;
                    account = ORM_CMN_PER_PersonInfo_2_Account.Query.Search(Connection, Transaction, accountQuery).FirstOrDefault();

                    if (account != null)
                    {
                        ORM_CMN_PER_PersonInfo personInfo = new ORM_CMN_PER_PersonInfo();
                        var personInfoResult = personInfo.Load(Connection, Transaction, account.CMN_PER_PersonInfo_RefID);
                        if (personInfoResult.Status == FR_Status.Success && personInfo.CMN_PER_PersonInfoID != Guid.Empty)
                        {
                            returnValue.Result.ApprovedByUser = personInfo.FirstName + " " + personInfo.LastName;
                            returnValue.Result.DateOfApproval = statusHistory.Creation_Timestamp;
                        }
                    }
                }
            }

            #endregion

            #endregion

            return(returnValue);

            #endregion UserCode
        }
示例#2
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5AR_SA_1525 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();

            var languageQuery = new ORM_CMN_Language.Query();
            languageQuery.Tenant_RefID = securityTicket.TenantID;
            languageQuery.IsDeleted    = false;

            var languages = ORM_CMN_Language.Query.Search(Connection, Transaction, languageQuery);

            var product = new ORM_CMN_PRO_Product();

            if (Parameter.ArticleID == Guid.Empty)
            {
                #region ORM_CMN_PRO_Product

                product = new ORM_CMN_PRO_Product();
                product.CMN_PRO_ProductID = Guid.NewGuid();
                product.ProductITL        = Guid.NewGuid().ToString();

                product.IsProduct_Article             = true;
                product.IsProductAvailableForOrdering = true;
                product.IsImportedFromExternalCatalog = false;

                product.Product_Name        = new Dict(ORM_CMN_PRO_Product.TableName);
                product.Product_Description = new Dict(ORM_CMN_PRO_Product.TableName);

                product.PackageInfo_RefID = Guid.NewGuid();

                product.Creation_Timestamp = DateTime.Now;
                product.Tenant_RefID       = securityTicket.TenantID;

                product.Save(Connection, Transaction);

                #endregion

                #region CustomArticles Group

                var customerArticlesGroupID = Guid.Empty;

                var customArticlesGlobalMatching = EnumUtils.GetEnumDescription(EProductGroup.CustomArticles);

                var customerArticlesGroup = ORM_CMN_PRO_ProductGroup.Query.Search(Connection, Transaction, new ORM_CMN_PRO_ProductGroup.Query()
                {
                    GlobalPropertyMatchingID = customArticlesGlobalMatching,
                    IsDeleted    = false,
                    Tenant_RefID = securityTicket.TenantID
                });

                if (customerArticlesGroup == null || customerArticlesGroup.Count() == 0)
                {
                    var group = new ORM_CMN_PRO_ProductGroup();
                    group.CMN_PRO_ProductGroupID   = Guid.NewGuid();
                    group.GlobalPropertyMatchingID = customArticlesGlobalMatching;
                    group.ProductGroup_Name        = new Dict(ORM_CMN_PRO_ProductGroup.TableName);
                    foreach (var language in languages)
                    {
                        group.ProductGroup_Name.AddEntry(language.CMN_LanguageID, "Custom Articles");
                    }
                    group.ProductGroup_Description = new Dict(ORM_CMN_PRO_ProductGroup.TableName);
                    group.IsDeleted          = false;
                    group.Creation_Timestamp = DateTime.Now;
                    group.Tenant_RefID       = securityTicket.TenantID;
                    group.Save(Connection, Transaction);

                    customerArticlesGroupID = group.CMN_PRO_ProductGroupID;
                }
                else
                {
                    customerArticlesGroupID = customerArticlesGroup.Single().CMN_PRO_ProductGroupID;
                }

                var product2Group = new ORM_CMN_PRO_Product_2_ProductGroup();
                product2Group.AssignmentID               = Guid.NewGuid();
                product2Group.CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID;
                product2Group.CMN_PRO_ProductGroup_RefID = customerArticlesGroupID;
                product2Group.Creation_Timestamp         = DateTime.Now;
                product2Group.Tenant_RefID               = securityTicket.TenantID;
                product2Group.Save(Connection, Transaction);

                #endregion
            }
            else
            {
                product.Load(Connection, Transaction, Parameter.ArticleID);
            }

            #region ORM_CMN_PRO_Product

            product.Product_Number = Parameter.PZN;

            foreach (var language in languages)
            {
                product.Product_Name.UpdateEntry(language.CMN_LanguageID, Parameter.ArticleName);
            }

            foreach (var language in languages)
            {
                product.Product_Description.UpdateEntry(language.CMN_LanguageID, Parameter.Notice);
            }

            product.DefaultStorageTemperature_min_in_kelvin = Parameter.StorageTemperatureFrom_in_kelvin;
            product.DefaultStorageTemperature_max_in_kelvin = Parameter.StorageTemperatureTo_in_kelvin;
            product.DefaultExpirationPeriod_in_sec          = Parameter.Expiring_in_seconds;

            product.ProductType_RefID = Parameter.ArticleType_RefID;

            product.IsPlaceholderArticle = Parameter.IsDummy;

            product.IsStorage_CoolingRequired      = Parameter.IsStorage_CoolingRequired;
            product.IsStorage_BatchNumberMandatory = Parameter.IsStorage_BatchNumberMandatory;
            product.IsStorage_ExpiryDateMandatory  = Parameter.IsStorage_ExpiryDateMandatory;
            product.IsProductPartOfDefaultStock    = Parameter.IsProduct_PartOfDefaultStock;

            var xml = new ProductAdditionalInfoXML()
            {
                IsPharmacyOnlyDistribution = Parameter.IsProduct_PharmacyOnlyDistribution
            };
            product.ProductAdditionalInfoXML = xml.ToPayload();

            product.ProductSuccessor_RefID = Parameter.ProductSuccessor_RefID;

            product.Save(Connection, Transaction);

            #endregion

            #region ORM_HEC_Product

            var query = new ORM_HEC_Product.Query();
            query.Ext_PRO_Product_RefID = product.CMN_PRO_ProductID;
            query.IsDeleted             = false;
            query.Tenant_RefID          = securityTicket.TenantID;

            var hecProduct = ORM_HEC_Product.Query.Search(Connection, Transaction, query).SingleOrDefault();
            if (hecProduct == null)
            {
                hecProduct = new ORM_HEC_Product();
                hecProduct.HEC_ProductID         = Guid.NewGuid();
                hecProduct.Ext_PRO_Product_RefID = product.CMN_PRO_ProductID;
                hecProduct.Creation_Timestamp    = DateTime.Now;
                hecProduct.Tenant_RefID          = securityTicket.TenantID;
            }
            hecProduct.ProductDosageForm_RefID = Parameter.DosageForm_RefID;
            hecProduct.IsProduct_AddictiveDrug = Parameter.IsProduct_AddictiveDrug;
            hecProduct.Save(Connection, Transaction);

            #endregion

            #region ORM_CMN_PRO_Product_2_ProductGroup

            var groupQuery = new ORM_CMN_PRO_Product_2_ProductGroup.Query();
            groupQuery.CMN_PRO_Product_RefID = product.CMN_PRO_ProductID;
            groupQuery.IsDeleted             = false;
            groupQuery.Tenant_RefID          = securityTicket.TenantID;

            var alreadyPersistedGroups = ORM_CMN_PRO_Product_2_ProductGroup.Query.Search(Connection, Transaction, groupQuery);

            //delete removed groups
            foreach (var item in alreadyPersistedGroups)
            {
                var globalGroup = new ORM_CMN_PRO_ProductGroup();
                globalGroup.Load(Connection, Transaction, item.CMN_PRO_ProductGroup_RefID);

                if (!Parameter.ArticleGroup_RefIDs.Contains(item.CMN_PRO_ProductGroup_RefID) && String.IsNullOrEmpty(globalGroup.GlobalPropertyMatchingID))
                {
                    item.IsDeleted = true;
                    item.Save(Connection, Transaction);
                }
            }

            //add new groups
            foreach (var groupID in Parameter.ArticleGroup_RefIDs)
            {
                if (!alreadyPersistedGroups.Select(i => i.CMN_PRO_ProductGroup_RefID).Contains(groupID))
                {
                    var group = new ORM_CMN_PRO_Product_2_ProductGroup();
                    group.AssignmentID               = Guid.NewGuid();
                    group.CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID;
                    group.CMN_PRO_ProductGroup_RefID = groupID;
                    group.Creation_Timestamp         = DateTime.Now;
                    group.Tenant_RefID               = securityTicket.TenantID;
                    group.Save(Connection, Transaction);
                }
            }

            #endregion

            #region ORM_CMN_PRO_Product_SalesTaxAssignmnet

            var salesTaxQuery = new ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query();
            salesTaxQuery.Product_RefID = product.CMN_PRO_ProductID;
            salesTaxQuery.IsDeleted     = false;
            salesTaxQuery.Tenant_RefID  = securityTicket.TenantID;

            var salesTax = ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query.Search(Connection, Transaction, salesTaxQuery).SingleOrDefault();
            if (salesTax == null)
            {
                salesTax = new ORM_CMN_PRO_Product_SalesTaxAssignmnet();
                salesTax.CMN_PRO_Product_SalesTaxAssignmnetID = Guid.NewGuid();
                salesTax.Product_RefID      = product.CMN_PRO_ProductID;
                salesTax.Creation_Timestamp = DateTime.Now;
                salesTax.Tenant_RefID       = securityTicket.TenantID;
            }
            salesTax.ApplicableSalesTax_RefID = Parameter.VAT_RefID;
            salesTax.Save(Connection, Transaction);

            #endregion

            #region ORM_CMN_PRO_Product_2_ProductCode

            var product2CodeQuery = new ORM_CMN_PRO_Product_2_ProductCode.Query();
            product2CodeQuery.CMN_PRO_Product_RefID = product.CMN_PRO_ProductID;
            product2CodeQuery.Tenant_RefID          = securityTicket.TenantID;
            product2CodeQuery.IsDeleted             = false;

            var productCodeAssignment = ORM_CMN_PRO_Product_2_ProductCode.Query.Search(Connection, Transaction, product2CodeQuery).SingleOrDefault();

            if (productCodeAssignment == null)
            {
                #region ORM_CMN_PRO_ProductCode

                //Get Product Code Type or create it if not exist
                var eanID = DMProductCodeTypes.Get_ProductCodeType_ByGlobalMatchingID(Connection, Transaction, EProductCodeType.EAN, securityTicket);

                var productCode = new ORM_CMN_PRO_ProductCode();
                productCode.CMN_PRO_ProductCodeID  = Guid.NewGuid();
                productCode.ProductCode_Type_RefID = eanID;
                productCode.ProductCode_Value      = Parameter.EAN;
                productCode.Creation_Timestamp     = DateTime.Now;
                productCode.Tenant_RefID           = securityTicket.TenantID;
                productCode.Save(Connection, Transaction);

                #endregion

                #region ORM_CMN_PRO_Product_2_ProductCode

                var product2Code = new ORM_CMN_PRO_Product_2_ProductCode();
                product2Code.AssignmentID              = Guid.NewGuid();
                product2Code.CMN_PRO_Product_RefID     = product.CMN_PRO_ProductID;
                product2Code.CMN_PRO_ProductCode_RefID = productCode.CMN_PRO_ProductCodeID;
                product2Code.Creation_Timestamp        = DateTime.Now;
                product2Code.Tenant_RefID              = securityTicket.TenantID;
                product2Code.Save(Connection, Transaction);

                #endregion
            }
            else
            {
                #region ORM_CMN_PRO_ProductCode

                var productCode = new ORM_CMN_PRO_ProductCode();
                productCode.Load(Connection, Transaction, productCodeAssignment.CMN_PRO_ProductCode_RefID);
                productCode.ProductCode_Value = Parameter.EAN;
                productCode.Save(Connection, Transaction);

                #endregion
            }

            #endregion

            #region ORM_CMN_PRO_PackageInfo

            var packageInfo = new ORM_CMN_PRO_PAC_PackageInfo();
            packageInfo.Load(Connection, Transaction, product.PackageInfo_RefID);
            if (packageInfo.CMN_PRO_PAC_PackageInfoID == Guid.Empty)
            {
                packageInfo = new ORM_CMN_PRO_PAC_PackageInfo();
                packageInfo.CMN_PRO_PAC_PackageInfoID = product.PackageInfo_RefID;
                packageInfo.Creation_Timestamp        = DateTime.Now;
                packageInfo.Tenant_RefID = securityTicket.TenantID;
            }
            packageInfo.PackageContent_Amount               = PackageAmountUtils.GetPackageAmount(Parameter.UnitAmount);
            packageInfo.PackageContent_DisplayLabel         = Parameter.UnitAmount;
            packageInfo.PackageContent_MeasuredInUnit_RefID = Parameter.Unit_RefID;
            packageInfo.Save(Connection, Transaction);

            #endregion

            #region Producer

            var producer = new ORM_CMN_BPT_BusinessParticipant();
            producer.Load(Connection, Transaction, product.ProducingBusinessParticipant_RefID);
            if (producer.CMN_BPT_BusinessParticipantID == Guid.Empty)
            {
                producer.CMN_BPT_BusinessParticipantID = Guid.NewGuid();
                producer.IsCompany          = true;
                producer.Tenant_RefID       = securityTicket.TenantID;
                producer.Creation_Timestamp = DateTime.Now;

                product.ProducingBusinessParticipant_RefID = producer.CMN_BPT_BusinessParticipantID;
                product.Save(Connection, Transaction);
            }
            producer.DisplayName = Parameter.Producer;
            producer.Save(Connection, Transaction);

            #endregion

            returnValue.Result = product.CMN_PRO_ProductID;
            return(returnValue);

            #endregion UserCode
        }