Exemplo n.º 1
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CCFSP_1751 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
            var returnValue = new FR_Guid();
            var mailSent    = false;

            bool isACCanceled = false;
            Guid aftercareID  = Guid.Empty;
            var  gpos_type    = EGposType.Oct.Value();
            if (Parameter.caseType == "op")
            {
                gpos_type = EGposType.Operation.Value();
            }
            else if (Parameter.caseType == "ac")
            {
                gpos_type = EGposType.Aftercare.Value();
            }

            var case_to_submit = cls_Get_Case_Details_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GCDfCID_1435()
            {
                CaseID = Parameter.case_id
            }, securityTicket).Result;
            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 patient_details = cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPDfPID_1124()
            {
                PatientID = case_to_submit.patient_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 diagnose_details = cls_Get_Diagnose_Details_for_DiagnoseID.Invoke(Connection, Transaction, new P_CAS_GDDfDID_1608()
            {
                DiagnoseID = case_to_submit.diagnose_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();

            if (Parameter.caseType == "oct")
            {
                var relevant_action = ORM_HEC_CAS_Case_RelevantPlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_CAS_Case_RelevantPlannedAction.Query()
                {
                    PlannedAction_RefID = Parameter.planned_action_id,
                    Tenant_RefID        = securityTicket.TenantID,
                    IsDeleted           = false
                }).Single();

                if (relevant_action.Case_RefID != Parameter.case_id)
                {
                    Parameter.case_id = relevant_action.Case_RefID;
                }
            }
            var current_case_status = cls_Get_Case_TransmitionCode_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GCTCfCID_1427()
            {
                CaseID = Parameter.case_id
            }, securityTicket).Result.FirstOrDefault(st => st.gpos_type == gpos_type && st.fs_status != 8 && st.fs_status != 17 && st.fs_status != 11);
            if (current_case_status == null)
            {
                throw new Exception(String.Format("Current FS status not found for case id: {0}, planned action id: {1}, case type: {2}", Parameter.case_id, Parameter.planned_action_id, Parameter.caseType));
            }
            var current_status = "FS" + current_case_status.fs_status;

            if (Parameter.caseType == "op")
            {
                var bill_positions = cls_Get_BillPositionIDs_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCID_0928()
                {
                    CaseID = Parameter.case_id
                }, securityTicket).Result;

                #region CHANGE TREATMENT STATUS
                foreach (var bill_position in bill_positions)
                {
                    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 && transmition_status.TransmitionCode != 8 && transmition_status.TransmitionCode != 11)
                    {
                        transmition_status.IsActive = false;
                        transmition_status.Modification_Timestamp = DateTime.Now;
                        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     = DateTime.Now;
                        position_status.IsActive               = true;
                        position_status.PrimaryComment         = Parameter.reasonForCancelation;
                        position_status.Modification_Timestamp = DateTime.Now;
                        position_status.TransmitionCode        = transmition_status.TransmitionCode != 2 ? 8 : 11;
                        position_status.TransmittedOnDate      = DateTime.Now;
                        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 == null ? "-" : diagnose_details.diagnose_icd_10,
                            DiagnosisCatalogName             = diagnose_details == null ? "-" : diagnose_details.catalog_display_name,
                            DiagnosisName                    = diagnose_details == null ? "-" : diagnose_details.diagnose_name,
                            IFPerformedMedicalPracticeName   = treatment_practice_details.practice_name,
                            IFPerformedResponsibleBPFullName = GenericUtils.GetDoctorName(treatment_doctor_details),
                            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);

                        current_status = "FS" + position_status.TransmitionCode;
                    }
                }

                #region Aftercare e-mail
                var aftercarePlannedAction = cls_Get_Aftercare_Planned_Action_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GAPAfCID_0959 {
                    CaseID = Parameter.case_id
                }, securityTicket).Result;

                if (aftercarePlannedAction != null)
                {
                    var originalAftercarePlannedAction = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query {
                        HEC_ACT_PlannedActionID = aftercarePlannedAction.planned_action_id, Tenant_RefID = securityTicket.TenantID, IsDeleted = false, IsCancelled = false
                    }).SingleOrDefault();

                    if (originalAftercarePlannedAction != null)
                    {
                        if (!originalAftercarePlannedAction.IsPerformed)
                        {
                            originalAftercarePlannedAction.IsCancelled = true;
                            originalAftercarePlannedAction.Save(Connection, Transaction);
                            isACCanceled = true;
                            aftercareID  = originalAftercarePlannedAction.HEC_ACT_PlannedActionID;
                        }
                        else
                        {
                            if (!mailSent)
                            {
                                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);
                                }
                                //  mailToL.Add(emailTo);
                                var mailToFromCompanySettings = cls_Get_Company_Settings.Invoke(Connection, Transaction, securityTicket).Result.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/TreatmentCancelledFromSettlementPageEmailTemplate.html"));

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

                                email_template = EmailTemplater.SetTemplateData(email_template, new
                                {
                                    patient_first_name          = patient_details.patient_first_name,
                                    patient_last_name           = patient_details.patient_last_name,
                                    treatment_date              = case_to_submit.treatment_date.ToString("dd.MM.yyyy"),
                                    treatment_doctor_title      = treatment_doctor_details.title,
                                    treatment_doctor_first_name = treatment_doctor_details.first_name,
                                    treatment_doctor_last_name  = treatment_doctor_details.last_name,
                                    aftercare_doctor_title      = aftercare_doctor_details.title,
                                    doctors_comment             = Parameter.reasonForCancelation,
                                    aftercare_doctor_first_name = aftercare_doctor_details.first_name,
                                    aftercare_doctor_last_name  = aftercare_doctor_details.last_name,
                                    mmapp_treatment_page_url    = prefix + HttpContext.Current.Request.Url.Authority + "/" + appName + "/#/treatment",
                                    medios_connect_logo_url     = imageUrl
                                }, "{{", "}}");

                                try
                                {
                                    string mailFrom = WebConfigurationManager.AppSettings["mailFrom"];

                                    var mailsDistinct = mailToL.Distinct().ToList();
                                    foreach (var mailTo in mailsDistinct)
                                    {
                                        EmailNotificationSenderUtil.SendEmail(mailFrom, mailTo, subjectMail, email_template);
                                    }
                                    mailSent = true;
                                }
                                catch (Exception ex)
                                {
                                    LogUtils.Logger.LogDocAppInfo(new LogUtils.LogEntry(System.Reflection.MethodInfo.GetCurrentMethod(), ex, null, "Cancel case from settlement: Email sending failed."), "EmailExceptions");
                                }
                            }
                        }
                    }
                }
                #endregion

                #region OCT e-mail
                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 patient_consent_valid_for_months_parameter = cls_Get_ConsentValidForMonths_for_LatestConsent_before_TreatmentDate_for_PatientID.Invoke(Connection, Transaction, new P_PA_GCVfMfLCbTDfPID_0930()
                {
                    PatientID     = case_to_submit.patient_id,
                    TreatmentDate = case_to_submit.treatment_date.Date
                }, securityTicket).Result;

                var performedOcts = cls_Get_NonCancelledOcts_in_OpRenewedConsentTimespan.Invoke(Connection, Transaction, new P_CAS_GNCOctsiOPRCT_1416()
                {
                    PatientID = case_to_submit.patient_id,
                    PlannedOctActionTypeID = oct_planned_action_type_id,
                    ConsentStart           = case_to_submit.treatment_date.Date,
                    ConsentEnd             = case_to_submit.treatment_date.Date.AddMonths(patient_consent_valid_for_months_parameter != null && patient_consent_valid_for_months_parameter.consent_valid_for_months < 200000 ? Convert.ToInt32(patient_consent_valid_for_months_parameter.consent_valid_for_months) : 12)
                }, securityTicket).Result;

                if (performedOcts.Any())
                {
                    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 = cls_Get_Company_Settings.Invoke(Connection, Transaction, securityTicket).Result.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/TreatmentCancelledFromSettlementPageOctSubmittedEmailTemplate .html"));

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

                    email_template = EmailTemplater.SetTemplateData(email_template, new
                    {
                        patient_first_name          = patient_details.patient_first_name,
                        patient_last_name           = patient_details.patient_last_name,
                        treatment_date              = case_to_submit.treatment_date.ToString("dd.MM.yyyy"),
                        treatment_doctor_title      = treatment_doctor_details.title,
                        treatment_doctor_first_name = treatment_doctor_details.first_name,
                        treatment_doctor_last_name  = treatment_doctor_details.last_name,
                        octs                     = performedOcts,
                        doctors_comment          = Parameter.reasonForCancelation,
                        mmapp_treatment_page_url = prefix + HttpContext.Current.Request.Url.Authority + "/" + appName + "/#/treatment",
                        medios_connect_logo_url  = imageUrl
                    }, "{{", "}}");

                    try
                    {
                        string mailFrom = WebConfigurationManager.AppSettings["mailFrom"];

                        var mailsDistinct = mailToL.Distinct().ToList();
                        foreach (var mailTo in mailsDistinct)
                        {
                            EmailNotificationSenderUtil.SendEmail(mailFrom, mailTo, subjectMail, email_template);
                        }
                        mailSent = true;
                    }
                    catch (Exception ex)
                    {
                        LogUtils.Logger.LogDocAppInfo(new LogUtils.LogEntry(System.Reflection.MethodInfo.GetCurrentMethod(), ex, null, "Cancel case from settlement: Email sending failed."), "EmailExceptions");
                    }
                }
                #endregion

                #region OCT withdrawal
                var treatment_year_start_date = cls_Get_TreatmentYear.Invoke(Connection, Transaction, new P_CAS_GTY_1125()
                {
                    Date             = case_to_submit.treatment_date,
                    LocalizationCode = case_to_submit.localization,
                    PatientID        = case_to_submit.patient_id
                }, securityTicket).Result;

                var treatment_year_length = cls_Get_TreatmentYearLength.Invoke(Connection, Transaction, new P_CAS_GTYL_1317()
                {
                    Date      = case_to_submit.treatment_date,
                    PatientID = case_to_submit.patient_id
                }, securityTicket).Result;

                var ops_in_treatment_year = cls_Get_OpDates_for_PatientID_and_LocalizationCode_in_TreatmentYear.Invoke(Connection, Transaction, new P_CAS_GOpDfPIDaLCiTY_1110()
                {
                    LocalizationCode       = case_to_submit.localization,
                    PatientID              = case_to_submit.patient_id,
                    TreatmentYearStartDate = treatment_year_start_date,
                    TreatmentYearEndDate   = treatment_year_start_date.AddDays(treatment_year_length - 1)
                }, securityTicket).Result;

                if (!ops_in_treatment_year.Any(t => t.CaseID != Parameter.case_id && ((!t.IsPerformed && !t.IsDeleted) || (t.IsPerformed && t.FsStatus != 8 && t.FsStatus != 11 && t.FsStatus != 17))))
                {
                    foreach (var potential_op in ops_in_treatment_year)
                    {
                        var non_performed_oct = cls_Get_NonPerformed_Oct_for_CaseID_and_PlannedActionTypeID.Invoke(Connection, Transaction, new P_CAS_GNPOctfCIDaPATID_1240()
                        {
                            CaseID = potential_op.CaseID,
                            OctPlannedActionTypeID = oct_planned_action_type_id
                        }, securityTicket).Result;

                        if (non_performed_oct != null)
                        {
                            var oct_planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                            {
                                HEC_ACT_PlannedActionID = non_performed_oct.action_id
                            }).Single();

                            oct_planned_action.IsCancelled            = true;
                            oct_planned_action.Modification_Timestamp = DateTime.Now;
                            oct_planned_action.Save(Connection, Transaction);

                            break;
                        }
                    }
                }
                #endregion

                #endregion
            }
            else if (Parameter.caseType == "oct")
            {
                #region CHANGE OCT STATUS
                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 oct_performed_data = cls_Get_PerformedActionDate_for_PlannedActionID.Invoke(Connection, Transaction, new P_CAS_GPADfPAID_1613()
                {
                    ActionID = Parameter.planned_action_id
                }, securityTicket).Result;

                var treatment_year_start_date = cls_Get_TreatmentYear.Invoke(Connection, Transaction, new P_CAS_GTY_1125()
                {
                    Date             = oct_performed_data.performed_on_date,
                    LocalizationCode = oct_performed_data.localization,
                    PatientID        = case_to_submit.patient_id
                }, securityTicket).Result;

                var treatment_year_length = cls_Get_TreatmentYearLength.Invoke(Connection, Transaction, new P_CAS_GTYL_1317()
                {
                    Date = oct_performed_data.performed_on_date, PatientID = case_to_submit.patient_id
                }, securityTicket).Result;

                var relevant_actions = cls_Get_RelevantActionIDs_for_PatientID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GRAIDsfPIDaLC_1011()
                {
                    ActionTypeID           = oct_planned_action_type_id,
                    PatientID              = case_to_submit.patient_id,
                    LocalizationCode       = oct_performed_data.localization,
                    TreatmentYearStartDate = treatment_year_start_date,
                    TreatmentYearEndDate   = treatment_year_start_date.AddDays(treatment_year_length - 1)
                }, securityTicket).Result;

                var case_ids       = relevant_actions.Select(t => t.case_id).ToArray();
                var bill_positions = cls_Get_BillPositionIDs_for_CaseIDs_and_GposType.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCIDsaGposT_1018()
                {
                    CaseIDs  = case_ids,
                    GposType = EGposType.Oct.Value()
                }, securityTicket).Result;

                for (var i = 0; i < relevant_actions.Length; i++)
                {
                    var relevant_action = relevant_actions[i];
                    if (relevant_action.action_id == Parameter.planned_action_id)
                    {
                        var bill_position = bill_positions[i];
                        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 = "oct";
                        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 && transmition_status.TransmitionCode != 8 && transmition_status.TransmitionCode != 11 && transmition_status.TransmitionCode != 17)
                        {
                            transmition_status.IsActive = false;
                            transmition_status.Modification_Timestamp = DateTime.Now;
                            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     = DateTime.Now;
                            position_status.IsActive               = true;
                            position_status.PrimaryComment         = Parameter.reasonForCancelation;
                            position_status.Modification_Timestamp = DateTime.Now;
                            position_status.TransmitionCode        = transmition_status.TransmitionCode != 2 ? 8 : 11;
                            position_status.TransmittedOnDate      = DateTime.Now;
                            position_status.Tenant_RefID           = securityTicket.TenantID;
                            position_status.TransmitionStatusKey   = "oct";

                            #region CREATE SNAPSHOT
                            DateTime today = DateTime.Today;
                            int      age   = today.Year - patient_details.birthday.Year;
                            if (patient_details.birthday > today.AddYears(-age))
                            {
                                age--;
                            }
                            var oct_doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
                            {
                                DoctorID = case_to_submit.oct_doctor_id
                            }, securityTicket).Result.SingleOrDefault();

                            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   = oct_doctor_details != null ? oct_doctor_details.practice : null,
                                IFPerformedResponsibleBPFullName = oct_doctor_details != null ? GenericUtils.GetDoctorName(oct_doctor_details) : null,
                                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);
                            current_status = "FS" + position_status.TransmitionCode;
                        }

                        break;
                    }
                }
                #endregion
            }
            else
            {
                var bill_positions = cls_Get_BillPositionIDs_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GBPIDsfCID_0928()
                {
                    CaseID = Parameter.case_id
                }, securityTicket).Result;

                foreach (var bill_position in bill_positions)
                {
                    #region CHANGE AFTERCARE STATUS
                    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 && transmition_status.TransmitionCode != 8 && transmition_status.TransmitionCode != 11 && transmition_status.TransmitionCode != 17)
                    {
                        transmition_status.IsActive = false;
                        transmition_status.Modification_Timestamp = DateTime.Now;
                        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     = DateTime.Now;
                        position_status.IsActive               = true;
                        position_status.PrimaryComment         = Parameter.reasonForCancelation;
                        position_status.Modification_Timestamp = DateTime.Now;
                        position_status.TransmitionCode        = transmition_status.TransmitionCode != 2 ? 8 : 11;
                        position_status.TransmittedOnDate      = DateTime.Now;
                        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 = GenericUtils.GetDoctorName(treatment_doctor_details),
                            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);
                        current_status = "FS" + position_status.TransmitionCode;
                    }

                    #endregion
                }
            }

            #region Send e-mail
            if (current_case_status != null && current_case_status.fs_status != 1 && !mailSent)
            {
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
                List <String> 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);
                }

                //  mailToL.Add(emailTo);
                string mailToFromCompanySettings = cls_Get_Company_Settings.Invoke(Connection, Transaction, securityTicket).Result.Email;
                mailToL.Add(mailToFromCompanySettings);

                string 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/AftercareCancelledFromSettlementPageEmailTemplate.html"));

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

                email_template = EmailTemplater.SetTemplateData(email_template, new
                {
                    case_type                = Parameter.caseType == "op" ? "Behandlung" : Parameter.caseType == "ac" ? "Nachsorge" : "OCT",
                    patient_first_name       = patient_details.patient_first_name,
                    patient_last_name        = patient_details.patient_last_name,
                    treatment_date           = case_to_submit.treatment_date.ToString("dd.MM.yyyy"),
                    doctor_title             = Parameter.caseType == "op" || Parameter.caseType == "oct" ? treatment_doctor_details.title : aftercare_doctor_details.title,
                    doctor_first_name        = Parameter.caseType == "op" || Parameter.caseType == "oct" ? treatment_doctor_details.first_name : aftercare_doctor_details.first_name,
                    doctor_last_name         = Parameter.caseType == "op" || Parameter.caseType == "oct" ? treatment_doctor_details.last_name : aftercare_doctor_details.last_name,
                    mmapp_treatment_page_url = prefix + HttpContext.Current.Request.Url.Authority + "/" + appName + "/#/treatment",
                    medios_connect_logo_url  = imageUrl
                }, "{{", "}}");

                try
                {
                    string 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, "Cancel treatment/aftercare from settlement: Email sending failed."), "EmailExceptions");
                }
            }
            #endregion

            returnValue.Result = case_to_submit.patient_id;
            return(returnValue);

            #endregion UserCode
        }
        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_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CCtSE_1100 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            Thread.CurrentThread.CurrentCulture   = CultureInfo.GetCultureInfo("de-DE");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
            //Get statuses from Resources
            var  FS1  = Properties.Resources.FS1;
            var  FS2  = Properties.Resources.FS2;
            var  FS3  = Properties.Resources.FS3;
            var  FS4  = Properties.Resources.FS4;
            var  FS5  = Properties.Resources.FS5;
            var  FS6  = Properties.Resources.FS6;
            var  FS7  = Properties.Resources.FS7;
            var  FS8  = Properties.Resources.FS8;
            var  FS9  = Properties.Resources.FS9;
            var  FS10 = Properties.Resources.FS10;
            var  FS11 = Properties.Resources.FS11;
            Guid treatment_performed_action_type_id = Guid.Empty;

            var treatment_performed_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
            {
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted                = false,
                GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment"
            }).SingleOrDefault();

            if (treatment_performed_action_type == null)
            {
                treatment_performed_action_type = new ORM_HEC_ACT_ActionType();
                treatment_performed_action_type.GlobalPropertyMatchingID = "mm.docconect.doc.app.performed.action.treatment";
                treatment_performed_action_type.Creation_Timestamp       = DateTime.Now;
                treatment_performed_action_type.Modification_Timestamp   = DateTime.Now;
                treatment_performed_action_type.Tenant_RefID             = securityTicket.TenantID;

                treatment_performed_action_type.Save(Connection, Transaction);

                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }
            else
            {
                treatment_performed_action_type_id = treatment_performed_action_type.HEC_ACT_ActionTypeID;
            }

            List <Submitted_Case_Model>   allCases          = Get_All_Cases_With_Custom_Status.Get_All_Submited_Cases_With_Custom_Status("FS2", securityTicket);
            List <Submitted_Case_Model>   allCases_FS11     = Get_All_Cases_With_Custom_Status.Get_All_Submited_Cases_With_Custom_Status("FS11", securityTicket);
            List <Submitted_Case_Model>   newCaseList       = new List <Submitted_Case_Model>();
            List <Settlement_Model>       settlements       = new List <Settlement_Model>();
            List <PatientDetailViewModel> patientDetailList = new List <PatientDetailViewModel>();
            List <DateTime>        OldTransmitionDateList   = new List <DateTime>();
            Dictionary <Guid, int> consentValidToCache      = new Dictionary <Guid, int>();
            //List<Guid> casesToChange = new List<Guid>();
            //List<string> typeList = new List<string>();
            List <NegativeResponseModel> NegativeResponseList = new List <NegativeResponseModel>();
            var preexaminationsCache = cls_Get_Patient_Preexaminations_on_Tenant.Invoke(Connection, Transaction, securityTicket).Result.GroupBy(t => t.PatientID).ToDictionary(t => t.Key, t => t.GroupBy(c => c.Localization).ToDictionary(d => d.Key, d => d));

            DateTime DateForElastic = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
            var      casesForReport = cls_Get_Cases_For_Report.Invoke(Connection, Transaction, new P_CAS_GCFR_0910()
            {
                Status = 2
            }, securityTicket).Result;
            var casesForReport_FS11 = cls_Get_Cases_For_Report.Invoke(Connection, Transaction, new P_CAS_GCFR_0910()
            {
                Status = 11
            }, securityTicket).Result;
            Dictionary <string, string> serviceFeeValueCache = new Dictionary <string, string>();
            List <CaseForReportModel>   caseModelList        = new List <CaseForReportModel>();

            foreach (var item in Parameter.CasesToBeChanged)
            {
                try
                {
                    var  errorCase         = casesForReport.SingleOrDefault(i => int.Parse(i.PositionNumber) == int.Parse(item.bill_number));
                    bool shouldChangeToFS8 = false;

                    if (errorCase == null)
                    {
                        errorCase         = casesForReport_FS11.SingleOrDefault(i => int.Parse(i.PositionNumber) == int.Parse(item.bill_number));
                        shouldChangeToFS8 = true;
                    }

                    var management_fee_value = "-";
                    if (!string.IsNullOrEmpty(errorCase.BillingCode))
                    {
                        if (!serviceFeeValueCache.ContainsKey(errorCase.BillingCode))
                        {
                            var service_fee_value = cls_Get_ServiceFeeValue_for_BillingCode.Invoke(Connection, Transaction, new P_CAS_GSFVfBC_1721()
                            {
                                BillingCode = errorCase.BillingCode
                            }, securityTicket).Result;
                            if (service_fee_value != null)
                            {
                                serviceFeeValueCache.Add(errorCase.BillingCode, service_fee_value.service_fee);
                            }
                        }

                        management_fee_value = serviceFeeValueCache[errorCase.BillingCode];
                    }

                    var negativeTransmitionQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                    negativeTransmitionQuery.Tenant_RefID       = securityTicket.TenantID;
                    negativeTransmitionQuery.IsDeleted          = false;
                    negativeTransmitionQuery.BillPosition_RefID = errorCase.StatusID;

                    var negativeTransmition = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, negativeTransmitionQuery).ToList();

                    var caseStatusQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                    caseStatusQuery.Tenant_RefID = securityTicket.TenantID;
                    caseStatusQuery.IsDeleted    = false;
                    caseStatusQuery.IsActive     = true;
                    caseStatusQuery.BIL_BillPosition_TransmitionStatusID = errorCase.StatusID;

                    var caseStatusOld = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, caseStatusQuery).SingleOrDefault();

                    if (caseStatusOld == null)
                    {
                        throw new Exception("Transmition status not found for id: " + errorCase.StatusID);
                    }

                    OldTransmitionDateList.Add(caseStatusOld.TransmittedOnDate);
                    caseStatusOld.IsActive = false;
                    caseStatusOld.Save(Connection, Transaction);

                    var caseStatus = new ORM_BIL_BillPosition_TransmitionStatus();
                    caseStatus.IsDeleted              = false;
                    caseStatus.Creation_Timestamp     = DateTime.Now;
                    caseStatus.Modification_Timestamp = DateTime.Now;
                    caseStatus.Tenant_RefID           = securityTicket.TenantID;
                    caseStatus.IsActive       = true;
                    caseStatus.PrimaryComment = item.error_message;
                    caseStatus.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                    caseStatus.BillPosition_RefID   = caseStatusOld.BillPosition_RefID;
                    caseStatus.TransmitionCode      = 5;
                    caseStatus.TransmittedOnDate    = DateTime.Now;// should we use from edifact?
                    caseStatus.TransmitionStatusKey = caseStatusOld.TransmitionStatusKey;
                    caseStatus.Save(Connection, Transaction);

                    if (shouldChangeToFS8)
                    {
                        caseStatus.IsActive = false;
                        caseStatus.Save(Connection, Transaction);


                        var caseStatus2 = new ORM_BIL_BillPosition_TransmitionStatus();
                        caseStatus2.IsDeleted              = false;
                        caseStatus2.Creation_Timestamp     = DateTime.Now;
                        caseStatus2.Modification_Timestamp = DateTime.Now;
                        caseStatus2.Tenant_RefID           = securityTicket.TenantID;
                        caseStatus2.IsActive       = true;
                        caseStatus2.PrimaryComment = item.error_message;
                        caseStatus2.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                        caseStatus2.BillPosition_RefID   = caseStatusOld.BillPosition_RefID;
                        caseStatus2.TransmitionCode      = 8;
                        caseStatus2.TransmittedOnDate    = DateTime.Now;// should we use from edifact?
                        caseStatus2.TransmitionStatusKey = caseStatusOld.TransmitionStatusKey;
                        caseStatus2.Save(Connection, Transaction);
                    }

                    Guid caseID = errorCase.CaseID;
                    NegativeResponseModel negativeResponse = new NegativeResponseModel();

                    negativeResponse.caseID = caseID;
                    //casesToChange.Add(caseID);
                    if (caseStatusOld.TransmitionStatusKey == "aftercare")
                    {
                        negativeResponse.plannedActionID = errorCase.IsAftercareID;
                        negativeResponse.type            = "ac";
                    }

                    //typeList.Add("ac");
                    else if (caseStatusOld.TransmitionStatusKey == "treatment")
                    {
                        negativeResponse.plannedActionID = errorCase.IsTreatmentID;
                        negativeResponse.type            = "op";
                    }
                    else
                    {
                        negativeResponse.plannedActionID = errorCase.IsTreatmentID;
                        negativeResponse.type            = caseStatusOld.TransmitionStatusKey;
                    }
                    //typeList.Add("op");

                    NegativeResponseList.Add(negativeResponse);

                    P_PA_GPDfPID_1124 patientData = cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPDfPID_1124()
                    {
                        PatientID = errorCase.Patient_RefID
                    }, securityTicket).Result;


                    #region Report data

                    CaseForReportModel caseModel = new CaseForReportModel();
                    caseModel.HIP                    = patientData.health_insurance_provider;
                    caseModel.ContractID             = patientData.contractID;
                    caseModel.HIP_IK                 = patientData.HealthInsurance_IKNumber;
                    caseModel.PatientInsuranceNumber = patientData.insurance_id;
                    caseModel.PatientGender          = patientData.gender;
                    caseModel.PatientStatusNumber    = patientData.insurance_status;
                    caseModel.PatientFirstName       = patientData.patient_first_name;
                    caseModel.PatientLastName        = patientData.patient_last_name;
                    caseModel.PatientBirthday        = patientData.birthday;
                    try
                    {
                        if (!consentValidToCache.ContainsKey(patientData.contractID))
                        {
                            double DurationOfParticipationConsentinMonths = ORM_CMN_CTR_Contract_Parameter.Query.Search(Connection, Transaction, new ORM_CMN_CTR_Contract_Parameter.Query()
                            {
                                IsDeleted      = false,
                                Tenant_RefID   = securityTicket.TenantID,
                                ParameterName  = "Duration of participation consent – Month",
                                Contract_RefID = patientData.contractID
                            }).SingleOrDefault().IfNumericValue_Value;
                            consentValidToCache.Add(patientData.contractID, Convert.ToInt32(DurationOfParticipationConsentinMonths));
                        }

                        DateTime participationConsentValidTo = patientData.ParticipationConsent.OrderBy(dt => dt.participation_consent_issue_date).FirstOrDefault().participation_consent_issue_date.AddMonths(consentValidToCache[patientData.contractID]);
                        caseModel.PatientParticipationConsentValidUntil = participationConsentValidTo;
                    }
                    catch (Exception ex)
                    {
                        caseModel.PatientParticipationConsentValidUntil = DateTime.MinValue;
                    }

                    caseModel.CaseNumber = Convert.ToInt32(errorCase.CaseNumber);
                    caseModel.CaseType   = errorCase.CodeName;

                    try
                    {
                        caseModel.Drug = cls_Get_Drug_Details_for_DrugID.Invoke(Connection, Transaction, new P_CAS_GDDfDID_1614()
                        {
                            DrugID = errorCase.DrugID
                        }, securityTicket).Result.drug_name;
                    }
                    catch (Exception ex)
                    {
                        caseModel.Drug = "-";
                    }

                    caseModel.Diagnose     = errorCase.IM_PotentialDiagnosis_Name;
                    caseModel.DiagnoseCode = errorCase.IM_PotentialDiagnosis_Code;
                    caseModel.Localization = errorCase.IM_PotentialDiagnosisLocalization_Code;

                    P_CAS_GTCfPIDaDIDaLC_1008 parameterDia = new P_CAS_GTCfPIDaDIDaLC_1008();
                    parameterDia.PatientID        = errorCase.Patient_RefID;
                    parameterDia.DiagnoseID       = errorCase.CodeForType == "treatment" || errorCase.CodeForType == "preexamination" ? errorCase.TreatmentPerformedDiganoseID : errorCase.AftercasePerformedDiagnoseID;
                    parameterDia.LocalizationCode = errorCase.IM_PotentialDiagnosisLocalization_Code;
                    parameterDia.PerformedDate    = errorCase.CodeForType == "treatment" || errorCase.CodeForType == "preexamination" ? errorCase.TreatmentDate : errorCase.AfterCareDate;
                    parameterDia.ActionTypeID     = treatment_performed_action_type_id;
                    if (errorCase.CodeForType == "preexamination")
                    {
                        if (preexaminationsCache.ContainsKey(errorCase.Patient_RefID) && preexaminationsCache[errorCase.Patient_RefID].ContainsKey(errorCase.IM_PotentialDiagnosisLocalization_Code))
                        {
                            caseModel.TreatmentCount = preexaminationsCache[errorCase.Patient_RefID][errorCase.IM_PotentialDiagnosisLocalization_Code].Count(c => c.PreexaminationDate.Date <= errorCase.TreatmentDate.Date);
                        }
                    }
                    else
                    {
                        caseModel.TreatmentCount = cls_Get_Treatment_Count_for_PatientID_And_DiagnoseID_and_LocalizationCode.Invoke(Connection, Transaction, parameterDia, securityTicket).Result.treatment_count;
                    }

                    caseModel.GPOS         = errorCase.BillingCode;
                    caseModel.TreatmentDay = errorCase.CodeForType == "treatment" || errorCase.CodeForType == "preexamination" ? errorCase.TreatmentDate : errorCase.AfterCareDate;
                    if (errorCase.CodeForType == "treatment")
                    {
                        caseModel.SurgeryDateForThisCase = errorCase.TreatmentDate;
                    }
                    else if (errorCase.CodeForType == "preexamination")
                    {
                        caseModel.SurgeryDateForThisCase = DateTime.MinValue;
                    }
                    else
                    {
                        CAS_GTdfA_0936 Trdate = cls_Get_Treatment_Date_for_Aftercare.Invoke(Connection, Transaction, new P_CAS_GTdfA_0936()
                        {
                            CaseID = errorCase.CaseID
                        }, securityTicket).Result;
                        if (Trdate != null)
                        {
                            caseModel.SurgeryDateForThisCase = Trdate.TreatmentDate;
                        }
                    }

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

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

                    default:
                        caseModel.PatientSalutation = "-";
                        break;
                    }

                    if (!shouldChangeToFS8)
                    {
                        caseModel.CurrentStatus = FS5;
                    }
                    else
                    {
                        caseModel.CurrentStatus = FS8;
                    }
                    caseModel.DateOfCurrentStatus = DateTime.Now;
                    if (!shouldChangeToFS8)
                    {
                        caseModel.PreCurrentStatus = FS2;
                    }
                    else
                    {
                        caseModel.PreCurrentStatus = FS11;
                    }
                    caseModel.DateOfPreCurrentStatus = caseStatusOld.TransmittedOnDate;

                    caseModel.InvoiceNumberForTheHIP = Convert.ToInt32(errorCase.PositionNumber);

                    caseModel.AmountForThisGPOS           = errorCase.NumberForPayment;
                    caseModel.NumberOfNegativeTry         = negativeTransmition.Count.ToString();
                    caseModel.DateOfTheSubmissionToTheHIP = Parameter.transferToHIPDate;
                    caseModel.FeedBackOfTheHIP            = item.transmition_date;
                    caseModel.PaymentDate = DateTime.MinValue;

                    caseModel.DrugOrdered       = (errorCase.orderId != Guid.Empty && int.Parse(errorCase.orderStatusCode) != 6) ? "Ja" : "Nein";
                    caseModel.NoFee             = errorCase.IsPatientFeeWaived ? "Ja" : "Nein";
                    caseModel.InvoiceToPractice = errorCase.SendInvoiceToPractice ? "Ja" : "Nein";
                    caseModel.OnlyLabelRequired = errorCase.isLabelOnly ? "Ja" : "Nein";

                    var gposAssignmentCount = cls_Get_Gpos_AssignmentCount_for_GposID.Invoke(Connection, Transaction, new P_CAS_GGPOSACfGPOSID_1252()
                    {
                        GposID = errorCase.GposID
                    }, securityTicket).Result;
                    if (gposAssignmentCount.AssignmentCount != 0)
                    {
                        var is_management_fee_waived = cls_Get_Management_Fee_Property_Value_for_CaseID_and_GposID.Invoke(Connection, Transaction, new P_CAS_GMFPVfCIDaGPOSTID_1749()
                        {
                            CaseID = errorCase.CaseID, GposID = errorCase.GposID
                        }, securityTicket).Result;
                        caseModel.ManagementFee = is_management_fee_waived == null ? "-" : is_management_fee_waived.PropertyValue == "waived" ? "-" : management_fee_value;
                    }
                    else
                    {
                        caseModel.ManagementFee = "-";
                    }

                    Guid DocID = errorCase.CodeForType == "treatment" || errorCase.CodeForType == "preexamination" ? errorCase.SurgeryDoctor : errorCase.AfterCareDoctor;

                    DO_GDDfDID_0823 doctorData = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
                    {
                        DoctorID = DocID
                    }, securityTicket).Result.First();

                    caseModel.BSNR              = doctorData.BSNR;
                    caseModel.PracticeName      = doctorData.practice;
                    caseModel.DocName           = doctorData.first_name + " " + doctorData.last_name;
                    caseModel.LANR              = doctorData.lanr;
                    caseModel.BankAccountHolder = string.IsNullOrEmpty(doctorData.OwnerText) ? "-" : doctorData.OwnerText;
                    caseModel.BankName          = doctorData.BankName == null ? "-" : doctorData.BankName;
                    caseModel.IBAN              = doctorData.IBAN == null ? "-" : doctorData.IBAN;
                    caseModel.BIC = doctorData.BICCode == null ? "-" : doctorData.BICCode;

                    caseModelList.Add(caseModel);


                    #endregion
                }
                catch (Exception ex)
                {
                    LogUtils.Logger.LogInfo(new LogUtils.LogEntry(ex.StackTrace));
                    throw new Exception("Bill position: " + item.bill_number, ex);
                }
            }

            //Change in Elastic---------------------------------------------------------------------------------

            for (int k = 0; k < NegativeResponseList.Count; k++)
            {
                var errorCase = allCases.SingleOrDefault(i => i.case_id == NegativeResponseList[k].caseID.ToString() && i.type == NegativeResponseList[k].type);
                if (errorCase == null)
                {
                    errorCase = allCases_FS11.SingleOrDefault(i => i.case_id == NegativeResponseList[k].caseID.ToString() && i.type == NegativeResponseList[k].type);
                    if (errorCase == null)
                    {
                        continue;
                    }

                    errorCase.status = "FS8";
                    //Change settlement from Stornierung anhängig to storniert
                    Settlement_Model settlement = Get_Settlement.GetSettlementForID(NegativeResponseList[k].plannedActionID.ToString(), securityTicket);
                    settlement.status = "FS8";
                    settlements.Add(settlement);
                    PatientDetailViewModel patient_detail = Retrieve_Patients.Get_PatientDetaiForID(settlement.id, securityTicket);
                    if (patient_detail != null)
                    {
                        patient_detail.status = "FS8";
                        patientDetailList.Add(patient_detail);
                    }
                }
                else
                {
                    errorCase.status = "FS5";
                }

                errorCase.status_date        = DateTime.Now;
                errorCase.status_date_string = DateTime.Now.ToString("dd.MM.yyyy");
                newCaseList.Add(errorCase);
            }

            if (settlements.Count > 0)
            {
                Add_new_Settlement.Import_Settlement_to_ElasticDB(settlements, securityTicket.TenantID.ToString());
            }

            if (patientDetailList.Count > 0)
            {
                Add_New_Patient.ImportPatientDetailsToElastic(patientDetailList, securityTicket.TenantID.ToString());
            }

            if (newCaseList.Count > 0)
            {
                Add_New_Submitted_Case.Import_Submitted_Case_Data_to_ElasticDB(newCaseList, securityTicket.TenantID.ToString());

                List <Documents> documentList = new List <Documents>();


                string hipID = Parameter.hipId;

                var healthInsuranceCompanyQuery = new ORM_HEC_HIS_HealthInsurance_Company.Query();
                healthInsuranceCompanyQuery.IsDeleted                = false;
                healthInsuranceCompanyQuery.Tenant_RefID             = securityTicket.TenantID;
                healthInsuranceCompanyQuery.HealthInsurance_IKNumber = hipID;

                var helathInsurance = ORM_HEC_HIS_HealthInsurance_Company.Query.Search(Connection, Transaction, healthInsuranceCompanyQuery).Single();

                var businessParticipantQuery = new ORM_CMN_BPT_BusinessParticipant.Query();
                businessParticipantQuery.CMN_BPT_BusinessParticipantID = helathInsurance.CMN_BPT_BusinessParticipant_RefID;
                businessParticipantQuery.IsDeleted    = false;
                businessParticipantQuery.Tenant_RefID = securityTicket.TenantID;

                var businessParticipant = ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, businessParticipantQuery).Single();
                //Save Edifact
                string edi_path = System.IO.Path.GetTempPath() + Parameter.edi_name;
                System.IO.File.WriteAllText(edi_path, Parameter.edi_message);
                List <string> files = new List <string>();
                files.Add(edi_path);

                string zipPath = System.IO.Path.GetTempPath() + Parameter.edi_name + ".zip";
                ZipFIlesUtils.AddToArchive(zipPath, files);

                string    earliestDate    = OldTransmitionDateList.OrderBy(d => d).First().ToString("dd.MM.yyyy");
                string    lastDate        = OldTransmitionDateList.OrderBy(d => d).Last().ToString("dd.MM.yyyy");
                Documents documentEdifact = new Documents();
                documentEdifact.documentName           = "Import von " + earliestDate + " - " + lastDate;
                documentEdifact.documentOutputLocation = zipPath;
                documentEdifact.receiver = businessParticipant.DisplayName;
                documentEdifact.mimeType = "Application/Edifact_Error";
                documentList.Add(documentEdifact);

                Documents documentExcel = new Documents();

                documentExcel.documentName           = "ExcelReport" + DateTime.Now.ToString("dd.MM.yyyy_HH.mm");
                documentExcel.documentOutputLocation = GenerateReportCases.CreateCaseXlsReport(caseModelList, documentExcel.documentName);
                documentExcel.mimeType = UtilMethods.GetMimeType(documentExcel.documentOutputLocation);
                documentExcel.receiver = "MM";
                documentList.Add(documentExcel);

                foreach (var item in documentList)
                {
                    MemoryStream ms = new MemoryStream(File.ReadAllBytes(item.documentOutputLocation));

                    byte[] byteArrayFile    = ms.ToArray();
                    var    _providerFactory = ProviderFactory.Instance;
                    var    documentProvider = _providerFactory.CreateDocumentServiceProvider();
                    var    uploadedFrom     = HttpContext.Current.Request.UserHostAddress;
                    Guid   documentID       = documentProvider.UploadDocument(byteArrayFile, item.documentOutputLocation, securityTicket.SessionTicket, uploadedFrom);
                    string downloadURL      = documentProvider.GenerateImageThumbnailLink(documentID, securityTicket.SessionTicket, false, 200);

                    P_ARCH_UD_1326 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 (parameterDoc.Mime == "Application/Edifact_Error")
                    {
                        parameterDoc.Description = parameterDoc.DocumentName;
                    }
                    else
                    {
                        parameterDoc.Description = "KV Fehler";
                    }

                    cls_Upload_Report.Invoke(Connection, Transaction, parameterDoc, securityTicket);
                }
            }


            return(returnValue);

            #endregion UserCode
        }
