Пример #1
0
        protected static FR_Bool Execute(DbConnection Connection, DbTransaction Transaction, P_L5AR_UAIDSF_1056 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Bool();

            var product = new ORM_CMN_PRO_Product();
            var result  = product.Load(Connection, Transaction, Parameter.ProductID);
            if (result.Status != FR_Status.Success)
            {
                returnValue.Result = false;
                returnValue.Status = FR_Status.Error_Internal;
                return(returnValue);
            }

            product.IsProductPartOfDefaultStock = Parameter.IsProductPartOfDefaultStock;
            result = product.Save(Connection, Transaction);
            if (result.Status != FR_Status.Success)
            {
                returnValue.Result = false;
                returnValue.Status = FR_Status.Error_Internal;
                return(returnValue);
            }

            returnValue.Status = FR_Status.Success;
            returnValue.Result = true;

            return(returnValue);

            #endregion UserCode
        }
Пример #2
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5DA_CDAtA_1238 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here

            var article      = new ORM_CMN_PRO_Product();
            var dummyArticle = new ORM_CMN_PRO_Product();

            var result = article.Load(Connection, Transaction, Parameter.CMN_PRO_ProductID);
            if (result.Status != FR_Status.Success || article.CMN_PRO_ProductID == Guid.Empty)
            {
                var error = new FR_Guid();
                error.ErrorMessage = "No Such ID";
                error.Status       = FR_Status.Error_Internal;
                return(error);
            }

            var result2 = dummyArticle.Load(Connection, Transaction, Parameter.Dummy_ProductID);
            if (result.Status != FR_Status.Success || dummyArticle.CMN_PRO_ProductID == Guid.Empty)
            {
                var error = new FR_Guid();
                error.ErrorMessage = "No Such ID";
                error.Status       = FR_Status.Error_Internal;
                return(error);
            }

            article.IsPlaceholderArticle      = true;
            dummyArticle.IsPlaceholderArticle = false;
            dummyArticle.Save(Connection, Transaction);
            return(new FR_Guid(article.Save(Connection, Transaction), article.CMN_PRO_ProductID));

            #endregion UserCode
        }
Пример #3
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L3MP_DP_1145 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Guid();

            ORM_CMN_PRO_Product item = new ORM_CMN_PRO_Product();

            var result = item.Load(Connection, Transaction, Parameter.CMN_PRO_ProductID);
            if (result.Status != FR_Status.Success)
            {
                var error = new FR_Guid();
                error.ErrorMessage = "No Such ID";
                error.Status       = FR_Status.Error_Internal;
                return(error);
            }


            /**********************Delete Hec_Product***********************************/
            var hecProductQuery = new ORM_HEC_Product.Query();
            hecProductQuery.Ext_PRO_Product_RefID = Parameter.CMN_PRO_ProductID;
            hecProductQuery.IsDeleted             = false;

            var medProduct = ORM_HEC_Product.Query.Search(Connection, Transaction, hecProductQuery).FirstOrDefault();

            if (medProduct != null)
            {
                medProduct.IsDeleted = true;
                medProduct.Save(Connection, Transaction);
            }

            /**********************Delete Surveys***************************************/

            var surveysQuery = new ORM_CMN_PRO_Product_Questionnaire_Assignment.Query();
            surveysQuery.CMN_PRO_Product_RefID = Parameter.CMN_PRO_ProductID;
            surveysQuery.IsDeleted             = false;

            var surveyes = ORM_CMN_PRO_Product_Questionnaire_Assignment.Query.Search(Connection, Transaction, surveysQuery).ToList();

            if (surveyes.Count != 0)
            {
                foreach (var survey in surveyes)
                {
                    survey.IsDeleted = true;
                    survey.Save(Connection, Transaction);
                }
            }

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


            return(returnValue);

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

            var article = new ORM_CMN_PRO_Product();
            article.Load(Connection, Transaction, Parameter.CMN_PRO_ProductID);

            var dummyArticle = new ORM_CMN_PRO_Product();
            dummyArticle.Load(Connection, Transaction, Parameter.Dummy_ProductID);

            dummyArticle.ProductSuccessor_RefID = article.CMN_PRO_ProductID;
            dummyArticle.Save(Connection, Transaction);
            return(new FR_Guid(article.Save(Connection, Transaction), article.CMN_PRO_ProductID));

            #endregion UserCode
        }
Пример #5
0
        private static List <L5CA_GACPfR_1621> ProductWithoutPrices(DbConnection Connection, DbTransaction Transaction, P_L5CA_PNCV_1520 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket, List <ORM_CMN_PRO_Catalog_Product> oldProducts)
        {
            List <L5CA_GACPfR_1621> products = new List <L5CA_GACPfR_1621>();
            L5CA_GACPfR_1621        product;

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

            foreach (var item in oldProducts)
            {
                if (insertedProducts.Any(i => i == item.CMN_PRO_Product_RefID))
                {
                    continue;
                }

                insertedProducts.Add(item.CMN_PRO_Product_RefID);

                ORM_CMN_SLS_Pricelist_Release plr = new ORM_CMN_SLS_Pricelist_Release();
                plr.Load(Connection, Transaction, Parameter.Default_PricelistRelease_RefID);

                var pricelistPriceQry = new ORM_CMN_SLS_Price.Query()
                {
                    CMN_PRO_Product_RefID  = item.CMN_PRO_Product_RefID,
                    PricelistRelease_RefID = plr.CMN_SLS_Pricelist_ReleaseID,
                    IsDeleted    = false,
                    Tenant_RefID = securityTicket.TenantID
                };

                var prices = ORM_CMN_SLS_Price.Query.Search(Connection, Transaction, pricelistPriceQry);
                if (prices.Count == 0)
                {
                    ORM_CMN_PRO_Product pr = new ORM_CMN_PRO_Product();
                    pr.Load(Connection, Transaction, item.CMN_PRO_Product_RefID);

                    product = new L5CA_GACPfR_1621();
                    product.Product_Number      = pr.Product_Number;
                    product.Product_Name        = pr.Product_Name;
                    product.Product_Description = pr.Product_Description;

                    products.Add(product);
                }
            }

            return(products);
        }
Пример #6
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5PR_SP_1614 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.ProductID == Guid.Empty)
            {
                #region ORM_CMN_PRO_Product

                product = new ORM_CMN_PRO_Product();
                product.CMN_PRO_ProductID                    = Guid.NewGuid();
                product.ProductITL                           = String.Empty;
                product.IsCustomizable                       = Parameter.IsCustomizable;
                product.IsProduct_Article                    = true;
                product.IsProductAvailableForOrdering        = true;
                product.IsImportedFromExternalCatalog        = false;
                product.IsProductForInternalDistributionOnly = Parameter.IsProductForInternalDistribution;
                if (Parameter.CatalogRefID != null && Parameter.CatalogRefID != Guid.Empty)
                {
                    product.IfImportedFromExternalCatalog_CatalogSubscription_RefID = Parameter.CatalogRefID;
                }
                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.IsDeleted          = Parameter.IsDeleted;



                product.Save(Connection, Transaction);

                #endregion
            }
            else
            {
                product.Load(Connection, Transaction, Parameter.ProductID);
            }
            if (Parameter.Document_ID != null && Parameter.Document_ID != Guid.Empty)
            {
                ORM_DOC_Structure_Header structureHeader = new ORM_DOC_Structure_Header();
                if (Parameter.DocumentStructureHeaderID == Guid.Empty)
                {
                    structureHeader.Label        = "Product picture";
                    structureHeader.Tenant_RefID = securityTicket.TenantID;
                    structureHeader.Save(Connection, Transaction);
                    product.Product_DocumentationStructure_RefID = structureHeader.DOC_Structure_HeaderID;
                }
                ORM_DOC_Structure structure = new ORM_DOC_Structure();
                if (Parameter.DocumentStructureHeaderID == Guid.Empty)
                {
                    structure.Label = "Product picture";
                    structure.Structure_Header_RefID  = structureHeader.DOC_Structure_HeaderID;
                    structure.CreatedBy_Account_RefID = securityTicket.AccountID;
                    structure.Tenant_RefID            = securityTicket.TenantID;
                    structure.Save(Connection, Transaction);
                }
                ORM_DOC_Document document = new ORM_DOC_Document();
                document.DOC_DocumentID = Parameter.Document_ID;
                document.Tenant_RefID   = securityTicket.TenantID;
                document.Save(Connection, Transaction);
                var documentStructureID = structure.DOC_StructureID;
                var assignmentID        = Guid.Empty;
                List <ORM_DOC_Document_2_Structure> existingDocumentStructure = new List <ORM_DOC_Document_2_Structure>();
                if (Parameter.DocumentStructureHeaderID != Guid.Empty)
                {
                    existingDocumentStructure = ORM_DOC_Document_2_Structure.Query.Search(Connection, Transaction, new ORM_DOC_Document_2_Structure.Query()
                    {
                        StructureHeader_RefID = Parameter.DocumentStructureHeaderID
                    });
                }
                ORM_DOC_Document_2_Structure documentStructure = new ORM_DOC_Document_2_Structure();
                if (existingDocumentStructure != null && existingDocumentStructure.Count() > 0)
                {
                    existingDocumentStructure.First().Document_RefID = document.DOC_DocumentID;
                    existingDocumentStructure.First().Save(Connection, Transaction);
                }
                else
                {
                    documentStructure.Document_RefID        = document.DOC_DocumentID;
                    documentStructure.Structure_RefID       = documentStructureID;
                    documentStructure.StructureHeader_RefID = structure.Structure_Header_RefID;
                    documentStructure.Tenant_RefID          = securityTicket.TenantID;
                    documentStructure.Save(Connection, Transaction);
                }
            }

            #region ORM_CMN_PRO_Product

            product.Product_Number = Parameter.ProductNumber;

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

            product.ProductType_RefID = Guid.Empty;

            product.IsPlaceholderArticle   = Parameter.IsDummy;
            product.IsCustomizable         = Parameter.IsCustomizable;
            product.ProductSuccessor_RefID = Guid.Empty;
            product.IsDeleted = Parameter.IsDeleted;
            product.Save(Connection, Transaction);



            #endregion

            #region Variant
            //Create default varient
            var defaultVarient = new ORM_CMN_PRO_Product_Variant();
            defaultVarient.CMN_PRO_Product_VariantID = Guid.NewGuid();
            defaultVarient.CMN_PRO_Product_RefID     = product.CMN_PRO_ProductID;
            defaultVarient.IsStandardProductVariant  = true;
            defaultVarient.Tenant_RefID = securityTicket.TenantID;
            defaultVarient.VariantName  = new Dict(ORM_CMN_PRO_Product_Variant.TableName);


            foreach (var language in languages)
            {
                defaultVarient.VariantName.UpdateEntry(language.CMN_LanguageID, String.Empty);
            }

            defaultVarient.Save(Connection, Transaction);
            #endregion

            #region Customization
            if (Parameter.IsCustomizable == false && Parameter.ProductID != Guid.Empty)
            {
                var customizations = ORM_CMN_PRO_CUS_Customization.Query.Search(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization.Query()
                {
                    Product_RefID = Parameter.ProductID
                });
                foreach (var customization in customizations)
                {
                    ORM_CMN_PRO_CUS_Customization_Variant.Query.SoftDelete(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization_Variant.Query()
                    {
                        Customization_RefID = customization.CMN_PRO_CUS_CustomizationID
                    });
                }
                ORM_CMN_PRO_CUS_Customization.Query.SoftDelete(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization.Query()
                {
                    Product_RefID = Parameter.ProductID
                });
            }
            #endregion

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

            #endregion UserCode
        }
