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

            String[] treatment_gpos = cls_Get_All_GPOS_Billing_Codes_for_GlobalPropertyMatchingID.Invoke(Connection, Transaction, new P_CAS_GAGPOSBCfGPMID_1516()
            {
                GlobalPropertyMatchingID = "mm.docconnect.gpos.catalog.operation"
            }, securityTicket).Result.Select(gpos => gpos.BillingCode).ToArray();
            String[] aftercare_gpos = cls_Get_All_GPOS_Billing_Codes_for_GlobalPropertyMatchingID.Invoke(Connection, Transaction, new P_CAS_GAGPOSBCfGPMID_1516()
            {
                GlobalPropertyMatchingID = "mm.docconnect.gpos.catalog.nachsorge"
            }, securityTicket).Result.Select(gpos => gpos.BillingCode).ToArray();

            var is_treatment = cls_Get_PerformedActionType_GlobalPropertyMatchingID_for_PlannedActionID.Invoke(Connection, Transaction, new P_CAS_GPAGPMIDfPAID_1652()
            {
                PlannedActionID = Parameter.planned_action_id
            }, securityTicket).Result.GlobalPropertyMatchingID.Equals("mm.docconect.doc.app.performed.action.treatment");
            var case_id = Guid.Empty;
            if (is_treatment)
            {
                ORM_HEC_ACT_PlannedAction.Query planned_actionQ = new ORM_HEC_ACT_PlannedAction.Query();
                planned_actionQ.HEC_ACT_PlannedActionID = Parameter.planned_action_id;
                planned_actionQ.Tenant_RefID            = securityTicket.TenantID;
                planned_actionQ.IsDeleted = false;
                var planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, planned_actionQ).SingleOrDefault();
                if (planned_action != null)
                {
                    ORM_HEC_CAS_Case_RelevantPerformedAction.Query relevant_performed_actionQ = new ORM_HEC_CAS_Case_RelevantPerformedAction.Query();
                    relevant_performed_actionQ.PerformedAction_RefID = planned_action.IfPlannedFollowup_PreviousAction_RefID;
                    relevant_performed_actionQ.Tenant_RefID          = securityTicket.TenantID;
                    relevant_performed_actionQ.IsDeleted             = false;

                    var relevant_performed_action = ORM_HEC_CAS_Case_RelevantPerformedAction.Query.Search(Connection, Transaction, relevant_performed_actionQ).SingleOrDefault();
                    if (relevant_performed_action != null)
                    {
                        case_id = relevant_performed_action.Case_RefID;
                    }
                }
            }
            else
            {
                ORM_HEC_CAS_Case_RelevantPlannedAction.Query relevant_planned_actionQ = new ORM_HEC_CAS_Case_RelevantPlannedAction.Query();
                relevant_planned_actionQ.PlannedAction_RefID = Parameter.planned_action_id;
                relevant_planned_actionQ.Tenant_RefID        = securityTicket.TenantID;
                relevant_planned_actionQ.IsDeleted           = false;
                var relevant_planned_action = ORM_HEC_CAS_Case_RelevantPlannedAction.Query.Search(Connection, Transaction, relevant_planned_actionQ).SingleOrDefault();
                if (relevant_planned_action != null)
                {
                    case_id = relevant_planned_action.Case_RefID;
                }
            }

            var case_to_submit = cls_Get_Case_Details_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GCDfCID_1435()
            {
                CaseID = case_id
            }, securityTicket).Result;
            if (case_to_submit != null)
            {
                var current_status   = "FS1";
                var diagnose_details = cls_Get_Diagnose_Details_for_DiagnoseID.Invoke(Connection, Transaction, new P_CAS_GDDfDID_1357()
                {
                    DiagnoseID = case_to_submit.diagnose_id
                }, securityTicket).Result;
                var drug_details = cls_Get_Drug_Details_for_DrugID.Invoke(Connection, Transaction, new P_CAS_GDDfDID_1614()
                {
                    DrugID = case_to_submit.drug_id
                }, securityTicket).Result;
                var treatment_doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
                {
                    DoctorID = case_to_submit.op_doctor_id
                }, securityTicket).Result.SingleOrDefault();
                var patient_details = cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_PA_GPDfPID_1729()
                {
                    PatientID = case_to_submit.patient_id
                }, securityTicket).Result;
                var aftercare_doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
                {
                    DoctorID = case_to_submit.ac_doctor_id
                }, securityTicket).Result.SingleOrDefault();
                var treatment_practice_details = cls_Get_Practice_Details_for_PracticeID.Invoke(Connection, Transaction, new P_DO_GPDfPID_1432()
                {
                    PracticeID = case_to_submit.practice_id
                }, securityTicket).Result.FirstOrDefault();
                var aftercare_practice_details = cls_Get_Practice_Details_for_PracticeID.Invoke(Connection, Transaction, new P_DO_GPDfPID_1432()
                {
                    PracticeID = case_to_submit.aftercare_doctors_practice_id
                }, securityTicket).Result.FirstOrDefault();
                var practice_defaults = cls_Get_Practice_Default_Settings_for_PracticeID.Invoke(Connection, Transaction, new P_DO_GPDSfPID_0909()
                {
                    PracticeID = case_to_submit.practice_id
                }, securityTicket).Result;

                if (is_treatment)
                {
                    #region CHANGE TREATMENT STATUS
                    var bill_positions = cls_Get_BillPositionIDs_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCID_0928()
                    {
                        CaseID = case_id
                    }, securityTicket).Result;
                    foreach (var bill_position in bill_positions)
                    {
                        var billing_code = cls_Get_BillingCode_for_CaseBillCodeID.Invoke(Connection, Transaction, new P_CAS_GBCfCBCID_1334()
                        {
                            CaseBillCodeID = bill_position.hec_case_bill_code_id
                        }, securityTicket).Result;

                        if (!aftercare_gpos.Contains(billing_code.BillingCode))
                        {
                            ORM_BIL_BillPosition_TransmitionStatus.Query transmition_statusQ = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                            transmition_statusQ.BillPosition_RefID   = bill_position.bill_position_id;
                            transmition_statusQ.TransmitionStatusKey = "treatment";
                            transmition_statusQ.Tenant_RefID         = securityTicket.TenantID;
                            transmition_statusQ.IsDeleted            = false;
                            transmition_statusQ.IsActive             = true;

                            var transmition_status = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, transmition_statusQ).SingleOrDefault();
                            if (transmition_status != null)
                            {
                                if (Parameter.change_status)
                                {
                                    transmition_status.IsActive = false;
                                    transmition_status.Modification_Timestamp = Parameter.status_date;
                                    transmition_status.Save(Connection, Transaction);

                                    ORM_BIL_BillPosition_TransmitionStatus position_status = new ORM_BIL_BillPosition_TransmitionStatus();
                                    position_status.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                                    position_status.BillPosition_RefID     = bill_position.bill_position_id;
                                    position_status.Creation_Timestamp     = Parameter.status_date;
                                    position_status.IsActive               = true;
                                    position_status.PrimaryComment         = Parameter.primary_comment;
                                    position_status.SecondaryComment       = Parameter.secondary_comment;
                                    position_status.Modification_Timestamp = Parameter.status_date;
                                    position_status.TransmitionCode        = Parameter.new_status;
                                    position_status.TransmittedOnDate      = Parameter.status_date;
                                    position_status.Tenant_RefID           = securityTicket.TenantID;
                                    position_status.TransmitionStatusKey   = "treatment";

                                    #region CREATE SNAPSHOT
                                    DateTime today = DateTime.Today;
                                    int      age   = today.Year - patient_details.birthday.Year;
                                    if (patient_details.birthday > today.AddYears(-age))
                                    {
                                        age--;
                                    }

                                    var snapshot = cls_Create_XML_for_Immutable_Fields.Invoke(Connection, Transaction, new P_CAS_CXFIF_0830()
                                    {
                                        DiagnosisCatalogCode             = diagnose_details.diagnose_icd_10,
                                        DiagnosisCatalogName             = diagnose_details.catalog_display_name,
                                        DiagnosisName                    = diagnose_details.diagnose_name,
                                        IFPerformedMedicalPracticeName   = treatment_practice_details.practice_name,
                                        IFPerformedResponsibleBPFullName = treatment_doctor_details.title + " " + treatment_doctor_details.last_name + " " + treatment_doctor_details.first_name,
                                        Localization     = case_to_submit.localization,
                                        PatientBirthDate = patient_details.birthday.ToString("dd.MM.yyyy"),
                                        PatientFirstName = patient_details.patient_first_name,
                                        PatientGender    = patient_details.gender.ToString(),
                                        PatientLastName  = patient_details.patient_last_name,
                                        PatientAge       = age.ToString()
                                    }, securityTicket).Result;

                                    if (snapshot != null)
                                    {
                                        position_status.TransmissionDataXML = snapshot.XmlFileString;
                                    }

                                    #endregion

                                    position_status.Save(Connection, Transaction);
                                }
                                else
                                {
                                    current_status = "FS" + transmition_status.TransmitionCode;
                                }
                            }
                        }
                    }
                    #endregion
                }
                else
                {
                    var bill_positions = cls_Get_BillPositionIDs_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCID_0928()
                    {
                        CaseID = case_id
                    }, securityTicket).Result;

                    foreach (var bill_position in bill_positions)
                    {
                        #region CHANGE AFTERCARE STATUS
                        var billing_code = cls_Get_BillingCode_for_CaseBillCodeID.Invoke(Connection, Transaction, new P_CAS_GBCfCBCID_1334()
                        {
                            CaseBillCodeID = bill_position.hec_case_bill_code_id
                        }, securityTicket).Result;

                        if (aftercare_gpos.Contains(billing_code.BillingCode))
                        {
                            ORM_BIL_BillPosition_TransmitionStatus.Query transmition_statusQ = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                            transmition_statusQ.BillPosition_RefID   = bill_position.bill_position_id;
                            transmition_statusQ.TransmitionStatusKey = "aftercare";
                            transmition_statusQ.Tenant_RefID         = securityTicket.TenantID;
                            transmition_statusQ.IsDeleted            = false;
                            transmition_statusQ.IsActive             = true;

                            var transmition_status = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, transmition_statusQ).SingleOrDefault();
                            if (transmition_status != null)
                            {
                                if (Parameter.change_status)
                                {
                                    transmition_status.IsActive = false;
                                    transmition_status.Modification_Timestamp = Parameter.status_date;
                                    transmition_status.Save(Connection, Transaction);

                                    ORM_BIL_BillPosition_TransmitionStatus position_status = new ORM_BIL_BillPosition_TransmitionStatus();
                                    position_status.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                                    position_status.BillPosition_RefID     = bill_position.bill_position_id;
                                    position_status.Creation_Timestamp     = Parameter.status_date;
                                    position_status.IsActive               = true;
                                    position_status.PrimaryComment         = Parameter.primary_comment;
                                    position_status.SecondaryComment       = Parameter.secondary_comment;
                                    position_status.Modification_Timestamp = Parameter.status_date;
                                    position_status.TransmitionCode        = Parameter.new_status;
                                    position_status.TransmittedOnDate      = Parameter.status_date;
                                    position_status.Tenant_RefID           = securityTicket.TenantID;
                                    position_status.TransmitionStatusKey   = "aftercare";

                                    #region CREATE SNAPSHOT
                                    DateTime today = DateTime.Today;
                                    int      age   = today.Year - patient_details.birthday.Year;
                                    if (patient_details.birthday > today.AddYears(-age))
                                    {
                                        age--;
                                    }

                                    var snapshot = cls_Create_XML_for_Immutable_Fields.Invoke(Connection, Transaction, new P_CAS_CXFIF_0830()
                                    {
                                        DiagnosisCatalogCode             = diagnose_details.diagnose_icd_10,
                                        DiagnosisCatalogName             = diagnose_details.catalog_display_name,
                                        DiagnosisName                    = diagnose_details.diagnose_name,
                                        IFPerformedMedicalPracticeName   = treatment_practice_details.practice_name,
                                        IFPerformedResponsibleBPFullName = treatment_doctor_details.title + " " + treatment_doctor_details.last_name + " " + treatment_doctor_details.first_name,
                                        Localization     = case_to_submit.localization,
                                        PatientBirthDate = patient_details.birthday.ToString("dd.MM.yyyy"),
                                        PatientFirstName = patient_details.patient_first_name,
                                        PatientGender    = patient_details.gender.ToString(),
                                        PatientLastName  = patient_details.patient_last_name,
                                        PatientAge       = age.ToString()
                                    }, securityTicket).Result;

                                    if (snapshot != null)
                                    {
                                        position_status.TransmissionDataXML = snapshot.XmlFileString;
                                    }

                                    #endregion

                                    position_status.Save(Connection, Transaction);
                                }
                                else
                                {
                                    current_status = "FS" + transmition_status.TransmitionCode;
                                }
                            }
                        }
                        #endregion
                    }
                }

                Submitted_Case_Model submitted_case_model_elastic = new Submitted_Case_Model();
                submitted_case_model_elastic.diagnose                  = diagnose_details != null ? diagnose_details.diagnose_name + " (" + diagnose_details.catalog_display_name + ": " + diagnose_details.diagnose_icd_10 + ")" : "";
                submitted_case_model_elastic.id                        = is_treatment ? case_to_submit.treatment_planned_action_id.ToString() : case_to_submit.aftercare_planned_action_id.ToString();
                submitted_case_model_elastic.case_id                   = case_id.ToString();
                submitted_case_model_elastic.localization              = case_to_submit.localization;
                submitted_case_model_elastic.management_pauschale      = practice_defaults.WaiveServiceFee ? "waived" : "deducted";
                submitted_case_model_elastic.patient_birthdate         = DateTime.SpecifyKind(case_to_submit.Patient_BirthDate.AddHours(2).AddMinutes(33).AddSeconds(44), DateTimeKind.Local);
                submitted_case_model_elastic.patient_birthdate_string  = case_to_submit.Patient_BirthDate.ToString("dd.MM.yyyy");
                submitted_case_model_elastic.patient_name              = patient_details != null ? patient_details.patient_last_name + ", " + patient_details.patient_first_name : "";
                submitted_case_model_elastic.status                    = "FS" + Parameter.new_status;
                submitted_case_model_elastic.status_date               = Parameter.status_date;
                submitted_case_model_elastic.status_date_string        = Parameter.status_date.ToString("dd.MM.yyyy");
                submitted_case_model_elastic.treatment_date            = case_to_submit.treatment_date;
                submitted_case_model_elastic.treatment_date_day_month  = case_to_submit.treatment_date.ToString("dd.MM.");
                submitted_case_model_elastic.treatment_date_month_year = case_to_submit.treatment_date.ToString("MMMM yyyy", new System.Globalization.CultureInfo("de", true));
                submitted_case_model_elastic.drug                      = drug_details != null ? drug_details.drug_name : "";
                submitted_case_model_elastic.type                      = is_treatment ? "op" : "ac";
                submitted_case_model_elastic.treatment_date_string     = case_to_submit.treatment_date.ToString("dd.MM.yyyy");
                submitted_case_model_elastic.patient_insurance_number  = patient_details.insurance_id;

                if (is_treatment)
                {
                    submitted_case_model_elastic.doctor_name   = treatment_doctor_details != null ? treatment_doctor_details.title + " " + treatment_doctor_details.last_name + " " + treatment_doctor_details.first_name : "-";
                    submitted_case_model_elastic.practice_name = treatment_doctor_details.practice;
                    submitted_case_model_elastic.doctor_lanr   = treatment_doctor_details.lanr;
                    submitted_case_model_elastic.practice_bsnr = treatment_practice_details.practice_BSNR;
                }
                else
                {
                    submitted_case_model_elastic.doctor_name   = aftercare_doctor_details.title + " " + aftercare_doctor_details.last_name + " " + aftercare_doctor_details.first_name;
                    submitted_case_model_elastic.practice_name = aftercare_doctor_details.practice;
                    submitted_case_model_elastic.doctor_lanr   = aftercare_doctor_details.lanr;
                    submitted_case_model_elastic.practice_bsnr = aftercare_practice_details.practice_BSNR;
                }

                submitted_case_model_elastic.hip_name = patient_details != null ? patient_details.health_insurance_provider : "-";

                List <Submitted_Case_Model> cases_to_submit = new List <Submitted_Case_Model>();
                cases_to_submit.Add(submitted_case_model_elastic);

                Add_New_Submitted_Case.Import_Submitted_Case_Data_to_ElasticDB(cases_to_submit, securityTicket.TenantID.ToString());
            }

            return(returnValue);

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


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

            var all_languagesL = ORM_CMN_Language.Query.Search(Connection, Transaction, all_languagesQ).ToArray();

            var treatment_doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
            {
                DoctorID = Parameter.treatment_doctor_id
            }, securityTicket).Result.SingleOrDefault();
            var aftercare_doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
            {
                DoctorID = Parameter.aftercare_doctor_id
            }, securityTicket).Result.SingleOrDefault();
            var aftercare_practice_details = cls_Get_Practice_Details_for_PracticeID.Invoke(Connection, Transaction, new P_DO_GPDfPID_1432()
            {
                PracticeID = Parameter.aftercare_doctor_id
            }, securityTicket).Result.FirstOrDefault();
            List <string> aftercare_ids           = new List <string>();
            List <string> withdrawn_aftercare_ids = new List <string>();
            List <string> new_aftercare_ids       = new List <string>();

            ORM_USR_Account treatment_doctor_account = null;
            if (Parameter.treatment_doctor_id != Guid.Empty)
            {
                treatment_doctor_account = ORM_USR_Account.Query.Search(Connection, Transaction, new ORM_USR_Account.Query()
                {
                    USR_AccountID = cls_Get_Doctor_AccountID_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDAIDfDID_1549()
                    {
                        DoctorID = Parameter.treatment_doctor_id
                    }, securityTicket).Result.accountID,
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).SingleOrDefault();
            }

            ORM_USR_Account aftercare_doctor_account = null;
            if (Parameter.aftercare_doctor_id != Guid.Empty)
            {
                if (aftercare_doctor_details != null)
                {
                    aftercare_doctor_account = ORM_USR_Account.Query.Search(Connection, Transaction, new ORM_USR_Account.Query()
                    {
                        USR_AccountID = cls_Get_Doctor_AccountID_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDAIDfDID_1549()
                        {
                            DoctorID = Parameter.aftercare_doctor_id
                        }, securityTicket).Result.accountID,
                        Tenant_RefID = securityTicket.TenantID,
                        IsDeleted    = false
                    }).SingleOrDefault();
                }
                else
                {
                    aftercare_doctor_account = ORM_USR_Account.Query.Search(Connection, Transaction, new ORM_USR_Account.Query()
                    {
                        USR_AccountID = cls_Get_Practice_AccountID_for_PracticeID.Invoke(Connection, Transaction, new P_DO_GPAIDfPID_1351()
                        {
                            PracticeID = Parameter.aftercare_doctor_id
                        }, securityTicket).Result.accountID,
                        Tenant_RefID = securityTicket.TenantID,
                        IsDeleted    = false
                    }).SingleOrDefault();
                }
            }

            foreach (var case_id in Parameter.case_ids)
            {
                if (treatment_doctor_details != null && Parameter.is_treatment)
                {
                    #region UPDATE TREATMENT DOCTOR
                    var treatment_planned_action_id = cls_Get_Treatment_Planned_Action_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GTPAfCID_0946()
                    {
                        CaseID = case_id
                    }, securityTicket).Result;
                    if (treatment_planned_action_id != null)
                    {
                        var treatment_planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                        {
                            HEC_ACT_PlannedActionID = treatment_planned_action_id.planned_action_id,
                            Tenant_RefID            = securityTicket.TenantID,
                            IsDeleted   = false,
                            IsCancelled = false
                        }).SingleOrDefault();

                        if (treatment_planned_action != null)
                        {
                            treatment_planned_action.Modification_Timestamp = DateTime.Now;
                            treatment_planned_action.ToBePerformedBy_BusinessParticipant_RefID = treatment_doctor_account.BusinessParticipant_RefID;

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

                #region UPDATE AFTERCARE DOCTOR
                if (!string.IsNullOrEmpty(Parameter.aftercare_performed_date) || aftercare_doctor_details != null || aftercare_practice_details != null)
                {
                    var aftercare_planned_action_id = cls_Get_Aftercare_Planned_Action_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GAPAfCID_0959()
                    {
                        CaseID = case_id
                    }, securityTicket).Result;
                    if (aftercare_planned_action_id != null)
                    {
                        aftercare_ids.Add(aftercare_planned_action_id.planned_action_id.ToString());
                        if (aftercare_doctor_details != null || aftercare_practice_details != null)
                        {
                            var aftercare_planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                            {
                                HEC_ACT_PlannedActionID = aftercare_planned_action_id.planned_action_id,
                                Tenant_RefID            = securityTicket.TenantID,
                                IsDeleted   = false,
                                IsCancelled = false
                            }).SingleOrDefault();

                            if (aftercare_planned_action != null)
                            {
                                if (aftercare_planned_action.ToBePerformedBy_BusinessParticipant_RefID != Guid.Empty)
                                {
                                    if (aftercare_doctor_account.BusinessParticipant_RefID != aftercare_planned_action.ToBePerformedBy_BusinessParticipant_RefID)
                                    {
                                        bool is_current_aftercare_practice = false;
                                        CAS_GPIDfPBPTID_1336 current_aftercare_practice = null;
                                        var current_aftercare_doctor = cls_Get_PracticeID_for_Doctor_BusinessParticipantID.Invoke(
                                            Connection,
                                            Transaction,
                                            new P_CAS_GPIDfDBPTID_1205()
                                        {
                                            BusinessParticipantID = aftercare_planned_action.ToBePerformedBy_BusinessParticipant_RefID
                                        },
                                            securityTicket).Result;

                                        if (current_aftercare_doctor == null)
                                        {
                                            current_aftercare_practice = cls_Get_PracticeID_for_Practice_BusinessParticipantID.Invoke(Connection, Transaction, new P_CAS_GPIDfPBPTID_1336()
                                            {
                                                BusinessParticipantID = aftercare_planned_action.ToBePerformedBy_BusinessParticipant_RefID
                                            }, securityTicket).Result;
                                            is_current_aftercare_practice = true;
                                        }

                                        var new_aftercare_practice_id     = aftercare_doctor_details != null ? aftercare_doctor_details.practice_id : aftercare_practice_details.practiceID;
                                        var current_aftercare_practice_id = is_current_aftercare_practice ? current_aftercare_practice.practice_id : current_aftercare_doctor.practice_id;

                                        if (new_aftercare_practice_id != current_aftercare_practice_id)
                                        {
                                            aftercare_planned_action.IsCancelled            = true;
                                            aftercare_planned_action.Modification_Timestamp = DateTime.Now;
                                            aftercare_planned_action.Save(Connection, Transaction);

                                            withdrawn_aftercare_ids.Add(aftercare_planned_action.HEC_ACT_PlannedActionID.ToString());

                                            #region NEW AFTERCARE PLANNED ACTION

                                            #region DELETE CURRENT PLANNED ACTION TO CASE
                                            ORM_HEC_CAS_Case_RelevantPlannedAction.Query current_aftercare_action_2_caseQ = new ORM_HEC_CAS_Case_RelevantPlannedAction.Query();
                                            current_aftercare_action_2_caseQ.Case_RefID          = case_id;
                                            current_aftercare_action_2_caseQ.PlannedAction_RefID = aftercare_planned_action_id.planned_action_id;
                                            current_aftercare_action_2_caseQ.Tenant_RefID        = securityTicket.TenantID;
                                            current_aftercare_action_2_caseQ.IsDeleted           = false;

                                            var current_aftercare_action_2_case = ORM_HEC_CAS_Case_RelevantPlannedAction.Query.Search(Connection, Transaction, current_aftercare_action_2_caseQ).SingleOrDefault();
                                            if (current_aftercare_action_2_case != null)
                                            {
                                                current_aftercare_action_2_case.IsDeleted = true;
                                                current_aftercare_action_2_case.Save(Connection, Transaction);
                                            }
                                            #endregion

                                            var new_aftercare_id = cls_Create_Aftercare_Planned_Action.Invoke(Connection, Transaction, new P_CAS_CAPA_1237()
                                            {
                                                aftercare_doctor_practice_id = Parameter.aftercare_doctor_id,
                                                all_languagesL = all_languagesL,
                                                case_id        = case_id,
                                                patient_id     = aftercare_planned_action.Patient_RefID,
                                                practice_id    = Parameter.practice_id,
                                                treatment_date = string.IsNullOrEmpty(Parameter.aftercare_performed_date) ? DateTime.Now : DateTime.ParseExact(Parameter.aftercare_performed_date, "dd.MM.yyyy", new System.Globalization.CultureInfo("de", true))
                                            }, securityTicket).Result;

                                            new_aftercare_ids.Add(new_aftercare_id.ToString());

                                            #endregion NEW AFTERCARE PLANNED ACTION
                                        }
                                        else
                                        {
                                            aftercare_planned_action.Modification_Timestamp = DateTime.Now;
                                            aftercare_planned_action.ToBePerformedBy_BusinessParticipant_RefID = aftercare_doctor_account.BusinessParticipant_RefID;

                                            aftercare_planned_action.Save(Connection, Transaction);
                                        }
                                    }
                                }
                                else
                                {
                                    aftercare_planned_action.Modification_Timestamp = DateTime.Now;
                                    aftercare_planned_action.ToBePerformedBy_BusinessParticipant_RefID = aftercare_doctor_account.BusinessParticipant_RefID;

                                    aftercare_planned_action.Save(Connection, Transaction);
                                }
                            }
                        }
                    }
                    else
                    {
                        var treatment_planned_action_id = cls_Get_Treatment_Planned_Action_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GTPAfCID_0946()
                        {
                            CaseID = case_id
                        }, securityTicket).Result;
                        if (treatment_planned_action_id != null)
                        {
                            var treatment_planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                            {
                                HEC_ACT_PlannedActionID = treatment_planned_action_id.planned_action_id,
                                Tenant_RefID            = securityTicket.TenantID,
                                IsDeleted   = false,
                                IsCancelled = false
                            }).SingleOrDefault();

                            var result = cls_Create_Aftercare_Planned_Action.Invoke(Connection, Transaction, new P_CAS_CAPA_1237()
                            {
                                aftercare_doctor_practice_id = Parameter.aftercare_doctor_id,
                                all_languagesL = ORM_CMN_Language.Query.Search(Connection, Transaction, new ORM_CMN_Language.Query()
                                {
                                    Tenant_RefID = securityTicket.TenantID, IsDeleted = false
                                }).ToArray(),
                                case_id        = case_id,
                                patient_id     = treatment_planned_action.Patient_RefID,
                                practice_id    = aftercare_doctor_details != null ? aftercare_doctor_details.practice_id : Parameter.aftercare_doctor_id,
                                treatment_date = treatment_planned_action.PlannedFor_Date
                            }, securityTicket);

                            aftercare_ids.Add(result.Result.ToString());
                        }
                    }
                }
                #endregion
            }

            #region UPDATE LAST USED AFTERCARES
            if (aftercare_doctor_details != null || aftercare_practice_details != null)
            {
                var aftercare_name = aftercare_doctor_details == null ? aftercare_practice_details.practice_name :
                                     GenericUtils.GetDoctorName(aftercare_doctor_details);

                var ac_practice_id = aftercare_doctor_details != null ? aftercare_doctor_details.practice_id : aftercare_practice_details.practiceID;

                var last_used_practices_doctors = Get_Practices_and_Doctors.Get_Last_Used_Doctors_Practices(Guid.Empty, securityTicket);
                if (last_used_practices_doctors.Count != 0)
                {
                    last_used_practices_doctors = last_used_practices_doctors.OrderBy(l => l.date_of_use).ToList();
                    var last_used = last_used_practices_doctors.SingleOrDefault(l => l.id.ToLower().Equals(Parameter.aftercare_doctor_id.ToString().ToLower()));
                    if (last_used != null)
                    {
                        last_used.date_of_use = DateTime.Now;
                    }
                    else
                    {
                        Practice_Doctor_Last_Used_Model practice_last_used_model = new Practice_Doctor_Last_Used_Model();
                        practice_last_used_model.id           = Parameter.aftercare_doctor_id.ToString();
                        practice_last_used_model.display_name = aftercare_name;
                        practice_last_used_model.date_of_use  = DateTime.Now;
                        practice_last_used_model.practice_id  = ac_practice_id.ToString();

                        last_used_practices_doctors.Add(practice_last_used_model);
                    }
                }
                else
                {
                    Practice_Doctor_Last_Used_Model practice_last_used_model = new Practice_Doctor_Last_Used_Model();
                    practice_last_used_model.id           = Parameter.aftercare_doctor_id.ToString();
                    practice_last_used_model.display_name = aftercare_name;
                    practice_last_used_model.date_of_use  = DateTime.Now;
                    practice_last_used_model.practice_id  = ac_practice_id.ToString();

                    last_used_practices_doctors.Add(practice_last_used_model);
                }

                Add_New_Practice_Last_Used.Import_Practice_Last_Used_Data_to_ElasticDB(last_used_practices_doctors, securityTicket.TenantID.ToString(), securityTicket.AccountID.ToString());

                last_used_practices_doctors = Get_Practices_and_Doctors.Get_Last_Used_Doctors_Practices(Guid.Empty, securityTicket);

                if (last_used_practices_doctors.Count() > 3)
                {
                    var id_to_delete = last_used_practices_doctors.OrderBy(pd => pd.date_of_use).First().id;
                    Add_New_Practice_Last_Used.Delete_Practice_Last_Used(securityTicket.TenantID.ToString(), "user_" + securityTicket.AccountID.ToString(), id_to_delete);
                }
            }
            #endregion

            returnValue.Result = Parameter.case_ids;
            return(returnValue);

            #endregion UserCode
        }