Exemplo n.º 4
0
        public static void ExportCasesFromOldSystem(DbConnection Connection, DbTransaction Transaction, SessionSecurityTicket securityTicket)
        {
            Console.WriteLine("----- Retrieving cases from DB started.");
            List <ED_GATOS_1212> treatments = cls_Get_All_Treatments_OLD_System.Invoke(Connection, Transaction, securityTicket).Result.ToList();

            Console.WriteLine("----- Cases retrieved.");

            List <CaseModel>     caseList = new List <CaseModel>();
            List <ED_GATOS_1212> moreThenOneArticleList   = new List <ED_GATOS_1212>();
            List <ED_GATOS_1212> moreThenOneDiagnoseList  = new List <ED_GATOS_1212>();
            List <ED_GATOS_1212> moreThenOneAftercareList = new List <ED_GATOS_1212>();
            List <ED_GAAOS_1312> aftercareList            = new List <ED_GAAOS_1312>();
            //key treatmentID, list of aftercares for the treatment (only if there is more then one)
            Dictionary <Guid, List <ED_GAAOS_1312> > aftercarDictionaryForMoreThenOneAftercare = new Dictionary <Guid, List <ED_GAAOS_1312> >();

            int counter = 1;

            foreach (var treatment in treatments)
            {
                CaseModel caseModel = new CaseModel();
                caseModel.opFSStatuses     = new FS();
                caseModel.acFSStatuses     = new FS();
                caseModel.patientFirstName = treatment.PatientFirstName;
                caseModel.patientLastName  = treatment.PatientLastName;
                caseModel.hip                     = treatment.HealthInsurance_Number;
                caseModel.treatmentDate           = treatment.isTreatmentPerformed ? treatment.treatmentPerformedDate.ToString("dd.MM.yyyy") : treatment.treatmentScheduledDate.ToString("dd.MM.yyyy");
                caseModel.op1                     = treatment.treatmentScheduledDate.ToString("dd.MM.yyyy");
                caseModel.op2                     = treatment.isTreatmentPerformed? treatment.treatmentPerformedDate.ToString("dd.MM.yyyy") : "not performed";
                caseModel.opFSStatuses.fs1        = caseModel.op2;
                caseModel.localization            = treatment.IsTreatmentOfLeftEye ? "L" : "R";
                caseModel.bevacizumabFSStatuses   = new FS();
                caseModel.managementFeeFSStatuses = new FS();
                caseModel.opDocFirstName          = treatment.isTreatmentPerformed ? treatment.OPperformedDoctorFirstName : treatment.OPScheduledDoctorFirstName;
                caseModel.opDocLastName           = treatment.isTreatmentPerformed ? treatment.OPperformedDoctorLastName : treatment.OPperformedDoctorLastName;
                caseModel.opDocLANR               = treatment.isTreatmentPerformed ? treatment.OPperformedDoctorLANR : treatment.OPscheduledDoctorLANR;
                caseModel.treatmentPractice       = new Practice();
                caseModel.aftercarePractice       = new Practice();
                caseModel.treatmentPractice.BSNR  = treatment.BSNR;
                caseModel.treatmentPractice.Name  = treatment.PracticeName;

                //drugs
                if (treatment.Articles.Length > 1)
                {
                    moreThenOneArticleList.Add(treatment);
                    caseModel.drugName = treatment.Articles[0].ArticleName;
                    caseModel.pzn      = treatment.Articles[0].PZN;
                }
                else
                {
                    if (treatment.Articles.Length != 0)
                    {
                        caseModel.drugName = treatment.Articles[0].ArticleName;
                        caseModel.pzn      = treatment.Articles[0].PZN;
                    }
                }


                //diagnoses
                if (treatment.Diagnoses.Length > 1)
                {
                    var diagnosesGroupped = treatment.Diagnoses.GroupBy(w => w.ICD10_Code).ToList();

                    if (diagnosesGroupped.Count > 1)
                    {
                        moreThenOneDiagnoseList.Add(treatment);
                        continue;
                    }
                    else
                    {
                        caseModel.icd10 = treatment.Diagnoses[0].ICD10_Code;
                    }
                }
                else
                {
                    if (treatment.Diagnoses.Length != 0)
                    {
                        caseModel.icd10 = treatment.Diagnoses[0].ICD10_Code;
                    }
                }


                if (treatment.isTreatmentBilled)
                {
                    var billPositions = cls_Get_All_BillPositions_for_TreatmentID_from_OLD_System.Invoke(Connection, Transaction, new P_ED_GABfTIDOS_1712 {
                        TreatmentID = treatment.HEC_Patient_TreatmentID
                    }, securityTicket).Result.ToList();

                    bool isOldBillWay = false;

                    foreach (var billPosition in billPositions)
                    {
                        #region Behandlung || Behandlung | Nachsorge

                        if (billPosition.External_PositionType == "Behandlung" || billPosition.External_PositionType == "Behandlung | Nachsorge")
                        {
                            if (billPosition.External_PositionType == "Behandlung | Nachsorge")
                            {
                                isOldBillWay = true;
                            }

                            caseModel.opSettlementNumber = billPosition.VorgangsNummer;
                            caseModel.opFSStatuses.gpos  = billPosition.GPOS;

                            int activeCode = 0;

                            activeCode = billPosition.TransmitionCode;

                            // TODO: Edited cases: 2, 5, 6
                            switch (activeCode)
                            {
                            case 2:
                                caseModel.op5 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.opFSStatuses.fs2 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                //caseModel.opFSStatuses.fs1 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 3:
                                caseModel.op6 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.opFSStatuses.fs4 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 4:
                                caseModel.op7 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.opFSStatuses.fs5 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 5:
                                caseModel.op8 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.opFSStatuses.fs7 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                //caseModel.opFSStatuses.fs2 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 6:
                                caseModel.op8 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.opFSStatuses.fs7 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.opFSStatuses.fs4 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 7:
                                caseModel.op10             = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.opFSStatuses.fs8 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;
                            }

                            if (activeCode != 2)
                            {
                                var transmitionStatusQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                                transmitionStatusQuery.Tenant_RefID       = securityTicket.TenantID;
                                transmitionStatusQuery.BillPosition_RefID = billPosition.BIL_BillPositionID;
                                transmitionStatusQuery.TransmitionCode    = 2;

                                var transmitionStatusList = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, transmitionStatusQuery).ToList();

                                var status2 = new ORM_BIL_BillPosition_TransmitionStatus();

                                if (transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault() != null)
                                {
                                    status2 = transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault();
                                }
                                else
                                {
                                    status2 = transmitionStatusList.First();
                                }

                                caseModel.op5 = status2.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.opFSStatuses.fs1 = status2.TransmittedOnDate.ToString("dd.MM.yyyy");
                            }
                        }
                        #endregion

                        #region  Wartezeitenmanagement
                        if (billPosition.External_PositionType == "Wartezeitenmanagement")
                        {
                            caseModel.managementFeeSettlementNumber = billPosition.VorgangsNummer;
                            caseModel.managementFeeFSStatuses.gpos  = billPosition.GPOS;
                            int activeCode = 0;

                            activeCode = billPosition.TransmitionCode;


                            switch (activeCode)
                            {
                            case 2:
                                caseModel.managementFeeFSStatuses.fs1 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 3:
                                caseModel.managementFeeFSStatuses.fs4 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 4:
                                caseModel.managementFeeFSStatuses.fs5 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 5:
                                caseModel.managementFeeFSStatuses.fs2 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 6:
                                caseModel.managementFeeFSStatuses.fs7 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 7:
                                caseModel.managementFeeFSStatuses.fs8 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;
                            }

                            if (activeCode != 2)
                            {
                                var transmitionStatusQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                                transmitionStatusQuery.Tenant_RefID       = securityTicket.TenantID;
                                transmitionStatusQuery.BillPosition_RefID = billPosition.BIL_BillPositionID;
                                transmitionStatusQuery.TransmitionCode    = 2;

                                var transmitionStatusList = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, transmitionStatusQuery).ToList();

                                var status2 = new ORM_BIL_BillPosition_TransmitionStatus();

                                if (transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault() != null)
                                {
                                    status2 = transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault();
                                }
                                else
                                {
                                    status2 = transmitionStatusList.First();
                                }

                                caseModel.managementFeeFSStatuses.fs1 = status2.TransmittedOnDate.ToString("dd.MM.yyyy");
                            }
                        }
                        #endregion

                        #region Zusatzposition Bevacuzimab
                        if (billPosition.External_PositionType == "Zusatzposition Bevacuzimab")
                        {
                            caseModel.bevacizumabSettlementNumber = billPosition.VorgangsNummer;
                            caseModel.bevacizumabFSStatuses.gpos  = billPosition.GPOS;
                            int activeCode = 0;

                            activeCode = billPosition.TransmitionCode;


                            switch (activeCode)
                            {
                            case 2:
                                caseModel.bevacizumabFSStatuses.fs1 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 3:
                                caseModel.bevacizumabFSStatuses.fs4 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 4:
                                caseModel.bevacizumabFSStatuses.fs5 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 5:
                                caseModel.bevacizumabFSStatuses.fs2 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 6:
                                caseModel.bevacizumabFSStatuses.fs7 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 7:
                                caseModel.bevacizumabFSStatuses.fs8 = billPosition.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;
                            }

                            if (activeCode != 2)
                            {
                                var transmitionStatusQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                                transmitionStatusQuery.Tenant_RefID       = securityTicket.TenantID;
                                transmitionStatusQuery.BillPosition_RefID = billPosition.BIL_BillPositionID;
                                transmitionStatusQuery.TransmitionCode    = 2;

                                var transmitionStatusList = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, transmitionStatusQuery).ToList();

                                var status2 = new ORM_BIL_BillPosition_TransmitionStatus();

                                if (transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault() != null)
                                {
                                    status2 = transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault();
                                }
                                else
                                {
                                    status2 = transmitionStatusList.First();
                                }

                                caseModel.bevacizumabFSStatuses.fs1 = status2.TransmittedOnDate.ToString("dd.MM.yyyy");
                            }
                        }
                        #endregion
                    }

                    #region Aftercare


                    //Aftercare
                    var aftercareArray = cls_Get_All_Aftercares_OLD_System.Invoke(Connection, Transaction, new P_ED_GAAOS_1312 {
                        TreatmentID = treatment.HEC_Patient_TreatmentID
                    }, securityTicket).Result;

                    if (aftercareArray.Length > 1)
                    {
                        if (aftercareArray.Length != 2)
                        {
                            moreThenOneAftercareList.Add(treatment);
                            aftercarDictionaryForMoreThenOneAftercare.Add(treatment.HEC_Patient_TreatmentID, aftercareArray.ToList());
                            continue;
                        }
                        else
                        {
                            if (aftercareArray[0].FollowupID != aftercareArray[1].FollowupID)
                            {
                                moreThenOneAftercareList.Add(treatment);
                                aftercarDictionaryForMoreThenOneAftercare.Add(treatment.HEC_Patient_TreatmentID, aftercareArray.ToList());
                                continue;
                            }
                            else
                            {
                                aftercareArray = aftercareArray.Where(f => f.BIL_BillPositionID != Guid.Empty).ToArray();
                            }
                        }
                    }

                    if (aftercareArray.Length != 0)
                    {
                        ED_GAAOS_1312 aftercare = aftercareArray[0];
                        caseModel.acDocFirstName         = aftercare.isTreatmentPerformed ? aftercare.PerformedDoctorFirstName : aftercare.ScheduledDoctorFirstName;
                        caseModel.acDocLastName          = aftercare.isTreatmentPerformed ? aftercare.PerformedDoctorLastName : aftercare.ScheduledDoctorLastName;
                        caseModel.acDocLANR              = aftercare.isTreatmentPerformed ? aftercare.PerformedDoctorLANR : aftercare.ScheduledDoctorLANR;
                        caseModel.ac1                    = aftercare.IfSheduled_Date.ToString("dd.MM.yyyy");
                        caseModel.aftercarePractice.BSNR = aftercare.BSNR;
                        caseModel.aftercarePractice.Name = aftercare.PracticeName;

                        if (aftercare.isTreatmentPerformed)
                        {
                            caseModel.ac2 = aftercare.IfTreatmentPerformed_Date.ToString("dd.MM.yyyy");
                            caseModel.acFSStatuses.fs1 = caseModel.ac2;
                        }

                        if (isOldBillWay)
                        {
                            caseModel.acSettlementNumber = caseModel.opSettlementNumber;
                            caseModel.acFSStatuses.fs1   = caseModel.opFSStatuses.fs1;
                            caseModel.acFSStatuses.fs2   = caseModel.opFSStatuses.fs2;
                            caseModel.acFSStatuses.fs4   = caseModel.opFSStatuses.fs4;
                            caseModel.acFSStatuses.fs5   = caseModel.opFSStatuses.fs5;
                            caseModel.acFSStatuses.fs7   = caseModel.opFSStatuses.fs7;
                            caseModel.acFSStatuses.fs8   = caseModel.opFSStatuses.fs8;
                            caseModel.acFSStatuses.gpos  = caseModel.opFSStatuses.gpos;
                        }
                        else
                        {
                            if (aftercare.isTreatmentBilled)
                            {
                                caseModel.acSettlementNumber = aftercare.VorgangsNummer;
                                caseModel.acFSStatuses.gpos  = aftercare.GPOS;
                                switch (aftercare.TransmitionCode)
                                {
                                case 2:
                                    caseModel.ac6 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    caseModel.acFSStatuses.fs2 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    break;

                                case 3:
                                    caseModel.ac7 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    caseModel.acFSStatuses.fs4 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    break;

                                case 4:
                                    caseModel.ac8 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    caseModel.acFSStatuses.fs5 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    break;

                                case 5:
                                    caseModel.ac9 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    caseModel.acFSStatuses.fs7 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    break;

                                case 6:
                                    caseModel.ac9 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    caseModel.acFSStatuses.fs7 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    caseModel.acFSStatuses.fs4 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    break;

                                case 7:
                                    caseModel.ac11             = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    caseModel.acFSStatuses.fs8 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    break;
                                }

                                if (aftercare.TransmitionCode != 2)
                                {
                                    var transmitionStatusQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                                    transmitionStatusQuery.Tenant_RefID       = securityTicket.TenantID;
                                    transmitionStatusQuery.BillPosition_RefID = aftercare.BIL_BillPositionID;
                                    transmitionStatusQuery.TransmitionCode    = 2;

                                    var transmitionStatusList = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, transmitionStatusQuery).ToList();

                                    if (transmitionStatusList.Count > 0)
                                    {
                                        var status2 = new ORM_BIL_BillPosition_TransmitionStatus();

                                        if (transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault() != null)
                                        {
                                            status2 = transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault();
                                        }
                                        else
                                        {
                                            status2 = transmitionStatusList.First();
                                        }

                                        caseModel.ac6 = status2.TransmittedOnDate.ToString("dd.MM.yyyy");
                                        caseModel.acFSStatuses.fs1 = status2.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    //Treatment was never billed
                    var aftercareArray = cls_Get_All_Aftercares_OLD_System.Invoke(Connection, Transaction, new P_ED_GAAOS_1312 {
                        TreatmentID = treatment.HEC_Patient_TreatmentID
                    }, securityTicket).Result;
                    if (aftercareArray.Length > 1)
                    {
                        if (aftercareArray.Length != 2)
                        {
                            moreThenOneAftercareList.Add(treatment);
                            aftercarDictionaryForMoreThenOneAftercare.Add(treatment.HEC_Patient_TreatmentID, aftercareArray.ToList());
                            continue;
                        }
                        else
                        {
                            if (aftercareArray[0].FollowupID != aftercareArray[1].FollowupID)
                            {
                                moreThenOneAftercareList.Add(treatment);
                                aftercarDictionaryForMoreThenOneAftercare.Add(treatment.HEC_Patient_TreatmentID, aftercareArray.ToList());
                                continue;
                            }
                            else
                            {
                                aftercareArray = aftercareArray.Where(f => f.BIL_BillPositionID != Guid.Empty).ToArray();
                            }
                        }
                    }

                    if (aftercareArray.Length != 0)
                    {
                        var aftercare = aftercareArray[0];
                        caseModel.acDocFirstName         = aftercare.isTreatmentPerformed ? aftercare.PerformedDoctorFirstName : aftercare.ScheduledDoctorFirstName;
                        caseModel.acDocLastName          = aftercare.isTreatmentPerformed ? aftercare.PerformedDoctorLastName : aftercare.ScheduledDoctorLastName;
                        caseModel.acDocLANR              = aftercare.isTreatmentPerformed ? aftercare.PerformedDoctorLANR : aftercare.ScheduledDoctorLANR;
                        caseModel.aftercarePractice.BSNR = aftercare.BSNR;
                        caseModel.aftercarePractice.Name = aftercare.PracticeName;
                        caseModel.ac1 = aftercare.IfSheduled_Date.ToString("dd.MM.yyyy");
                        if (aftercare.isTreatmentBilled)
                        {
                            caseModel.ac2 = aftercare.IfTreatmentPerformed_Date.ToString("dd.MM.yyyy");
                        }
                        if (aftercare.isTreatmentPerformed)
                        {
                            caseModel.acSettlementNumber = aftercare.VorgangsNummer;
                        }

                        if (aftercare.isTreatmentBilled)
                        {
                            caseModel.acSettlementNumber = aftercare.VorgangsNummer;
                            caseModel.acFSStatuses.gpos  = aftercare.GPOS;

                            switch (aftercare.TransmitionCode)
                            {
                            case 2:
                                caseModel.ac6 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.acFSStatuses.fs1 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 3:
                                caseModel.ac7 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.acFSStatuses.fs4 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 4:
                                caseModel.ac8 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.acFSStatuses.fs5 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 5:
                                caseModel.ac9 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.acFSStatuses.fs2 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 6:
                                caseModel.ac9 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.acFSStatuses.fs7 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;

                            case 7:
                                caseModel.ac11             = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                caseModel.acFSStatuses.fs8 = aftercare.TransmittedOnDate.ToString("dd.MM.yyyy");
                                break;
                            }

                            if (aftercare.TransmitionCode != 2)
                            {
                                var transmitionStatusQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                                transmitionStatusQuery.Tenant_RefID       = securityTicket.TenantID;
                                transmitionStatusQuery.BillPosition_RefID = aftercare.BIL_BillPositionID;
                                transmitionStatusQuery.TransmitionCode    = 2;

                                var transmitionStatusList = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, transmitionStatusQuery).ToList();

                                if (transmitionStatusList.Count > 0)
                                {
                                    var status2 = new ORM_BIL_BillPosition_TransmitionStatus();

                                    if (transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault() != null)
                                    {
                                        status2 = transmitionStatusList.Where(p => p.IsDeleted = false).SingleOrDefault();
                                    }
                                    else
                                    {
                                        status2 = transmitionStatusList.First();
                                    }

                                    caseModel.ac6 = status2.TransmittedOnDate.ToString("dd.MM.yyyy");
                                    caseModel.acFSStatuses.fs1 = status2.TransmittedOnDate.ToString("dd.MM.yyyy");
                                }
                            }
                        }
                    }
                }

                #endregion



                caseList.Add(caseModel);
                Console.WriteLine(counter + "___________________________________________" + treatments.Count);
                counter++;
            }

            Console.WriteLine("----- Creating XLS.");

            string       file_aftercare = ExportCasesXLSTemplate.ExportCasesMoreThenOneAftercare(moreThenOneAftercareList, aftercarDictionaryForMoreThenOneAftercare);
            MemoryStream ms             = new MemoryStream(File.ReadAllBytes(file_aftercare));


            string file_article = ExportCasesXLSTemplate.ExportCasesMoreThenOneArticle(moreThenOneArticleList);
            ms = new MemoryStream(File.ReadAllBytes(file_article));

            string file_diagnose = ExportCasesXLSTemplate.ExportCasesMoreThenOneDiagnose(moreThenOneDiagnoseList);
            ms = new MemoryStream(File.ReadAllBytes(file_diagnose));

            string file = ExportCasesXLSTemplate.ExportCasesBeforeUploadToDB(caseList);
            ms = new MemoryStream(File.ReadAllBytes(file));
            Console.WriteLine("----- XLS created.");
        }
        protected static FR_L6BH_IAOKC_1356 Execute(DbConnection Connection, DbTransaction Transaction, P_L6BH_IAOKC_1356 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L6BH_IAOKC_1356();
            returnValue.Result = new L6BH_IAOKC_1356();
            List <L6BH_IAOKC_1356_ImportedConfirmations> ImportedAOKConfirmList = new List <L6BH_IAOKC_1356_ImportedConfirmations>();
            returnValue.Result.ImportedConfirmations = ImportedAOKConfirmList.ToArray();
            List <int> ProcessNumberDoNotExist = new List <int>();
            returnValue.Result.ProcessNumberDoesNotExist = ProcessNumberDoNotExist.ToArray();
            List <int> ProcessNumberCouldNotBeImported = new List <int>();
            returnValue.Result.ProcessNumberCouldNotBeImported = ProcessNumberCouldNotBeImported.ToArray();
            List <String> ListOfProcessNumbersToSetStatusConfirm = new List <String>();
            List <int>    ProcessNumberCouldNotBeChangedBack     = new List <int>();
            returnValue.Result.ProcessNumberCouldNotBeChangedBack = ProcessNumberCouldNotBeChangedBack.ToArray();

            var patientList = cls_Get_PatientName_and_BillpositionID.Invoke(Connection, Transaction, securityTicket).Result.ToList();

            foreach (var item in Parameter.ProcessNumberList)
            {
                if (item == String.Empty)
                {
                    continue;
                }
                ListOfProcessNumbersToSetStatusConfirm.Add((Int64.Parse(item) % 10000000000).ToString());
            }
            ListOfProcessNumbersToSetStatusConfirm.RemoveAll(r => String.IsNullOrEmpty(r.Trim()));

            var billPositionQuery = new ORM_BIL_BillPosition.Query();
            billPositionQuery.Tenant_RefID = securityTicket.TenantID;
            billPositionQuery.IsDeleted    = false;

            var allbillPositions = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, billPositionQuery).ToArray();

            var activeStatusesQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
            activeStatusesQuery.Tenant_RefID = securityTicket.TenantID;
            activeStatusesQuery.IsDeleted    = false;
            activeStatusesQuery.IsActive     = true;

            var allActiveStatuss = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, activeStatusesQuery).ToArray();

            foreach (var processNumber in ListOfProcessNumbersToSetStatusConfirm)
            {
                var billPosition = allbillPositions.FirstOrDefault(p => p.External_PositionReferenceField == processNumber);

                if (billPosition != null)
                {
                    var activeStatuss = allActiveStatuss.First(a => a.BillPosition_RefID == billPosition.BIL_BillPositionID);

                    if (activeStatuss.TransmitionCode >= 3)
                    {
                        ProcessNumberCouldNotBeChangedBack.Add(Int32.Parse(processNumber));
                    }
                    else
                    {
                        activeStatuss.IsActive  = false;
                        activeStatuss.IsDeleted = true;
                        activeStatuss.Save(Connection, Transaction);

                        //create status 3
                        var transmitionStatus = new ORM_BIL_BillPosition_TransmitionStatus();
                        transmitionStatus.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                        transmitionStatus.BillPosition_RefID = billPosition.BIL_BillPositionID;
                        transmitionStatus.TransmitionCode    = 3;
                        transmitionStatus.TransmittedOnDate  = DateTime.Now;
                        transmitionStatus.PrimaryComment     = "AOK bestätigt";
                        transmitionStatus.SecondaryComment   = "AOK bestätigt";
                        transmitionStatus.Tenant_RefID       = securityTicket.TenantID;
                        transmitionStatus.Creation_Timestamp = DateTime.Now;
                        transmitionStatus.IsActive           = true;
                        transmitionStatus.Save(Connection, Transaction);//save

                        // get Patient first and last name
                        var patient = patientList.Where(p => p.BIL_BillPositionID == billPosition.BIL_BillPositionID).FirstOrDefault();;

                        if (patient == null)
                        {
                            ProcessNumberCouldNotBeImported.Add(Int32.Parse(processNumber));
                        }
                        else
                        {
                            L6BH_IAOKC_1356_ImportedConfirmations ImportedConfirmation = new L6BH_IAOKC_1356_ImportedConfirmations();
                            ImportedConfirmation.ProcessNumber = Int32.Parse(processNumber);
                            ImportedConfirmation.Patient       = patient.FirstName + " " + patient.LastName;
                            ImportedAOKConfirmList.Add(ImportedConfirmation);
                        }
                    }
                }
                else
                {
                    ProcessNumberDoNotExist.Add(Int32.Parse(processNumber));
                }
            }
            returnValue.Result.ProcessNumberCouldNotBeChangedBack = ProcessNumberCouldNotBeChangedBack.ToArray();
            returnValue.Result.ImportedConfirmations           = ImportedAOKConfirmList.ToArray();
            returnValue.Result.ProcessNumberDoesNotExist       = ProcessNumberDoNotExist.ToArray();
            returnValue.Result.ProcessNumberCouldNotBeImported = ProcessNumberCouldNotBeImported.ToArray();
            return(returnValue);

            #endregion UserCode
        }
        protected static FR_Guids Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_SCfEC_1641 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guids();
            //Put your code here
            var case_to_submit = cls_Get_Case_Details_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GCDfCID_1435()
            {
                CaseID = Parameter.case_id
            }, securityTicket).Result;
            if (case_to_submit != null)
            {
                var diagnose_details = cls_Get_Diagnose_Details_for_DiagnoseID.Invoke(Connection, Transaction, new P_CAS_GDDfDID_1608()
                {
                    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 oct_doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
                {
                    DoctorID = case_to_submit.oct_doctor_id
                }, securityTicket).Result.SingleOrDefault();
                var patient_details = cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPDfPID_1124()
                {
                    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 status_ids = cls_Get_Case_TransmitionStatusIDs_for_CaseID_and_StatusCode.Invoke(Connection, Transaction, new P_CAS_GCTSIDsfCIDaSC_1619()
                {
                    CaseID = Parameter.case_id, StatusCode = 5
                }, securityTicket).Result;

                var transmition_statusQ = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                transmition_statusQ.Tenant_RefID = securityTicket.TenantID;
                transmition_statusQ.IsDeleted    = false;
                var result = new List <Guid>();

                var status_key = "aftercare";
                if (Parameter.action_type == "op")
                {
                    status_key = "treatment";
                }
                else if (Parameter.action_type == "oct")
                {
                    status_key = "oct";
                }

                if (status_key == "oct")
                {
                    var relevant_action = ORM_HEC_CAS_Case_RelevantPlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_CAS_Case_RelevantPlannedAction.Query()
                    {
                        PlannedAction_RefID = Parameter.planned_action_id,
                        Tenant_RefID        = securityTicket.TenantID,
                        IsDeleted           = false
                    }).Single();

                    if (relevant_action.Case_RefID != Parameter.case_id)
                    {
                        Parameter.case_id = relevant_action.Case_RefID;
                    }

                    var oct_status_ids = cls_Get_Case_TransmitionStatusIDs_for_PatientID_and_StatusCode.Invoke(Connection, Transaction, new P_CAS_GCTSIDsfPIDaSC_1859()
                    {
                        PatientID = case_to_submit.patient_id, StatusCode = 5
                    }, securityTicket).Result;

                    var all_case_status_ids = cls_Get_Case_TransmitionStatusIDs_for_PatientID.Invoke(Connection, Transaction, new P_CAS_GCTSIDsfPID_1856()
                    {
                        PatientID = case_to_submit.patient_id
                    }, securityTicket).Result.Where(t => t.status_key == "oct").ToArray();
                    var new_status_ids             = new List <CAS_GCTSIDsfPIDaSC_1859>();
                    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 case_relevant_actions = cls_Get_PlannedActionIDs_for_PatientID_and_ActionTypeID.Invoke(Connection, Transaction, new P_CAS_GPAIDsfPIDaATID_1705()
                    {
                        ActionTypeID = oct_planned_action_type_id,
                        PatientID    = case_to_submit.patient_id
                    }, securityTicket).Result.Where(t => t.performed).ToList();

                    var case_bill_positions = cls_Get_BillPositionIDs_for_PatientID_and_GposType.Invoke(Connection, Transaction, new P_CAS_GBPIDsfPIDaGposT_1709()
                    {
                        PatientID = case_to_submit.patient_id,
                        GposType  = EGposType.Oct.Value()
                    }, securityTicket).Result.Where(t => t.status_id != Guid.Empty).ToList();

                    for (var i = 0; i < case_relevant_actions.Count; i++)
                    {
                        if (case_relevant_actions[i].action_id == Parameter.planned_action_id)
                        {
                            var status        = all_case_status_ids.Single(t => t.bill_position_id == case_bill_positions[i].bill_position_id);
                            var status_to_add = oct_status_ids.Single(t => t.bill_position_id == status.bill_position_id);
                            new_status_ids.Add(status_to_add);
                            break;
                        }
                    }

                    if (!new_status_ids.Any())
                    {
                        throw new ArgumentException(String.Format("No suitable bill position found for action id: {0}; and case id: {1}", Parameter.planned_action_id, Parameter.case_id));
                    }

                    status_ids = new_status_ids.Select(t => new CAS_GCTSIDsfCIDaSC_1619()
                    {
                        bill_position_id            = t.bill_position_id,
                        global_property_matching_id = t.global_property_matching_id,
                        status_id  = t.status_id,
                        status_key = t.status_key
                    }).ToArray();
                }

                foreach (var status in status_ids)
                {
                    if (status.status_key == status_key)
                    {
                        transmition_statusQ.BIL_BillPosition_TransmitionStatusID = status.status_id;
                        var transmition_status = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, transmition_statusQ).SingleOrDefault();
                        if (transmition_status != null)
                        {
                            transmition_status.IsActive = false;
                            transmition_status.Save(Connection, Transaction);

                            var new_status = new ORM_BIL_BillPosition_TransmitionStatus();
                            new_status.PrimaryComment  = Parameter.comment;
                            new_status.TransmitionCode = 6;
                            new_status.IsActive        = true;
                            new_status.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                            new_status.BillPosition_RefID     = status.bill_position_id;
                            new_status.Creation_Timestamp     = DateTime.Now;
                            new_status.Modification_Timestamp = DateTime.Now;
                            new_status.Tenant_RefID           = securityTicket.TenantID;
                            new_status.TransmitionStatusKey   = transmition_status.TransmitionStatusKey;

                            var today = DateTime.Today;
                            var 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 == null ? "-" : diagnose_details.diagnose_icd_10,
                                DiagnosisCatalogName             = diagnose_details == null ? "-" : diagnose_details.catalog_display_name,
                                DiagnosisName                    = diagnose_details == null ? "-" : diagnose_details.diagnose_name,
                                IFPerformedMedicalPracticeName   = treatment_practice_details.practice_name,
                                IFPerformedResponsibleBPFullName = treatment_doctor_details != null ? MMDocConnectDocApp.GenericUtils.GetDoctorName(treatment_doctor_details) : null,
                                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)
                            {
                                new_status.TransmissionDataXML = snapshot.XmlFileString;
                            }

                            new_status.TransmittedOnDate = DateTime.Now;

                            new_status.Save(Connection, Transaction);

                            result.Add(new_status.BIL_BillPosition_TransmitionStatusID);
                        }
                    }
                }

                #region IMPORT SUBMITTED CASE TO ELASTIC
                var submitted_case_model_elastic = Get_Submitted_Cases.GetSubmittedCaseforSubmittedCaseID(Parameter.planned_action_id.ToString(), securityTicket);
                submitted_case_model_elastic.status             = "FS6";
                submitted_case_model_elastic.status_date        = DateTime.Now;
                submitted_case_model_elastic.status_date_string = DateTime.Now.ToString("dd.MM.yyyy");

                var 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());
                #endregion

                #region IMPORT SETTLEMENT TO ELASTIC
                var doctor_name = default(string);
                switch (Parameter.action_type)
                {
                case "op":
                    if (treatment_doctor_details != null)
                    {
                        doctor_name = GenericUtils.GetDoctorName(treatment_doctor_details);
                    }
                    break;

                case "ac":
                    if (aftercare_doctor_details != null)
                    {
                        doctor_name = GenericUtils.GetDoctorName(aftercare_doctor_details);
                    }
                    break;

                case "oct":
                    if (oct_doctor_details != null)
                    {
                        doctor_name = GenericUtils.GetDoctorName(oct_doctor_details);
                    }
                    break;
                }

                var settlement = Get_Settlement.GetSettlementForID(Parameter.planned_action_id.ToString(), securityTicket);
                settlement.status = "FS6";
                if (!String.IsNullOrEmpty(doctor_name))
                {
                    settlement.doctor = doctor_name;
                }

                settlement.patient_full_name = patient_details.patient_last_name + ", " + patient_details.patient_first_name;
                settlement.first_name        = patient_details.patient_first_name;
                settlement.last_name         = patient_details.patient_last_name;

                var settlements = new List <Settlement_Model>()
                {
                    settlement
                };
                Add_new_Settlement.Import_Settlement_to_ElasticDB(settlements, securityTicket.TenantID.ToString());

                var patientDetailList = new List <PatientDetailViewModel>();
                var patient_detail    = Retrieve_Patients.Get_PatientDetaiForID(settlement.id, securityTicket);
                if (patient_detail != null)
                {
                    patient_detail.doctor = doctor_name;
                    patient_detail.status = settlement.status;
                    patientDetailList.Add(patient_detail);
                    Add_New_Patient.ImportPatientDetailsToElastic(patientDetailList, securityTicket.TenantID.ToString());
                }
                #endregion

                returnValue.Result = result.ToArray();
            }

            return(returnValue);

            #endregion UserCode
        }