Пример #7
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_MC_SM_1132 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here

            //save new medication
            if (Parameter.MedicationID == Guid.Empty)
            {
                var hecProducts = new ORM_HEC_Product();
                hecProducts.IsDeleted              = false;
                hecProducts.Tenant_RefID           = securityTicket.TenantID;
                hecProducts.Creation_Timestamp     = DateTime.Now;
                hecProducts.Modification_Timestamp = DateTime.Now;
                hecProducts.Ext_PRO_Product_RefID  = Guid.NewGuid();
                hecProducts.Save(Connection, Transaction);

                var  DBLanguages     = cls_Get_All_Languages.Invoke(Connection, Transaction, securityTicket).Result.ToList();
                Dict ProductNameDict = new Dict(ORM_CMN_PRO_Product.TableName);
                for (int i = 0; i < DBLanguages.Count; i++)
                {
                    ProductNameDict.AddEntry(DBLanguages[i].CMN_LanguageID, Parameter.Medication);
                }

                var products = new ORM_CMN_PRO_Product();
                products.CMN_PRO_ProductID       = hecProducts.Ext_PRO_Product_RefID;
                products.IsDeleted               = false;
                products.Tenant_RefID            = securityTicket.TenantID;
                products.Creation_Timestamp      = DateTime.Now;
                products.Product_Name            = ProductNameDict;
                products.IsProducable_Internally = Parameter.ProprietaryDrug;
                products.Product_Number          = Parameter.PZNScheme;
                products.Save(Connection, Transaction);

                //dosage and unit!!!
            }
            else
            {
                //edit medication

                var medication = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product.Query()
                {
                    IsDeleted         = false,
                    Tenant_RefID      = securityTicket.TenantID,
                    CMN_PRO_ProductID = Parameter.MedicationID
                }).SingleOrDefault();
                if (medication != null)
                {
                    var  DBLanguages     = cls_Get_All_Languages.Invoke(Connection, Transaction, securityTicket).Result.ToList();
                    Dict ProductNameDict = new Dict(ORM_CMN_PRO_Product.TableName);
                    for (int i = 0; i < DBLanguages.Count; i++)
                    {
                        ProductNameDict.AddEntry(DBLanguages[i].CMN_LanguageID, Parameter.Medication);
                    }

                    medication.Modification_Timestamp  = DateTime.Now;
                    medication.Product_Name            = ProductNameDict;
                    medication.IsProducable_Internally = Parameter.ProprietaryDrug;
                    medication.Product_Number          = Parameter.PZNScheme;
                    medication.Save(Connection, Transaction);
                }
            }

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_L3PR_IoUPBD_1614_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L3PR_IoUPBD_1614 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_L3PR_IoUPBD_1614_Array();
            var result      = new List <L3PR_IoUPBD_1614>();

            //Put your code here

            #region Get All Producers for Tenant

            var allProducers = ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, new ORM_CMN_BPT_BusinessParticipant.Query()
            {
                Tenant_RefID = securityTicket.TenantID,
                IsDeleted    = false
            });

            #endregion

            #region Get Taxes For Default Country

            var taxesToImport = Parameter.Products.Select(i => i.VAT).Distinct();

            var param = new P_L3TX_STfDCaRR_1119();
            param.TaxRates = taxesToImport.ToArray();
            var allTaxes = cls_Save_Taxes_for_DefaultCountry_and_ReturnResult.Invoke(Connection, Transaction, param, securityTicket).Result;

            #endregion

            foreach (var item in Parameter.Products)
            {
                bool alreadyExistingInDB = true;

                #region ORM_CMN_PRO_Product
                var productQuery = new ORM_CMN_PRO_Product.Query();
                productQuery.ProductITL   = item.ProductITL;
                productQuery.Tenant_RefID = securityTicket.TenantID;
                productQuery.IsDeleted    = false;
                productQuery.IsProductAvailableForOrdering = true;

                var product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, productQuery).FirstOrDefault();

                if (product == null)
                {
                    product = new ORM_CMN_PRO_Product();
                    product.CMN_PRO_ProductID  = Guid.NewGuid();
                    product.ProductITL         = item.ProductITL;
                    product.PackageInfo_RefID  = Guid.NewGuid();
                    product.Creation_Timestamp = DateTime.Now;
                    product.Tenant_RefID       = securityTicket.TenantID;

                    alreadyExistingInDB = false;
                }

                product.Product_Name                  = item.Product_Name;
                product.Product_Description           = item.Product_Description;
                product.Product_Number                = item.Product_Number;
                product.IsProduct_Article             = true;
                product.IsProductAvailableForOrdering = true;

                #region Save Producer
                var producerBPT = allProducers.Where(i => i.DisplayName == item.Producer).FirstOrDefault();

                if (producerBPT == default(ORM_CMN_BPT_BusinessParticipant))
                {
                    producerBPT = new ORM_CMN_BPT_BusinessParticipant();
                    producerBPT.CMN_BPT_BusinessParticipantID = Guid.NewGuid();
                    producerBPT.DisplayName        = item.Producer;
                    producerBPT.IsCompany          = true;
                    producerBPT.Tenant_RefID       = securityTicket.TenantID;
                    producerBPT.Creation_Timestamp = DateTime.Now;
                    producerBPT.Save(Connection, Transaction);
                }

                #endregion

                product.ProducingBusinessParticipant_RefID = producerBPT.CMN_BPT_BusinessParticipantID;
                product.Save(Connection, Transaction);
                #endregion

                #region Unit
                //Unit could be used for multiple products, there is no sense to edit unit
                //If there is need to change unit, we should find unit with that iso code and change reference

                var unitsQuery = new ORM_CMN_Unit.Query();
                unitsQuery.Tenant_RefID = securityTicket.TenantID;
                unitsQuery.ISOCode      = item.MeasuredInUnit_ISO_um_ums;
                unitsQuery.IsDeleted    = false;

                var measuredInUnit = ORM_CMN_Unit.Query.Search(Connection, Transaction, unitsQuery).FirstOrDefault();
                if (measuredInUnit == null)
                {
                    measuredInUnit = new ORM_CMN_Unit();
                    measuredInUnit.Tenant_RefID       = securityTicket.TenantID;
                    measuredInUnit.Creation_Timestamp = DateTime.Now;
                    measuredInUnit.ISOCode            = item.MeasuredInUnit_ISO_um_ums;
                    measuredInUnit.CMN_UnitID         = Guid.NewGuid();
                    measuredInUnit.Save(Connection, Transaction);
                }
                #endregion

                #region 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.CMN_PRO_PAC_PackageInfoID = product.PackageInfo_RefID;
                    packageInfo.Creation_Timestamp        = DateTime.Now;
                    packageInfo.Tenant_RefID = securityTicket.TenantID;
                }
                packageInfo.PackageContent_DisplayLabel         = item.Amount;
                packageInfo.PackageContent_Amount               = PackageAmountUtils.GetPackageAmount(item.Amount);
                packageInfo.PackageContent_MeasuredInUnit_RefID = measuredInUnit.CMN_UnitID;

                packageInfo.Save(Connection, Transaction);
                #endregion

                #region VAT
                var salesTax = ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query()
                {
                    Product_RefID = product.CMN_PRO_ProductID,
                    Tenant_RefID  = securityTicket.TenantID,
                    IsDeleted     = false
                }).FirstOrDefault();

                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 = allTaxes.Where(i => i.TaxRate == item.VAT).Select(j => j.TaxID).FirstOrDefault();
                salesTax.Save(Connection, Transaction);
                #endregion

                result.Add(new L3PR_IoUPBD_1614()
                {
                    ProductITL       = product.ProductITL,
                    ProductID        = product.CMN_PRO_ProductID,
                    IsAlreadyExisted = alreadyExistingInDB
                });
            }

            returnValue.Result = result.ToArray();
            return(returnValue);
        }
        protected static FR_L5PR_GPCaCV_1310 Execute(DbConnection Connection, DbTransaction Transaction, P_L5PR_GPCaCV_1310 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_L5PR_GPCaCV_1310();
            returnValue.Result = new L5PR_GPCaCV_1310();


            ORM_CMN_PRO_Product product;
            List <ORM_CMN_PRO_CUS_Customization>         customizations        = new List <ORM_CMN_PRO_CUS_Customization>();
            List <ORM_CMN_PRO_CUS_Customization_Variant> customizationVariants = new List <ORM_CMN_PRO_CUS_Customization_Variant>();


            #region Check if product is customizable

            product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product.Query()
            {
                IsDeleted         = false,
                Tenant_RefID      = securityTicket.TenantID,
                CMN_PRO_ProductID = Parameter.ProductId,
                //IsCustomizable = true
            }).FirstOrDefault();

            if (product == null)
            {
                returnValue.Status       = FR_Status.Error_Internal;
                returnValue.ErrorMessage = String.Format("Product with ID = {0} is not customizable or does not exist in database!", Parameter.ProductId.ToString());
                return(returnValue);
            }

            #endregion

            ORM_CMN_PRO_ASS_AssortmentProduct assortmentProduct;

            #region Product is not part of an assortment

            // If product is not part of any assortment product,
            // then it is local product so take all customizations and customization variants for that product and return that as result.
            assortmentProduct = ORM_CMN_PRO_ASS_AssortmentProduct.Query.Search(Connection, Transaction, new ORM_CMN_PRO_ASS_AssortmentProduct.Query()
            {
                IsDeleted    = false,
                Tenant_RefID = securityTicket.TenantID,
                Ext_CMN_PRO_Product_RefID = product.CMN_PRO_ProductID
            }).FirstOrDefault();

            if (assortmentProduct == null)
            {
                #region Retrieve all customizations and values for product

                customizations = ORM_CMN_PRO_CUS_Customization.Query.Search(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization.Query()
                {
                    IsDeleted     = false,
                    Tenant_RefID  = securityTicket.TenantID,
                    Product_RefID = product.CMN_PRO_ProductID
                });

                foreach (var customization in customizations)
                {
                    List <ORM_CMN_PRO_CUS_Customization_Variant> variants = ORM_CMN_PRO_CUS_Customization_Variant.Query.Search(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization_Variant.Query()
                    {
                        IsDeleted           = false,
                        Tenant_RefID        = securityTicket.TenantID,
                        Customization_RefID = customization.CMN_PRO_CUS_CustomizationID
                    });
                    customizationVariants.AddRange(variants);
                }
                #endregion

                returnValue.Result.Customizations        = customizations.ToArray();
                returnValue.Result.CustomizationVariants = customizationVariants.ToArray();

                return(returnValue);
            }

            #endregion

            #region Product is part of an assortment

            // Find all assortment vendor products that are bound to it

            List <ORM_CMN_PRO_ASS_AssortmentProduct_VendorProduct> assortmentProductVendorProducts = ORM_CMN_PRO_ASS_AssortmentProduct_VendorProduct.Query.Search(Connection, Transaction, new ORM_CMN_PRO_ASS_AssortmentProduct_VendorProduct.Query()
            {
                IsDeleted    = false,
                Tenant_RefID = securityTicket.TenantID,
                CMN_PRO_ASS_AssortmentProduct_RefID = assortmentProduct.CMN_PRO_ASS_AssortmentProductID
            });

            // Check if there is customization for each asortment product vendor product

            int         numberOfBoundProductsThatHaveCustomizations = 0;
            List <Guid> boundProductIds = new List <Guid>();
            foreach (var assortmentProductVendorProduct in assortmentProductVendorProducts)
            {
                ORM_CMN_PRO_Product vendorProduct = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product.Query()
                {
                    IsDeleted         = false,
                    Tenant_RefID      = securityTicket.TenantID,
                    CMN_PRO_ProductID = assortmentProductVendorProduct.CMN_PRO_Product_RefID,
                    IsCustomizable    = true
                }).FirstOrDefault();

                if (vendorProduct == null)
                {
                    continue;
                }

                bool hasCustomizations = ORM_CMN_PRO_CUS_Customization.Query.Exists(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization.Query()
                {
                    IsDeleted     = false,
                    Tenant_RefID  = securityTicket.TenantID,
                    Product_RefID = vendorProduct.CMN_PRO_ProductID
                });

                if (hasCustomizations)
                {
                    numberOfBoundProductsThatHaveCustomizations++;
                    boundProductIds.Add(vendorProduct.CMN_PRO_ProductID);
                }
            }


            if (numberOfBoundProductsThatHaveCustomizations == 0)
            {
                // Nothing!
            }
            else if (numberOfBoundProductsThatHaveCustomizations == 1)
            {
                #region Retrieve all customizations and values for product

                customizations = ORM_CMN_PRO_CUS_Customization.Query.Search(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization.Query()
                {
                    IsDeleted     = false,
                    Tenant_RefID  = securityTicket.TenantID,
                    Product_RefID = boundProductIds[0]
                });

                foreach (var customization in customizations)
                {
                    List <ORM_CMN_PRO_CUS_Customization_Variant> variants = ORM_CMN_PRO_CUS_Customization_Variant.Query.Search(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization_Variant.Query()
                    {
                        IsDeleted           = false,
                        Tenant_RefID        = securityTicket.TenantID,
                        Customization_RefID = customization.CMN_PRO_CUS_CustomizationID
                    });
                    customizationVariants.AddRange(variants);
                }

                #endregion
            }
            else
            {
                #region More then one product that is bound to assortment product has variants

                ORM_CMN_PRO_ASS_AssortmentVariant assortmentProductVariant = ORM_CMN_PRO_ASS_AssortmentVariant.Query.Search(Connection, Transaction, new ORM_CMN_PRO_ASS_AssortmentVariant.Query()
                {
                    IsDeleted    = false,
                    Tenant_RefID = securityTicket.TenantID,
                    Ext_CMN_PRO_Product_Variant_RefID = Parameter.ProductVariantId
                }).FirstOrDefault();

                if (assortmentProductVariant != null)
                {
                    List <ORM_CMN_PRO_ASS_AssortmentVariant_VendorVariant> assortmentVariantVendorVariants = ORM_CMN_PRO_ASS_AssortmentVariant_VendorVariant.Query.Search(Connection, Transaction, new ORM_CMN_PRO_ASS_AssortmentVariant_VendorVariant.Query()
                    {
                        IsDeleted    = false,
                        Tenant_RefID = securityTicket.TenantID,
                        CMN_PRO_ASS_AssortmentVariant_RefID = assortmentProductVariant.CMN_PRO_ASS_AssortmentVariantID
                    });

                    ORM_CMN_PRO_ASS_AssortmentVariant_VendorVariant defaultAssortmentVariantVendorVariant = assortmentVariantVendorVariants.FirstOrDefault(x => x.IsDefaultVendorVariant == true);
                    if (defaultAssortmentVariantVendorVariant == null)
                    {
                        defaultAssortmentVariantVendorVariant = assortmentVariantVendorVariants.OrderBy(x => x.OrderSequence).FirstOrDefault();
                    }

                    if (defaultAssortmentVariantVendorVariant != null)
                    {
                        ORM_CMN_PRO_Product_Variant productVariant = ORM_CMN_PRO_Product_Variant.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product_Variant.Query()
                        {
                            IsDeleted    = false,
                            Tenant_RefID = securityTicket.TenantID,
                            CMN_PRO_Product_VariantID = defaultAssortmentVariantVendorVariant.CMN_PRO_Product_Variant_RefID
                        }).FirstOrDefault();

                        if (productVariant != null)
                        {
                            product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product.Query()
                            {
                                IsDeleted         = false,
                                Tenant_RefID      = securityTicket.TenantID,
                                CMN_PRO_ProductID = productVariant.CMN_PRO_Product_RefID
                            }).FirstOrDefault();

                            if (product != null)
                            {
                                customizations = ORM_CMN_PRO_CUS_Customization.Query.Search(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization.Query()
                                {
                                    IsDeleted     = false,
                                    Tenant_RefID  = securityTicket.TenantID,
                                    Product_RefID = product.CMN_PRO_ProductID
                                });

                                foreach (var customization in customizations)
                                {
                                    List <ORM_CMN_PRO_CUS_Customization_Variant> variants = ORM_CMN_PRO_CUS_Customization_Variant.Query.Search(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization_Variant.Query()
                                    {
                                        IsDeleted           = false,
                                        Tenant_RefID        = securityTicket.TenantID,
                                        Customization_RefID = customization.CMN_PRO_CUS_CustomizationID
                                    });
                                    customizationVariants.AddRange(variants);
                                }
                            }
                        }
                    }
                }

                #endregion
            }


            #endregion

            returnValue.Result.Customizations        = customizations.ToArray();
            returnValue.Result.CustomizationVariants = customizationVariants.ToArray();
            return(returnValue);

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

            var supplier = cls_Get_Suppliers_for_PrivateSubscribedCatalogs.Invoke(Connection, Transaction, securityTicket).Result.FirstOrDefault();

            #region Get All OrganizationalUnits

            //TODO: This is quick and dirty solution, remove it as soon as SLorenz remove MaveFile

            var organizationalUnits = ORM_CMN_BPT_CTM_OrganizationalUnit.Query.Search(Connection, Transaction, new ORM_CMN_BPT_CTM_OrganizationalUnit.Query()
            {
                Tenant_RefID = Guid.Parse(supplier.TenantITL)
            });

            #endregion

            var paramShoppingProducts = new P_L5PO_GPPaSCIfH_1750();
            paramShoppingProducts.ProcurementOrderHeaderID = Parameter.ProcurementHeaderID;
            var shoppingCartProcurementPositions = cls_Get_ProcurementPositions_and_ShoppingCartInfo_for_HeaderID.Invoke(Connection, Transaction, paramShoppingProducts, securityTicket)
                                                   .Result.OrderBy(x => x.ORD_PRC_ShoppingCart_RefID);

            var maveResults = new List <L6SH_GMDfPH_0500>();

            var procurementHeader = new ORM_ORD_PRC_ProcurementOrder_Header();
            procurementHeader.Load(Connection, Transaction, Parameter.ProcurementHeaderID);

            var previousShoppingCartID = Guid.Empty;
            var currentShoppingCart    = new ORM_ORD_PRC_ShoppingCart();

            var accountsForTenant = cls_Get_AllDisplayNames_of_Accounts_for_TenantID.Invoke(Connection, Transaction, securityTicket).Result;

            foreach (var shoppingCartProcurementPosition in shoppingCartProcurementPositions)
            {
                var maveResult = new L6SH_GMDfPH_0500();

                var currentProduct = new ORM_CMN_PRO_Product();
                currentProduct.Load(Connection, Transaction, shoppingCartProcurementPosition.CMN_PRO_Product_RefID);

                if (currentShoppingCart.ORD_PRC_ShoppingCartID == Guid.Empty || shoppingCartProcurementPosition.ORD_PRC_ShoppingCart_RefID != previousShoppingCartID)
                {
                    currentShoppingCart.Load(Connection, Transaction, shoppingCartProcurementPosition.ORD_PRC_ShoppingCart_RefID);
                }

                var userThatApproved = accountsForTenant.FirstOrDefault(x => x.USR_AccountID == currentShoppingCart.CreatedBy_Account_RefID);

                #region Add ShoppingCart Position

                //TODO: This is quick and dirty solution, remove it as soon as SLorenz remove MaveFile
                var organizationalUnit = organizationalUnits.Where(i => i.CustomerTenant_OfficeITL == shoppingCartProcurementPosition.CMN_STR_OfficeID.ToString()).Single();

                maveResult.CustomerNumber             = supplier.ExternalSupplierProvidedIdentifier;
                maveResult.OrgUnitNumber              = organizationalUnit.InternalOrganizationalUnitNumber;
                maveResult.OrderDateTime              = procurementHeader.ProcurementOrder_Date;
                maveResult.PriceOfAllPositionsOverAll = procurementHeader.TotalValue_BeforeTax;
                maveResult.PZNorTXT             = currentProduct.Product_Number;
                maveResult.UserThatApproved     = userThatApproved.DisplayName;
                maveResult.OrderQuantity        = Convert.ToInt32(shoppingCartProcurementPosition.Position_Quantity);
                maveResult.PositionPricePerUnit = shoppingCartProcurementPosition.Position_ValuePerUnit;
                maveResult.Comment          = string.Empty;
                maveResult.IncreasingNumber = "108384";

                maveResults.Add(maveResult);
                #endregion

                #region Add ShoppingCart Comment
                // get all comments for current shopping chart and do that just once!
                if (currentShoppingCart.ORD_PRC_ShoppingCartID != previousShoppingCartID)
                {
                    previousShoppingCartID = currentShoppingCart.ORD_PRC_ShoppingCartID;

                    var shoppingNoteParameter = new P_L5AWSAR_GSCNfSC_1454();
                    shoppingNoteParameter.ShoppingCartID = currentShoppingCart.ORD_PRC_ShoppingCartID;
                    var shoppingCartNotes = cls_Get_ShoppingCart_Notes_for_ShoppingCartID.Invoke(Connection, Transaction, shoppingNoteParameter, securityTicket).Result;

                    foreach (var note in shoppingCartNotes)
                    {
                        if (!note.IsNoteForProcurementOrder)
                        {
                            continue;
                        }

                        maveResult = new L6SH_GMDfPH_0500();

                        maveResult.CustomerNumber             = supplier.ExternalSupplierProvidedIdentifier;
                        maveResult.OrgUnitNumber              = organizationalUnit.InternalOrganizationalUnitNumber;
                        maveResult.OrderDateTime              = procurementHeader.ProcurementOrder_Date;
                        maveResult.PriceOfAllPositionsOverAll = procurementHeader.TotalValue_BeforeTax;
                        maveResult.PZNorTXT             = "TEXT";
                        maveResult.UserThatApproved     = userThatApproved.DisplayName;
                        maveResult.OrderQuantity        = 0;
                        maveResult.PositionPricePerUnit = 0;
                        maveResult.Comment          = note.Memo_Text;
                        maveResult.IncreasingNumber = "108384";

                        maveResults.Add(maveResult);
                    }
                }

                #endregion
            }


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

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

            var account = new ORM_USR_Account();
            account.Load(Connection, Transaction, securityTicket.AccountID);

            #region Update active catalog revision

            ORM_CMN_PRO_Catalog_Revision rev = new ORM_CMN_PRO_Catalog_Revision();
            rev.Load(Connection, Transaction, Parameter.CMN_PRO_Catalog_RevisionID);
            rev.Valid_From    = Parameter.Valid_From;
            rev.Valid_Through = Parameter.Valid_Through;
            rev.Default_PricelistRelease_RefID        = Parameter.Default_PricelistRelease_RefID;
            rev.PublishedBy_BusinessParticipant_RefID = account.BusinessParticipant_RefID;
            rev.PublishedOn_Date = DateTime.Now;

            rev.Save(Connection, Transaction);

            #endregion

            #region Create new catalog revision

            ORM_CMN_PRO_Catalog_Revision newRev = new ORM_CMN_PRO_Catalog_Revision();
            newRev.CMN_PRO_Catalog_RevisionID = Guid.NewGuid();
            newRev.CMN_PRO_Catalog_RefID      = rev.CMN_PRO_Catalog_RefID;
            newRev.Tenant_RefID                = securityTicket.TenantID;
            newRev.Creation_Timestamp          = DateTime.Now;
            newRev.CatalogRevision_Description = "Revision for Catalog";
            newRev.CatalogRevision_Name        = "New Catalog Revision";
            newRev.IsDeleted      = false;
            newRev.RevisionNumber = rev.RevisionNumber + 1;
            newRev.Save(Connection, Transaction);

            #endregion


            #region Products

            var oldProducts = ORM_CMN_PRO_Catalog_Product.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Catalog_Product.Query()
            {
                CMN_PRO_Catalog_Revision_RefID = rev.CMN_PRO_Catalog_RevisionID,
                IsDeleted = false
            });

            if (oldProducts.Count == 0)
            {
                returnValue.Result.Status_Code    = -1;     // -1 no products in revision
                returnValue.Result.Status_Message = "no products in revision";
                return(returnValue);
            }

            //oldProductID - newProductID
            Dictionary <Guid, Guid> productsMapping = new Dictionary <Guid, Guid>();

            foreach (var item in oldProducts)
            {
                ORM_CMN_SLS_Pricelist_Release plr = new ORM_CMN_SLS_Pricelist_Release();
                plr.Load(Connection, Transaction, Parameter.Default_PricelistRelease_RefID);

                var pricelistPriceQry = new ORM_CMN_SLS_Price.Query()
                {
                    CMN_PRO_Product_RefID  = item.CMN_PRO_Product_RefID,
                    PricelistRelease_RefID = plr.CMN_SLS_Pricelist_ReleaseID,
                    IsDeleted    = false,
                    Tenant_RefID = securityTicket.TenantID
                };

                var prices = ORM_CMN_SLS_Price.Query.Search(Connection, Transaction, pricelistPriceQry);
                if (prices.Count == 0)
                {
                    ORM_CMN_PRO_Product pr = new ORM_CMN_PRO_Product();
                    pr.Load(Connection, Transaction, item.CMN_PRO_Product_RefID);
                    returnValue.Result.Status_Code    = -2;                         // -2 => pricelist does not have price for product
                    returnValue.Result.Status_Message = pr.Product_Number;
                    return(returnValue);
                }

                var newProduct = new ORM_CMN_PRO_Catalog_Product()
                {
                    CMN_PRO_Catalog_ProductID     = Guid.NewGuid(),
                    CMN_PRO_Product_Variant_RefID = item.CMN_PRO_Product_Variant_RefID,
                    Creation_Timestamp            = DateTime.Now,
                    Tenant_RefID = item.Tenant_RefID,
                    CMN_PRO_Catalog_Revision_RefID = newRev.CMN_PRO_Catalog_RevisionID,
                    CMN_PRO_Product_RefID          = item.CMN_PRO_Product_RefID,
                };

                newProduct.Save(Connection, Transaction);

                productsMapping.Add(item.CMN_PRO_Catalog_ProductID, newProduct.CMN_PRO_Catalog_ProductID);
            }

            #endregion

            #region ProductGroups

            var oldGroups = ORM_CMN_PRO_Catalog_ProductGroup.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Catalog_ProductGroup.Query()
            {
                Catalog_Revision_RefID = rev.CMN_PRO_Catalog_RevisionID,
                IsDeleted = false
            });

            //oldGroupID - newGroupID
            Dictionary <Guid, Guid> groupsMapping = new Dictionary <Guid, Guid>();
            groupsMapping.Add(Guid.Empty, Guid.Empty);

            foreach (var item in oldGroups)
            {
                groupsMapping.Add(item.CMN_PRO_Catalog_ProductGroupID, Guid.NewGuid());
            }

            foreach (var item in oldGroups)
            {
                var newGroup = new ORM_CMN_PRO_Catalog_ProductGroup()
                {
                    CMN_PRO_Catalog_ProductGroupID   = groupsMapping[item.CMN_PRO_Catalog_ProductGroupID],
                    Catalog_Revision_RefID           = newRev.CMN_PRO_Catalog_RevisionID,
                    CatalogProductGroup_Name         = item.CatalogProductGroup_Name,
                    CatalogProductGroup_Parent_RefID = groupsMapping[item.CatalogProductGroup_Parent_RefID],
                    Creation_Timestamp = DateTime.Now,
                    Tenant_RefID       = item.Tenant_RefID
                };

                newGroup.Save(Connection, Transaction);

                var oldProductsInGroup = ORM_CMN_PRO_Catalog_Product_2_ProductGroup.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Catalog_Product_2_ProductGroup.Query()
                {
                    CMN_PRO_Catalog_ProductGroup_RefID = item.CMN_PRO_Catalog_ProductGroupID,
                    IsDeleted = false
                });

                foreach (var product in oldProductsInGroup)
                {
                    var newProduct = new ORM_CMN_PRO_Catalog_Product_2_ProductGroup()
                    {
                        AssignmentID = Guid.NewGuid(),
                        CMN_PRO_Catalog_ProductGroup_RefID = groupsMapping[product.CMN_PRO_Catalog_ProductGroup_RefID],
                        CMN_PRO_Catalog_Product_RefID      = productsMapping[product.CMN_PRO_Catalog_Product_RefID],
                        Creation_Timestamp = DateTime.Now,
                        Tenant_RefID       = item.Tenant_RefID
                    };

                    newProduct.Save(Connection, Transaction);
                }
            }


            #endregion

            returnValue.Result.Status_Code    = 1;
            returnValue.Result.Status_Message = "Success";
            returnValue.Result.ID             = newRev.CMN_PRO_Catalog_RevisionID;
            return(returnValue);

            #endregion UserCode
        }
