///<summary>
        /// Method Invocation of wrapper classes
        ///<summary>
        protected static FR_String Invoke(DbConnection Connection, DbTransaction Transaction, string ConnectionString, P_OR_COR_1437 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            bool cleanupConnection  = Connection == null;
            bool cleanupTransaction = Transaction == null;

            FR_String functionReturn = new FR_String();

            try
            {
                if (cleanupConnection == true)
                {
                    Connection = CSV2Core_MySQL.Support.DBSQLSupport.CreateConnection(ConnectionString);
                    Connection.Open();
                }
                if (cleanupTransaction == true)
                {
                    Transaction = Connection.BeginTransaction();
                }

                functionReturn = Execute(Connection, Transaction, Parameter, securityTicket);

                #region Cleanup Connection/Transaction
                //Commit the transaction
                if (cleanupTransaction == true)
                {
                    Transaction.Commit();
                }
                //Close the connection
                if (cleanupConnection == true)
                {
                    Connection.Close();
                }
                #endregion
            }
            catch (Exception ex)
            {
                try
                {
                    if (cleanupTransaction == true && Transaction != null)
                    {
                        Transaction.Rollback();
                    }
                }
                catch { }

                try
                {
                    if (cleanupConnection == true && Connection != null)
                    {
                        Connection.Close();
                    }
                }
                catch { }

                throw new Exception("Exception occured in method cls_Create_Orders_Report", ex);
            }
            return(functionReturn);
        }
        protected static FR_String Execute(DbConnection Connection, DbTransaction Transaction, P_OR_DOPDFRfOID Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_String();
            //Put your code here
            return(returnValue);

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

            for (int i = 0; i < Parameter.Priorities.Count(); i++)
            {
                var productSupplier = new ORM_CMN_PRO_Product_Supplier();

                if (Parameter.Priorities[i].Product_SupplierID != Guid.Empty)
                {
                    var fetched = productSupplier.Load(Connection, Transaction, Parameter.Priorities[i].Product_SupplierID);
                    if (fetched.Status == FR_Status.Success)
                    {
                        productSupplier.SupplierPriority = Parameter.Priorities[i].SupplierPriority;
                        productSupplier.Save(Connection, Transaction);
                    }
                }
            }

            return(returnValue);

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

            var downloadURL            = "";
            var DateForElastic         = DateTime.Now;
            var orderStatusesForReport = Parameter.Statuses.Select(x => x.ToString()).ToArray();
            var ordersForReportData    = new OR_GOfRfS_1038[] { };
            if (Parameter.GroupByPharmacy)
            {
                ordersForReportData = cls_Get_Orders_For_Steribase_Report.Invoke(Connection, Transaction, securityTicket).Result.Where(x => x.StatusCode != 10).Select(x => new OR_GOfRfS_1038
                {
                    Patient_RefID = x.Patient_RefID,
                    StatusCode    = x.StatusCode,
                    CaseID        = x.CaseID,
                    StatusID      = x.StatusID,
                    BusinesParticipantWhoCreatedOrder = x.BusinesParticipantWhoCreatedOrder,
                    OrderID                = x.OrderID,
                    OrderNumber            = x.OrderNumber,
                    CaseNumber             = x.CaseNumber,
                    DrugName               = x.DrugName,
                    PZN                    = x.PZN,
                    DeliveryDate           = x.DeliveryDate,
                    DeliveryTimeFrom       = x.DeliveryTimeFrom,
                    DeliveryTimeTo         = x.DeliveryTimeTo,
                    OnlyLabel              = x.OnlyLabel,
                    ChargesFee             = x.ChargesFee,
                    SendInvoiceToPractice  = x.SendInvoiceToPractice,
                    TreatmentDate          = x.TreatmentDate,
                    DoctorID               = x.DoctorID,
                    OrderCreationTimestamp = x.OrderCreationTimestamp,
                    CaseCreationDate       = x.CaseCreationDate,
                    OrderComment           = x.OrderComment,
                    HeaderComment          = x.HeaderComment,
                    IsDeleted              = x.IsDeleted,
                    PharmacyName           = x.PharmacyName,
                    PharmacyID             = x.PharmacyID,
                }).ToArray();
            }
            else
            {
                ordersForReportData = cls_Get_Orders_for_Report_for_Statuses.Invoke(Connection, Transaction, new P_OR_GOfRfS_1038
                {
                    OrderStatuses = orderStatusesForReport
                }, securityTicket).Result.ToArray();
            }

            var allOrderStatuses = ordersForReportData.Any() ? cls_Get_Order_Status_History_for_OrderIDs.Invoke(Connection, Transaction, new P_OR_GOSHfOIDs_1528()
            {
                OrderIDs = ordersForReportData.Select(t => t.OrderID).ToArray()
            }, securityTicket).Result.GroupBy(t => t.OrderID).ToDictionary(t => t.Key, t => t.ToList()) : new Dictionary <Guid, List <OR_GOSHfOIDs_1528> >();

            var orderForReportL        = new List <OrdersForReportModel>();
            var orderForGlobalReport   = new List <OrdersForReportModel>();
            var patientDataCache       = new Dictionary <Guid, P_PA_GPDfPID_1124>();
            var doctorDataCache        = new Dictionary <Guid, DO_GDDfDID_0823>();
            var practiceDataCache      = new Dictionary <Guid, DO_GPDFR_0840>();
            var practiceData           = new DO_GPDFR_0840();
            var practiceID             = Guid.Empty;
            var documentCreatCount     = 0;
            var documentList           = new List <Documents>();
            var allDocuments           = new List <Documents>();
            var OrderFromDate          = ordersForReportData.Any() ? ordersForReportData.Min(ord => ord.OrderCreationTimestamp) : DateTime.MinValue;
            var patientInsurancesCache = cls_Get_Patient_Insurance_Data_on_Tenant.Invoke(Connection, Transaction, securityTicket).Result.GroupBy(t => t.PatientID).ToDictionary(t => t.Key, t => t.ToList());
            var businessParticipants   = ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, new ORM_CMN_BPT_BusinessParticipant.Query()
            {
                IsDeleted    = false,
                Tenant_RefID = securityTicket.TenantID
            }).GroupBy(t => t.CMN_BPT_BusinessParticipantID).ToDictionary(t => t.Key, t => t.Single());

            var reportName = "";


            var orderGroupedByPharmacy = new Dictionary <Guid, List <OR_GOfRfS_1038> >();

            if (Parameter.GroupByPharmacy)
            {
                orderGroupedByPharmacy = ordersForReportData.GroupBy(x => x.PharmacyID).ToDictionary(x => x.Key, x => x.ToList());
            }
            else
            {
                orderGroupedByPharmacy = new Dictionary <Guid, List <OR_GOfRfS_1038> >()
                {
                    { Guid.NewGuid(), ordersForReportData.ToList() }
                };
            }

            foreach (var pharmacy in orderGroupedByPharmacy)
            {
                orderForReportL = new List <OrdersForReportModel>();
                documentList    = new List <Documents>();

                #region Prepare data
                foreach (var orderData in pharmacy.Value)
                {
                    // todo: update pre-fetch
                    if (!patientDataCache.ContainsKey(orderData.Patient_RefID))
                    {
                        patientDataCache.Add(orderData.Patient_RefID, cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPDfPID_1124()
                        {
                            PatientID = orderData.Patient_RefID
                        }, securityTicket).Result);
                    }
                    var patientData = patientDataCache[orderData.Patient_RefID];
                    if (orderData.DoctorID == Guid.Empty)
                    {
                        if (businessParticipants.ContainsKey(orderData.BusinesParticipantWhoCreatedOrder))
                        {
                            var bptWhoCreatedOred = businessParticipants[orderData.BusinesParticipantWhoCreatedOrder];
                            if (bptWhoCreatedOred.IsCompany)
                            {
                                practiceID = cls_Get_PracticeID_for_BusinesParticipant.Invoke(Connection, Transaction, new P_DO_GPIDFBPT_1700()
                                {
                                    PracticeBusinessParticipant = orderData.BusinesParticipantWhoCreatedOrder
                                }, securityTicket).Result.FirstOrDefault().PracticeID;
                            }
                            else
                            {
                                var doctorID = ORM_HEC_Doctor.Query.Search(Connection, Transaction, new ORM_HEC_Doctor.Query()
                                {
                                    IsDeleted    = false,
                                    Tenant_RefID = securityTicket.TenantID,
                                    BusinessParticipant_RefID = orderData.BusinesParticipantWhoCreatedOrder
                                }).SingleOrDefault().HEC_DoctorID;
                                practiceID = cls_Get_PracticeID_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GPIDfDID_1353()
                                {
                                    DoctorID = doctorID
                                }, securityTicket).Result.FirstOrDefault().HEC_MedicalPractiseID;
                            }
                        }
                        if (!practiceDataCache.ContainsKey(practiceID))
                        {
                            var practiceD = cls_Get_Practice_Details_for_Report.Invoke(Connection, Transaction, new P_DO_GPDFR_0840()
                            {
                                PracticeID = practiceID
                            }, securityTicket).Result;
                            if (practiceD != null)
                            {
                                practiceDataCache.Add(practiceID, practiceD);
                            }
                        }
                        practiceData = practiceDataCache[practiceID];
                    }

                    if (!doctorDataCache.ContainsKey(orderData.DoctorID))
                    {
                        doctorDataCache.Add(orderData.DoctorID, cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
                        {
                            DoctorID = orderData.DoctorID
                        }, securityTicket).Result.SingleOrDefault());
                    }

                    var doctorData = doctorDataCache[orderData.DoctorID];

                    var orderForReport = new OrdersForReportModel();

                    switch (patientData.gender)
                    {
                    case 0:
                        orderForReport.PatientSalutation = "Herr";
                        break;

                    case 1:
                        orderForReport.PatientSalutation = "Frau";
                        break;

                    default:
                        orderForReport.PatientSalutation = "-";
                        break;
                    }
                    var orderStatus = "Bestellung";
                    if (orderData.StatusCode == 6 || orderData.StatusCode == 7)
                    {
                        orderStatus = "Stornierung";
                    }
                    else if (orderData.StatusCode == 10)
                    {
                        orderStatus = "Bestellt bei einer nicht kooperierenden Apotheke";
                    }

                    var hipData = patientInsurancesCache[orderData.Patient_RefID].Where(t => t.InsuranceDate.Date <= orderData.CaseCreationDate.Date).FirstOrDefault();
                    orderForReport.HIP = hipData == null ? "-" : hipData.HipName;
                    orderForReport.PatientInsuranceNumber = hipData == null ? "-" : hipData.InsuranceStateCode;
                    orderForReport.PatientStatusNumber    = hipData == null ? "-" : hipData.InsuranceIdNumber;
                    orderForReport.PatientFirstName       = patientData.patient_first_name;
                    orderForReport.PatientLastName        = patientData.patient_last_name;
                    orderForReport.PatientBirthDate       = patientData.birthday;
                    orderForReport.CaseNumber             = Convert.ToInt32(orderData.CaseNumber);
                    orderForReport.OrderNumber            = Convert.ToInt32(orderData.OrderNumber);
                    orderForReport.OrderType        = orderStatus;
                    orderForReport.DrugName         = orderData.DrugName;
                    orderForReport.Pzn              = orderData.PZN;
                    orderForReport.TreatmentDate    = orderData.TreatmentDate;
                    orderForReport.DeliveryDate     = orderData.DeliveryDate < orderData.TreatmentDate ? orderData.DeliveryDate : orderData.TreatmentDate;
                    orderForReport.DeliveryTimeFrom = orderData.DeliveryTimeFrom.ToString("HH:mm") == "00:00" ? orderData.DeliveryTimeFrom.AddHours(8) : orderData.DeliveryTimeFrom;
                    orderForReport.DeliveryTimeTo   = orderData.DeliveryTimeTo.ToString("HH:mm") == "23:59" ? orderData.DeliveryTimeFrom.AddHours(18) : orderData.DeliveryTimeTo;
                    orderForReport.ChargesFee       = orderData.ChargesFee ? "Ja" : "Nein";
                    orderForReport.OnlyLabel        = orderData.OnlyLabel ? "Ja" : "Nein";
                    orderForReport.PracticeInvoice  = orderData.SendInvoiceToPractice ? "Ja" : "Nein";
                    orderForReport.OrderComment     = orderData.OrderComment;
                    orderForReport.HeaderComment    = orderData.HeaderComment;
                    orderForReport.PharmacyName     = orderData.PharmacyID == Guid.Empty ? "-" : orderData.PharmacyName;

                    if (allOrderStatuses.ContainsKey(orderData.OrderID))
                    {
                        var orderStatuses = allOrderStatuses[orderData.OrderID];
                        if (orderStatuses.Any(t => t.StatusCode == 1))
                        {
                            orderForReport.DateOfSubmission = orderStatuses.First(t => t.StatusCode == 1).StatusChangedOn;
                        }
                    }

                    if (orderData.DoctorID != Guid.Empty)
                    {
                        orderForReport.PracticeName    = doctorData != null ? doctorData.practice : "-";
                        orderForReport.TreatmentDoctor = doctorData != null ? doctorData.first_name + " " + doctorData.last_name : "-";
                        orderForReport.Street          = doctorData != null ? doctorData.address : "-";
                        orderForReport.City            = doctorData != null ? doctorData.city : "-";
                        orderForReport.Zip             = doctorData != null ? doctorData.ZIP : "-";
                    }
                    else
                    {
                        orderForReport.PracticeName    = practiceData != null ? practiceData.Name : "-";
                        orderForReport.TreatmentDoctor = "-";
                        orderForReport.Street          = practiceData != null ? practiceData.Street_Name + " " + practiceData.Street_Number : "-";
                        orderForReport.City            = practiceData != null ? practiceData.City : "-";
                        orderForReport.Zip             = practiceData != null ? practiceData.ZIP : "-";
                    }

                    if (orderData.StatusCode == 6 && !ordersForReportData.Any(r => r.OrderID != orderData.OrderID && orderData.CaseID == orderData.CaseID))
                    {
                        var originalOrder = new OrdersForReportModel();
                        GenericUtils.CloneObject <OrdersForReportModel>(orderForReport, originalOrder);
                        originalOrder.OrderType = "Bestellung";
                        orderForReportL.Add(originalOrder);
                    }

                    orderForReportL.Add(orderForReport);
                }

                orderForGlobalReport.AddRange(orderForReportL);
                #endregion

                #region create report
                if (orderForReportL.Any())
                {
                    var documentExcel = new Documents();
                    if (Parameter.GroupByPharmacy)
                    {
                        reportName = String.Format("{0} {1}", pharmacy.Value.First().PharmacyName, "Bestellungexport f�r Steribase" + DateTime.Now.ToString("dd.MM.yyyy_HH.mm"));
                    }
                    else
                    {
                        reportName = String.Format("{0} {1}", "CompleteOrdersReport", DateTime.Now.ToString("dd.MM.yyyy_HH.mm"));
                    }

                    documentExcel.documentName           = reportName;
                    documentExcel.documentOutputLocation = GenerateReportOrders.CreateOrdersXlsReport(orderForReportL, documentExcel.documentName);
                    documentExcel.mimeType = UtilMethods.GetMimeType(documentExcel.documentOutputLocation);
                    documentExcel.receiver = "Steribase";
                    documentList.Add(documentExcel);
                    allDocuments.Add(documentExcel);

                    foreach (var item in documentList)
                    {
                        var ms               = new MemoryStream(File.ReadAllBytes(item.documentOutputLocation));
                        var byteArrayFile    = ms.ToArray();
                        var _providerFactory = ProviderFactory.Instance;
                        var documentProvider = _providerFactory.CreateDocumentServiceProvider();
                        var uploadedFrom     = HttpContext.Current.Request.UserHostAddress;
                        var documentID       = documentProvider.UploadDocument(byteArrayFile, item.documentOutputLocation, securityTicket.SessionTicket, uploadedFrom);
                        downloadURL = documentProvider.GenerateDownloadLink(documentID, securityTicket.SessionTicket, true, true);

                        var parameterDoc = new P_ARCH_UD_1326();
                        parameterDoc.DocumentID   = documentID;
                        parameterDoc.Mime         = item.mimeType;
                        parameterDoc.DocumentName = item.documentName;
                        parameterDoc.DocumentDate = DateForElastic;
                        parameterDoc.Receiver     = item.receiver;
                        parameterDoc.ContractID   = item.ContractID;
                        if (Parameter.GroupByPharmacy)
                        {
                            parameterDoc.Description = pharmacy.Value.First().PharmacyName + " - Bestellungen von " + OrderFromDate.ToString("dd.MM.yyyy") + " - " + DateForElastic.ToString("dd.MM.yyyy");
                        }
                        else
                        {
                            parameterDoc.Description = reportName;
                        }
                        cls_Upload_Report.Invoke(Connection, Transaction, parameterDoc, securityTicket);
                    }
                    documentCreatCount++;
                }
                #endregion
            }

            #region create all report

            if (documentCreatCount > 1)
            {
                documentList = new List <Documents>();

                if (orderForGlobalReport.Any())
                {
                    var documentExcel = new Documents();
                    reportName = "Bestellungexport f�r Steribase " + DateTime.Now.ToString("dd.MM.yyyy_HH.mm");
                    documentExcel.documentName           = reportName;
                    documentExcel.documentOutputLocation = GenerateReportOrders.CreateOrdersXlsReport(orderForGlobalReport, documentExcel.documentName);
                    documentExcel.mimeType = UtilMethods.GetMimeType(documentExcel.documentOutputLocation);
                    documentExcel.receiver = "Steribase";
                    documentList.Add(documentExcel);
                    allDocuments.Add(documentExcel);

                    foreach (var item in documentList)
                    {
                        var ms               = new MemoryStream(File.ReadAllBytes(item.documentOutputLocation));
                        var byteArrayFile    = ms.ToArray();
                        var _providerFactory = ProviderFactory.Instance;
                        var documentProvider = _providerFactory.CreateDocumentServiceProvider();
                        var uploadedFrom     = HttpContext.Current.Request.UserHostAddress;
                        var documentID       = documentProvider.UploadDocument(byteArrayFile, item.documentOutputLocation, securityTicket.SessionTicket, uploadedFrom);
                        downloadURL = documentProvider.GenerateDownloadLink(documentID, securityTicket.SessionTicket, true, true);

                        var parameterDoc = new P_ARCH_UD_1326();
                        parameterDoc.DocumentID   = documentID;
                        parameterDoc.Mime         = item.mimeType;
                        parameterDoc.DocumentName = item.documentName;
                        parameterDoc.DocumentDate = DateForElastic;
                        parameterDoc.Receiver     = item.receiver;
                        parameterDoc.ContractID   = item.ContractID;
                        parameterDoc.Description  = "Bestellungen von " + OrderFromDate.ToString("dd.MM.yyyy") + " - " + DateForElastic.ToString("dd.MM.yyyy");
                        cls_Upload_Report.Invoke(Connection, Transaction, parameterDoc, securityTicket);
                    }
                }
            }


            #region Create Dictionary And Zip
            returnValue.Result = "";
            if (allDocuments.Any())
            {
                var directoryPath    = Path.GetTempPath() + reportName;
                var _providerFactory = ProviderFactory.Instance;
                var documentProvider = _providerFactory.CreateDocumentServiceProvider();

                if (documentCreatCount == 1)
                {
                    var doc   = allDocuments.First();
                    var fname = directoryPath + "\\" + doc.documentName + ".xlsx";
                    var ms    = new MemoryStream(File.ReadAllBytes(doc.documentOutputLocation));

                    byte[] bytes = ms.ToArray();

                    var mime       = UtilMethods.GetMimeType(fname);
                    var documentID = documentProvider.UploadDocument(bytes, fname, securityTicket.SessionTicket, HttpContext.Current.Request.UserHostAddress);
                    returnValue.Result = documentProvider.GenerateDownloadLink(documentID, securityTicket.SessionTicket, true, true);
                }
                else
                {
                    if (Directory.Exists(directoryPath))
                    {
                        Directory.Delete(directoryPath, true);
                    }

                    Directory.CreateDirectory(directoryPath);

                    var fileVersion = 1;
                    foreach (var doc in allDocuments)
                    {
                        var fname = directoryPath + "\\" + doc.documentName + ".xlsx";
                        if (File.Exists(fname))
                        {
                            fname = directoryPath + "\\" + doc.documentName + "(" + fileVersion++ + ")" + ".xlsx";
                        }
                        else
                        {
                            fileVersion = 1;
                        }

                        var ms = new MemoryStream(File.ReadAllBytes(doc.documentOutputLocation));
                        File.WriteAllBytes(fname, ms.ToArray());
                    }

                    byte[] bytes   = new byte[] { };
                    var    zipName = Path.GetTempPath() + "\\" + reportName + ".zip";
                    ZipFile.CreateFromDirectory(directoryPath, zipName);
                    using (FileStream fs = new FileStream(zipName, FileMode.Open))
                    {
                        using (MemoryStream ms = new MemoryStream())
                        {
                            fs.CopyTo(ms);
                            bytes = ms.ToArray();
                        }
                    }

                    var mime       = UtilMethods.GetMimeType(zipName);
                    var documentID = documentProvider.UploadDocument(bytes, zipName, securityTicket.SessionTicket, HttpContext.Current.Request.UserHostAddress);
                    returnValue.Result = documentProvider.GenerateDownloadLink(documentID, securityTicket.SessionTicket, true, true);

                    Directory.Delete(directoryPath, true);
                    File.Delete(zipName);
                }
            }
            #endregion
            #endregion

            return(returnValue);

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

            var data = cls_Get_Account_Information_with_PracticeID.Invoke(Connection, Transaction, securityTicket).Result;

            var isNewPharmacy = Parameter.Order.default_pharmacy == Guid.Empty;

            var current_order_status      = isNewPharmacy ? "MO10" : "MO1";
            var current_order_status_code = isNewPharmacy ? 10 : 1;

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

            var practice_info = cls_Get_Practice_Details_for_Report.Invoke(Connection, Transaction, new P_DO_GPDFR_0840()
            {
                PracticeID = data.PracticeID
            }, securityTicket).Result;

            var trigger_acc = ORM_USR_Account.Query.Search(Connection, Transaction, new ORM_USR_Account.Query()
            {
                USR_AccountID = securityTicket.AccountID
            }).Single();
            var culture            = new CultureInfo("de", true);
            var delivery_date      = DateTime.ParseExact(Parameter.Order.delivery_date, "dd.MM.yyyy", culture);
            var delivery_date_from = DateTime.ParseExact(Parameter.Order.delivery_date_from, "HH:mm", culture);
            delivery_date_from = delivery_date.AddHours(delivery_date_from.Hour).AddMinutes(delivery_date_from.Minute);
            var delivery_date_to = DateTime.ParseExact(Parameter.Order.delivery_date_to, "HH:mm", culture);
            delivery_date_to = delivery_date.AddHours(delivery_date_to.Hour).AddMinutes(delivery_date_to.Minute);
            var drug_names   = new List <string>();
            var cmn_products = ORM_CMN_PRO_Product.Query.Search(Connection, Transaction, new ORM_CMN_PRO_Product.Query()
            {
                Tenant_RefID = securityTicket.TenantID, IsDeleted = false
            });
            var hec_products = ORM_HEC_Product.Query.Search(Connection, Transaction, new ORM_HEC_Product.Query()
            {
                Tenant_RefID = securityTicket.TenantID, IsDeleted = false
            });
            var drugs = cls_Get_Drug_Details_on_Tenant.Invoke(Connection, Transaction, securityTicket).Result;

            #region save and get pharmacy
            if (isNewPharmacy)
            {
                Parameter.Order.default_pharmacy = cls_Save_Pharmacy.Invoke(Connection, Transaction, new P_PH_SP_1124
                {
                    Pharmacy = new Pharmacy.Model.Pharmacy(Guid.Empty, Parameter.Order.pharmacy_name, String.Empty, String.Empty,
                                                           String.Empty, Parameter.Order.pharmacy_street, Parameter.Order.pharmacy_street_number, Parameter.Order.pharmacy_zip_code,
                                                           Parameter.Order.pharmacy_town, true, String.Empty)
                }, securityTicket).Result;
            }

            var pharmacy = cls_Get_Pharmacy_for_PharmacyID.Invoke(Connection, Transaction, new P_PH_GPfPID_1535
            {
                PharmacyID = Parameter.Order.default_pharmacy
            }, securityTicket).Result;
            #endregion

            var ordersForReport = new List <ReportOrderItem>();

            foreach (var order_id in Parameter.Order.order_ids)
            {
                #region Status
                var header = ORM_ORD_PRC_ProcurementOrder_Header.Query.Search(Connection, Transaction, new ORM_ORD_PRC_ProcurementOrder_Header.Query()
                {
                    ORD_PRC_ProcurementOrder_HeaderID = order_id,
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).Single();

                header.ProcurementOrder_Supplier_RefID = pharmacy != null ? pharmacy.CompanyBPID : Guid.Empty;

                var header_comment = new ORM_ORD_PRC_ProcurementOrder_Note();
                header_comment.Comment      = Parameter.Order.comment;
                header_comment.Title        = "Order comment";
                header_comment.Tenant_RefID = securityTicket.TenantID;
                header_comment.ORD_PRC_ProcurementOrder_Header_RefID = order_id;

                header_comment.Save(Connection, Transaction);

                ORM_ORD_PRC_ProcurementOrder_Position.Query order_positionQ = new ORM_ORD_PRC_ProcurementOrder_Position.Query();
                order_positionQ.Tenant_RefID = securityTicket.TenantID;
                order_positionQ.IsDeleted    = false;
                order_positionQ.ProcurementOrder_Header_RefID = order_id;
                var order_position   = ORM_ORD_PRC_ProcurementOrder_Position.Query.Search(Connection, Transaction, order_positionQ).SingleOrDefault();
                var position_comment = order_position != null ? order_position.Position_Comment ?? String.Empty : String.Empty;

                var drug_order_status = new ORM_ORD_PRC_ProcurementOrder_Status();
                drug_order_status.GlobalPropertyMatchingID = String.Format("mm.doc.connect.drug.order.status.{0}", current_order_status.ToLower());
                drug_order_status.Status_Code  = current_order_status_code;
                drug_order_status.Tenant_RefID = securityTicket.TenantID;
                drug_order_status.Status_Name  = new Dict(ORM_ORD_PRC_ProcurementOrder_Status.TableName);
                foreach (var lang in all_languages)
                {
                    drug_order_status.Status_Name.AddEntry(lang.CMN_LanguageID, current_order_status);
                }
                drug_order_status.Save(Connection, Transaction);

                var drug_order_status_history = new ORM_ORD_PRC_ProcurementOrder_StatusHistory();
                drug_order_status_history.ProcurementOrder_Header_RefID = header.ORD_PRC_ProcurementOrder_HeaderID;
                drug_order_status_history.ProcurementOrder_Status_RefID = drug_order_status.ORD_PRC_ProcurementOrder_StatusID;
                drug_order_status_history.Tenant_RefID     = securityTicket.TenantID;
                drug_order_status_history.IsStatus_Created = true;
                drug_order_status_history.TriggeredAt_Date = DateTime.Now;
                drug_order_status_history.TriggeredBy_BusinessParticipant_RefID = trigger_acc.BusinessParticipant_RefID;
                drug_order_status_history.Save(Connection, Transaction);

                header.Current_ProcurementOrderStatus_RefID = drug_order_status.ORD_PRC_ProcurementOrder_StatusID;
                header.Save(Connection, Transaction);
                #endregion Status

                var ord_drug_order = ORM_ORD_PRC_ProcurementOrder_Position.Query.Search(Connection, Transaction, new ORM_ORD_PRC_ProcurementOrder_Position.Query()
                {
                    ProcurementOrder_Header_RefID = order_id,
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).Single();


                ord_drug_order.Position_RequestedDateOfDelivery       = delivery_date.Date;
                ord_drug_order.RequestedDateOfDelivery_TimeFrame_From = delivery_date_from;
                ord_drug_order.RequestedDateOfDelivery_TimeFrame_To   = delivery_date_to;
                ord_drug_order.Save(Connection, Transaction);

                var hec_drug_order = ORM_HEC_PRC_ProcurementOrder_Position.Query.Search(Connection, Transaction, new ORM_HEC_PRC_ProcurementOrder_Position.Query()
                {
                    Ext_ORD_PRC_ProcurementOrder_Position_RefID = ord_drug_order.ORD_PRC_ProcurementOrder_PositionID,
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).Single();

                var drug_id = ORM_HEC_ACT_PlannedAction_PotentialProcedure_RequiredProduct.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction_PotentialProcedure_RequiredProduct.Query()
                {
                    BoundTo_HealthcareProcurementOrderPosition_RefID = hec_drug_order.HEC_PRC_ProcurementOrder_PositionID,
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).Single().HealthcareProduct_RefID;

                var drugName = drugs.First(t => t.DrugID == drug_id).DrugName;
                drug_names.Add(drugName);

                if (Parameter.Order.doctor_id != Guid.Empty)
                {
                    var authorizing_doctor_details = cls_Get_Doctor_BasicInformation_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDBIfDID_1034()
                    {
                        DoctorID = Parameter.Order.doctor_id
                    }, securityTicket).Result;

                    hec_drug_order.Clearing_Doctor_RefID      = Parameter.Order.doctor_id;
                    hec_drug_order.ClearingDoctor_DisplayName = GenericUtils.GetDoctorName(authorizing_doctor_details);
                    hec_drug_order.Save(Connection, Transaction);
                }

                var shipping_address = new ORM_CMN_UniversalContactDetail();
                shipping_address.Modification_Timestamp = DateTime.Now;
                shipping_address.Tenant_RefID           = securityTicket.TenantID;
                shipping_address.Street_Name            = Parameter.Order.street;
                shipping_address.Street_Number          = Parameter.Order.number;
                shipping_address.ZIP  = Parameter.Order.zip;
                shipping_address.Town = Parameter.Order.city;
                shipping_address.CompanyName_Line1 = Parameter.Order.receiver;
                shipping_address.Save(Connection, Transaction);

                var ord_drug_order_header = new ORM_ORD_PRC_ProcurementOrder_Header();
                ord_drug_order_header.Load(Connection, Transaction, ord_drug_order.ProcurementOrder_Header_RefID);
                ord_drug_order_header.ShippingAddressUCD_RefID        = shipping_address.CMN_UniversalContactDetailID;
                ord_drug_order_header.Modification_Timestamp          = DateTime.Now;
                ord_drug_order_header.ProcurementOrder_Supplier_RefID = pharmacy != null ? pharmacy.CompanyBPID : Guid.Empty;
                ord_drug_order_header.Save(Connection, Transaction);


                ordersForReport.Add(new ReportOrderItem
                {
                    Name            = drugName,
                    PositionComment = position_comment,
                    Patient         = new ReportOrderPatientInformation
                    {
                        PatientID = hec_drug_order.OrderedFor_Patient_RefID,
                        FeeWaived = hec_drug_order.IsOrderForPatient_PatientFeeWaived
                    }
                });
            }

            #region Send e-mail if urgent order

            var defaultshippingDateOffset = cls_Get_Practice_PropertyValue_for_PropertyName_and_PracticeID.Invoke(Connection, Transaction, new P_DO_GPPVfPNaPID_0916()
            {
                PracticeID   = data.PracticeID,
                PropertyName = "Default Shipping Date Offset"
            }, securityTicket).Result.NumericValue;

            var company_settings = cls_Get_Company_Settings.Invoke(Connection, Transaction, securityTicket).Result;
            var ordernum         = company_settings.ImmediateOrderInterval;

            if (delivery_date > DateTime.Now.AddDays(-defaultshippingDateOffset).AddMinutes(ordernum))
            {
                try
                {
                    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
                    var mailToL = new List <String>();

                    var accountMails = cls_Get_All_Account_LoginEmails_Who_Receive_Notifications.Invoke(Connection, Transaction, securityTicket).Result.ToList();
                    foreach (var mail in accountMails)
                    {
                        mailToL.Add(mail.LoginEmail);
                    }
                    var mailToFromCompanySettings = company_settings.Email;
                    mailToL.Add(mailToFromCompanySettings);

                    var appName        = WebConfigurationManager.AppSettings["mmAppUrl"];
                    var prefix         = HttpContext.Current.Request.Url.AbsoluteUri.Contains("https") ? "https://" : "http://";
                    var imageUrl       = HttpContext.Current.Request.Url.AbsoluteUri.Substring(0, HttpContext.Current.Request.Url.AbsoluteUri.IndexOf("api")) + "Content/images/logo.png";
                    var email_template = File.ReadAllText(HttpContext.Current.Server.MapPath("~/EmailTemplates/UrgentOrderEmailTemplate.html"));

                    var     subjectsJson = File.ReadAllText(HttpContext.Current.Server.MapPath("~/EmailTemplates/EmailSubjects.json"));
                    dynamic subjects     = JsonConvert.DeserializeObject(subjectsJson);
                    var     subjectMail  = subjects["UrgentOrderSubject"].ToString();

                    email_template = EmailTemplater.SetTemplateData(email_template, new
                    {
                        orders = drug_names.Select(t => new
                        {
                            order_date_time_from = delivery_date_from.ToString("dd.MM.yyyy HH:mm"),
                            order_date_time_to   = delivery_date_to.ToString("HH:mm"),
                            name      = data.AccountInformation.name,
                            drug_name = t
                        }),
                        mmapp_dashboard_url     = prefix + HttpContext.Current.Request.Url.Authority + "/" + appName,
                        medios_connect_logo_url = imageUrl
                    }, "{{", "}}");

                    var mailFrom      = WebConfigurationManager.AppSettings["mailFrom"];
                    var mailsDistinct = mailToL.Distinct().ToList();
                    foreach (var mailTo in mailsDistinct)
                    {
                        EmailNotificationSenderUtil.SendEmail(mailFrom, mailTo, subjectMail, email_template);
                    }
                }
                catch (Exception ex)
                {
                    LogUtils.Logger.LogDocAppInfo(new LogUtils.LogEntry(System.Reflection.MethodInfo.GetCurrentMethod(), ex, null, "Urgent order: Email sending failed."), "EmailExceptions");
                }
            }

            #endregion SEND MAIL URGENT ORDER

            #region Update case order number
            var case_order_number = cls_Save_Case_Order_Number_for_OrderIDs.Invoke(Connection, Transaction, new P_CAS_SCONfOID_1442
            {
                order_ids     = Parameter.Order.order_ids.ToArray(),
                practice_bsnr = practice_info.BSNR
            }, securityTicket).Result;
            #endregion

            #region Create PDF report
            if (isNewPharmacy)
            {
                #region patient information
                var patients_info = cls_Get_Patient_Details_for_PatientIDs.Invoke(Connection, Transaction, new P_PA_GPDfPIDs_1354
                {
                    PatientIDs = ordersForReport.Select(x => x.Patient).Select(x => x.PatientID).Distinct().ToArray()
                }, securityTicket).Result;

                foreach (var order in ordersForReport)
                {
                    var patient_info = patients_info.Single(x => x.PatientID == order.Patient.PatientID);

                    order.Patient.FirstName       = patient_info.FirstName;
                    order.Patient.LastName        = patient_info.LastName;
                    order.Patient.BirthDate       = patient_info.BirthDate;
                    order.Patient.Hip             = patient_info.HipName;
                    order.Patient.InsuranceStatus = patient_info.InsuranceStatus;
                }
                #endregion

                #region Repack data for report
                var orderPdfReport  = new OrderPdfReportGenerator();
                var reportOrderInfo = new ReportOrderInformation
                {
                    DeliveryDate     = delivery_date,
                    DeliveryTimeFrom = delivery_date_from,
                    DeliveryTimeTo   = delivery_date_to,
                    CreationDate     = DateTime.Now,
                    OrderNumber      = case_order_number,
                    HeaderComment    = Parameter.Order.comment ?? String.Empty,
                    OrderedDrugs     = ordersForReport,
                };
                var reportPractice = new OrderParticipantInformation
                {
                    City   = practice_info.City,
                    Email  = practice_info.Contact_Email,
                    Name   = practice_info.Name,
                    Number = practice_info.Street_Number,
                    Phone  = practice_info.Contact_Telephone,
                    Street = practice_info.Street_Name,
                    Zip    = practice_info.ZIP
                };
                var reportPharmacy = new OrderParticipantInformation
                {
                    Name   = pharmacy.PharmacyName,
                    Street = pharmacy.Street_Name,
                    Number = pharmacy.Street_Number,
                    Zip    = pharmacy.ZIP,
                    City   = pharmacy.Town,
                    Email  = pharmacy.Contact_Email,
                    Phone  = pharmacy.Contact_Telephone
                };
                #endregion

                var bytes = orderPdfReport.Generate(
                    new Model.OrderReportParameters
                {
                    Orders   = reportOrderInfo,
                    Pharmacy = reportPharmacy,
                    Practice = reportPractice
                },
                    HttpContext.Current.Server.MapPath("~/ReportContent/SubmitOrderPdfReportContent.xml")
                    );

                var _providerFactory = ProviderFactory.Instance;
                var documentProvider = _providerFactory.CreateDocumentServiceProvider();
                var fileName         = String.Format("{0}-{1}-{2}.pdf", "Submited Orders", pharmacy.PharmacyName, DateTime.Now.ToString("dd.MM.yyyy HH:mm"));
                var documentID       = documentProvider.UploadDocument(bytes, fileName, securityTicket.SessionTicket, HttpContext.Current.Request.UserHostAddress);
                var reportURL        = documentProvider.GenerateDownloadLink(documentID, securityTicket.SessionTicket, true, true);

                var parameterDoc = new P_OR_UOPDFR_1049();

                parameterDoc.DocumentID      = documentID;
                parameterDoc.Mime            = UtilMethods.GetMimeType(fileName);
                parameterDoc.DocumentName    = fileName;
                parameterDoc.CaseOrderNumber = case_order_number;
                parameterDoc.OrderIDs        = Parameter.Order.order_ids.ToArray();

                cls_Upload_Order_PDF_Report.Invoke(Connection, Transaction, parameterDoc, securityTicket);

                returnValue.Result = reportURL;
            }
            #endregion

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_String Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_SCONfOID_1442 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_String();
            //Put your code here
            var caseOrderNumber     = 00001;
            var lastCaseOrderNumber = cls_Get_Last_Case_Order_Number_for_PracticeBSNR.Invoke(Connection, Transaction, new P_CAS_GLCONfPBSNR_1534
            {
                PracticeBSNR = String.Format("%{0}-%", Parameter.practice_bsnr)
            }, securityTicket).Result;
            if (lastCaseOrderNumber != null)
            {
                caseOrderNumber = lastCaseOrderNumber.CaseOrderNumber + 1;
            }

            var newCaseNumber = String.Format("{0}-{1}", Parameter.practice_bsnr, caseOrderNumber.ToString("D5"));

            var cases = cls_Get_CaseIDs_for_OrderIDs.Invoke(Connection, Transaction, new P_CAS_GCIDsfOIDs_1508
            {
                OrderIDs = Parameter.order_ids
            }, securityTicket).Result;

            foreach (var cas in cases)
            {
                var case_universal_property = ORM_HEC_CAS_Case_UniversalProperty.Query.Search(Connection, Transaction, new ORM_HEC_CAS_Case_UniversalProperty.Query()
                {
                    GlobalPropertyMatchingID = ECaseProperty.CaseOrderNumber.Value(),
                    Tenant_RefID             = securityTicket.TenantID,
                    IsDeleted = false
                }).SingleOrDefault();

                if (case_universal_property == null)
                {
                    case_universal_property = new ORM_HEC_CAS_Case_UniversalProperty();
                    case_universal_property.Tenant_RefID             = securityTicket.TenantID;
                    case_universal_property.PropertyName             = "Case order number";
                    case_universal_property.IsValue_Boolean          = true;
                    case_universal_property.GlobalPropertyMatchingID = ECaseProperty.CaseOrderNumber.Value();
                    case_universal_property.Modification_Timestamp   = DateTime.Now;

                    case_universal_property.Save(Connection, Transaction);
                }

                #region parameter value
                var case_universal_property_value = ORM_HEC_CAS_Case_UniversalPropertyValue.Query.Search(Connection, Transaction, new ORM_HEC_CAS_Case_UniversalPropertyValue.Query()
                {
                    HEC_CAS_Case_RefID = cas.CaseID,
                    HEC_CAS_Case_UniversalProperty_RefID = case_universal_property.HEC_CAS_Case_UniversalPropertyID,
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).SingleOrDefault();

                if (case_universal_property_value == null)
                {
                    case_universal_property_value = new ORM_HEC_CAS_Case_UniversalPropertyValue();
                    case_universal_property_value.Tenant_RefID       = securityTicket.TenantID;
                    case_universal_property_value.HEC_CAS_Case_RefID = cas.CaseID;
                    case_universal_property_value.HEC_CAS_Case_UniversalProperty_RefID = case_universal_property.HEC_CAS_Case_UniversalPropertyID;
                }
                case_universal_property_value.Modification_Timestamp = DateTime.Now;
                case_universal_property_value.Value_String           = newCaseNumber;

                case_universal_property_value.Save(Connection, Transaction);
            }
            #endregion

            returnValue.Result = newCaseNumber;
            return(returnValue);

            #endregion UserCode
        }