Example #3
0
        protected static FR_Guids Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CMFSfPAID_1502 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Guids();
            List <Submitted_Case_Model> submitted_cases = new List <Submitted_Case_Model>();

            // todo: update to support OCT
            foreach (var planned_action_id in Parameter.planned_action_ids)
            {
                var action_gpmid = cls_Get_PlannedActionType_GlobalPropertyMatchingID_for_PlannedActionID.Invoke(Connection, Transaction, new P_CAS_GPAGPMIDfPAID_1652()
                {
                    PlannedActionID = planned_action_id
                }, securityTicket).Result.GlobalPropertyMatchingID;
                var is_treatment = action_gpmid == EActionType.PlannedOperation.Value();
                var case_id      = Guid.Empty;
                if (is_treatment)
                {
                    ORM_HEC_ACT_PlannedAction.Query planned_actionQ = new ORM_HEC_ACT_PlannedAction.Query();
                    planned_actionQ.HEC_ACT_PlannedActionID = planned_action_id;
                    planned_actionQ.Tenant_RefID            = securityTicket.TenantID;
                    planned_actionQ.IsDeleted = false;
                    var planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, planned_actionQ).SingleOrDefault();
                    if (planned_action != null)
                    {
                        ORM_HEC_CAS_Case_RelevantPerformedAction.Query relevant_performed_actionQ = new ORM_HEC_CAS_Case_RelevantPerformedAction.Query();
                        relevant_performed_actionQ.PerformedAction_RefID = planned_action.IfPlannedFollowup_PreviousAction_RefID;
                        relevant_performed_actionQ.Tenant_RefID          = securityTicket.TenantID;
                        relevant_performed_actionQ.IsDeleted             = false;

                        var relevant_performed_action = ORM_HEC_CAS_Case_RelevantPerformedAction.Query.Search(Connection, Transaction, relevant_performed_actionQ).SingleOrDefault();
                        if (relevant_performed_action != null)
                        {
                            case_id = relevant_performed_action.Case_RefID;
                        }
                    }
                }
                else
                {
                    ORM_HEC_CAS_Case_RelevantPlannedAction.Query relevant_planned_actionQ = new ORM_HEC_CAS_Case_RelevantPlannedAction.Query();
                    relevant_planned_actionQ.PlannedAction_RefID = planned_action_id;
                    relevant_planned_actionQ.Tenant_RefID        = securityTicket.TenantID;
                    relevant_planned_actionQ.IsDeleted           = false;
                    var relevant_planned_action = ORM_HEC_CAS_Case_RelevantPlannedAction.Query.Search(Connection, Transaction, relevant_planned_actionQ).SingleOrDefault();
                    if (relevant_planned_action != null)
                    {
                        case_id = relevant_planned_action.Case_RefID;
                    }
                }

                var gpos_type = EGposType.Aftercare.Value();
                if (action_gpmid == EActionType.PlannedOperation.Value())
                {
                    gpos_type = EGposType.Operation.Value();
                }
                else if (action_gpmid == EActionType.PlannedOct.Value())
                {
                    gpos_type = EGposType.Oct.Value();
                }

                var all_bill_positions = cls_Get_BillPositionIDs_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCID_0928()
                {
                    CaseID = case_id
                }, securityTicket).Result;
                if (all_bill_positions.Any())
                {
                    List <CAS_GBPIDsfCID_0928> bill_positions_to_update = new List <CAS_GBPIDsfCID_0928>();
                    if (action_gpmid == EActionType.PlannedOperation.Value())
                    {
                        bill_positions_to_update = all_bill_positions.Where(t => t.gpos_type == gpos_type).ToList();
                    }
                    else if (action_gpmid == EActionType.PlannedOct.Value())
                    {
                        var oct_planned_action_type_id = cls_Get_ActionTypeID.Invoke(Connection, Transaction, new P_CAS_GATID_1514()
                        {
                            action_type_gpmid = EActionType.PlannedOct.Value()
                        }, securityTicket).Result;
                        var relevant_octs = cls_Get_RelevanActionIDs_for_CaseID_and_ActionTypeID.Invoke(Connection, Transaction, new P_CAS_GRAIDsfCIDaATID_1547()
                        {
                            CaseID       = case_id,
                            ActionTypeID = oct_planned_action_type_id
                        }, securityTicket).Result;

                        var index = -1;
                        for (int i = 0; i < relevant_octs.Length; i++)
                        {
                            if (relevant_octs[i].action_id == planned_action_id)
                            {
                                index = i;
                                break;
                            }
                        }

                        var bill_positions = all_bill_positions.Where(t => t.gpos_type == EGposType.Oct.Value()).ToList();
                        var bill_position  = bill_positions.Any() ? bill_positions[index] : bill_positions.First();
                        bill_positions_to_update.Add(bill_position);
                    }
                    else
                    {
                        var aftercare_planned_action_type_id = cls_Get_ActionTypeID.Invoke(Connection, Transaction, new P_CAS_GATID_1514()
                        {
                            action_type_gpmid = EActionType.PlannedAftercare.Value()
                        }, securityTicket).Result;
                        var relevant_aftercares = cls_Get_RelevanActionIDs_for_CaseID_and_ActionTypeID.Invoke(Connection, Transaction, new P_CAS_GRAIDsfCIDaATID_1547()
                        {
                            CaseID       = case_id,
                            ActionTypeID = aftercare_planned_action_type_id
                        }, securityTicket).Result;

                        var index = -1;
                        for (int i = 0; i < relevant_aftercares.Length; i++)
                        {
                            if (relevant_aftercares[i].action_id == planned_action_id)
                            {
                                index = i;
                                break;
                            }
                        }

                        var bill_positions = all_bill_positions.Where(t => t.gpos_type == EGposType.Aftercare.Value()).ToList();
                        var bill_position  = bill_positions.Any() ? bill_positions[index] : bill_positions.First();
                        bill_positions_to_update.Add(bill_position);

                        foreach (var other_bill_position in bill_positions)
                        {
                            var update_bill_position_status = false;

                            var any_covered_diagnoses = ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query()
                            {
                                HEC_BIL_PotentialCode_RefID = other_bill_position.gpos_id,
                                Tenant_RefID = securityTicket.TenantID,
                                IsDeleted    = false
                            }).Any();

                            if (any_covered_diagnoses)
                            {
                                update_bill_position_status = ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query()
                                {
                                    HEC_BIL_PotentialCode_RefID = other_bill_position.gpos_id,
                                    Tenant_RefID = securityTicket.TenantID,
                                    IsDeleted    = false
                                }).Any();
                            }
                            else
                            {
                                update_bill_position_status = true;
                            }

                            if (update_bill_position_status)
                            {
                                bill_positions_to_update.Add(other_bill_position);
                            }
                        }
                    }

                    foreach (var case_bill_position in bill_positions_to_update)
                    {
                        var gpos_management_fee_property_value = ORM_BIL_BillPosition_PropertyValue.Query.Search(Connection, Transaction, new ORM_BIL_BillPosition_PropertyValue.Query()
                        {
                            BIL_BillPosition_RefID = case_bill_position.bill_position_id,
                            Tenant_RefID           = securityTicket.TenantID,
                            IsDeleted   = false,
                            PropertyKey = "mm.doc.connect.management.fee"
                        }).SingleOrDefault();

                        if (gpos_management_fee_property_value == null)
                        {
                            gpos_management_fee_property_value = new ORM_BIL_BillPosition_PropertyValue();
                            gpos_management_fee_property_value.BIL_BillPosition_RefID = case_bill_position.bill_position_id;
                            gpos_management_fee_property_value.PropertyKey            = "mm.doc.connect.management.fee";
                            gpos_management_fee_property_value.Tenant_RefID           = securityTicket.TenantID;
                        }

                        gpos_management_fee_property_value.PropertyValue          = Parameter.is_management_fee_waived ? "waived" : "deducted";
                        gpos_management_fee_property_value.Modification_Timestamp = DateTime.Now;

                        gpos_management_fee_property_value.Save(Connection, Transaction);
                    }
                }

                var submitted_case = Get_Submitted_Cases.GetSubmittedCaseforSubmittedCaseID(planned_action_id.ToString(), securityTicket);
                submitted_case.management_pauschale = Parameter.is_management_fee_waived ? "waived" : "deducted";

                submitted_cases.Add(submitted_case);
            }

            Add_New_Submitted_Case.Import_Submitted_Case_Data_to_ElasticDB(submitted_cases, securityTicket.TenantID.ToString());

            return(returnValue);

            #endregion UserCode
        }