Пример #12
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5PR_IPfC_1648 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue      = new FR_Guid();
            var defaultLanguages = ORM_CMN_Language.Query.Search(Connection, Transaction, new ORM_CMN_Language.Query
            {
                IsDeleted    = false,
                Tenant_RefID = securityTicket.TenantID
            });
            var productFromCatalog = Parameter.Product;
            ORM_CMN_PRO_SubscribedCatalog subscribedCatalog = new ORM_CMN_PRO_SubscribedCatalog();
            var existingCatalog = ORM_CMN_PRO_SubscribedCatalog.Query.Search(Connection, Transaction, new ORM_CMN_PRO_SubscribedCatalog.Query()
            {
                CatalogCodeITL = productFromCatalog.CatalogITL
            });
            if (existingCatalog != null && existingCatalog.Count() > 0)
            {
                subscribedCatalog = existingCatalog.First();
            }
            var supplierID = subscribedCatalog.PublishingSupplier_RefID;

            ORM_CMN_PRO_Product productToCreateUpdate = new ORM_CMN_PRO_Product();
            productToCreateUpdate.CMN_PRO_ProductID = Guid.NewGuid();

            ORM_CMN_PRO_Product.Query productDbQuery = new ORM_CMN_PRO_Product.Query();
            productDbQuery.ProductITL   = productFromCatalog.ProductITL;
            productDbQuery.Tenant_RefID = securityTicket.TenantID;
            productDbQuery.IsDeleted    = false;

            var product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, productDbQuery);

            if (product != null && product.Count > 0)
            {
                productToCreateUpdate = product.First();

                ORM_CMN_PRO_Dimension.Query dimensionQuery = new ORM_CMN_PRO_Dimension.Query();
                dimensionQuery.Product_RefID = productToCreateUpdate.CMN_PRO_ProductID;
                dimensionQuery.Tenant_RefID  = securityTicket.TenantID;
                dimensionQuery.IsDeleted     = false;

                var dimensions = ORM_CMN_PRO_Dimension.Query.Search(Connection, Transaction, dimensionQuery);
                foreach (var dimension in dimensions)
                {
                    ORM_CMN_PRO_Dimension_Value.Query dimensionValuesQuery = new ORM_CMN_PRO_Dimension_Value.Query();
                    dimensionValuesQuery.Dimensions_RefID = dimension.CMN_PRO_DimensionID;
                    dimensionValuesQuery.Tenant_RefID     = securityTicket.TenantID;
                    var dimensionValues = ORM_CMN_PRO_Dimension_Value.Query.Search(Connection, Transaction, dimensionValuesQuery);
                    foreach (var dimensionValue in dimensionValues)
                    {
                        ORM_CMN_PRO_Variant_DimensionValue.Query dimensionValueVariantQuery = new ORM_CMN_PRO_Variant_DimensionValue.Query();
                        dimensionValueVariantQuery.DimensionValue_RefID = dimensionValue.CMN_PRO_Dimension_ValueID;
                        ORM_CMN_PRO_Variant_DimensionValue.Query.SoftDelete(Connection, Transaction, dimensionValueVariantQuery);
                    }
                    ORM_CMN_PRO_Dimension_Value.Query.SoftDelete(Connection, Transaction, dimensionValuesQuery);
                }

                ORM_CMN_PRO_Dimension.Query.SoftDelete(Connection, Transaction, dimensionQuery);
            }

            productToCreateUpdate.IsImportedFromExternalCatalog = true;
            productToCreateUpdate.Product_Name        = new Dict(ORM_CMN_PRO_Product.TableName);
            productToCreateUpdate.IsDeleted           = false;
            productToCreateUpdate.ProductITL          = productFromCatalog.ProductITL;
            productToCreateUpdate.Product_Description = new Dict(ORM_CMN_PRO_Product.TableName);
            productToCreateUpdate.Tenant_RefID        = securityTicket.TenantID;
            productToCreateUpdate.Product_Number      = productFromCatalog.Code;

            foreach (var lang in defaultLanguages)
            {
                productToCreateUpdate.Product_Name.AddEntry(lang.CMN_LanguageID, productFromCatalog.Name);
                productToCreateUpdate.Product_Description.AddEntry(lang.CMN_LanguageID, productFromCatalog.Description);
            }

            productToCreateUpdate.Save(Connection, Transaction);
            returnValue.Result = productToCreateUpdate.CMN_PRO_ProductID;
            foreach (var customizationToDelete in ORM_CMN_PRO_CUS_Customization.Query.Search(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization.Query()
            {
                Product_RefID = productToCreateUpdate.CMN_PRO_ProductID
            }))
            {
                ORM_CMN_PRO_CUS_Customization.Query.SoftDelete(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization.Query()
                {
                    CMN_PRO_CUS_CustomizationID = customizationToDelete.CMN_PRO_CUS_CustomizationID
                });
                if (ORM_CMN_PRO_CUS_Customization_Variant.Query.Exists(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization_Variant.Query()
                {
                    Customization_RefID = customizationToDelete.CMN_PRO_CUS_CustomizationID
                }))
                {
                    ORM_CMN_PRO_CUS_Customization_Variant.Query.SoftDelete(Connection, Transaction, new ORM_CMN_PRO_CUS_Customization_Variant.Query()
                    {
                        Customization_RefID = customizationToDelete.CMN_PRO_CUS_CustomizationID
                    });
                }
            }
            var customizationOrderSequence = 0;
            if (productFromCatalog.Customizations != null)
            {
                productToCreateUpdate.IsCustomizable = true;
                productToCreateUpdate.Save(Connection, Transaction);
                foreach (var customization in productFromCatalog.Customizations)
                {
                    ORM_CMN_PRO_CUS_Customization customizationToSave = new ORM_CMN_PRO_CUS_Customization();
                    customizationToSave.CMN_PRO_CUS_CustomizationID = Guid.NewGuid();
                    customizationToSave.Customization_Description   = new Dict(ORM_CMN_PRO_CUS_Customization.TableName);
                    customizationToSave.Customization_Name          = new Dict(ORM_CMN_PRO_CUS_Customization.TableName);
                    customizationToSave.IsDeleted     = false;
                    customizationToSave.Product_RefID = productToCreateUpdate.CMN_PRO_ProductID;
                    customizationToSave.Tenant_RefID  = securityTicket.TenantID;
                    customizationToSave.OrderSequence = customizationOrderSequence;
                    customizationOrderSequence++;

                    foreach (var lang in defaultLanguages)
                    {
                        customizationToSave.Customization_Description.UpdateEntry(lang.CMN_LanguageID, customization.Description);
                        customizationToSave.Customization_Name.UpdateEntry(lang.CMN_LanguageID, customization.Name);
                    }
                    customizationToSave.Save(Connection, Transaction);
                    var customizationVariantOrderSequence = 0;
                    foreach (var customizationVariant in customization.CustomizationVariants)
                    {
                        ORM_CMN_PRO_CUS_Customization_Variant customizationVariantsToSave = new ORM_CMN_PRO_CUS_Customization_Variant();
                        customizationVariantsToSave.CMN_PRO_CUS_Customization_VariantID = Guid.NewGuid();
                        customizationVariantsToSave.Customization_RefID       = customizationToSave.CMN_PRO_CUS_CustomizationID;
                        customizationVariantsToSave.CustomizationVariant_Name = new Dict(ORM_CMN_PRO_CUS_Customization_Variant.TableName);
                        customizationVariantsToSave.OrderSequence             = customizationVariantOrderSequence;
                        customizationVariantOrderSequence++;
                        customizationVariantsToSave.IsDeleted    = false;
                        customizationVariantsToSave.Tenant_RefID = securityTicket.TenantID;
                        foreach (var lang in defaultLanguages)
                        {
                            customizationVariantsToSave.CustomizationVariant_Name.UpdateEntry(lang.CMN_LanguageID, customizationVariant.Name);
                        }
                        customizationVariantsToSave.Save(Connection, Transaction);
                    }
                }
            }


            ORM_CMN_PRO_Product_Variant.Query productVariantQuery = new ORM_CMN_PRO_Product_Variant.Query();
            productVariantQuery.CMN_PRO_Product_RefID = productToCreateUpdate.CMN_PRO_ProductID;
            productVariantQuery.Tenant_RefID          = securityTicket.TenantID;
            productVariantQuery.IsDeleted             = false;

            var productVariantsDb = ORM_CMN_PRO_Product_Variant.Query.Search(Connection, Transaction, productVariantQuery);
            List <ORM_CMN_PRO_Dimension>       dimensionsToCreate      = new List <ORM_CMN_PRO_Dimension>();
            List <ORM_CMN_PRO_Dimension_Value> dimensionValuesToCreate = new List <ORM_CMN_PRO_Dimension_Value>();

            foreach (var productVariantFromCatalog in productFromCatalog.Variants)
            {
                ORM_CMN_PRO_Product_Variant.Query variantToCreateQuery = new ORM_CMN_PRO_Product_Variant.Query();
                variantToCreateQuery.ProductVariantITL = productVariantFromCatalog.ITL;
                variantToCreateQuery.Tenant_RefID      = securityTicket.TenantID;
                var isVariantSaved = ORM_CMN_PRO_Product_Variant.Query.Exists(Connection, Transaction, variantToCreateQuery);

                ORM_CMN_PRO_Product_Variant productVariantToCreate = new ORM_CMN_PRO_Product_Variant();
                if (isVariantSaved)
                {
                    productVariantToCreate.Load(Connection, Transaction, ORM_CMN_PRO_Product_Variant.Query.Search(Connection, Transaction, variantToCreateQuery).FirstOrDefault().CMN_PRO_Product_VariantID);
                }
                else
                {
                    productVariantToCreate.CMN_PRO_Product_VariantID = Guid.NewGuid();
                }
                productVariantToCreate.IsStandardProductVariant = productVariantFromCatalog.DefaultVariant;
                productVariantToCreate.CMN_PRO_Product_RefID    = productToCreateUpdate.CMN_PRO_ProductID;
                productVariantToCreate.IsDeleted    = false;
                productVariantToCreate.Tenant_RefID = securityTicket.TenantID;
                productVariantToCreate.IsImportedFromExternalCatalog = true;
                productVariantToCreate.ProductVariantITL             = productVariantFromCatalog.ITL;
                productVariantToCreate.VariantName = new Dict(ORM_CMN_PRO_Product_Variant.TableName);
                foreach (var lang in defaultLanguages)
                {
                    productVariantToCreate.VariantName.UpdateEntry(lang.CMN_LanguageID, productVariantFromCatalog.Name);
                }
                productVariantToCreate.Save(Connection, Transaction);
                ORM_CMN_Price procurementPrice = new ORM_CMN_Price();
                procurementPrice.CMN_PriceID  = Guid.NewGuid();
                procurementPrice.IsDeleted    = false;
                procurementPrice.Tenant_RefID = securityTicket.TenantID;
                procurementPrice.Save(Connection, Transaction);

                foreach (var price in productVariantFromCatalog.PriceGrades)
                {
                    ORM_CMN_Price_Value priceValues = new ORM_CMN_Price_Value();
                    priceValues.Price_RefID = procurementPrice.CMN_PriceID;
                    var procurementPriceAmount = price.SalesPrice ?? 0;
                    priceValues.PriceValue_Amount         = (double)procurementPriceAmount;
                    priceValues.PriceValue_Currency_RefID = subscribedCatalog.SubscribedCatalog_Currency_RefID;
                    priceValues.IsDeleted    = false;
                    priceValues.Tenant_RefID = securityTicket.TenantID;
                    priceValues.Save(Connection, Transaction);
                }

                ORM_CMN_PRO_Product_Supplier productSupplier = new ORM_CMN_PRO_Product_Supplier();
                productSupplier.CMN_BPT_Supplier_RefID        = supplierID;
                productSupplier.CMN_PRO_Product_RefID         = productVariantToCreate.CMN_PRO_Product_RefID;
                productSupplier.CMN_PRO_Product_Variant_RefID = productVariantToCreate.CMN_PRO_Product_VariantID;
                productSupplier.ProcurementPrice_RefID        = procurementPrice.CMN_PriceID;
                productSupplier.Tenant_RefID     = securityTicket.TenantID;
                productSupplier.SupplierPriority = 0;
                productSupplier.IsDeleted        = false;
                productSupplier.Save(Connection, Transaction);


                foreach (var dimension in productVariantFromCatalog.Dimensions)
                {
                    if (dimensionsToCreate.Where(x => x.DimensionName.Contents.First().Content == dimension.Key).Count() == 0)
                    {
                        ORM_CMN_PRO_Dimension dimensionToCreate = new ORM_CMN_PRO_Dimension();
                        dimensionToCreate.DimensionName = new Dict(ORM_CMN_PRO_Dimension.TableName);
                        foreach (var lang in defaultLanguages)
                        {
                            dimensionToCreate.DimensionName.AddEntry(lang.CMN_LanguageID, dimension.Key);
                        }
                        dimensionToCreate.OrderSequence       = dimensionsToCreate.Count() + 1;
                        dimensionToCreate.CMN_PRO_DimensionID = Guid.NewGuid();
                        dimensionToCreate.Product_RefID       = productVariantToCreate.CMN_PRO_Product_RefID;
                        dimensionToCreate.IsDeleted           = false;
                        dimensionToCreate.Tenant_RefID        = securityTicket.TenantID;
                        dimensionsToCreate.Add(dimensionToCreate);
                    }

                    var dimensionValue = dimensionValuesToCreate.Where(x => x.DimensionValue_Text.Contents.First().Content == dimension.Value);
                    ORM_CMN_PRO_Dimension_Value dimensionValueToCreate = new ORM_CMN_PRO_Dimension_Value();
                    if (dimensionValue != null && dimensionValue.Count() > 0)
                    {
                        dimensionValueToCreate = dimensionValue.First();
                    }
                    else
                    {
                        dimensionValueToCreate.DimensionValue_Text = new Dict(ORM_CMN_PRO_Dimension_Value.TableName);
                        foreach (var lang in defaultLanguages)
                        {
                            dimensionValueToCreate.DimensionValue_Text.AddEntry(lang.CMN_LanguageID, dimension.Value);
                        }
                        dimensionValueToCreate.Dimensions_RefID          = dimensionsToCreate.First(x => x.DimensionName.Contents.First().Content == dimension.Key).CMN_PRO_DimensionID;
                        dimensionValueToCreate.CMN_PRO_Dimension_ValueID = Guid.NewGuid();
                        dimensionValueToCreate.OrderSequence             = dimensionValuesToCreate.Count() + 1;
                        dimensionValueToCreate.IsDeleted    = false;
                        dimensionValueToCreate.Tenant_RefID = securityTicket.TenantID;
                        dimensionValuesToCreate.Add(dimensionValueToCreate);
                    }
                    ORM_CMN_PRO_Variant_DimensionValue variantDimensionValueToCreate = new ORM_CMN_PRO_Variant_DimensionValue();
                    variantDimensionValueToCreate.CMN_PRO_Variant_DimensionValueID = Guid.NewGuid();
                    variantDimensionValueToCreate.DimensionValue_RefID             = dimensionValueToCreate.CMN_PRO_Dimension_ValueID;
                    variantDimensionValueToCreate.ProductVariant_RefID             = productVariantToCreate.CMN_PRO_Product_VariantID;
                    variantDimensionValueToCreate.IsDeleted    = false;
                    variantDimensionValueToCreate.Tenant_RefID = securityTicket.TenantID;
                    variantDimensionValueToCreate.Save(Connection, Transaction);
                }
            }
            foreach (var dimensionToCreate in dimensionsToCreate)
            {
                dimensionToCreate.Save(Connection, Transaction);
            }
            foreach (var dimensionValueToCreate in dimensionValuesToCreate)
            {
                dimensionValueToCreate.Save(Connection, Transaction);
            }

            return(returnValue);

            #endregion UserCode
        }
Пример #13
0
        protected static FR_L3AR_IoUPBD_1631_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L3AR_IoUPBD_1631 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L3AR_IoUPBD_1631_Array();
            var result      = new List <L3AR_IoUPBD_1631>();

            #region Get All Producers for Tenant

            var allProducers = ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, new ORM_CMN_BPT_BusinessParticipant.Query()
            {
                Tenant_RefID = securityTicket.TenantID,
                IsDeleted    = false
            });

            #endregion

            #region Get Taxes For Default Country

            var taxesToImport = Parameter.Products.Select(i => i.VAT).Distinct();

            var param = new P_L3TX_STfDCaRR_1119();
            param.TaxRates = taxesToImport.ToArray();
            var allTaxes = cls_Save_Taxes_for_DefaultCountry_and_ReturnResult.Invoke(Connection, Transaction, param, securityTicket).Result;

            #endregion

            #region DosageForms

            var dosageQuery = new ORM_HEC_Product_DosageForm.Query();
            dosageQuery.Tenant_RefID = securityTicket.TenantID;
            dosageQuery.IsDeleted    = false;

            var allDosages = ORM_HEC_Product_DosageForm.Query.Search(Connection, Transaction, dosageQuery);

            #endregion

            foreach (var item in Parameter.Products)
            {
                bool alreadyExistingInDB = true;

                #region ORM_CMN_PRO_Product

                var productQuery = new ORM_CMN_PRO_Product.Query();
                productQuery.ProductITL   = item.ProductITL;
                productQuery.Tenant_RefID = securityTicket.TenantID;
                productQuery.IsDeleted    = false;
                productQuery.IsProductAvailableForOrdering = true;

                var product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, productQuery).FirstOrDefault();

                if (product == null)
                {
                    product = new ORM_CMN_PRO_Product();
                    product.CMN_PRO_ProductID  = Guid.NewGuid();
                    product.ProductITL         = item.ProductITL;
                    product.PackageInfo_RefID  = Guid.NewGuid();
                    product.Creation_Timestamp = DateTime.Now;
                    product.Tenant_RefID       = securityTicket.TenantID;

                    alreadyExistingInDB = false;
                }

                product.Product_Name                   = item.Product_Name;
                product.Product_Description            = item.Product_Description;
                product.Product_Number                 = item.Product_Number;
                product.IsProduct_Article              = true;
                product.IsProductAvailableForOrdering  = true;
                product.DefaultExpirationPeriod_in_sec = item.DefaultExpirationPeriod_in_sec;

                if (item.DefaultStorageTemperature_min_in_kelvin != 0)
                {
                    product.DefaultStorageTemperature_min_in_kelvin = (float)Math.Round(item.DefaultStorageTemperature_min_in_kelvin, 2);
                }

                if (item.DefaultStorageTemperature_max_in_kelvin != 0)
                {
                    product.DefaultStorageTemperature_max_in_kelvin = (float)Math.Round(item.DefaultStorageTemperature_max_in_kelvin, 2);
                }

                product.IsStorage_CoolingRequired = item.IsStorage_CoolingRequired;

                var xmlModel = new ProductAdditionalInfoXML()
                {
                    IsPharmacyOnlyDistribution = item.IsPharmacyOnlyDistribution
                };

                product.ProductAdditionalInfoXML      = xmlModel.ToPayload();
                product.IsStorage_ExpiryDateMandatory = (item.DefaultExpirationPeriod_in_sec != 0);

                product.Save(Connection, Transaction);

                #endregion

                #region Save Producer

                var producerBPT = allProducers.Where(i => i.DisplayName == item.Producer).FirstOrDefault();

                if (producerBPT == default(ORM_CMN_BPT_BusinessParticipant))
                {
                    producerBPT = new ORM_CMN_BPT_BusinessParticipant();
                    producerBPT.CMN_BPT_BusinessParticipantID = Guid.NewGuid();
                    producerBPT.DisplayName        = item.Producer;
                    producerBPT.IsCompany          = true;
                    producerBPT.Tenant_RefID       = securityTicket.TenantID;
                    producerBPT.Creation_Timestamp = DateTime.Now;
                    producerBPT.Save(Connection, Transaction);
                }

                product.ProducingBusinessParticipant_RefID = producerBPT.CMN_BPT_BusinessParticipantID;
                product.Save(Connection, Transaction);

                #endregion

                #region Product Code (EAN)

                var product2Code = ORM_CMN_PRO_Product_2_ProductCode.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product_2_ProductCode.Query()
                {
                    CMN_PRO_Product_RefID = product.CMN_PRO_ProductID,
                    Tenant_RefID          = securityTicket.TenantID,
                    IsDeleted             = false
                }).SingleOrDefault();

                if (product2Code == null)
                {
                    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      = String.Empty;
                    productCode.Creation_Timestamp     = DateTime.Now;
                    productCode.Tenant_RefID           = securityTicket.TenantID;
                    productCode.Save(Connection, Transaction);

                    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);
                }
                else
                {
                    var productCode = new ORM_CMN_PRO_ProductCode();
                    productCode.Load(Connection, Transaction, product2Code.CMN_PRO_ProductCode_RefID);
                    productCode.ProductCode_Value = String.Empty;
                    productCode.Save(Connection, Transaction);
                }

                #endregion

                #region Unit

                //Unit could be used for multiple products, there is no sense to edit unit
                //If there is need to change unit, we should find unit with that iso code and change reference

                var unitsQuery = new ORM_CMN_Unit.Query();
                unitsQuery.Tenant_RefID = securityTicket.TenantID;
                unitsQuery.ISOCode      = item.MeasuredInUnit_ISO_um_ums;
                unitsQuery.IsDeleted    = false;

                var measuredInUnit = ORM_CMN_Unit.Query.Search(Connection, Transaction, unitsQuery).FirstOrDefault();
                if (measuredInUnit == null)
                {
                    measuredInUnit = new ORM_CMN_Unit();
                    measuredInUnit.Tenant_RefID       = securityTicket.TenantID;
                    measuredInUnit.Creation_Timestamp = DateTime.Now;
                    measuredInUnit.ISOCode            = item.MeasuredInUnit_ISO_um_ums;
                    measuredInUnit.CMN_UnitID         = Guid.NewGuid();
                    measuredInUnit.Save(Connection, Transaction);
                }

                #endregion

                #region 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.CMN_PRO_PAC_PackageInfoID = product.PackageInfo_RefID;
                    packageInfo.Creation_Timestamp        = DateTime.Now;
                    packageInfo.Tenant_RefID = securityTicket.TenantID;
                }
                packageInfo.PackageContent_DisplayLabel         = item.Amount;
                packageInfo.PackageContent_Amount               = PackageAmountUtils.GetPackageAmount(item.Amount);
                packageInfo.PackageContent_MeasuredInUnit_RefID = measuredInUnit.CMN_UnitID;

                packageInfo.Save(Connection, Transaction);

                #endregion

                #region VAT

                var salesTax = ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query()
                {
                    Product_RefID = product.CMN_PRO_ProductID,
                    Tenant_RefID  = securityTicket.TenantID,
                    IsDeleted     = false
                }).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 = allTaxes.Where(i => i.TaxRate == item.VAT).Select(j => j.TaxID).FirstOrDefault();
                salesTax.Save(Connection, Transaction);

                #endregion

                #region DosageForms

                //DosageForms could be used for multiple products, there is no sense to edit unit
                //If there is need to change unit, we should find unit with that GlobalPropertyMatchingID and change reference

                var dosage = allDosages.Where(i => i.GlobalPropertyMatchingID == item.Dosage).FirstOrDefault();

                //if not create new
                if (dosage == null)
                {
                    dosage = new ORM_HEC_Product_DosageForm();
                    dosage.HEC_Product_DosageFormID = Guid.NewGuid();
                    dosage.Tenant_RefID             = securityTicket.TenantID;
                    dosage.Creation_Timestamp       = DateTime.Now;

                    dosage.GlobalPropertyMatchingID = item.Dosage;
                    dosage.Save(Connection, Transaction);
                }

                #endregion

                #region HecProduct

                var hec_product = ORM_HEC_Product.Query.Search(Connection, Transaction, new ORM_HEC_Product.Query()
                {
                    Ext_PRO_Product_RefID = product.CMN_PRO_ProductID,
                    Tenant_RefID          = securityTicket.TenantID,
                    IsDeleted             = false
                }).SingleOrDefault();

                if (hec_product == null)
                {
                    hec_product = new ORM_HEC_Product();
                    hec_product.HEC_ProductID      = Guid.NewGuid();
                    hec_product.Creation_Timestamp = DateTime.Now;
                    hec_product.Tenant_RefID       = securityTicket.TenantID;
                }
                hec_product.Ext_PRO_Product_RefID     = product.CMN_PRO_ProductID;
                hec_product.ProductDosageForm_RefID   = dosage.HEC_Product_DosageFormID;
                hec_product.ProductDistributionStatus = item.DistributionStatus;
                hec_product.IsProduct_AddictiveDrug   = item.IsProduct_AddictiveDrug;
                hec_product.Save(Connection, Transaction);

                #endregion

                var date = DateTime.Now;

                #region Save Active Components

                var componentsParam = new P_L3CO_SCfIPFC_1324();
                componentsParam.HEC_ProductID    = hec_product.HEC_ProductID;
                componentsParam.ActiveComponents = item.ActiveComponents;
                cls_Save_Componets_for_ImportedProductFromCatalog.Invoke(Connection, Transaction, componentsParam, securityTicket);

                #endregion

                result.Add(new L3AR_IoUPBD_1631()
                {
                    ProductITL       = product.ProductITL,
                    ProductID        = product.CMN_PRO_ProductID,
                    IsAlreadyExisted = alreadyExistingInDB
                });

                date = DateTime.Now;
            }

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

            #endregion UserCode
        }
Пример #14
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5AR_SA_1614 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.IsDeleted          = Parameter.IsDeleted;


                #region Product picture

                if (Parameter.Image != null && Parameter.Image.Document_ID != Guid.Empty)
                {
                    ORM_DOC_Structure_Header structureHeader = new ORM_DOC_Structure_Header();
                    structureHeader.Label        = "Product picture";
                    structureHeader.Tenant_RefID = securityTicket.TenantID;
                    structureHeader.Save(Connection, Transaction);

                    ORM_DOC_Structure structure = new ORM_DOC_Structure();
                    structure.Label = "Product picture";
                    structure.Structure_Header_RefID  = structureHeader.DOC_Structure_HeaderID;
                    structure.CreatedBy_Account_RefID = securityTicket.AccountID;
                    structure.Tenant_RefID            = securityTicket.TenantID;
                    structure.Save(Connection, Transaction);

                    ORM_DOC_Document document = new ORM_DOC_Document();
                    document.DOC_DocumentID = Parameter.Image.Document_ID;
                    document.Tenant_RefID   = securityTicket.TenantID;
                    document.Save(Connection, Transaction);

                    ORM_DOC_Document_2_Structure documentStructure = new ORM_DOC_Document_2_Structure();
                    documentStructure.Document_RefID        = document.DOC_DocumentID;
                    documentStructure.Structure_RefID       = structure.DOC_StructureID;
                    documentStructure.StructureHeader_RefID = structureHeader.DOC_Structure_HeaderID;
                    documentStructure.Tenant_RefID          = securityTicket.TenantID;
                    documentStructure.Save(Connection, Transaction);

                    ORM_DOC_DocumentRevision documentRevision = new ORM_DOC_DocumentRevision();
                    documentRevision.Document_RefID      = document.DOC_DocumentID;
                    documentRevision.Revision            = 1;
                    documentRevision.IsLocked            = false;
                    documentRevision.IsLastRevision      = true;
                    documentRevision.UploadedByAccount   = securityTicket.AccountID;
                    documentRevision.File_Name           = Parameter.Image.File_Name;
                    documentRevision.File_Description    = Parameter.Image.File_Description;
                    documentRevision.File_SourceLocation = Parameter.Image.File_Source_Location;
                    documentRevision.File_ServerLocation = Parameter.Image.File_Server_Location;
                    documentRevision.File_MIMEType       = Parameter.Image.File_MimeType;
                    documentRevision.File_Extension      = Parameter.Image.File_Extension;
                    documentRevision.File_Size_Bytes     = Parameter.Image.File_Size_Bytes;
                    documentRevision.Tenant_RefID        = securityTicket.TenantID;
                    documentRevision.Save(Connection, Transaction);

                    //add relation for product picture with product
                    product.Product_DocumentationStructure_RefID = structureHeader.DOC_Structure_HeaderID;
                }

                #endregion

                product.Save(Connection, Transaction);

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

                #region Product picture

                if (Parameter.Image != null && Parameter.Image.Document_ID != Guid.Empty)
                {
                    ORM_DOC_Structure_Header structureHeader = new ORM_DOC_Structure_Header();
                    structureHeader.Label        = "Product picture";
                    structureHeader.Tenant_RefID = securityTicket.TenantID;
                    structureHeader.Save(Connection, Transaction);

                    ORM_DOC_Structure structure = new ORM_DOC_Structure();
                    structure.Label = "Product picture";
                    structure.Structure_Header_RefID  = structureHeader.DOC_Structure_HeaderID;
                    structure.CreatedBy_Account_RefID = securityTicket.AccountID;
                    structure.Tenant_RefID            = securityTicket.TenantID;
                    structure.Save(Connection, Transaction);

                    ORM_DOC_Document document = new ORM_DOC_Document();
                    document.DOC_DocumentID = Parameter.Image.Document_ID;
                    document.Tenant_RefID   = securityTicket.TenantID;
                    document.Save(Connection, Transaction);

                    ORM_DOC_Document_2_Structure documentStructure = new ORM_DOC_Document_2_Structure();
                    documentStructure.Document_RefID        = document.DOC_DocumentID;
                    documentStructure.Structure_RefID       = structure.DOC_StructureID;
                    documentStructure.StructureHeader_RefID = structureHeader.DOC_Structure_HeaderID;
                    documentStructure.Tenant_RefID          = securityTicket.TenantID;
                    documentStructure.Save(Connection, Transaction);

                    ORM_DOC_DocumentRevision documentRevision = new ORM_DOC_DocumentRevision();
                    documentRevision.Document_RefID      = document.DOC_DocumentID;
                    documentRevision.Revision            = 1;
                    documentRevision.IsLocked            = false;
                    documentRevision.IsLastRevision      = true;
                    documentRevision.UploadedByAccount   = securityTicket.AccountID;
                    documentRevision.File_Name           = Parameter.Image.File_Name;
                    documentRevision.File_Description    = Parameter.Image.File_Description;
                    documentRevision.File_SourceLocation = Parameter.Image.File_Source_Location;
                    documentRevision.File_ServerLocation = Parameter.Image.File_Server_Location;
                    documentRevision.File_MIMEType       = Parameter.Image.File_MimeType;
                    documentRevision.File_Extension      = Parameter.Image.File_Extension;
                    documentRevision.File_Size_Bytes     = Parameter.Image.File_Size_Bytes;
                    documentRevision.Tenant_RefID        = securityTicket.TenantID;
                    documentRevision.Save(Connection, Transaction);

                    //add relation for product picture with product
                    product.Product_DocumentationStructure_RefID = structureHeader.DOC_Structure_HeaderID;
                }
                else
                {
                    //  if (Parameter.Image.IsForDeleting)  if product image has to be deleted
                }

                #endregion
            }


            #region ORM_CMN_PRO_Product

            product.Product_Number = Parameter.ProductNumber;

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

            product.ProductType_RefID = Guid.Empty;

            product.IsPlaceholderArticle = Parameter.IsDummy;

            product.ProductSuccessor_RefID = Guid.Empty;
            product.IsDeleted = Parameter.IsDeleted;
            product.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
            #region Variant
            //Create default varient
            var defaultVarient = new ORM_CMN_PRO_Product_Variant();
            defaultVarient.CMN_PRO_Product_VariantID = Guid.NewGuid();
            defaultVarient.CMN_PRO_Product_RefID     = product.CMN_PRO_ProductID;
            defaultVarient.IsStandardProductVariant  = true;
            defaultVarient.Tenant_RefID = securityTicket.TenantID;
            defaultVarient.VariantName  = new Dict(ORM_CMN_PRO_Product_Variant.TableName);


            foreach (var language in languages)
            {
                defaultVarient.VariantName.UpdateEntry(language.CMN_LanguageID, String.Empty);
            }

            defaultVarient.Save(Connection, Transaction);
            #endregion

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

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

            var productID = Parameter.ProductID;

            ORM_CMN_PRO_Product product = new ORM_CMN_PRO_Product();
            product.Load(Connection, Transaction, productID);

            var DocumentationStructure = product.Product_DocumentationStructure_RefID;

            product.Product_DocumentationStructure_RefID = Guid.Empty;
            product.Save(Connection, Transaction);

            //////////////////////////////////////////////////////////////////////////////////////

            ORM_DOC_Document_2_Structure.Query documentToStructure = new ORM_DOC_Document_2_Structure.Query();
            documentToStructure.StructureHeader_RefID = DocumentationStructure;
            documentToStructure.Tenant_RefID          = securityTicket.TenantID;
            documentToStructure.IsDeleted             = false;

            var documentStructure = ORM_DOC_Document_2_Structure.Query.Search(Connection, Transaction, documentToStructure);

            var doc_documentID = documentStructure.Count() > 0 ? documentStructure.Select(x => x.Document_RefID).FirstOrDefault() : Guid.Empty;

            ORM_DOC_Document_2_Structure.Query.SoftDelete(Connection, Transaction, documentToStructure);

            //////////////////////////////////////////////////////////////////////////////////////

            ORM_DOC_Document.Query document = new ORM_DOC_Document.Query();
            document.DOC_DocumentID = doc_documentID;
            document.Tenant_RefID   = securityTicket.TenantID;
            document.IsDeleted      = false;

            ORM_DOC_Document.Query.SoftDelete(Connection, Transaction, document);

            /////////////////////////////////////////////////////////////////////////////////////

            ORM_DOC_Structure.Query structure = new ORM_DOC_Structure.Query();
            structure.Structure_Header_RefID = DocumentationStructure;
            structure.Tenant_RefID           = securityTicket.TenantID;
            structure.IsDeleted = false;

            ORM_DOC_Structure.Query.SoftDelete(Connection, Transaction, structure);

            /////////////////////////////////////////////////////////////////////////////////////

            ORM_DOC_Structure_Header.Query structureHeader = new ORM_DOC_Structure_Header.Query();
            structureHeader.DOC_Structure_HeaderID = DocumentationStructure;
            structureHeader.Tenant_RefID           = securityTicket.TenantID;
            structureHeader.IsDeleted = false;

            ORM_DOC_Structure_Header.Query.SoftDelete(Connection, Transaction, structureHeader);

            return(returnValue);

            #endregion UserCode
        }