Exemplo n.º 7
0
        protected static FR_L6BH_IAOKR_1652 Execute(DbConnection Connection, DbTransaction Transaction, P_L6BH_IAOKR_1652 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L6BH_IAOKR_1652();
            returnValue.Result = new L6BH_IAOKR_1652();
            List <L6BH_IAOKR_1652_ImportedErrors> importedErrorsList = new List <L6BH_IAOKR_1652_ImportedErrors>();
            returnValue.Result.ImportedErrors = importedErrorsList.ToArray();
            List <int> ProcessNumberDoNotExist = new List <int>();
            returnValue.Result.ProcessNumberDoesNotExist = ProcessNumberDoNotExist.ToArray();
            List <int> ProcessNumberCouldNotBeChangedBack = new List <int>();
            returnValue.Result.ProcessNumberCouldNotBeChangedBack = ProcessNumberCouldNotBeChangedBack.ToArray();

            foreach (var edifactFileLocation in Parameter.EdifactFileList.ToList())
            {
                System.IO.StreamReader  srInputFile = new System.IO.StreamReader(edifactFileLocation);
                EdifactInterface.Parser edifactFile = new EdifactInterface.Parser(srInputFile);
                var edifactFileList = edifactFile.getParsedPositions();

                foreach (var treatment in edifactFileList)
                {
                    var billPositionQuery = new ORM_BIL_BillPosition.Query();
                    billPositionQuery.Tenant_RefID = securityTicket.TenantID;
                    billPositionQuery.IsDeleted    = false;
                    billPositionQuery.External_PositionReferenceField = (Int64.Parse(treatment.strProcessNumber) % 10000000000).ToString();

                    var billPosition = ORM_BIL_BillPosition.Query.Search(Connection, Transaction, billPositionQuery).FirstOrDefault();

                    if (billPosition != null)
                    {
                        //find if there is a higher status then one to be updated
                        var activeStatusesQuery = new ORM_BIL_BillPosition_TransmitionStatus.Query();
                        activeStatusesQuery.Tenant_RefID       = securityTicket.TenantID;
                        activeStatusesQuery.BillPosition_RefID = billPosition.BIL_BillPositionID;
                        activeStatusesQuery.IsDeleted          = false;
                        activeStatusesQuery.IsActive           = true;

                        var activeStatuss = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, activeStatusesQuery).FirstOrDefault();

                        if (activeStatuss.TransmitionCode >= 4)
                        {
                            ProcessNumberCouldNotBeChangedBack.Add(Int32.Parse(treatment.strProcessNumber));
                        }
                        else
                        {
                            activeStatuss.IsActive  = false;
                            activeStatuss.IsDeleted = true;
                            activeStatuss.Save(Connection, Transaction);

                            //create status 4
                            var transmitionStatus = new ORM_BIL_BillPosition_TransmitionStatus();
                            transmitionStatus.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                            transmitionStatus.BillPosition_RefID = billPosition.BIL_BillPositionID;
                            transmitionStatus.TransmitionCode    = 4;
                            transmitionStatus.TransmittedOnDate  = DateTime.Now;
                            transmitionStatus.PrimaryComment     = "AOK Fehlermeldung";
                            transmitionStatus.SecondaryComment   = treatment.strErrorComment;
                            transmitionStatus.Tenant_RefID       = securityTicket.TenantID;
                            transmitionStatus.Creation_Timestamp = DateTime.Now;
                            transmitionStatus.IsActive           = true;
                            transmitionStatus.Save(Connection, Transaction);//save

                            L6BH_IAOKR_1652_ImportedErrors errorMessage = new L6BH_IAOKR_1652_ImportedErrors();
                            errorMessage.Comment       = treatment.strErrorComment;
                            errorMessage.Patient       = treatment.strPatientFirstName + " " + treatment.strPatientLastName;
                            errorMessage.ProcessNumber = Int32.Parse(treatment.strProcessNumber);

                            importedErrorsList.Add(errorMessage);
                        }
                    }
                    else
                    {
                        ProcessNumberDoNotExist.Add(Int32.Parse(treatment.strProcessNumber));
                    }
                }
            }
            returnValue.Result.ProcessNumberCouldNotBeChangedBack = ProcessNumberCouldNotBeChangedBack.ToArray();
            returnValue.Result.ImportedErrors            = importedErrorsList.ToArray();
            returnValue.Result.ProcessNumberDoesNotExist = ProcessNumberDoNotExist.ToArray();
            return(returnValue);

            #endregion UserCode
        }