Пример #16
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L3MP_SP_1045 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Guid();

            //languages
            P_L2LN_GALFTID_1530 languageTenandID = new P_L2LN_GALFTID_1530();
            languageTenandID.Tenant_RefID = securityTicket.TenantID;
            List <L2LN_GALFTID_1530> DBLanguages = cls_Get_All_Languages_ForTenantID.Invoke(Connection, Transaction, languageTenandID, securityTicket).Result.ToList();

            ORM_CMN_PRO_Product item = new ORM_CMN_PRO_Product();

            if (Parameter.CMN_PRO_ProductID != null && Parameter.CMN_PRO_ProductID != Guid.Empty)
            {
                var result = item.Load(Connection, Transaction, Parameter.CMN_PRO_ProductID);
                if (result.Status != FR_Status.Success)
                {
                    var error = new FR_Guid();
                    error.ErrorMessage = "No Such ID";
                    error.Status       = FR_Status.Error_Internal;
                    return(error);
                }

                #region Edit

                Dict _extProductDictName = new Dict("cmn_pro_products");

                _extProductDictName = Parameter.Product_Name_DictID;

                if (_extProductDictName != null)
                {
                    foreach (var entry in _extProductDictName.Contents)
                    {
                        item.Product_Name.UpdateEntry(entry.LanguageID, entry.Content);
                    }
                }


                Dict _extProductDictDescription = new Dict("cmn_pro_products");

                _extProductDictDescription = Parameter.Product_Description;

                if (_extProductDictDescription != null)
                {
                    foreach (var entry in _extProductDictDescription.Contents)
                    {
                        item.Product_Description.UpdateEntry(entry.LanguageID, entry.Content);
                    }
                }

                item.Product_Number = Parameter.Product_Number;


                return(new FR_Guid(item.Save(Connection, Transaction), item.CMN_PRO_ProductID));

                #endregion
            }

            else
            {
                #region Save

                item.CMN_PRO_ProductID  = Guid.NewGuid();
                item.Creation_Timestamp = DateTime.Now;
                item.IsDeleted          = false;

                Dict _extProductDictName = new Dict("cmn_pro_products");

                _extProductDictName = Parameter.Product_Name_DictID;

                if (_extProductDictName != null)
                {
                    foreach (var entry in _extProductDictName.Contents)
                    {
                        item.Product_Name.UpdateEntry(entry.LanguageID, entry.Content);
                    }
                }


                Dict _extProductDictDescription = new Dict("cmn_pro_products");

                _extProductDictDescription = Parameter.Product_Description;

                if (_extProductDictDescription != null)
                {
                    foreach (var entry in _extProductDictDescription.Contents)
                    {
                        item.Product_Description.UpdateEntry(entry.LanguageID, entry.Content);
                    }
                }

                item.Product_Number         = Parameter.Product_Number;
                item.Tenant_RefID           = securityTicket.TenantID;
                item.Modification_Timestamp = DateTime.MinValue;

                return(new FR_Guid(item.Save(Connection, Transaction), item.CMN_PRO_ProductID));



                #endregion
            }
            return(returnValue);

            #endregion UserCode
        }
Пример #17
0
        protected static FR_Bool Execute(DbConnection Connection, DbTransaction Transaction, P_L5PA_SPEM_1413 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Bool();

            var medPro_Credentials = cls_Get_TenantMemershipData.Invoke(Connection, Transaction, securityTicket).Result;

            P_L2LN_GALFTID_1530 langParam = new P_L2LN_GALFTID_1530();
            langParam.Tenant_RefID = securityTicket.TenantID;
            var DBLanguages = cls_Get_All_Languages_ForTenantID.Invoke(Connection, Transaction, langParam, securityTicket).Result;

            var examination = ORM_HEC_ACT_PerformedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PerformedAction.Query()
            {
                IsDeleted    = false,
                Tenant_RefID = securityTicket.TenantID,
                HEC_ACT_PerformedActionID = Parameter.ExaminationID
            }).Single();
            #region Save

            foreach (var item in Parameter.new_medication)
            {
                //check if dosage exists

                var dosageQuery = new ORM_HEC_Dosage.Query();
                dosageQuery.IsDeleted    = false;
                dosageQuery.Tenant_RefID = securityTicket.TenantID;
                dosageQuery.DosageText   = item.dosage_text;

                var dosage_table = ORM_HEC_Dosage.Query.Search(Connection, Transaction, dosageQuery).SingleOrDefault();

                if (dosage_table == null)
                {
                    dosage_table = new ORM_HEC_Dosage();
                    dosage_table.HEC_DosageID           = Guid.NewGuid();
                    dosage_table.Tenant_RefID           = securityTicket.TenantID;
                    dosage_table.Creation_Timestamp     = DateTime.Now;
                    dosage_table.Modification_Timestamp = DateTime.Now;
                    dosage_table.DosageText             = item.dosage_text;
                    dosage_table.Save(Connection, Transaction);
                }

                ORM_HEC_ACT_PerformedAction_MedicationUpdate medicationUpdate = new ORM_HEC_ACT_PerformedAction_MedicationUpdate();
                medicationUpdate.HEC_ACT_PerformedAction_MedicationUpdateID = Guid.NewGuid();
                medicationUpdate.Tenant_RefID           = securityTicket.TenantID;
                medicationUpdate.Creation_Timestamp     = DateTime.Now;
                medicationUpdate.Modification_Timestamp = DateTime.Now;
                medicationUpdate.IsSubstance            = !item.is_product;
                medicationUpdate.IsHealthcareProduct    = item.is_product;
                medicationUpdate.IntendedApplicationDuration_in_days = item.days_valid;
                medicationUpdate.HEC_ACT_PerformedAction_RefID       = Parameter.ExaminationID;
                medicationUpdate.HEC_Patient_Medication_RefID        = Guid.NewGuid();

                ORM_HEC_Patient_Medication patient_medications = new ORM_HEC_Patient_Medication();
                patient_medications.HEC_Patient_MedicationID = medicationUpdate.HEC_Patient_Medication_RefID;
                patient_medications.Patient_RefID            = Parameter.PatientID;
                patient_medications.Creation_Timestamp       = DateTime.Now;
                patient_medications.Tenant_RefID             = securityTicket.TenantID;
                patient_medications.Modification_Timestamp   = DateTime.Now;
                patient_medications.R_IsActive            = true;
                patient_medications.R_DateOfAdding        = examination.IfPerfomed_DateOfAction;
                patient_medications.R_IsHealthcareProduct = item.is_product;
                patient_medications.R_IsSubstance         = !item.is_product;
                patient_medications.R_ActiveUntill        = patient_medications.R_DateOfAdding.AddDays(item.days_valid);


                if (item.is_product)//medication is a product
                {
                    Guid Hec_ProductID = Guid.Empty;

                    //check if product exists
                    var productQuery = new ORM_CMN_PRO_Product.Query();
                    productQuery.Tenant_RefID = securityTicket.TenantID;
                    productQuery.IsDeleted    = false;
                    productQuery.ProductITL   = item.product_itl;

                    var product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, productQuery).SingleOrDefault();

                    //if product does not exist create it
                    if (product == null)
                    {
                        ORM_CMN_PRO_Product cmn_pro_product = new ORM_CMN_PRO_Product();
                        cmn_pro_product.CMN_PRO_ProductID      = Guid.NewGuid();
                        cmn_pro_product.Tenant_RefID           = securityTicket.TenantID;
                        cmn_pro_product.Creation_Timestamp     = DateTime.Now;
                        cmn_pro_product.Modification_Timestamp = DateTime.Now;

                        Dict product_name = new Dict("cmn_pro_products");
                        for (int i = 0; i < DBLanguages.Length; i++)
                        {
                            product_name.AddEntry(DBLanguages[i].CMN_LanguageID, item.product_name);
                        }

                        cmn_pro_product.Product_Name = product_name;
                        cmn_pro_product.ProductITL   = item.product_itl;
                        cmn_pro_product.ProducingBusinessParticipant_RefID = Guid.NewGuid(); //manufacturer
                        cmn_pro_product.PackageInfo_RefID = Guid.NewGuid();                  // package info
                        cmn_pro_product.Save(Connection, Transaction);

                        ORM_CMN_BPT_BusinessParticipant manufacturer = new ORM_CMN_BPT_BusinessParticipant();
                        manufacturer.CMN_BPT_BusinessParticipantID = cmn_pro_product.ProducingBusinessParticipant_RefID;
                        manufacturer.DisplayName            = item.product_manufacturer;
                        manufacturer.IsCompany              = true;
                        manufacturer.IsNaturalPerson        = false;
                        manufacturer.Tenant_RefID           = securityTicket.TenantID;
                        manufacturer.Creation_Timestamp     = DateTime.Now;
                        manufacturer.Modification_Timestamp = DateTime.Now;
                        manufacturer.Save(Connection, Transaction);

                        ORM_CMN_PRO_PAC_PackageInfo package_info = new ORM_CMN_PRO_PAC_PackageInfo();
                        package_info.CMN_PRO_PAC_PackageInfoID = cmn_pro_product.PackageInfo_RefID;
                        package_info.Tenant_RefID           = securityTicket.TenantID;
                        package_info.Creation_Timestamp     = DateTime.Now;
                        package_info.Modification_Timestamp = DateTime.Now;

                        string amount = String.Empty;
                        string unit   = String.Empty;
                        foreach (char c in item.product_strength)
                        {
                            // Do not use IsDigit as it will include more than the characters 0 through to 9
                            if (c >= '0' && c <= '9')
                            {
                                amount += c;
                            }
                            else
                            {
                                unit += c;
                            }
                        }
                        package_info.PackageContent_Amount       = Int32.Parse(amount);
                        package_info.PackageContent_DisplayLabel = amount;


                        var unitQuery = new ORM_CMN_Unit.Query();
                        unitQuery.IsDeleted    = false;
                        unitQuery.Tenant_RefID = securityTicket.TenantID;
                        unitQuery.ISOCode      = unit;

                        var cmn_unit = ORM_CMN_Unit.Query.Search(Connection, Transaction, unitQuery).FirstOrDefault();

                        if (cmn_unit == null)
                        {
                            cmn_unit                        = new ORM_CMN_Unit();
                            cmn_unit.CMN_UnitID             = Guid.NewGuid();
                            cmn_unit.Tenant_RefID           = securityTicket.TenantID;
                            cmn_unit.Creation_Timestamp     = DateTime.Now;
                            cmn_unit.Modification_Timestamp = DateTime.Now;
                            cmn_unit.ISOCode                = unit;
                            cmn_unit.Save(Connection, Transaction);
                        }

                        package_info.PackageContent_MeasuredInUnit_RefID = cmn_unit.CMN_UnitID;
                        package_info.Save(Connection, Transaction);


                        //hec_products
                        ORM_HEC_Product hec_product = new ORM_HEC_Product();
                        hec_product.HEC_ProductID          = Guid.NewGuid();
                        hec_product.Ext_PRO_Product_RefID  = cmn_pro_product.CMN_PRO_ProductID;
                        hec_product.Tenant_RefID           = securityTicket.TenantID;
                        hec_product.Creation_Timestamp     = DateTime.Now;
                        hec_product.Modification_Timestamp = DateTime.Now;

                        Hec_ProductID = hec_product.HEC_ProductID;

                        var dosage_formQuery = new ORM_HEC_Product_DosageForm.Query();
                        dosage_formQuery.Tenant_RefID             = securityTicket.TenantID;
                        dosage_formQuery.IsDeleted                = false;
                        dosage_formQuery.GlobalPropertyMatchingID = item.product_form;

                        var dosage_form = ORM_HEC_Product_DosageForm.Query.Search(Connection, Transaction, dosage_formQuery).SingleOrDefault();

                        if (dosage_form == null)
                        {
                            dosage_form = new ORM_HEC_Product_DosageForm();
                            dosage_form.HEC_Product_DosageFormID = Guid.NewGuid();
                            dosage_form.GlobalPropertyMatchingID = item.product_form;
                            dosage_form.Tenant_RefID             = securityTicket.TenantID;
                            dosage_form.Creation_Timestamp       = DateTime.Now;
                            dosage_form.Modification_Timestamp   = DateTime.Now;

                            Dict form_name = new Dict("hec_product_dosageforms");
                            for (int i = 0; i < DBLanguages.Length; i++)
                            {
                                form_name.AddEntry(DBLanguages[i].CMN_LanguageID, item.product_form);
                            }
                            dosage_form.DosageForm_Name = form_name;
                            dosage_form.Save(Connection, Transaction);
                        }

                        hec_product.ProductDosageForm_RefID = dosage_form.HEC_Product_DosageFormID;  //dosage form
                        hec_product.Save(Connection, Transaction);


                        //product component

                        ORM_HEC_PRO_Product_Component product_component = new ORM_HEC_PRO_Product_Component();
                        product_component.HEC_PRO_Product_ComponentID = Guid.NewGuid();
                        product_component.HEC_PRO_Component_RefID     = Guid.NewGuid();//pro_component
                        product_component.HEC_PRO_Product_RefID       = hec_product.HEC_ProductID;
                        product_component.Tenant_RefID           = securityTicket.TenantID;
                        product_component.Creation_Timestamp     = DateTime.Now;
                        product_component.Modification_Timestamp = DateTime.Now;
                        product_component.Save(Connection, Transaction);

                        ORM_HEC_PRO_Component pro_component = new ORM_HEC_PRO_Component();
                        pro_component.HEC_PRO_ComponentID    = product_component.HEC_PRO_Component_RefID;
                        pro_component.Tenant_RefID           = securityTicket.TenantID;
                        pro_component.Creation_Timestamp     = DateTime.Now;
                        pro_component.Modification_Timestamp = DateTime.Now;
                        pro_component.Save(Connection, Transaction);

                        ORM_HEC_PRO_Component_SubstanceIngredient component_SubstanceIngredient = new ORM_HEC_PRO_Component_SubstanceIngredient();
                        component_SubstanceIngredient.HEC_PRO_Component_SubstanceIngredientID = Guid.NewGuid();
                        component_SubstanceIngredient.Component_RefID        = pro_component.HEC_PRO_ComponentID;
                        component_SubstanceIngredient.Tenant_RefID           = securityTicket.TenantID;
                        component_SubstanceIngredient.Creation_Timestamp     = DateTime.Now;
                        component_SubstanceIngredient.Modification_Timestamp = DateTime.Now;


                        var substanceQuery = new ORM_HEC_SUB_Substance.Query();
                        substanceQuery.IsDeleted              = false;
                        substanceQuery.Tenant_RefID           = securityTicket.TenantID;
                        substanceQuery.HealthcareSubstanceITL = item.substance_itl;

                        var substance = ORM_HEC_SUB_Substance.Query.Search(Connection, Transaction, substanceQuery).SingleOrDefault();

                        if (substance == null)
                        {
                            substance = new ORM_HEC_SUB_Substance();
                            substance.HealthcareSubstanceITL   = item.substance_itl;
                            substance.HEC_SUB_SubstanceID      = Guid.NewGuid();
                            substance.GlobalPropertyMatchingID = item.substance_name;
                            substance.Tenant_RefID             = securityTicket.TenantID;
                            substance.Creation_Timestamp       = DateTime.Now;
                            substance.Modification_Timestamp   = DateTime.Now;
                            substance.Save(Connection, Transaction);

                            ORM_HEC_SUB_Substance_Name substance_name = new ORM_HEC_SUB_Substance_Name();
                            substance_name.HEC_SUB_Substance_NameID = Guid.NewGuid();
                            substance_name.HEC_SUB_Substance_RefID  = substance.HEC_SUB_SubstanceID;

                            Dict substance_name_ = new Dict("hec_sub_substance_names");
                            for (int i = 0; i < DBLanguages.Length; i++)
                            {
                                substance_name_.AddEntry(DBLanguages[i].CMN_LanguageID, item.substance_name);
                            }
                            substance_name.SubstanceName_Label    = substance_name_;
                            substance_name.Tenant_RefID           = securityTicket.TenantID;
                            substance_name.Creation_Timestamp     = DateTime.Now;
                            substance_name.Modification_Timestamp = DateTime.Now;
                            substance_name.Save(Connection, Transaction);
                        }

                        component_SubstanceIngredient.Substance_RefID = substance.HEC_SUB_SubstanceID;
                        component_SubstanceIngredient.Save(Connection, Transaction);
                    }
                    else
                    {
                        var hec_productQuery = new ORM_HEC_Product.Query();
                        hec_productQuery.IsDeleted             = false;
                        hec_productQuery.Tenant_RefID          = securityTicket.TenantID;
                        hec_productQuery.Ext_PRO_Product_RefID = product.CMN_PRO_ProductID;

                        var hec_product = ORM_HEC_Product.Query.Search(Connection, Transaction, hec_productQuery).Single();

                        Hec_ProductID = hec_product.HEC_ProductID;
                    }


                    medicationUpdate.HEC_Product_RefID      = Hec_ProductID;
                    patient_medications.R_HEC_Product_RefID = Hec_ProductID;
                    patient_medications.R_DosageText        = item.dosage_text;
                    medicationUpdate.DosageText             = item.dosage_text;
                }
                else// medication is a substance
                {
                    medicationUpdate.IfSubstance_Strength        = item.substance_strength;
                    patient_medications.R_IfSubstance_Strength   = item.substance_strength;
                    medicationUpdate.IfSubstance_Unit_RefID      = item.substance_unit;
                    patient_medications.R_IfSubstance_Unit_RefID = item.substance_unit;
                    patient_medications.R_DosageText             = item.dosage_text;
                    medicationUpdate.DosageText = item.dosage_text;

                    var substanceQuery = new ORM_HEC_SUB_Substance.Query();
                    substanceQuery.IsDeleted              = false;
                    substanceQuery.Tenant_RefID           = securityTicket.TenantID;
                    substanceQuery.HealthcareSubstanceITL = item.substance_itl;

                    var substance = ORM_HEC_SUB_Substance.Query.Search(Connection, Transaction, substanceQuery).SingleOrDefault();

                    if (substance == null)
                    {
                        substance = new ORM_HEC_SUB_Substance();
                        substance.HealthcareSubstanceITL   = item.substance_itl;
                        substance.HEC_SUB_SubstanceID      = Guid.NewGuid();
                        substance.GlobalPropertyMatchingID = item.substance_name;
                        substance.Tenant_RefID             = securityTicket.TenantID;
                        substance.Creation_Timestamp       = DateTime.Now;
                        substance.Modification_Timestamp   = DateTime.Now;
                        substance.Save(Connection, Transaction);

                        ORM_HEC_SUB_Substance_Name substance_name = new ORM_HEC_SUB_Substance_Name();
                        substance_name.HEC_SUB_Substance_NameID = Guid.NewGuid();
                        substance_name.HEC_SUB_Substance_RefID  = substance.HEC_SUB_SubstanceID;

                        Dict substance_name_ = new Dict("hec_sub_substance_names");
                        for (int i = 0; i < DBLanguages.Length; i++)
                        {
                            substance_name_.AddEntry(DBLanguages[i].CMN_LanguageID, item.substance_name);
                        }
                        substance_name.SubstanceName_Label    = substance_name_;
                        substance_name.Tenant_RefID           = securityTicket.TenantID;
                        substance_name.Creation_Timestamp     = DateTime.Now;
                        substance_name.Modification_Timestamp = DateTime.Now;
                        substance_name.Save(Connection, Transaction);
                    }

                    medicationUpdate.IfSubstance_Substance_RefiD      = substance.HEC_SUB_SubstanceID;
                    patient_medications.R_IfSubstance_Substance_RefiD = substance.HEC_SUB_SubstanceID;
                }

                patient_medications.Save(Connection, Transaction);
                medicationUpdate.Save(Connection, Transaction);
                returnValue.Result = true;
            }

            #endregion

            #region Delete
            foreach (var item in Parameter.deleted_medications)
            {
                var medicationUpdateQuery = new ORM_HEC_ACT_PerformedAction_MedicationUpdate.Query();
                medicationUpdateQuery.IsDeleted = false;
                medicationUpdateQuery.IsMedicationDeactivated = false;
                medicationUpdateQuery.Tenant_RefID            = securityTicket.TenantID;
                medicationUpdateQuery.HEC_ACT_PerformedAction_MedicationUpdateID = item.performedAction_medicationUpdate_id;

                var medicationUpdate = ORM_HEC_ACT_PerformedAction_MedicationUpdate.Query.Search(Connection, Transaction, medicationUpdateQuery).Single();
                medicationUpdate.IsMedicationDeactivated = true;
                medicationUpdate.Save(Connection, Transaction);
            }

            #endregion
            return(returnValue);

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

            var defaultLanguages = ORM_CMN_Language.Query.Search(Connection, Transaction, new ORM_CMN_Language.Query
            {
                IsDeleted    = false,
                Tenant_RefID = securityTicket.TenantID
            });
            List <P_L3AS_SAVP_0004> parameterVendorProduct  = new List <P_L3AS_SAVP_0004>();
            List <P_L3AS_SAVV_0040> parameterVendorVariants = new List <P_L3AS_SAVV_0040>();
            #region ImportCatalogProducts
            foreach (var productFromCatalog in Parameter.Products.Where(x => !string.IsNullOrEmpty(x.ProductITL)).ToList())
            {
                P_L5PR_IPfC_1648 importProductFromCatalogParameter = new P_L5PR_IPfC_1648();
                importProductFromCatalogParameter.Product             = new ProductsForImport();
                importProductFromCatalogParameter.Product.CatalogITL  = productFromCatalog.CatalogITL;
                importProductFromCatalogParameter.Product.Code        = productFromCatalog.Code;
                importProductFromCatalogParameter.Product.Custom      = productFromCatalog.Custom;
                importProductFromCatalogParameter.Product.Description = productFromCatalog.Description;
                importProductFromCatalogParameter.Product.Name        = productFromCatalog.Name;
                importProductFromCatalogParameter.Product.LongName    = productFromCatalog.LongName;
                importProductFromCatalogParameter.Product.ProductITL  = productFromCatalog.ProductITL;
                importProductFromCatalogParameter.Product.Variants    = new List <Variant>();
                foreach (var variant in productFromCatalog.Variants)
                {
                    importProductFromCatalogParameter.Product.Variants.Add(variant);
                }
                importProductFromCatalogParameter.Product.Customizations = new List <Customization>();

                if (productFromCatalog.Customizations != null)
                {
                    foreach (var customization in productFromCatalog.Customizations)
                    {
                        importProductFromCatalogParameter.Product.Customizations.Add(customization);
                    }
                }

                importProductFromCatalogParameter.Product.Vat = productFromCatalog.Vat;
                Guid productID = cls_Import_Product_from_Catalog.Invoke(Connection, Transaction, importProductFromCatalogParameter, securityTicket).Result;
                Parameter.Products.Where(x => x.ProductITL == productFromCatalog.ProductITL).ToList().ForEach(x => x.LocalProductID = productID);
            }
            #endregion import

            foreach (var parameterProduct in Parameter.Products)
            {
                ORM_CMN_PRO_Product productDB = new ORM_CMN_PRO_Product();

                #region loadProduct

                productDB.Load(Connection, Transaction, parameterProduct.LocalProductID);

                Guid originalProductId = productDB.CMN_PRO_ProductID;
                #endregion
                P_L3AS_GNoPiAfP_1512 parameterAssortmentProductExists = new P_L3AS_GNoPiAfP_1512();
                parameterAssortmentProductExists.AssortmentID = Parameter.AssortmentID;
                parameterAssortmentProductExists.ProductRefID = originalProductId;
                int numberOfProductsInAssortment = cls_Get_Number_of_Products_in_Assortment_for_ProductID.Invoke(Connection, Transaction, parameterAssortmentProductExists, securityTicket).Result.NumberOfProducts;

                if (numberOfProductsInAssortment == 0)
                {
                    #region SaveProductCopy
                    ORM_CMN_PRO_Product productCopyToCreate = new ORM_CMN_PRO_Product();

                    productCopyToCreate.CMN_PRO_ProductID                    = Guid.NewGuid();
                    productCopyToCreate.ProductITL                           = string.Empty;
                    productCopyToCreate.IsProduct_Article                    = true;
                    productCopyToCreate.IsProductAvailableForOrdering        = true;
                    productCopyToCreate.IsImportedFromExternalCatalog        = false;
                    productCopyToCreate.IsProductForInternalDistributionOnly = true;
                    productCopyToCreate.Product_Name                         = new Dict(ORM_CMN_PRO_Product.TableName);
                    productCopyToCreate.Product_Description                  = new Dict(ORM_CMN_PRO_Product.TableName);
                    productCopyToCreate.PackageInfo_RefID                    = Guid.NewGuid();
                    productCopyToCreate.Creation_Timestamp                   = DateTime.Now;
                    productCopyToCreate.Tenant_RefID                         = securityTicket.TenantID;
                    productCopyToCreate.IsDeleted = false;
                    productCopyToCreate.Save(Connection, Transaction);
                    productCopyToCreate.Product_Number = productDB.Product_Number;
                    foreach (var lang in defaultLanguages)
                    {
                        productCopyToCreate.Product_Name.UpdateEntry(lang.CMN_LanguageID, productDB.Product_Name.Contents.FirstOrDefault().Content);
                        productCopyToCreate.Product_Description.UpdateEntry(lang.CMN_LanguageID, productDB.Product_Description.Contents.FirstOrDefault().Content);
                    }
                    productCopyToCreate.ProductType_RefID      = Guid.Empty;
                    productCopyToCreate.ProductSuccessor_RefID = Guid.Empty;
                    productCopyToCreate.IsDeleted = false;
                    var productDocumentStructureRefID = Guid.NewGuid();
                    if (productDB.Product_DocumentationStructure_RefID != Guid.Empty)
                    {
                        productCopyToCreate.Product_DocumentationStructure_RefID = productDocumentStructureRefID;
                    }
                    productCopyToCreate.Save(Connection, Transaction);
                    #endregion

                    #region copyPicture
                    if (productDB.Product_DocumentationStructure_RefID != Guid.Empty)
                    {
                        var documentStructureHeaders = ORM_DOC_Structure_Header.Query.Search(Connection, Transaction, new ORM_DOC_Structure_Header.Query {
                            DOC_Structure_HeaderID = productDB.Product_DocumentationStructure_RefID
                        });
                        if (documentStructureHeaders != null && documentStructureHeaders.Count() > 0)
                        {
                            var documentStructureHeader = documentStructureHeaders.First();
                            ORM_DOC_Structure_Header docStructureHeaderToCreate = new ORM_DOC_Structure_Header();
                            docStructureHeaderToCreate.DOC_Structure_HeaderID = productDocumentStructureRefID;
                            docStructureHeaderToCreate.IsDeleted    = false;
                            docStructureHeaderToCreate.Label        = documentStructureHeader.Label;
                            docStructureHeaderToCreate.Tenant_RefID = securityTicket.TenantID;
                            docStructureHeaderToCreate.Save(Connection, Transaction);

                            var documentStructures = ORM_DOC_Structure.Query.Search(Connection, Transaction, new ORM_DOC_Structure.Query
                            {
                                Structure_Header_RefID = documentStructureHeader.DOC_Structure_HeaderID
                            });
                            var documentStructureID = Guid.NewGuid();
                            if (documentStructures != null && documentStructures.Count() > 0)
                            {
                                var documentStructure = documentStructures.First();
                                ORM_DOC_Structure structureToCreate = new ORM_DOC_Structure();
                                structureToCreate.Label                   = "Product picture";
                                structureToCreate.DOC_StructureID         = documentStructureID;
                                structureToCreate.Structure_Header_RefID  = docStructureHeaderToCreate.DOC_Structure_HeaderID;
                                structureToCreate.CreatedBy_Account_RefID = securityTicket.AccountID;
                                structureToCreate.Tenant_RefID            = securityTicket.TenantID;
                                structureToCreate.Save(Connection, Transaction);

                                var document2DocumentStructures = ORM_DOC_Document_2_Structure.Query.Search(Connection, Transaction, new ORM_DOC_Document_2_Structure.Query
                                {
                                    Structure_RefID = documentStructure.DOC_StructureID
                                });

                                if (document2DocumentStructures != null && document2DocumentStructures.Count() > 0)
                                {
                                    var document2DocumentStructure = document2DocumentStructures.First();

                                    var documentService = InfrastructureFactory.CreateDocumentService();
                                    var webClient       = new WebClient();
                                    var imageBytes      = webClient.DownloadData(documentService.GenerateDownloadLink(document2DocumentStructure.Document_RefID));

                                    var documentID = documentService.UploadDocument(imageBytes, productCopyToCreate.Product_Number, securityTicket.SessionTicket, null, null);
                                    ORM_DOC_Document documentToCreate = new ORM_DOC_Document();
                                    documentToCreate.DOC_DocumentID = documentID;
                                    documentToCreate.Tenant_RefID   = securityTicket.TenantID;
                                    documentToCreate.Save(Connection, Transaction);


                                    ORM_DOC_Document_2_Structure documentStructureToSave = new ORM_DOC_Document_2_Structure();
                                    documentStructureToSave.Document_RefID        = documentToCreate.DOC_DocumentID;
                                    documentStructureToSave.Structure_RefID       = structureToCreate.DOC_StructureID;
                                    documentStructureToSave.StructureHeader_RefID = docStructureHeaderToCreate.DOC_Structure_HeaderID;
                                    documentStructureToSave.Tenant_RefID          = securityTicket.TenantID;
                                    documentStructureToSave.Save(Connection, Transaction);
                                }
                            }
                        }
                    }

                    #endregion



                    var dimensionsDb = ORM_CMN_PRO_Dimension.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Dimension.Query
                    {
                        IsDeleted     = false,
                        Tenant_RefID  = securityTicket.TenantID,
                        Product_RefID = originalProductId
                    });

                    List <ORM_CMN_PRO_Dimension_Value> dimensionValuesToCreate = new List <ORM_CMN_PRO_Dimension_Value>();

                    #region SaveDimensions
                    foreach (var dimensionDb in dimensionsDb)
                    {
                        var dimensionName = dimensionDb.DimensionName;
                        var dimensionID   = dimensionDb.CMN_PRO_DimensionID;

                        ORM_CMN_PRO_Dimension dimensionCopyToCreate = new ORM_CMN_PRO_Dimension();
                        dimensionCopyToCreate.CMN_PRO_DimensionID    = Guid.NewGuid();
                        dimensionCopyToCreate.Creation_Timestamp     = DateTime.Now;
                        dimensionCopyToCreate.DimensionName          = new Dict(ORM_CMN_PRO_Dimension.TableName);
                        dimensionCopyToCreate.IsDeleted              = false;
                        dimensionCopyToCreate.IsDimensionTemplate    = false;
                        dimensionCopyToCreate.Product_RefID          = productCopyToCreate.CMN_PRO_ProductID;
                        dimensionCopyToCreate.Tenant_RefID           = securityTicket.TenantID;
                        dimensionCopyToCreate.OrderSequence          = dimensionDb.OrderSequence;
                        dimensionCopyToCreate.Modification_Timestamp = DateTime.Now;
                        dimensionCopyToCreate.Save(Connection, Transaction);
                        foreach (var lang in defaultLanguages)
                        {
                            dimensionCopyToCreate.DimensionName.UpdateEntry(lang.CMN_LanguageID, dimensionName.Contents.FirstOrDefault().Content);
                        }
                        dimensionCopyToCreate.Save(Connection, Transaction);

                        var dimensionValuesDb = ORM_CMN_PRO_Dimension_Value.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Dimension_Value.Query
                        {
                            Tenant_RefID     = securityTicket.TenantID,
                            IsDeleted        = false,
                            Dimensions_RefID = dimensionID
                        });

                        dimensionValuesDb.ForEach(x => x.Dimensions_RefID = dimensionCopyToCreate.CMN_PRO_DimensionID);
                        dimensionValuesToCreate.AddRange(dimensionValuesDb);
                    }
                    #endregion

                    var productVariantsDb = ORM_CMN_PRO_Product_Variant.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product_Variant.Query
                    {
                        Tenant_RefID          = securityTicket.TenantID,
                        IsDeleted             = false,
                        CMN_PRO_Product_RefID = originalProductId
                    });



                    #region AssortmentProductSave
                    ORM_CMN_PRO_ASS_AssortmentProduct assortmentProductToCreate = new ORM_CMN_PRO_ASS_AssortmentProduct();
                    assortmentProductToCreate.CMN_PRO_ASS_AssortmentProductID = Guid.NewGuid();
                    assortmentProductToCreate.Ext_CMN_PRO_Product_RefID       = productCopyToCreate.CMN_PRO_ProductID;
                    assortmentProductToCreate.IsDeleted    = false;
                    assortmentProductToCreate.Tenant_RefID = securityTicket.TenantID;
                    assortmentProductToCreate.Save(Connection, Transaction);
                    #endregion

                    #region Assortment Vendor Product Save
                    P_L3AS_SAVP_0004 parameterVendorProductItem = new P_L3AS_SAVP_0004();
                    parameterVendorProductItem.AssortmentProductID = assortmentProductToCreate.CMN_PRO_ASS_AssortmentProductID;
                    parameterVendorProductItem.ProductRefID        = originalProductId;
                    parameterVendorProduct.Add(parameterVendorProductItem);
                    ORM_CMN_PRO_ASS_AssortmentProduct_VendorProduct assortmentVendorProductToCreate = new ORM_CMN_PRO_ASS_AssortmentProduct_VendorProduct();

                    #endregion

                    #region Assortment2Assortment Product save
                    ORM_CMN_PRO_ASS_Assortment_2_AssortmentProduct assortmentToAssortmentProductToCreate = new ORM_CMN_PRO_ASS_Assortment_2_AssortmentProduct();
                    assortmentToAssortmentProductToCreate.AssignmentID = Guid.NewGuid();
                    assortmentToAssortmentProductToCreate.CMN_PRO_ASS_Assortment_Product_RefID = assortmentProductToCreate.CMN_PRO_ASS_AssortmentProductID;
                    assortmentToAssortmentProductToCreate.CMN_PRO_ASS_Assortment_RefID         = Parameter.AssortmentID;
                    assortmentToAssortmentProductToCreate.IsDeleted    = false;
                    assortmentToAssortmentProductToCreate.Tenant_RefID = securityTicket.TenantID;
                    assortmentToAssortmentProductToCreate.Save(Connection, Transaction);
                    #endregion
                    List <ORM_CMN_PRO_Variant_DimensionValue> variantDimensionValueAssignmentToCreate = new List <ORM_CMN_PRO_Variant_DimensionValue>();
                    foreach (var productVariantDb in productVariantsDb)
                    {
                        #region ProductVariant Save
                        ORM_CMN_PRO_ASS_DistributionPrice distributionPriceToCreate = new ORM_CMN_PRO_ASS_DistributionPrice();
                        distributionPriceToCreate.CMN_PRO_ASS_DistributionPriceID = Guid.NewGuid();
                        distributionPriceToCreate.IsDeleted    = false;
                        distributionPriceToCreate.Tenant_RefID = securityTicket.TenantID;
                        distributionPriceToCreate.Save(Connection, Transaction);

                        ORM_CMN_PRO_Product_Variant productVariantToCreate = new ORM_CMN_PRO_Product_Variant();
                        productVariantToCreate.CMN_PRO_Product_VariantID = Guid.NewGuid();
                        productVariantToCreate.CMN_PRO_Product_RefID     = productCopyToCreate.CMN_PRO_ProductID;
                        productVariantToCreate.Creation_Timestamp        = DateTime.Now;
                        productVariantToCreate.Tenant_RefID      = securityTicket.TenantID;
                        productVariantToCreate.ProductVariantITL = "";
                        productVariantToCreate.ProductVariant_DocumentationStructure_RefID = Guid.Empty;
                        productVariantToCreate.VariantName = new Dict(ORM_CMN_PRO_Product_Variant.TableName);
                        productVariantToCreate.IsDeleted   = false;
                        productVariantToCreate.IsStandardProductVariant      = productVariantDb.IsStandardProductVariant;
                        productVariantToCreate.IsImportedFromExternalCatalog = false;
                        productVariantToCreate.Modification_Timestamp        = DateTime.Now;

                        productVariantToCreate.Save(Connection, Transaction);
                        foreach (var lang in defaultLanguages)
                        {
                            productVariantToCreate.VariantName.UpdateEntry(lang.CMN_LanguageID, productVariantDb.VariantName.Contents.FirstOrDefault().Content);
                        }
                        productVariantToCreate.Save(Connection, Transaction);

                        #endregion

                        #region dimensionValuesAssignemnt

                        var assignmentExists = ORM_CMN_PRO_Variant_DimensionValue.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Variant_DimensionValue.Query
                        {
                            Tenant_RefID = securityTicket.TenantID,

                            ProductVariant_RefID = productVariantDb.CMN_PRO_Product_VariantID
                        });
                        foreach (var variantAssignment in assignmentExists)
                        {
                            variantAssignment.IsDeleted            = false;
                            variantAssignment.ProductVariant_RefID = productVariantToCreate.CMN_PRO_Product_VariantID;
                            variantAssignment.Tenant_RefID         = securityTicket.TenantID;

                            variantDimensionValueAssignmentToCreate.Add(variantAssignment);
                        }
                        #endregion

                        #region AddVariantToAssortment
                        ORM_CMN_PRO_ASS_AssortmentVariant assortmentVariantToCreate = new ORM_CMN_PRO_ASS_AssortmentVariant();
                        assortmentVariantToCreate.CMN_PRO_ASS_AssortmentVariantID   = Guid.NewGuid();
                        assortmentVariantToCreate.Ext_CMN_PRO_Product_Variant_RefID = productVariantToCreate.CMN_PRO_Product_VariantID;
                        assortmentVariantToCreate.IsDeleted = false;
                        assortmentVariantToCreate.DistributionPrice_RefID = distributionPriceToCreate.CMN_PRO_ASS_DistributionPriceID;
                        assortmentVariantToCreate.Tenant_RefID            = securityTicket.TenantID;
                        assortmentVariantToCreate.Save(Connection, Transaction);
                        #endregion
                        P_L3AS_SAVV_0040 parameterVendorVariantItem = new P_L3AS_SAVV_0040();
                        parameterVendorVariantItem.AssortmentVariantID    = assortmentVariantToCreate.CMN_PRO_ASS_AssortmentVariantID;
                        parameterVendorVariantItem.ProductVariantID       = productVariantDb.CMN_PRO_Product_VariantID;
                        parameterVendorVariantItem.OrderSequence          = 1;
                        parameterVendorVariantItem.IsDefaultVendorVariant = true;
                        parameterVendorVariants.Add(parameterVendorVariantItem);
                    }

                    #region SaveDimensionValuesAndAssignment
                    foreach (var dimensionValueToCreate in dimensionValuesToCreate)
                    {
                        var valueName = dimensionValueToCreate.DimensionValue_Text;
                        var valueID   = dimensionValueToCreate.CMN_PRO_Dimension_ValueID;

                        ORM_CMN_PRO_Dimension_Value dimensionValueToCreateUpdate = new ORM_CMN_PRO_Dimension_Value();
                        dimensionValueToCreateUpdate.CMN_PRO_Dimension_ValueID = Guid.NewGuid();
                        dimensionValueToCreateUpdate.Creation_Timestamp        = DateTime.Now;
                        dimensionValueToCreateUpdate.DimensionValue_Text       = new Dict(ORM_CMN_PRO_Dimension_Value.TableName);
                        dimensionValueToCreateUpdate.Dimensions_RefID          = dimensionValueToCreate.Dimensions_RefID;
                        dimensionValueToCreateUpdate.IsDeleted              = false;
                        dimensionValueToCreateUpdate.Tenant_RefID           = securityTicket.TenantID;
                        dimensionValueToCreateUpdate.Modification_Timestamp = DateTime.Now;
                        dimensionValueToCreateUpdate.OrderSequence          = dimensionValueToCreate.OrderSequence;
                        dimensionValueToCreateUpdate.Save(Connection, Transaction);
                        foreach (var lang in defaultLanguages)
                        {
                            dimensionValueToCreateUpdate.DimensionValue_Text.UpdateEntry(lang.CMN_LanguageID, valueName.Contents.FirstOrDefault().Content);
                        }
                        dimensionValueToCreateUpdate.Save(Connection, Transaction);

                        var assignments = variantDimensionValueAssignmentToCreate.Where(x => x.DimensionValue_RefID == valueID).ToList();
                        foreach (var assignment in assignments)
                        {
                            ORM_CMN_PRO_Variant_DimensionValue assignmentToSave = new ORM_CMN_PRO_Variant_DimensionValue();
                            assignmentToSave.CMN_PRO_Variant_DimensionValueID = Guid.NewGuid();
                            assignmentToSave.Creation_Timestamp     = DateTime.Now;
                            assignmentToSave.DimensionValue_RefID   = dimensionValueToCreateUpdate.CMN_PRO_Dimension_ValueID;
                            assignmentToSave.IsDeleted              = false;
                            assignmentToSave.Modification_Timestamp = DateTime.Now;
                            assignmentToSave.ProductVariant_RefID   = assignment.ProductVariant_RefID;
                            assignmentToSave.Tenant_RefID           = securityTicket.TenantID;
                            assignmentToSave.Save(Connection, Transaction);
                        }
                    }
                    #endregion
                }
            }
            cls_Save_Assortment_Vendor_Products.Invoke(Connection, Transaction, parameterVendorProduct.ToArray(), securityTicket);
            cls_Save_Assortment_Vendor_Variants.Invoke(Connection, Transaction, parameterVendorVariants.ToArray(), securityTicket);

            return(returnValue);

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

            #region Get Languages

            P_L2LN_GALFTID_1530 langParam = new P_L2LN_GALFTID_1530();
            langParam.Tenant_RefID = securityTicket.TenantID;
            var DBLanguages = cls_Get_All_Languages_ForTenantID.Invoke(Connection, Transaction, langParam, securityTicket).Result;

            var LanguageID = DBLanguages.Where(i => i.ISO_639_1 == "DE").SingleOrDefault().CMN_LanguageID;

            #endregion

            #region ORM_ORD_PRC_ProcurementOrder_Header

            var procurementHeader = new ORM_ORD_PRC_ProcurementOrder_Header();
            procurementHeader.Load(Connection, Transaction, Parameter.ProcurementHeaderID);

            #endregion

            #region ORM_ORD_PRC_ProcurementOrder_Positions

            var paramShoppingProducts = new P_L5PO_GPPaSCIfH_1750();
            paramShoppingProducts.ProcurementOrderHeaderID = Parameter.ProcurementHeaderID;
            var shoppingProducts = cls_Get_ProcurementPositions_and_ShoppingCartInfo_for_HeaderID.Invoke(Connection, Transaction, paramShoppingProducts, securityTicket).Result;

            #endregion

            #region Positions

            var positions = new List <L6PO_GPfCOCM_1502a>();

            foreach (var shoppingProduct in shoppingProducts)
            {
                var product = new ORM_CMN_PRO_Product();
                product.Load(Connection, Transaction, shoppingProduct.CMN_PRO_Product_RefID);

                if (String.IsNullOrEmpty(product.ProductITL))
                {
                    product.ProductITL = Guid.NewGuid().ToString();
                    product.Save(Connection, Transaction);
                }

                var catalogSubscription = new ORM_CMN_PRO_SubscribedCatalog();
                catalogSubscription.Load(Connection, Transaction, product.IfImportedFromExternalCatalog_CatalogSubscription_RefID);

                var position = new L6PO_GPfCOCM_1502a();
                position.ProductITL                  = product.ProductITL;
                position.ProductNumber               = product.Product_Number;
                position.ProductName                 = product.Product_Name.GetContent(LanguageID);
                position.ProductDescription          = product.Product_Description.GetContent(LanguageID);
                position.Comment                     = "NotDefinedBySender";
                position.Quantity                    = shoppingProduct.Position_Quantity;
                position.IsProductReplacementAllowed = shoppingProduct.IsProductReplacementAllowed;
                position.SourceCatalogITL            = catalogSubscription.CatalogCodeITL;
                position.UnitPrice                   = shoppingProduct.Position_ValuePerUnit;
                position.NetoPrice                   = shoppingProduct.Position_ValueTotal;

                var shoppingCart2Office = ORM_ORD_PRC_Office_ShoppingCart.Query.Search(Connection, Transaction,
                                                                                       new ORM_ORD_PRC_Office_ShoppingCart.Query {
                    ORD_PRC_ShoppingCart_RefID = shoppingProduct.ORD_PRC_ShoppingCart_RefID,
                    IsDeleted    = false,
                    Tenant_RefID = securityTicket.TenantID
                }
                                                                                       ).Single();

                position.Quantites = new L6PO_GPfCOCM_1502b[] {
                    new L6PO_GPfCOCM_1502b()
                    {
                        OfficeID = shoppingCart2Office.CMN_STR_Office_RefID,
                        Quantity = shoppingProduct.Position_Quantity
                    }
                };

                positions.Add(position);
            }

            #endregion

            #region Comments

            var procurmentNotes = ORM_ORD_PRC_ProcurementOrder_Note.Query.Search(Connection, Transaction, new ORM_ORD_PRC_ProcurementOrder_Note.Query()
            {
                ORD_PRC_ProcurementOrder_Header_RefID = procurementHeader.ORD_PRC_ProcurementOrder_HeaderID,
                IsDeleted = false
            }).ToList();

            var comments = new List <L6PO_GPfCOCM_1502c>();

            foreach (var note in procurmentNotes)
            {
                comments.Add(
                    new L6PO_GPfCOCM_1502c()
                {
                    OfficeID       = note.CMN_STR_Office_RefID,
                    Content        = note.Comment,
                    PublilshDate   = note.NotePublishDate,
                    SequenceNumber = note.SequenceOrderNumber,
                    Title          = note.Title
                }
                    );
            }

            #endregion

            returnValue.Result.ProcurProcurementHeaderID = procurementHeader.ORD_PRC_ProcurementOrder_HeaderID;
            returnValue.Result.OrderNumber          = procurementHeader.ProcurementOrder_Number;
            returnValue.Result.ProcurementOrderDate = procurementHeader.ProcurementOrder_Date;
            returnValue.Result.Comments             = comments.ToArray();

            returnValue.Result.Positions = positions.ToArray();

            return(returnValue);

            #endregion UserCode
        }
Пример #20
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5ME_SP_1054 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here
            returnValue.Result = new Guid();
            if (!Parameter.IsDeleted)
            {
                var  DBLanguages   = cls_Get_All_Languages.Invoke(Connection, Transaction, securityTicket).Result;
                Guid Hec_ProductID = Guid.Empty;

                //check if product exists
                var productQuery = new ORM_CMN_PRO_Product.Query();
                productQuery.Tenant_RefID      = securityTicket.TenantID;
                productQuery.IsDeleted         = false;
                productQuery.CMN_PRO_ProductID = Guid.Parse(Parameter.product_itl);
                var product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, productQuery).SingleOrDefault();

                //save
                if (product == null)
                {
                    ORM_CMN_PRO_Product cmn_pro_product = new ORM_CMN_PRO_Product();
                    cmn_pro_product.CMN_PRO_ProductID      = Guid.NewGuid();
                    cmn_pro_product.Tenant_RefID           = securityTicket.TenantID;
                    cmn_pro_product.Creation_Timestamp     = DateTime.Now;
                    cmn_pro_product.Modification_Timestamp = DateTime.Now;

                    Dict product_name = new Dict("cmn_pro_products");
                    for (int i = 0; i < DBLanguages.Length; i++)
                    {
                        product_name.AddEntry(DBLanguages[i].CMN_LanguageID, Parameter.product_name);
                    }
                    cmn_pro_product.Product_Name = product_name;
                    cmn_pro_product.ProductITL   = Guid.NewGuid().ToString();
                    cmn_pro_product.ProducingBusinessParticipant_RefID = Guid.NewGuid(); //manufacturer
                    cmn_pro_product.PackageInfo_RefID = Guid.NewGuid();                  // package info
                    cmn_pro_product.Save(Connection, Transaction);
                    ORM_CMN_BPT_BusinessParticipant manufacturer = new ORM_CMN_BPT_BusinessParticipant();

                    var manufacturerQuery = new ORM_CMN_BPT_BusinessParticipant.Query();
                    manufacturerQuery.Tenant_RefID = securityTicket.TenantID;
                    manufacturerQuery.IsDeleted    = false;
                    manufacturerQuery.CMN_BPT_BusinessParticipantID = Guid.Parse(Parameter.product_manufacturer_id);

                    if (Parameter.product_manufacturer_id == Guid.Empty.ToString())
                    {
                        manufacturer.CMN_BPT_BusinessParticipantID = cmn_pro_product.ProducingBusinessParticipant_RefID;
                        manufacturer.DisplayName            = Parameter.product_manufacturer;
                        manufacturer.IsCompany              = true;
                        manufacturer.IsNaturalPerson        = false;
                        manufacturer.Tenant_RefID           = securityTicket.TenantID;
                        manufacturer.Creation_Timestamp     = DateTime.Now;
                        manufacturer.Modification_Timestamp = DateTime.Now;
                        manufacturer.Save(Connection, Transaction);
                    }
                    else
                    {
                        manufacturer = ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, manufacturerQuery).Single();
                    }

                    ORM_CMN_PRO_PAC_PackageInfo package_info = new ORM_CMN_PRO_PAC_PackageInfo();
                    package_info.CMN_PRO_PAC_PackageInfoID = cmn_pro_product.PackageInfo_RefID;
                    package_info.Tenant_RefID           = securityTicket.TenantID;
                    package_info.Creation_Timestamp     = DateTime.Now;
                    package_info.Modification_Timestamp = DateTime.Now;

                    string amount = String.Empty;
                    string unit   = String.Empty;
                    foreach (char c in Parameter.product_strength)
                    {
                        // Do not use IsDigit as it will include more than the characters 0 through to 9
                        if (c >= '0' && c <= '9')
                        {
                            amount += c;
                        }
                        else
                        {
                            unit += c;
                        }
                    }
                    package_info.PackageContent_Amount       = Int32.Parse(amount);
                    package_info.PackageContent_DisplayLabel = amount;


                    var unitQuery = new ORM_CMN_Unit.Query();
                    unitQuery.IsDeleted    = false;
                    unitQuery.Tenant_RefID = securityTicket.TenantID;
                    unitQuery.ISOCode      = unit;

                    var cmn_unit = ORM_CMN_Unit.Query.Search(Connection, Transaction, unitQuery).FirstOrDefault();

                    if (cmn_unit == null)
                    {
                        cmn_unit                        = new ORM_CMN_Unit();
                        cmn_unit.CMN_UnitID             = Guid.NewGuid();
                        cmn_unit.Tenant_RefID           = securityTicket.TenantID;
                        cmn_unit.Creation_Timestamp     = DateTime.Now;
                        cmn_unit.Modification_Timestamp = DateTime.Now;
                        cmn_unit.ISOCode                = unit;
                        cmn_unit.Save(Connection, Transaction);
                    }

                    package_info.PackageContent_MeasuredInUnit_RefID = cmn_unit.CMN_UnitID;
                    package_info.Save(Connection, Transaction);

                    //hec_products
                    ORM_HEC_Product hec_product = new ORM_HEC_Product();
                    hec_product.HEC_ProductID          = Guid.NewGuid();
                    hec_product.Ext_PRO_Product_RefID  = cmn_pro_product.CMN_PRO_ProductID;
                    hec_product.Tenant_RefID           = securityTicket.TenantID;
                    hec_product.Creation_Timestamp     = DateTime.Now;
                    hec_product.Modification_Timestamp = DateTime.Now;

                    Hec_ProductID = hec_product.HEC_ProductID;

                    var dosage_formQuery = new ORM_HEC_Product_DosageForm.Query();
                    dosage_formQuery.Tenant_RefID             = securityTicket.TenantID;
                    dosage_formQuery.IsDeleted                = false;
                    dosage_formQuery.GlobalPropertyMatchingID = Parameter.product_form;

                    var dosage_form = ORM_HEC_Product_DosageForm.Query.Search(Connection, Transaction, dosage_formQuery).SingleOrDefault();

                    if (dosage_form == null)
                    {
                        dosage_form = new ORM_HEC_Product_DosageForm();
                        dosage_form.HEC_Product_DosageFormID = Guid.NewGuid();
                        dosage_form.GlobalPropertyMatchingID = Parameter.product_form;
                        dosage_form.Tenant_RefID             = securityTicket.TenantID;
                        dosage_form.Creation_Timestamp       = DateTime.Now;
                        dosage_form.Modification_Timestamp   = DateTime.Now;

                        Dict form_name = new Dict("hec_product_dosageforms");
                        for (int i = 0; i < DBLanguages.Length; i++)
                        {
                            form_name.AddEntry(DBLanguages[i].CMN_LanguageID, Parameter.product_form);
                        }
                        dosage_form.DosageForm_Name = form_name;
                        dosage_form.Save(Connection, Transaction);
                    }

                    hec_product.ProductDosageForm_RefID = dosage_form.HEC_Product_DosageFormID;  //dosage form
                    hec_product.Save(Connection, Transaction);


                    //product component


                    ORM_HEC_PRO_Product_Component product_component = new ORM_HEC_PRO_Product_Component();
                    product_component.HEC_PRO_Product_ComponentID = Guid.NewGuid();
                    product_component.HEC_PRO_Component_RefID     = Guid.NewGuid();//pro_component
                    product_component.HEC_PRO_Product_RefID       = hec_product.HEC_ProductID;
                    product_component.Tenant_RefID           = securityTicket.TenantID;
                    product_component.Creation_Timestamp     = DateTime.Now;
                    product_component.Modification_Timestamp = DateTime.Now;
                    product_component.Save(Connection, Transaction);

                    ORM_HEC_PRO_Component pro_component = new ORM_HEC_PRO_Component();
                    pro_component.HEC_PRO_ComponentID    = product_component.HEC_PRO_Component_RefID;
                    pro_component.Tenant_RefID           = securityTicket.TenantID;
                    pro_component.Creation_Timestamp     = DateTime.Now;
                    pro_component.Modification_Timestamp = DateTime.Now;
                    pro_component.Save(Connection, Transaction);

                    ORM_HEC_PRO_Component_SubstanceIngredient component_SubstanceIngredient = new ORM_HEC_PRO_Component_SubstanceIngredient();
                    component_SubstanceIngredient.HEC_PRO_Component_SubstanceIngredientID = Guid.NewGuid();
                    component_SubstanceIngredient.Component_RefID        = pro_component.HEC_PRO_ComponentID;
                    component_SubstanceIngredient.Tenant_RefID           = securityTicket.TenantID;
                    component_SubstanceIngredient.Creation_Timestamp     = DateTime.Now;
                    component_SubstanceIngredient.Modification_Timestamp = DateTime.Now;

                    var substanceQuery = new ORM_HEC_SUB_Substance.Query();
                    substanceQuery.IsDeleted           = false;
                    substanceQuery.Tenant_RefID        = securityTicket.TenantID;
                    substanceQuery.HEC_SUB_SubstanceID = Parameter.substance_id;

                    var substance = ORM_HEC_SUB_Substance.Query.Search(Connection, Transaction, substanceQuery).SingleOrDefault();

                    component_SubstanceIngredient.Substance_RefID = substance.HEC_SUB_SubstanceID;
                    component_SubstanceIngredient.Save(Connection, Transaction);
                    Parameter.IsSaved     = true;
                    Parameter.product_itl = cmn_pro_product.CMN_PRO_ProductID.ToString();
                    returnValue.Result    = cmn_pro_product.CMN_PRO_ProductID;
                }
                else
                {
                    //edit
                    Parameter.IsEdited = true;

                    Dict product_name = new Dict("cmn_pro_products");
                    for (int i = 0; i < DBLanguages.Length; i++)
                    {
                        product_name.AddEntry(DBLanguages[i].CMN_LanguageID, Parameter.product_name);
                    }
                    product.Product_Name = product_name;


                    var manufacturerQuery = new ORM_CMN_BPT_BusinessParticipant.Query();
                    manufacturerQuery.Tenant_RefID = securityTicket.TenantID;
                    manufacturerQuery.IsDeleted    = false;
                    manufacturerQuery.CMN_BPT_BusinessParticipantID = Guid.Parse(Parameter.product_manufacturer_id);
                    ORM_CMN_BPT_BusinessParticipant manufacturer = new ORM_CMN_BPT_BusinessParticipant();
                    if (Parameter.product_manufacturer_id == Guid.Empty.ToString())
                    {
                        manufacturer.CMN_BPT_BusinessParticipantID = new Guid();
                        manufacturer.DisplayName            = Parameter.product_manufacturer;
                        manufacturer.IsCompany              = true;
                        manufacturer.IsNaturalPerson        = false;
                        manufacturer.Tenant_RefID           = securityTicket.TenantID;
                        manufacturer.Creation_Timestamp     = DateTime.Now;
                        manufacturer.Modification_Timestamp = DateTime.Now;
                        manufacturer.Save(Connection, Transaction);
                    }
                    else
                    {
                        manufacturer = ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, manufacturerQuery).Single();
                    }
                    product.ProducingBusinessParticipant_RefID = manufacturer.CMN_BPT_BusinessParticipantID;


                    var package_info = ORM_CMN_PRO_PAC_PackageInfo.Query.Search(Connection, Transaction, new ORM_CMN_PRO_PAC_PackageInfo.Query()
                    {
                        CMN_PRO_PAC_PackageInfoID = product.PackageInfo_RefID,
                        Tenant_RefID = securityTicket.TenantID,
                        IsDeleted    = false
                    }).Single();

                    string amount = String.Empty;
                    string unit   = String.Empty;
                    foreach (char c in Parameter.product_strength)
                    {
                        // Do not use IsDigit as it will include more than the characters 0 through to 9
                        if (c >= '0' && c <= '9')
                        {
                            amount += c;
                        }
                        else
                        {
                            unit += c;
                        }
                    }
                    package_info.PackageContent_Amount       = Int32.Parse(amount);
                    package_info.PackageContent_DisplayLabel = amount;
                    package_info.Save(Connection, Transaction);



                    var unitQuery = new ORM_CMN_Unit.Query();
                    unitQuery.IsDeleted    = false;
                    unitQuery.Tenant_RefID = securityTicket.TenantID;
                    unitQuery.ISOCode      = unit;

                    var cmn_unit = ORM_CMN_Unit.Query.Search(Connection, Transaction, unitQuery).FirstOrDefault();

                    if (cmn_unit == null)
                    {
                        cmn_unit                        = new ORM_CMN_Unit();
                        cmn_unit.CMN_UnitID             = Guid.NewGuid();
                        cmn_unit.Tenant_RefID           = securityTicket.TenantID;
                        cmn_unit.Creation_Timestamp     = DateTime.Now;
                        cmn_unit.Modification_Timestamp = DateTime.Now;
                        cmn_unit.ISOCode                = unit;
                        cmn_unit.Save(Connection, Transaction);
                    }

                    package_info.PackageContent_MeasuredInUnit_RefID = cmn_unit.CMN_UnitID;
                    package_info.Save(Connection, Transaction);

                    var dosage_formQuery = new ORM_HEC_Product_DosageForm.Query();
                    dosage_formQuery.Tenant_RefID             = securityTicket.TenantID;
                    dosage_formQuery.IsDeleted                = false;
                    dosage_formQuery.GlobalPropertyMatchingID = Parameter.product_form;

                    var dosage_form = ORM_HEC_Product_DosageForm.Query.Search(Connection, Transaction, dosage_formQuery).SingleOrDefault();

                    if (dosage_form == null)
                    {
                        dosage_form = new ORM_HEC_Product_DosageForm();
                        dosage_form.HEC_Product_DosageFormID = Guid.NewGuid();
                        dosage_form.GlobalPropertyMatchingID = Parameter.product_form;
                        dosage_form.Tenant_RefID             = securityTicket.TenantID;
                        dosage_form.Creation_Timestamp       = DateTime.Now;
                        dosage_form.Modification_Timestamp   = DateTime.Now;

                        Dict form_name = new Dict("hec_product_dosageforms");
                        for (int i = 0; i < DBLanguages.Length; i++)
                        {
                            form_name.AddEntry(DBLanguages[i].CMN_LanguageID, Parameter.product_form);
                        }
                        dosage_form.DosageForm_Name = form_name;
                        dosage_form.Save(Connection, Transaction);
                    }
                    ORM_HEC_Product hec_product = ORM_HEC_Product.Query.Search(Connection, Transaction, new ORM_HEC_Product.Query()
                    {
                        Tenant_RefID          = securityTicket.TenantID,
                        IsDeleted             = false,
                        Ext_PRO_Product_RefID = product.CMN_PRO_ProductID
                    }).Single();
                    hec_product.ProductDosageForm_RefID = dosage_form.HEC_Product_DosageFormID;
                    hec_product.Save(Connection, Transaction);

                    ORM_HEC_PRO_Product_Component product_component = ORM_HEC_PRO_Product_Component.Query.Search(Connection, Transaction, new ORM_HEC_PRO_Product_Component.Query()
                    {
                        HEC_PRO_Product_RefID = hec_product.HEC_ProductID,
                        Tenant_RefID          = securityTicket.TenantID,
                        IsDeleted             = false
                    }).Single();


                    ORM_HEC_PRO_Component pro_component = ORM_HEC_PRO_Component.Query.Search(Connection, Transaction, new ORM_HEC_PRO_Component.Query()
                    {
                        HEC_PRO_ComponentID = product_component.HEC_PRO_Component_RefID,
                        Tenant_RefID        = securityTicket.TenantID,
                        IsDeleted           = false
                    }).Single();

                    ORM_HEC_PRO_Component_SubstanceIngredient component_SubstanceIngredient = ORM_HEC_PRO_Component_SubstanceIngredient.Query.Search(Connection, Transaction, new ORM_HEC_PRO_Component_SubstanceIngredient.Query()
                    {
                        Component_RefID = pro_component.HEC_PRO_ComponentID,
                        IsDeleted       = false,
                        Tenant_RefID    = securityTicket.TenantID
                    }).Single();

                    var substanceQuery = new ORM_HEC_SUB_Substance.Query();
                    substanceQuery.IsDeleted           = false;
                    substanceQuery.Tenant_RefID        = securityTicket.TenantID;
                    substanceQuery.HEC_SUB_SubstanceID = Parameter.substance_id;

                    var substance = ORM_HEC_SUB_Substance.Query.Search(Connection, Transaction, substanceQuery).SingleOrDefault();

                    component_SubstanceIngredient.Substance_RefID = substance.HEC_SUB_SubstanceID;
                    component_SubstanceIngredient.Save(Connection, Transaction);
                }
            }
            else
            {
                //delete
                ORM_CMN_PRO_Product product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product.Query()
                {
                    Tenant_RefID      = securityTicket.TenantID,
                    CMN_PRO_ProductID = Guid.Parse(Parameter.product_itl),
                    IsDeleted         = false
                }).Single();

                ORM_HEC_Product hec_product = ORM_HEC_Product.Query.Search(Connection, Transaction, new ORM_HEC_Product.Query()
                {
                    Tenant_RefID          = securityTicket.TenantID,
                    IsDeleted             = false,
                    Ext_PRO_Product_RefID = product.CMN_PRO_ProductID
                }).Single();


                ORM_CMN_PRO_PAC_PackageInfo package_info = ORM_CMN_PRO_PAC_PackageInfo.Query.Search(Connection, Transaction, new ORM_CMN_PRO_PAC_PackageInfo.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false,
                    CMN_PRO_PAC_PackageInfoID = product.PackageInfo_RefID
                }).Single();


                ORM_HEC_PRO_Product_Component product_component = ORM_HEC_PRO_Product_Component.Query.Search(Connection, Transaction, new ORM_HEC_PRO_Product_Component.Query()
                {
                    Tenant_RefID          = securityTicket.TenantID,
                    IsDeleted             = false,
                    HEC_PRO_Product_RefID = hec_product.HEC_ProductID
                }).Single();


                ORM_HEC_PRO_Component pro_component = ORM_HEC_PRO_Component.Query.Search(Connection, Transaction, new ORM_HEC_PRO_Component.Query()
                {
                    HEC_PRO_ComponentID = product_component.HEC_PRO_Component_RefID,
                    Tenant_RefID        = securityTicket.TenantID,
                    IsDeleted           = false
                }).Single();


                ORM_HEC_PRO_Component_SubstanceIngredient component_SubstanceIngredient = ORM_HEC_PRO_Component_SubstanceIngredient.Query.Search(Connection, Transaction, new ORM_HEC_PRO_Component_SubstanceIngredient.Query()
                {
                    Tenant_RefID    = securityTicket.TenantID,
                    IsDeleted       = false,
                    Component_RefID = pro_component.HEC_PRO_ComponentID
                }).Single();

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

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

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

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

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

                returnValue.Result = product.CMN_PRO_ProductID;
            }

            return(returnValue);

            #endregion UserCode
        }
Пример #21
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
        }
        protected static FR_L3PR_IoUPfSC_1326_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L3PR_IoUPfSC_1326 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L3PR_IoUPfSC_1326_Array();

            //Put your code here
            var importedProducts = new List <L3PR_IoUPfSC_1326>();

            #region ImportOrUpdate Product's BaseData
            P_L3PR_IoUPBD_1614 param = new P_L3PR_IoUPBD_1614();
            param.Products = Parameter.Products.Select(i => i.Product).ToArray();
            var importedProductsBaseData = cls_ImportOrUpdate_Products_BaseData.Invoke(Connection, Transaction, param, securityTicket).Result;
            #endregion

            //TODO: for each product saved, create or update product_2_productGroup
            foreach (var importedProductBaseData in importedProductsBaseData)
            {
                var currentParameter = Parameter.Products.SingleOrDefault(i => i.Product.ProductITL == importedProductBaseData.ProductITL);

                var product = new ORM_CMN_PRO_Product();
                product.Load(Connection, Transaction, importedProductBaseData.ProductID);

                if (!importedProductBaseData.IsAlreadyExisted)
                {
                    product.IfImportedFromExternalCatalog_CatalogSubscription_RefID = Parameter.SubscribedCatalogID;
                    product.IsImportedFromExternalCatalog = true;
                    product.Save(Connection, Transaction);

                    ORM_CMN_PRO_Product_2_ProductGroup product_2_productGroup = new ORM_CMN_PRO_Product_2_ProductGroup();
                    product_2_productGroup.CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID;
                    product_2_productGroup.CMN_PRO_ProductGroup_RefID = Parameter.ProductGroupID;
                    product_2_productGroup.Tenant_RefID       = securityTicket.TenantID;
                    product_2_productGroup.Creation_Timestamp = DateTime.Now;
                    product_2_productGroup.Save(Connection, Transaction);
                }
                else
                {
                    #region Update Product_2_ProductGroup
                    var isAlreadyInGroup = ORM_CMN_PRO_Product_2_ProductGroup.Query.Exists(Connection, Transaction, new ORM_CMN_PRO_Product_2_ProductGroup.Query()
                    {
                        CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID,
                        CMN_PRO_ProductGroup_RefID = Parameter.ProductGroupID,
                        Tenant_RefID = securityTicket.TenantID
                    });

                    if (!isAlreadyInGroup)
                    {
                        ORM_CMN_PRO_Product_2_ProductGroup product_2_productGroup = new ORM_CMN_PRO_Product_2_ProductGroup();
                        product_2_productGroup.CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID;
                        product_2_productGroup.CMN_PRO_ProductGroup_RefID = Parameter.ProductGroupID;
                        product_2_productGroup.Tenant_RefID       = securityTicket.TenantID;
                        product_2_productGroup.Creation_Timestamp = DateTime.Now;
                        product_2_productGroup.Save(Connection, Transaction);
                    }
                    #endregion
                }

                #region Default Price

                var price = ORM_CMN_SLS_Price.Query.Search(Connection, Transaction, new ORM_CMN_SLS_Price.Query()
                {
                    PricelistRelease_RefID = Parameter.PriceListReleaseID,
                    CMN_PRO_Product_RefID  = product.CMN_PRO_ProductID,
                    Tenant_RefID           = securityTicket.TenantID,
                    CMN_Currency_RefID     = Parameter.CatalogCurrencyID,
                    IsDeleted = false
                }).SingleOrDefault();

                if (price == null)
                {
                    price = new ORM_CMN_SLS_Price();
                    price.CMN_SLS_PriceID        = Guid.NewGuid();
                    price.PricelistRelease_RefID = Parameter.PriceListReleaseID;
                    price.CMN_PRO_Product_RefID  = product.CMN_PRO_ProductID;
                    price.CMN_Currency_RefID     = Parameter.CatalogCurrencyID;
                    price.Tenant_RefID           = securityTicket.TenantID;
                    price.Creation_Timestamp     = DateTime.Now;
                }

                price.PriceAmount = currentParameter.Price;
                price.Save(Connection, Transaction);

                #endregion

                importedProducts.Add(new L3PR_IoUPfSC_1326()
                {
                    ProductID  = product.CMN_PRO_ProductID,
                    ProductITL = product.ProductITL
                });
            }

            returnValue.Result = importedProducts.ToArray();

            return(returnValue);

            #endregion UserCode
        }
Пример #23
0
        protected static FR_L5SO_RSP_1524 Execute(DbConnection Connection, DbTransaction Transaction, P_L5SO_RSP_1524 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L5SO_RSP_1524();
            returnValue.Result = new L5SO_RSP_1524();

            var shipmentPositionToReplace = new ORM_LOG_SHP_Shipment_Position();
            shipmentPositionToReplace.Load(Connection, Transaction, Parameter.PositionID);

            var startProduct = new ORM_CMN_PRO_Product();
            startProduct.Load(Connection, Transaction, shipmentPositionToReplace.CMN_PRO_Product_RefID);

            var finalProduct = new ORM_CMN_PRO_Product();
            finalProduct.Load(Connection, Transaction, Parameter.ProductID);


            shipmentPositionToReplace.ShipmentPosition_PricePerUnitValueWithoutTax = Parameter.Price;
            shipmentPositionToReplace.ShipmentPosition_ValueWithoutTax             = Parameter.Price * (Decimal)shipmentPositionToReplace.QuantityToShip;
            shipmentPositionToReplace.CMN_PRO_Product_RefID = Parameter.ProductID;

            returnValue.Result.ReplacedPosition = new FR_Guid(shipmentPositionToReplace.Save(Connection, Transaction), shipmentPositionToReplace.LOG_SHP_Shipment_PositionID).Result;

            P_L2LN_GALFTID_1530 langParam = new P_L2LN_GALFTID_1530();
            langParam.Tenant_RefID = securityTicket.TenantID;
            SessionSecurityTicket fakeTicket = new SessionSecurityTicket();
            var DBLanguages = cls_Get_All_Languages_ForTenantID.Invoke(Connection, Transaction, langParam, fakeTicket).Result;
            var languages   = DBLanguages.Select(i => new ISOLanguage()
            {
                ISO = i.ISO_639_1, LanguageID = i.CMN_LanguageID
            }).ToList();

            var dicts = EnumUtils.GetDictObjectsForStaticListData <ECustomMessages>(ResourceFilePath.CustomMessages, ORM_LOG_SHP_Shipment_Note.TableName, languages);

            ORM_LOG_SHP_Shipment_Note note = new ORM_LOG_SHP_Shipment_Note();
            note.LOG_SHP_Shipment_NoteID = Guid.NewGuid();
            note.Shipment_Header_RefID   = Parameter.ShipmentHeaderID;
            note.Comment = String.Format(dicts["comment.article-replaced"].Contents[1].Content,
                                         startProduct.Product_Name.Contents[0].Content, startProduct.Product_Number, finalProduct.Product_Name.Contents[0].Content, finalProduct.Product_Number);
            note.Tenant_RefID = securityTicket.TenantID;
            note.IsNotePrintedOnDeliveryPaper = true;
            note.Save(Connection, Transaction);

            returnValue.Result.ReplacedPosition = new FR_Guid(shipmentPositionToReplace.Save(Connection, Transaction), shipmentPositionToReplace.LOG_SHP_Shipment_PositionID).Result;

            ORM_LOG_RSV_Reservation.Query.SoftDelete(Connection, Transaction,
                                                     new ORM_LOG_RSV_Reservation.Query
            {
                LOG_SHP_Shipment_Position_RefID = shipmentPositionToReplace.LOG_SHP_Shipment_PositionID,
                IsDeleted = false
            });

            #region CommentedUseful

            #endregion

            cls_Update_Current_TotalValue_on_ShipmentHeader_from_Positions.Invoke(Connection, Transaction, new P_L5SO_UCTVoSHfP_1549 {
                ShipmentHeaderID = Parameter.ShipmentHeaderID
            }, securityTicket);

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_L3CCfTaIC_1526_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L3CCfTaIC_1526 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L3CCfTaIC_1526_Array();
            //Put your code here
            List <L3CCfTaIC_1526> ProductList = new List <L3CCfTaIC_1526>();
            returnValue.Result = ProductList.ToArray();
            var _service = CatalogServiceFactory.GetSubscriptionService();

            //make data to send to Architecture so that they will know which catalog to update
            var subscriptionRequest = new SubscriptionRequest();
            subscriptionRequest.CatalogCode = Parameter.CatalogCodeITL;
            Customer customer = new Customer();

            // for only Tenant specific cases add Business Participant ID
            if (Parameter.SubscribedBy_BusinessParticipant_RefID != Guid.Empty)
            {
                customer.BusinessParticipantITL = Parameter.SubscribedBy_BusinessParticipant_RefID.ToString();
            }
            else
            {
                customer.BusinessParticipantITL = securityTicket.TenantID.ToString();
            }
            customer.TenantITL = securityTicket.TenantID.ToString();
            customer.Name      = Parameter.ClientName;
            // customer.SourceRealm = BOp.Infrastructure.PropertyRepository.Instance.RealmID.ToString();

            subscriptionRequest.Customer = customer;

            /*
             * @see if catalog with the same ITL for that bussinessParticipant exists
             * */
            var subscribedCatalogQuery = new ORM_CMN_PRO_SubscribedCatalog.Query();
            subscribedCatalogQuery.Tenant_RefID   = securityTicket.TenantID;
            subscribedCatalogQuery.CatalogCodeITL = Parameter.CatalogCodeITL;
            if (Parameter.SubscribedBy_BusinessParticipant_RefID != Guid.Empty)
            {
                subscribedCatalogQuery.SubscribedBy_BusinessParticipant_RefID = Parameter.SubscribedBy_BusinessParticipant_RefID;
            }
            subscribedCatalogQuery.IsDeleted = false;

            var subscribedCatalog = ORM_CMN_PRO_SubscribedCatalog.Query.Search(Connection, Transaction, subscribedCatalogQuery).FirstOrDefault();

            #region Get VAT

            var defaultCountryISOCode = cls_Get_DefaultCountryISOCode_for_TenantID.Invoke(Connection, Transaction, securityTicket).Result;

            var param = new P_L3TX_GTfCICaT_1359();
            param.CountryISOCode = "DE";



            var taxes = cls_Get_Taxes_for_CountryISOCode_and_TenantID.Invoke(Connection, Transaction, param, securityTicket).Result;
            //if there are no taxes for tenant
            Guid countryID = Guid.Empty;
            if (taxes.Length == 0)
            {
                var country = cls_Get_AllCountries_for_TenantID.Invoke(Connection, Transaction, securityTicket).Result.FirstOrDefault();

                if (country != null)
                {
                    countryID = country.CMN_CountryID;
                }
            }
            else
            {
                countryID = taxes.First().CMN_CountryID; // ti slucajni posmatracu ovog koda nemoj zameriti na ovakvom resenju.
            }

            #endregion

            #region save

            if (subscribedCatalog == null)
            {
                /*
                 * @save ORM_CMN_PRO_SubscribedCatalog
                 * */
                subscribedCatalog = new ORM_CMN_PRO_SubscribedCatalog();
                subscribedCatalog.CMN_PRO_SubscribedCatalogID = Guid.NewGuid();
                subscribedCatalog.CatalogCodeITL         = Parameter.CatalogCodeITL;
                subscribedCatalog.SubscribedCatalog_Name = Parameter.CatalogName;
                subscribedCatalog.SubscribedBy_BusinessParticipant_RefID = Parameter.SubscribedBy_BusinessParticipant_RefID;
                subscribedCatalog.Tenant_RefID = securityTicket.TenantID;
                subscribedCatalog.SubscribedCatalog_ValidFrom    = Parameter.ValidFrom_Date;
                subscribedCatalog.SubscribedCatalog_ValidThrough = Parameter.ValidTo_Date;
                subscribedCatalog.SubscribedCatalog_Description  = Parameter.CatalogDescription;
                subscribedCatalog.Creation_Timestamp             = DateTime.Now;
                subscribedCatalog.IsDeleted = false;
                subscribedCatalog.SubscribedCatalog_CurrentRevision = Parameter.CatalogVersion;
                subscribedCatalog.IsCatalogPublic = Parameter.IsCatalogPublic;

                // check if language with that ISO exists for Tenant (Lower, exmpl de)
                var languageQuery = new ORM_CMN_Language.Query();
                languageQuery.ISO_639_1    = Parameter.CatalogLanguage_ISO_639_1_codes.ToLower();
                languageQuery.Tenant_RefID = securityTicket.TenantID;
                languageQuery.IsDeleted    = false;

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

                // if language does not exist for that Tenant
                if (language == null)
                {
                    //check if language with that ISO exists for Tenant (Upper exmpl DE)
                    languageQuery              = new ORM_CMN_Language.Query();
                    languageQuery.ISO_639_1    = Parameter.CatalogLanguage_ISO_639_1_codes.ToUpper();
                    languageQuery.Tenant_RefID = securityTicket.TenantID;
                    languageQuery.IsDeleted    = false;

                    language = ORM_CMN_Language.Query.Search(Connection, Transaction, languageQuery).FirstOrDefault();

                    // if language does not exist for that Tenant
                    if (language == null)
                    {
                        ORM_CMN_Language newLanguage = new ORM_CMN_Language();
                        newLanguage.CMN_LanguageID     = Guid.NewGuid();
                        newLanguage.ISO_639_1          = Parameter.CatalogLanguage_ISO_639_1_codes;
                        newLanguage.Creation_Timestamp = DateTime.Now;
                        newLanguage.Tenant_RefID       = securityTicket.TenantID;
                        newLanguage.IsDeleted          = false;
                        newLanguage.Save(Connection, Transaction);

                        subscribedCatalog.SubscribedCatalog_Language_RefID = newLanguage.CMN_LanguageID;
                    }
                    else
                    {
                        subscribedCatalog.SubscribedCatalog_Language_RefID = language.CMN_LanguageID;
                    }
                }
                else
                {
                    subscribedCatalog.SubscribedCatalog_Language_RefID = language.CMN_LanguageID;
                }

                // check if currency with that ISO exists for Tenant

                var currencyQuery = new ORM_CMN_Currency.Query();
                currencyQuery.ISO4127      = Parameter.CatalogCurrency_ISO_4217;
                currencyQuery.Tenant_RefID = securityTicket.TenantID;
                currencyQuery.IsDeleted    = false;

                var currency = ORM_CMN_Currency.Query.Search(Connection, Transaction, currencyQuery).FirstOrDefault();

                if (currency == null)
                {
                    ORM_CMN_Currency newCurrency = new ORM_CMN_Currency();
                    newCurrency.CMN_CurrencyID     = Guid.NewGuid();
                    newCurrency.ISO4127            = Parameter.CatalogCurrency_ISO_4217;
                    newCurrency.Tenant_RefID       = securityTicket.TenantID;
                    newCurrency.Creation_Timestamp = DateTime.Now;
                    newCurrency.Save(Connection, Transaction);

                    subscribedCatalog.SubscribedCatalog_Currency_RefID = newCurrency.CMN_CurrencyID;
                }
                else
                {
                    subscribedCatalog.SubscribedCatalog_Currency_RefID = currency.CMN_CurrencyID;
                }

                #region product group

                /*
                 * @Search product group
                 * */
                ORM_CMN_PRO_ProductGroup productGroup = new ORM_CMN_PRO_ProductGroup();

                var productGroupQuery = new ORM_CMN_PRO_ProductGroup.Query();
                productGroupQuery.Tenant_RefID             = securityTicket.TenantID;
                productGroupQuery.GlobalPropertyMatchingID = EnumUtils.GetEnumDescription(EProductGroup.Treatment);

                //if (Parameter.IsCatalogPublic == false)
                //{
                //    productGroupQuery.GlobalPropertyMatchingID = EnumUtils.GetEnumDescription(EProductGroup.HauseList);
                //}
                //else
                //{
                //    productGroupQuery.GlobalPropertyMatchingID = EnumUtils.GetEnumDescription(EProductGroup.ABDA);
                //}
                // for only Tenant specific cases add Business Participant ID
                if (Parameter.SubscribedBy_BusinessParticipant_RefID != Guid.Empty)
                {
                    productGroupQuery.GlobalPropertyMatchingID += Parameter.SubscribedBy_BusinessParticipant_RefID;
                }
                productGroupQuery.IsDeleted = false;

                productGroup = ORM_CMN_PRO_ProductGroup.Query.Search(Connection, Transaction, productGroupQuery).FirstOrDefault();

                if (productGroup == null)
                {
                    /*
                     * @Create product group for products if product group for that BP and Tenent does not exist
                     * */
                    productGroup = new ORM_CMN_PRO_ProductGroup();
                    productGroup.Tenant_RefID                  = securityTicket.TenantID;
                    productGroup.Creation_Timestamp            = DateTime.Now;
                    productGroup.CMN_PRO_ProductGroupID        = Guid.NewGuid();
                    productGroup.ProductGroup_Name             = new Dict(ORM_CMN_PRO_ProductGroup.TableName);
                    productGroupQuery.GlobalPropertyMatchingID = EnumUtils.GetEnumDescription(EProductGroup.Treatment);
                    productGroup.ProductGroup_Name.AddEntry(language.CMN_LanguageID, "Treatment Group");

                    //if (Parameter.IsCatalogPublic == false)
                    //{
                    //    productGroup.GlobalPropertyMatchingID = EnumUtils.GetEnumDescription(EProductGroup.HauseList);
                    //    productGroup.ProductGroup_Name.AddEntry(language.CMN_LanguageID, "HauseList Group");
                    //}
                    //else
                    //{
                    //    productGroup.GlobalPropertyMatchingID = EnumUtils.GetEnumDescription(EProductGroup.ABDA);
                    //    productGroup.ProductGroup_Name.AddEntry(language.CMN_LanguageID, "ABDA Group");
                    //}

                    // for only Tenant specific cases add Business Participant ID
                    if (Parameter.SubscribedBy_BusinessParticipant_RefID != Guid.Empty)
                    {
                        productGroup.GlobalPropertyMatchingID += Parameter.SubscribedBy_BusinessParticipant_RefID;
                        productGroup.ProductGroup_Name.AddEntry(language.CMN_LanguageID, "Treatment Group");
                    }
                    productGroup.Save(Connection, Transaction);
                }
                #endregion

                #region create priceList for Catalog

                /*
                 * @create pricelist_Release
                 * */
                ORM_CMN_SLS_Pricelist_Release pricelist_Release = new ORM_CMN_SLS_Pricelist_Release();
                pricelist_Release.CMN_SLS_Pricelist_ReleaseID = Guid.NewGuid();
                pricelist_Release.Release_Version             = "v1";
                if (Parameter.IsCatalogPublic == false)
                {
                    pricelist_Release.PricelistRelease_ValidFrom = Parameter.ValidFrom_Date;
                    pricelist_Release.PricelistRelease_ValidTo   = Parameter.ValidTo_Date;
                }
                else
                {
                    pricelist_Release.IsPricelistAlwaysActive = true;
                }
                pricelist_Release.Tenant_RefID       = securityTicket.TenantID;
                pricelist_Release.Creation_Timestamp = DateTime.Now;
                pricelist_Release.Pricelist_RefID    = Guid.NewGuid();//priceList.CMN_SLS_PricelistID
                pricelist_Release.Save(Connection, Transaction);

                /*
                 * @create pricelist
                 * */
                ORM_CMN_SLS_Pricelist priceList = new ORM_CMN_SLS_Pricelist();
                priceList.CMN_SLS_PricelistID = pricelist_Release.Pricelist_RefID;

                var DBLanguages = cls_Get_All_Languages.Invoke(Connection, Transaction, securityTicket).Result.ToList();

                Dict nameDict = new Dict("cmn_sls_pricelist");
                if (Parameter.IsCatalogPublic == false)
                {
                    for (int i = 0; i < DBLanguages.Count; i++)
                    {
                        nameDict.AddEntry(DBLanguages[i].CMN_LanguageID, Parameter.CatalogName + "_" + Parameter.ValidFrom_Date.ToShortDateString() + "_" + Parameter.ValidTo_Date.ToShortDateString());
                    }
                }
                else
                {
                    for (int i = 0; i < DBLanguages.Count; i++)
                    {
                        nameDict.AddEntry(DBLanguages[i].CMN_LanguageID, "ABDA_PriceList");
                    }
                }
                priceList.Pricelist_Name     = nameDict;
                priceList.Tenant_RefID       = securityTicket.TenantID;
                priceList.Creation_Timestamp = DateTime.Now;
                priceList.Save(Connection, Transaction);

                #endregion

                if (Parameter.IsCatalogPublic == false)
                {
                    #region create and save products in product group and give product its price , product amout and measure unit

                    /*
                     * @create and save products in product group
                     * */

                    bool isAlreadyInABDA = false;
                    foreach (var item in Parameter.Products)
                    {
                        ORM_CMN_PRO_Product product = new ORM_CMN_PRO_Product();

                        // only for Tenant specific cases add Business Participant ID (!Lucentis)
                        if (Parameter.SubscribedBy_BusinessParticipant_RefID == Guid.Empty)
                        {
                            var productQuery = new ORM_CMN_PRO_Product.Query();
                            productQuery.ProductITL   = item.ProductITL;
                            productQuery.Tenant_RefID = securityTicket.TenantID;
                            productQuery.IsDeleted    = false;
                            productQuery.IsProductAvailableForOrdering = true;

                            product = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, productQuery).FirstOrDefault();

                            //if it is not in ABDA
                            if (product == null)
                            {
                                product = new ORM_CMN_PRO_Product();
                                product.CMN_PRO_ProductID             = Guid.NewGuid();
                                product.Creation_Timestamp            = DateTime.Now;
                                product.Tenant_RefID                  = securityTicket.TenantID;
                                product.ProductITL                    = item.ProductITL;
                                product.Product_Name                  = item.Product_Name;
                                product.Product_Description           = item.Product_Description;
                                product.Product_Number                = item.Product_Number;
                                product.IsProduct_Article             = item.IsProduct_Article;
                                product.IsProductAvailableForOrdering = true;
                                product.PackageInfo_RefID             = Guid.NewGuid();//packageInfo.CMN_PRO_PAC_PackageInfoID

                                isAlreadyInABDA = false;
                            }
                            else
                            {
                                isAlreadyInABDA = true;
                            }
                        }
                        else
                        {
                            product.CMN_PRO_ProductID             = Guid.NewGuid();
                            product.Creation_Timestamp            = DateTime.Now;
                            product.Tenant_RefID                  = securityTicket.TenantID;
                            product.ProductITL                    = item.ProductITL;
                            product.Product_Name                  = item.Product_Name;
                            product.Product_Description           = item.Product_Description;
                            product.Product_Number                = item.Product_Number;
                            product.IsProduct_Article             = item.IsProduct_Article;
                            product.IsProductAvailableForOrdering = true;
                            product.PackageInfo_RefID             = Guid.NewGuid();//packageInfo.CMN_PRO_PAC_PackageInfoID

                            isAlreadyInABDA = false;
                        }

                        product.IfImportedFromExternalCatalog_CatalogSubscription_RefID = subscribedCatalog.CMN_PRO_SubscribedCatalogID;
                        product.Save(Connection, Transaction);

                        L3CCfTaIC_1526 pro = new L3CCfTaIC_1526();
                        pro.ProductID = product.CMN_PRO_ProductID;
                        if (product.IsProduct_Article)
                        {
                            pro.Dosage = item.Dosage;
                        }
                        pro.isEdit = false;
                        ProductList.Add(pro);

                        ORM_CMN_PRO_Product_2_ProductGroup product_2_productGroup = new ORM_CMN_PRO_Product_2_ProductGroup();
                        product_2_productGroup.CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID;
                        product_2_productGroup.CMN_PRO_ProductGroup_RefID = productGroup.CMN_PRO_ProductGroupID;
                        product_2_productGroup.Tenant_RefID       = securityTicket.TenantID;
                        product_2_productGroup.Creation_Timestamp = DateTime.Now;
                        product_2_productGroup.Save(Connection, Transaction);

                        if (isAlreadyInABDA == false)
                        {
                            ORM_CMN_SLS_Price price = new ORM_CMN_SLS_Price();
                            price.CMN_SLS_PriceID        = Guid.NewGuid();
                            price.Tenant_RefID           = securityTicket.TenantID;
                            price.Creation_Timestamp     = DateTime.Now;
                            price.PricelistRelease_RefID = pricelist_Release.CMN_SLS_Pricelist_ReleaseID;
                            price.CMN_PRO_Product_RefID  = product.CMN_PRO_ProductID;
                            price.PriceAmount            = item.Price;
                            price.CMN_Currency_RefID     = subscribedCatalog.SubscribedCatalog_Currency_RefID;
                            price.Save(Connection, Transaction);

                            //add amount and Measure
                            ORM_CMN_PRO_PAC_PackageInfo packageInfo = new ORM_CMN_PRO_PAC_PackageInfo();
                            packageInfo.CMN_PRO_PAC_PackageInfoID = product.PackageInfo_RefID;
                            packageInfo.Tenant_RefID          = securityTicket.TenantID;
                            packageInfo.Creation_Timestamp    = DateTime.Now;
                            packageInfo.PackageContent_Amount = item.Amount;

                            //check if MeasureUnit exists for this Tenant
                            var unitsQuery = new ORM_CMN_Unit.Query();
                            unitsQuery.Tenant_RefID = securityTicket.TenantID;
                            unitsQuery.ISOCode      = item.MeasuredInUnit_ISO_um_ums;
                            unitsQuery.IsDeleted    = false;

                            var measuredInUnit = ORM_CMN_Unit.Query.Search(Connection, Transaction, unitsQuery).FirstOrDefault();
                            if (measuredInUnit == null)
                            {
                                ORM_CMN_Unit newMeasuredInUnit = new ORM_CMN_Unit();
                                newMeasuredInUnit.Tenant_RefID       = securityTicket.TenantID;
                                newMeasuredInUnit.Creation_Timestamp = DateTime.Now;
                                newMeasuredInUnit.ISOCode            = item.MeasuredInUnit_ISO_um_ums;
                                newMeasuredInUnit.CMN_UnitID         = Guid.NewGuid();
                                newMeasuredInUnit.Save(Connection, Transaction);

                                packageInfo.PackageContent_MeasuredInUnit_RefID = newMeasuredInUnit.CMN_UnitID;
                            }
                            else
                            {
                                packageInfo.PackageContent_MeasuredInUnit_RefID = measuredInUnit.CMN_UnitID;
                            }

                            packageInfo.Save(Connection, Transaction);

                            if (countryID != Guid.Empty)// if there is a country for this Tenant
                            {
                                #region Create Taxes

                                double productVAT = 0;
                                Double.TryParse(item.VAT, out productVAT);

                                var tax = taxes.Where(i => i.TaxRate == productVAT).SingleOrDefault();

                                if (tax == default(L3TX_GTfCICaT_1359))
                                {
                                    #region CreateTax

                                    var saveTaxParam = new P_L3TX_STX_1119();
                                    saveTaxParam.ACC_TAX_TaxeID = Guid.Empty;
                                    saveTaxParam.TaxName        = new Dict(ORM_ACC_TAX_Tax.TableName);
                                    saveTaxParam.TaxName.AddEntry(language.CMN_LanguageID, productVAT.ToString());
                                    saveTaxParam.TaxRate = productVAT;
                                    if (taxes.Length != 0)
                                    {
                                        saveTaxParam.EconomicRegion_RefID = taxes.First().CMN_EconomicRegionID;
                                        saveTaxParam.Country_RefID        = taxes.First().CMN_CountryID;
                                    }
                                    else
                                    {
                                        saveTaxParam.EconomicRegion_RefID = Guid.Empty;
                                        saveTaxParam.Country_RefID        = countryID;
                                    }
                                    var saveTaxResult = cls_Save_Tax.Invoke(Connection, Transaction, saveTaxParam, securityTicket).Result;

                                    #endregion

                                    #region Update Available taxes

                                    param = new P_L3TX_GTfCICaT_1359();
                                    param.CountryISOCode = "DE";

                                    taxes = cls_Get_Taxes_for_CountryISOCode_and_TenantID.Invoke(Connection, Transaction, param, securityTicket).Result;

                                    tax = taxes.Where(i => i.TaxRate == productVAT).SingleOrDefault();

                                    #endregion
                                }

                                var salesTax = new ORM_CMN_PRO_Product_SalesTaxAssignmnet();
                                salesTax.CMN_PRO_Product_SalesTaxAssignmnetID = Guid.NewGuid();
                                salesTax.Product_RefID            = product.CMN_PRO_ProductID;
                                salesTax.ApplicableSalesTax_RefID = tax.ACC_TAX_TaxeID;
                                salesTax.Creation_Timestamp       = DateTime.Now;
                                salesTax.Tenant_RefID             = securityTicket.TenantID;
                                salesTax.Save(Connection, Transaction);

                                #endregion
                            }
                        }
                    }
                    #endregion
                }

                /*
                 * @See if Supplier already exists in database
                 * */
                ORM_CMN_BPT_Supplier supplier = new ORM_CMN_BPT_Supplier();

                var supplierQuery = new ORM_CMN_BPT_BusinessParticipant.Query();
                supplierQuery.BusinessParticipantITL = Parameter.SupplierData.SupplierITL;
                supplierQuery.Tenant_RefID           = securityTicket.TenantID;
                supplierQuery.IsDeleted = false;

                var supplier_bussinessParticipant = ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, supplierQuery).FirstOrDefault();

                #region if supplier does not exist

                if (supplier_bussinessParticipant == null)
                {
                    /*
                     * @Make Supplier Data
                     * */

                    var tenantQuery = new ORM_CMN_Tenant.Query()
                    {
                        TenantITL    = Parameter.SupplierData.TenantITL,
                        Tenant_RefID = securityTicket.TenantID
                    };

                    var supplierTenant = ORM_CMN_Tenant.Query.Search(Connection, Transaction, tenantQuery).SingleOrDefault();

                    if (supplierTenant == default(ORM_CMN_Tenant))
                    {
                        supplierTenant = new ORM_CMN_Tenant();
                        supplierTenant.CMN_TenantID       = Guid.NewGuid();
                        supplierTenant.TenantITL          = Parameter.SupplierData.TenantITL;
                        supplierTenant.Tenant_RefID       = securityTicket.TenantID;
                        supplierTenant.Creation_Timestamp = DateTime.Now;
                        supplierTenant.Save(Connection, Transaction);
                    }

                    supplier.CMN_BPT_SupplierID            = Guid.NewGuid();
                    supplier.Ext_BusinessParticipant_RefID = Guid.NewGuid();//supplierBussinessParticipant.CMN_BPT_BusinessParticipantID
                    supplier.Creation_Timestamp            = DateTime.Now;
                    supplier.IsDeleted    = false;
                    supplier.Tenant_RefID = securityTicket.TenantID;
                    supplier.Save(Connection, Transaction);

                    ORM_CMN_BPT_BusinessParticipant supplierBussinessParticipant = new ORM_CMN_BPT_BusinessParticipant();
                    supplierBussinessParticipant.CMN_BPT_BusinessParticipantID = supplier.Ext_BusinessParticipant_RefID;
                    supplierBussinessParticipant.DisplayName            = Parameter.SupplierData.Supplier_Name;
                    supplierBussinessParticipant.BusinessParticipantITL = Parameter.SupplierData.SupplierITL;
                    supplierBussinessParticipant.Creation_Timestamp     = DateTime.Now;
                    supplierBussinessParticipant.Tenant_RefID           = securityTicket.TenantID;
                    supplierBussinessParticipant.IsCompany             = true;
                    supplierBussinessParticipant.IsTenant              = true;
                    supplierBussinessParticipant.IfTenant_Tenant_RefID = supplierTenant.CMN_TenantID;
                    supplierBussinessParticipant.IfCompany_CMN_COM_CompanyInfo_RefID = Guid.NewGuid();//companyInfo.CMN_COM_CompanyInfoID
                    supplierBussinessParticipant.Save(Connection, Transaction);

                    ORM_CMN_COM_CompanyInfo companyInfo = new ORM_CMN_COM_CompanyInfo();
                    companyInfo.CMN_COM_CompanyInfoID = supplierBussinessParticipant.IfCompany_CMN_COM_CompanyInfo_RefID;
                    companyInfo.Creation_Timestamp    = DateTime.Now;
                    companyInfo.Tenant_RefID          = securityTicket.TenantID;
                    companyInfo.Contact_UCD_RefID     = Guid.NewGuid();//universalContactDetail.CMN_UniversalContactDetailID
                    companyInfo.Save(Connection, Transaction);

                    ORM_CMN_UniversalContactDetail universalContactDetail = new ORM_CMN_UniversalContactDetail();
                    universalContactDetail.CMN_UniversalContactDetailID = companyInfo.Contact_UCD_RefID;
                    universalContactDetail.IsCompany             = true;
                    universalContactDetail.Country_639_1_ISOCode = Parameter.SupplierData.CountryISO;
                    universalContactDetail.Street_Name           = Parameter.SupplierData.Supplier_Name;
                    universalContactDetail.Street_Number         = Parameter.SupplierData.Street_Number;
                    universalContactDetail.ZIP                = Parameter.SupplierData.ZIP;
                    universalContactDetail.Town               = Parameter.SupplierData.Town;
                    universalContactDetail.Region_Code        = Parameter.SupplierData.Region_Code;
                    universalContactDetail.Tenant_RefID       = securityTicket.TenantID;
                    universalContactDetail.Creation_Timestamp = DateTime.Now;
                    universalContactDetail.Save(Connection, Transaction);
                }
                #endregion
                #region if supplier exists , check if its data is changed
                else
                {
                    var tenantQuery = new ORM_CMN_Tenant.Query()
                    {
                        TenantITL    = Parameter.SupplierData.TenantITL,
                        Tenant_RefID = securityTicket.TenantID
                    };

                    var supplierTenant = ORM_CMN_Tenant.Query.Search(Connection, Transaction, tenantQuery).SingleOrDefault();

                    if (supplierTenant == default(ORM_CMN_Tenant))
                    {
                        supplierTenant = new ORM_CMN_Tenant();
                        supplierTenant.CMN_TenantID       = Guid.NewGuid();
                        supplierTenant.TenantITL          = Parameter.SupplierData.TenantITL;
                        supplierTenant.Tenant_RefID       = securityTicket.TenantID;
                        supplierTenant.Creation_Timestamp = DateTime.Now;
                        supplierTenant.Save(Connection, Transaction);

                        supplier_bussinessParticipant.IsTenant = true;
                        supplier_bussinessParticipant.IfTenant_Tenant_RefID = supplierTenant.CMN_TenantID;
                    }

                    supplier_bussinessParticipant.DisplayName = Parameter.SupplierData.Supplier_Name;
                    supplier_bussinessParticipant.Save(Connection, Transaction);

                    var query = new ORM_CMN_BPT_Supplier.Query();
                    query.Ext_BusinessParticipant_RefID = supplier_bussinessParticipant.CMN_BPT_BusinessParticipantID;
                    query.Tenant_RefID = securityTicket.TenantID;
                    query.IsDeleted    = false;

                    supplier = ORM_CMN_BPT_Supplier.Query.Search(Connection, Transaction, query).First();

                    //edit universal contact details

                    var companyInfoQuery = new ORM_CMN_COM_CompanyInfo.Query();
                    companyInfoQuery.CMN_COM_CompanyInfoID = supplier_bussinessParticipant.IfCompany_CMN_COM_CompanyInfo_RefID;
                    companyInfoQuery.Tenant_RefID          = securityTicket.TenantID;
                    companyInfoQuery.IsDeleted             = false;

                    var companyInfo = ORM_CMN_COM_CompanyInfo.Query.Search(Connection, Transaction, companyInfoQuery).First();

                    var universalContactDetailQuery = new ORM_CMN_UniversalContactDetail.Query();
                    universalContactDetailQuery.CMN_UniversalContactDetailID = companyInfo.Contact_UCD_RefID;
                    universalContactDetailQuery.Tenant_RefID = securityTicket.TenantID;
                    universalContactDetailQuery.IsDeleted    = false;

                    var universalContactDetail = ORM_CMN_UniversalContactDetail.Query.Search(Connection, Transaction, universalContactDetailQuery).First();

                    universalContactDetail.Country_639_1_ISOCode = Parameter.SupplierData.CountryISO;
                    universalContactDetail.Street_Name           = Parameter.SupplierData.Supplier_Name;
                    universalContactDetail.Street_Number         = Parameter.SupplierData.Street_Number;
                    universalContactDetail.ZIP         = Parameter.SupplierData.ZIP;
                    universalContactDetail.Town        = Parameter.SupplierData.Town;
                    universalContactDetail.Region_Code = Parameter.SupplierData.Region_Code;
                    universalContactDetail.Save(Connection, Transaction);
                }
                #endregion

                subscribedCatalog.SubscribedCatalog_PricelistRelease_RefID = pricelist_Release.CMN_SLS_Pricelist_ReleaseID;
                subscribedCatalog.PublishingSupplier_RefID = supplier.CMN_BPT_SupplierID;
                subscribedCatalog.Save(Connection, Transaction);

                /*
                 * @send Kika information which catalog has been subscribed to who
                 * */
                var result = _service.SubscribeToCatalog(subscriptionRequest);

                if (result.ResponseStatus != ResponseStatus.OK)
                {
                    throw new Exception("Catalog subscription failed!");
                }
            }
            #endregion

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

            #endregion UserCode
        }
Пример #25
0
        protected static FR_L3AR_IoUPfSC_1325_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L3AR_IoUPfSC_1325 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L3AR_IoUPfSC_1325_Array();

            var importedProducts = new List <L3AR_IoUPfSC_1325>();

            #region ABDA catalog

            var catalogQuery = new ORM_CMN_PRO_SubscribedCatalog.Query();
            catalogQuery.Tenant_RefID   = securityTicket.TenantID;
            catalogQuery.IsDeleted      = false;
            catalogQuery.CatalogCodeITL = EnumUtils.GetEnumDescription(EPublicCatalogs.ABDA);

            var abdaCatalog = ORM_CMN_PRO_SubscribedCatalog.Query.Search(Connection, Transaction, catalogQuery).SingleOrDefault();

            #endregion

            #region ImportOrUpdate Product's BaseData

            var param = new P_L3AR_IoUPBD_1631();

            var products = Parameter.Products.Select(item => new P_L3AR_IoUPBD_1631a()
            {
                ProductITL          = item.ProductITL,
                Product_Name        = item.Product_Name,
                Product_Description = item.Product_Description,
                Product_Number      = item.Product_Number,
                Dosage = item.Dosage,
                Amount = item.Amount,
                MeasuredInUnit_ISO_um_ums = item.MeasuredInUnit_ISO_um_ums,
                VAT                                     = Double.Parse(item.VAT),
                Producer                                = item.Producer,
                DistributionStatus                      = item.DistributionStatus,
                DefaultExpirationPeriod_in_sec          = item.DefaultExpirationPeriod_in_sec,
                DefaultStorageTemperature_min_in_kelvin = item.DefaultStorageTemperature_min_in_kelvin,
                DefaultStorageTemperature_max_in_kelvin = item.DefaultStorageTemperature_max_in_kelvin,
                IsStorage_CoolingRequired               = item.IsStorage_CoolingRequired,
                IsProduct_AddictiveDrug                 = item.IsProduct_AddictiveDrug,
                ActiveComponents                        = item.ActiveComponents,
                IsPharmacyOnlyDistribution              = item.IsPharmacyOnlyDistribution
            }).ToArray();

            param.Products = products;

            var importedProductsBaseData = cls_ImportOrUpdate_Products_BaseData.Invoke(Connection, Transaction, param, securityTicket).Result;

            #endregion

            foreach (var importedProductBaseData in importedProductsBaseData)
            {
                var currentParameter = Parameter.Products.SingleOrDefault(i => i.ProductITL == importedProductBaseData.ProductITL);

                var product = new ORM_CMN_PRO_Product();
                product.Load(Connection, Transaction, importedProductBaseData.ProductID);

                if (!importedProductBaseData.IsAlreadyExisted)
                {
                    product.IfImportedFromExternalCatalog_CatalogSubscription_RefID = Parameter.SubscribedCatalogID;
                    product.IsImportedFromExternalCatalog = true;
                    product.Save(Connection, Transaction);

                    ORM_CMN_PRO_Product_2_ProductGroup product_2_productGroup = new ORM_CMN_PRO_Product_2_ProductGroup();
                    product_2_productGroup.CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID;
                    product_2_productGroup.CMN_PRO_ProductGroup_RefID = Parameter.ProductGroupID;
                    product_2_productGroup.Tenant_RefID       = securityTicket.TenantID;
                    product_2_productGroup.Creation_Timestamp = DateTime.Now;
                    product_2_productGroup.Save(Connection, Transaction);
                }
                else
                {
                    #region Update Product_2_ProductGroup

                    var groupsParam = new P_CL2_MP_GAPGfP_1735();
                    groupsParam.ProductID = product.CMN_PRO_ProductID;
                    var productGroups = cls_Get_All_ProductGroups_for_ProductID.Invoke(Connection, Transaction, groupsParam, securityTicket).Result;

                    var abdaGroup      = productGroups.Where(i => i.GlobalPropertyMatchingID == EnumUtils.GetEnumDescription(EProductGroup.ABDA)).FirstOrDefault();
                    var houselistGroup = productGroups.Where(i => i.GlobalPropertyMatchingID == EnumUtils.GetEnumDescription(EProductGroup.HauseList)).FirstOrDefault();

                    if (abdaGroup == default(CL2_MP_GAPGfP_1735))
                    {
                        //it's not in abda
                        if (houselistGroup == default(CL2_MP_GAPGfP_1735))
                        {
                            //it's not in abda and it's not in houselist
                            product.IfImportedFromExternalCatalog_CatalogSubscription_RefID = Parameter.SubscribedCatalogID;
                            product.IsImportedFromExternalCatalog = true;
                            product.Save(Connection, Transaction);
                        }
                        else
                        {
                            //it's not in abda but it's in houselist
                            //check if new import isn't from abda
                            //it could be new house list
                            if (abdaCatalog == null || abdaCatalog.CMN_PRO_SubscribedCatalogID != Parameter.SubscribedCatalogID)
                            {
                                product.IfImportedFromExternalCatalog_CatalogSubscription_RefID = Parameter.SubscribedCatalogID;
                                product.IsImportedFromExternalCatalog = true;
                                product.Save(Connection, Transaction);
                            }
                        }
                    }
                    else
                    {
                        //it's in abda
                        if (houselistGroup == default(CL2_MP_GAPGfP_1735))
                        {
                            //it's in abda but it's not in houselist
                            //it could be house list or just update abda
                            product.IfImportedFromExternalCatalog_CatalogSubscription_RefID = Parameter.SubscribedCatalogID;
                            product.IsImportedFromExternalCatalog = true;
                            product.Save(Connection, Transaction);
                        }
                        else
                        {
                            //it's in abda and it's in houselist
                            //check if new import isn't from abda
                            //it could be only house list
                            if (abdaCatalog.CMN_PRO_SubscribedCatalogID != Parameter.SubscribedCatalogID)
                            {
                                product.IfImportedFromExternalCatalog_CatalogSubscription_RefID = Parameter.SubscribedCatalogID;
                                product.IsImportedFromExternalCatalog = true;
                                product.Save(Connection, Transaction);
                            }
                        }
                    }

                    var isAlreadyInGroup = ORM_CMN_PRO_Product_2_ProductGroup.Query.Exists(Connection, Transaction, new ORM_CMN_PRO_Product_2_ProductGroup.Query()
                    {
                        CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID,
                        CMN_PRO_ProductGroup_RefID = Parameter.ProductGroupID,
                        Tenant_RefID = securityTicket.TenantID
                    });

                    if (!isAlreadyInGroup)
                    {
                        ORM_CMN_PRO_Product_2_ProductGroup product_2_productGroup = new ORM_CMN_PRO_Product_2_ProductGroup();
                        product_2_productGroup.CMN_PRO_Product_RefID      = product.CMN_PRO_ProductID;
                        product_2_productGroup.CMN_PRO_ProductGroup_RefID = Parameter.ProductGroupID;
                        product_2_productGroup.Tenant_RefID       = securityTicket.TenantID;
                        product_2_productGroup.Creation_Timestamp = DateTime.Now;
                        product_2_productGroup.Save(Connection, Transaction);
                    }

                    #endregion
                }

                #region Default Price

                var price = ORM_CMN_SLS_Price.Query.Search(Connection, Transaction, new ORM_CMN_SLS_Price.Query()
                {
                    PricelistRelease_RefID = Parameter.PriceListReleaseID,
                    CMN_PRO_Product_RefID  = product.CMN_PRO_ProductID,
                    Tenant_RefID           = securityTicket.TenantID,
                    CMN_Currency_RefID     = Parameter.CatalogCurrencyID,
                    IsDeleted = false
                }).SingleOrDefault();

                if (price == null)
                {
                    price = new ORM_CMN_SLS_Price();
                    price.CMN_SLS_PriceID        = Guid.NewGuid();
                    price.PricelistRelease_RefID = Parameter.PriceListReleaseID;
                    price.CMN_PRO_Product_RefID  = product.CMN_PRO_ProductID;
                    price.CMN_Currency_RefID     = Parameter.CatalogCurrencyID;
                    price.Tenant_RefID           = securityTicket.TenantID;
                    price.Creation_Timestamp     = DateTime.Now;
                }

                price.PriceAmount = currentParameter.Price;
                price.Save(Connection, Transaction);

                #endregion

                importedProducts.Add(new L3AR_IoUPfSC_1325()
                {
                    ProductID = product.CMN_PRO_ProductID, ProductITL = product.ProductITL
                });
            }

            returnValue.Result = importedProducts.ToArray();

            return(returnValue);

            #endregion UserCode
        }
Пример #26
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
        }
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L6DTPG_SCL_1016 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();

            var item = new ORM_CMN_BPT_InvestedWorkTime_ChargingLevel();

            #region Unnecessary

            if (Parameter.CMN_BPT_InvestedWorkTime_ChargingLevelID != Guid.Empty)
            {
                var result = item.Load(Connection, Transaction, Parameter.CMN_BPT_InvestedWorkTime_ChargingLevelID);

                if (result.Status != FR_Status.Success || item.CMN_BPT_InvestedWorkTime_ChargingLevelID == Guid.Empty)
                {
                    var error = new FR_Guid();
                    error.ErrorMessage = "No Such ID";
                    error.Status       = FR_Status.Error_Internal;
                    return(error);
                }


                if (Parameter.ChargingLevelName != null)
                {
                    item.ChangingLevel_Name = Parameter.ChargingLevelName;
                }

                item.Save(Connection, Transaction);

                ORM_CMN_SLS_Price.Query priceQuery = new ORM_CMN_SLS_Price.Query();
                priceQuery.Tenant_RefID          = securityTicket.TenantID;
                priceQuery.IsDeleted             = false;
                priceQuery.CMN_PRO_Product_RefID = item.CMN_PRO_Product_RefID;
                List <ORM_CMN_SLS_Price> prices = ORM_CMN_SLS_Price.Query.Search(Connection, Transaction, priceQuery);
                if (prices != null && prices.Count == 1)
                {
                    ORM_CMN_SLS_Price price = prices[0];
                    price.PriceAmount        = Parameter.PricePerMinute;
                    price.CMN_Currency_RefID = Parameter.CurrencyID;
                    price.Save(Connection, Transaction);
                }
            }

            else
            {
                var structureHeader = new ORM_DOC_Structure_Header();
                structureHeader.Label        = "document_header_for_product";
                structureHeader.Tenant_RefID = securityTicket.TenantID;
                var structureStatusSave = structureHeader.Save(Connection, Transaction);

                ORM_CMN_PRO_Product product = new ORM_CMN_PRO_Product();
                product.Product_Name = Parameter.ChargingLevelName;
                product.Product_DocumentationStructure_RefID = structureHeader.DOC_Structure_HeaderID;
                product.Product_Number = "product_number";
                product.Tenant_RefID   = securityTicket.TenantID;

                product.Save(Connection, Transaction);

                ORM_CMN_BPT_InvestedWorkTime_ChargingLevel charginglevel = new ORM_CMN_BPT_InvestedWorkTime_ChargingLevel();
                charginglevel.ChangingLevel_Name    = Parameter.ChargingLevelName;
                charginglevel.CMN_PRO_Product_RefID = product.CMN_PRO_ProductID;
                charginglevel.Tenant_RefID          = securityTicket.TenantID;

                charginglevel.Save(Connection, Transaction);

                ORM_CMN_SLS_Price price = new ORM_CMN_SLS_Price();
                price.CMN_Currency_RefID    = Parameter.CurrencyID;
                price.CMN_PRO_Product_RefID = product.CMN_PRO_ProductID;
                price.PriceAmount           = Parameter.PricePerMinute;
                price.Tenant_RefID          = securityTicket.TenantID;

                price.Save(Connection, Transaction);
            }

            #endregion

            return(returnValue);

            #endregion UserCode
        }