protected static FR_CAS_CCTS_1001 Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CCTS_1001 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_CAS_CCTS_1001();
            returnValue.Result = new CAS_CCTS_1001();


            var StatusForCase = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, new ORM_BIL_BillPosition_TransmitionStatus.Query()
            {
                IsDeleted    = false,
                IsActive     = true,
                Tenant_RefID = securityTicket.TenantID,
                BIL_BillPosition_TransmitionStatusID = Parameter.BIL_BillPosition_TransmitionStatusID
            }).SingleOrDefault();
            if (!Parameter.AreCasesPaymentAndStatus)
            {
                if (StatusForCase != null)
                {
                    returnValue.Result.Old_Status_Modification_Timestamp = StatusForCase.Modification_Timestamp;

                    StatusForCase.Modification_Timestamp = DateTime.Now;
                    StatusForCase.IsActive = false;
                    StatusForCase.Save(Connection, Transaction);
                    returnValue.Result.New_Status_Modification_Timestamp = StatusForCase.Modification_Timestamp;

                    var NewStatusForCase = new ORM_BIL_BillPosition_TransmitionStatus();
                    NewStatusForCase.IsDeleted              = false;
                    NewStatusForCase.Creation_Timestamp     = DateTime.Now;
                    NewStatusForCase.Modification_Timestamp = DateTime.Now;
                    NewStatusForCase.Tenant_RefID           = securityTicket.TenantID;
                    NewStatusForCase.IsActive = true;
                    NewStatusForCase.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                    NewStatusForCase.BillPosition_RefID = StatusForCase.BillPosition_RefID;
                    NewStatusForCase.TransmitionCode    = Convert.ToInt32(Parameter.StatusTo);
                    NewStatusForCase.TransmittedOnDate  = DateTime.Now;

                    NewStatusForCase.TransmitionStatusKey = StatusForCase.TransmitionStatusKey;
                    NewStatusForCase.Save(Connection, Transaction);
                    returnValue.Result.New_BIL_BillPosition_TransmitionStatusID = NewStatusForCase.BIL_BillPosition_TransmitionStatusID;
                }
            }



            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_CAS_SCCS_1520 Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_SCCS_1520 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_CAS_SCCS_1520();

            returnValue.Result = new CAS_SCCS_1520();

            //Put your code here
            var Ids_eligible      = new List <Guid>();
            var StatusOld         = DateTime.Now;
            var StatusNew         = DateTime.Now;
            var settlements       = new List <Settlement_Model>();
            var patientDetailList = new List <PatientDetailViewModel>();
            var itemsForChange    = Parameter.ids_to_change.Count();

            //filter case eligibility
            foreach (var id in Parameter.ids_to_change)
            {
                if (Parameter.status_to == 8)
                {
                    var settlementEdit = Get_Settlement.GetSettlementForID(id.ToString(), securityTicket);

                    if (settlementEdit != null)
                    {
                        if (settlementEdit.status == "FS4" || settlementEdit.status == "FS12")
                        {
                            Ids_eligible.Add(id);
                        }
                    }
                }
                else if (Parameter.status_to == 9)
                {
                    var settlementEdit = Get_Settlement.GetSettlementForID(id.ToString(), securityTicket);
                    if (settlementEdit != null)
                    {
                        if (settlementEdit.status == "FS7")
                        {
                            Ids_eligible.Add(id);
                        }
                    }
                }
            }

            var itemsChanged = Ids_eligible.Count;
            foreach (var ideligible in Ids_eligible)
            {
                #region update setttlement elastic

                var settlementEdit = Get_Settlement.GetSettlementForID(ideligible.ToString(), securityTicket);
                settlementEdit.status      = Parameter.status_to == 8 ? "FS" + 7 : "FS" + 12;
                settlementEdit.status_date = DateTime.Now;
                settlements.Add(settlementEdit);

                PatientDetailViewModel patient_detail = Retrieve_Patients.Get_PatientDetaiForID(settlementEdit.id, securityTicket);
                if (patient_detail != null)
                {
                    patient_detail.status = settlementEdit.status;
                    patientDetailList.Add(patient_detail);
                }
                #endregion

                List <CAS_GCTCfCID_1427> casePositions = cls_Get_Case_TransmitionCode_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GCTCfCID_1427()
                {
                    CaseID = Guid.Parse(settlementEdit.case_id)
                }, securityTicket).Result.ToList();
                var aftercareNum = casePositions.Count(fs => fs.fs_key == "aftercare");
                foreach (var item in casePositions)
                {
                    if (item.fs_key == "treatment")
                    {
                        var StatusForCase = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, new ORM_BIL_BillPosition_TransmitionStatus.Query()
                        {
                            IsDeleted    = false,
                            IsActive     = true,
                            Tenant_RefID = securityTicket.TenantID,
                            BIL_BillPosition_TransmitionStatusID = item.status_id
                        }).SingleOrDefault();

                        if (StatusForCase != null)
                        {
                            StatusOld = StatusForCase.Modification_Timestamp;

                            StatusForCase.Modification_Timestamp = DateTime.Now;
                            StatusForCase.IsActive = false;
                            StatusForCase.Save(Connection, Transaction);
                            StatusNew = StatusForCase.Modification_Timestamp;

                            var NewStatusForCase = new ORM_BIL_BillPosition_TransmitionStatus();
                            NewStatusForCase.IsDeleted              = false;
                            NewStatusForCase.Creation_Timestamp     = DateTime.Now;
                            NewStatusForCase.Modification_Timestamp = DateTime.Now;
                            NewStatusForCase.Tenant_RefID           = securityTicket.TenantID;
                            NewStatusForCase.IsActive = true;
                            NewStatusForCase.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                            NewStatusForCase.BillPosition_RefID   = StatusForCase.BillPosition_RefID;
                            NewStatusForCase.TransmitionCode      = Convert.ToInt32(Parameter.status_to) == 9 ? 12 : 7;
                            NewStatusForCase.TransmittedOnDate    = DateTime.Now;
                            NewStatusForCase.TransmitionStatusKey = StatusForCase.TransmitionStatusKey;
                            NewStatusForCase.Save(Connection, Transaction);
                        }
                    }
                    else
                    {
                        if ((aftercareNum > 1 && (item.fs_status != 8)) || aftercareNum == 0)
                        {
                            var StatusForCase = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, new ORM_BIL_BillPosition_TransmitionStatus.Query()
                            {
                                IsDeleted    = false,
                                IsActive     = true,
                                Tenant_RefID = securityTicket.TenantID,
                                BIL_BillPosition_TransmitionStatusID = item.status_id
                            }).SingleOrDefault();

                            if (StatusForCase != null)
                            {
                                StatusOld = StatusForCase.Modification_Timestamp;

                                StatusForCase.Modification_Timestamp = DateTime.Now;
                                StatusForCase.IsActive = false;
                                StatusForCase.Save(Connection, Transaction);
                                StatusNew = StatusForCase.Modification_Timestamp;

                                var NewStatusForCase = new ORM_BIL_BillPosition_TransmitionStatus();
                                NewStatusForCase.IsDeleted              = false;
                                NewStatusForCase.Creation_Timestamp     = DateTime.Now;
                                NewStatusForCase.Modification_Timestamp = DateTime.Now;
                                NewStatusForCase.Tenant_RefID           = securityTicket.TenantID;
                                NewStatusForCase.IsActive = true;
                                NewStatusForCase.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                                NewStatusForCase.BillPosition_RefID   = StatusForCase.BillPosition_RefID;
                                NewStatusForCase.TransmitionCode      = Convert.ToInt32(Parameter.status_to) == 9 ? 12 : 7;
                                NewStatusForCase.TransmittedOnDate    = DateTime.Now;
                                NewStatusForCase.TransmitionStatusKey = StatusForCase.TransmitionStatusKey;
                                NewStatusForCase.Save(Connection, Transaction);
                            }
                        }
                    }
                }

                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());
                }
            }

            returnValue.Result.number_of_ids_changed   = itemsChanged;
            returnValue.Result.number_of_ids_to_change = itemsForChange;
            returnValue.Result.status_to = Parameter.status_to;
            return(returnValue);

            #endregion UserCode
        }
示例#4
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
        }
示例#5
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_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
        }
        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
        }
        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
        }
示例#9
0
        protected static FR_Base Execute(DbConnection Connection, DbTransaction Transaction, P_L6TR_PBD_1706 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Base();

            if (Parameter.OutputData == null)
            {
                return(returnValue);
            }

            var treatmentIDs = Parameter.OutputData.Select(s => Guid.Parse(s.strTreatmentID)).Distinct().ToArray();

            ORM_BIL_BillHeader header = ORM_BIL_BillHeader.Query.Search(Connection, Transaction, new ORM_BIL_BillHeader.Query()
            {
                Tenant_RefID     = securityTicket.TenantID,
                BIL_BillHeaderID = Parameter.HeaderID
            }).Single();

            ORM_BIL_BillHeaderExtension_EDIFACT edifact = new ORM_BIL_BillHeaderExtension_EDIFACT();
            edifact.BIL_BillHeader_RefID = header.BIL_BillHeaderID;
            edifact.BIL_BillHeaderExtension_EDIFACTID = Guid.NewGuid();
            edifact.EDIFACTCounter         = Parameter.EdifactNumber;
            edifact.Tenant_RefID           = securityTicket.TenantID;
            edifact.Modification_Timestamp = DateTime.Now;
            edifact.Save(Connection, Transaction);

            var ci = CultureInfo.InvariantCulture.Clone() as CultureInfo;
            ci.NumberFormat.NumberDecimalSeparator = ",";

            foreach (var treatmentID in treatmentIDs)
            {
                bool IsArticleAdded = false;
                var  treatment      = ORM_HEC_Patient_Treatment.Query.Search(Connection, Transaction, new ORM_HEC_Patient_Treatment.Query()
                {
                    Tenant_RefID            = securityTicket.TenantID,
                    HEC_Patient_TreatmentID = treatmentID
                }).Single();
                treatment.IsTreatmentBilled      = true;
                treatment.IfTreatmentBilled_Date = DateTime.Now;
                treatment.Modification_Timestamp = DateTime.Now;
                treatment.Save(Connection, Transaction);

                foreach (var item in Parameter.OutputData.Where(i => i.strTreatmentID == treatmentID.ToString()).ToList())
                {
                    ORM_BIL_BillPosition billPosition = new ORM_BIL_BillPosition();
                    billPosition.Tenant_RefID = securityTicket.TenantID;
                    //billPosition.PositionIndex = i;
                    billPosition.BIL_BilHeader_RefID             = header.BIL_BillHeaderID;
                    billPosition.BIL_BillPositionID              = Guid.NewGuid();
                    billPosition.External_PositionCode           = item.strGpos;
                    billPosition.External_PositionReferenceField = item.iProcessNumber.ToString();
                    billPosition.PositionValue_IncludingTax      = decimal.Parse(item.strChargedValue, ci);
                    billPosition.Modification_Timestamp          = DateTime.Now;

                    switch (item.iTypeOfBillingPosition)
                    {
                    case 1:
                        billPosition.External_PositionType = "Behandlung";
                        break;

                    case 2:
                        billPosition.External_PositionType = "Nachsorge";
                        break;

                    case 3:
                        billPosition.External_PositionType = "Behandlung | Nachsorge";
                        break;

                    case 4:
                        billPosition.External_PositionType = "Zusatzposition Bevacuzimab";
                        break;

                    case 5:
                        billPosition.External_PositionType = "Wartezeitenmanagement";
                        break;

                    default:
                        throw new Exception("Wrong bill position type!");
                    }

                    billPosition.Save(Connection, Transaction);

                    ORM_BIL_BillPosition_2_PatientTreatment p2t = new ORM_BIL_BillPosition_2_PatientTreatment();
                    p2t.AssignmentID                = Guid.NewGuid();
                    p2t.Tenant_RefID                = securityTicket.TenantID;
                    p2t.BIL_BillPosition_RefID      = billPosition.BIL_BillPositionID;
                    p2t.HEC_Patient_Treatment_RefID = treatment.HEC_Patient_TreatmentID;
                    p2t.Save(Connection, Transaction);

                    ORM_BIL_BillPosition_TransmitionStatus billPositionTransmitionStatus = new ORM_BIL_BillPosition_TransmitionStatus();
                    billPositionTransmitionStatus.BIL_BillPosition_TransmitionStatusID = Guid.NewGuid();
                    billPositionTransmitionStatus.BillPosition_RefID = billPosition.BIL_BillPositionID;
                    billPositionTransmitionStatus.TransmitionCode    = 2;
                    billPositionTransmitionStatus.PrimaryComment     = (String)HttpContext.GetGlobalResourceObject("Global", "TransferedToAOKStatus");
                    billPositionTransmitionStatus.IsActive           = true;
                    billPositionTransmitionStatus.Tenant_RefID       = securityTicket.TenantID;
                    billPositionTransmitionStatus.Creation_Timestamp = DateTime.Now;
                    billPositionTransmitionStatus.TransmittedOnDate  = DateTime.Now;
                    billPositionTransmitionStatus.Save(Connection, Transaction);

                    if (!treatment.IsTreatmentFollowup && item.aiRelevantArticle != null && !IsArticleAdded)
                    {
                        Guid articleID;
                        if (Guid.TryParse(item.aiRelevantArticle.strArticleID, out articleID))
                        {
                            IsArticleAdded = true;
                            ORM_BIL_BillPosition_2_Product billToProduct1 = new ORM_BIL_BillPosition_2_Product();
                            billToProduct1.Tenant_RefID           = securityTicket.TenantID;
                            billToProduct1.Creation_Timestamp     = DateTime.Now;
                            billToProduct1.AssignmentID           = Guid.NewGuid();
                            billToProduct1.BIL_BillPosition_RefID = billPosition.BIL_BillPositionID;
                            billToProduct1.CMN_PRO_Product_RefID  = articleID;
                            billToProduct1.Quantity = item.aiRelevantArticle.iQuantity.ToString();
                            billToProduct1.Save(Connection, Transaction);
                        }
                    }
                }
            }

            return(returnValue);

            #endregion UserCode
        }
示例#10
0
        protected static FR_CAS_SPE_1805 Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_SPE_1805 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_CAS_SPE_1805();
            returnValue.Result = new CAS_SPE_1805();
            //Put your code here
            var case_id = Parameter.case_id;

            #region DATA
            var patient_details = cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPDfPID_1124()
            {
                PatientID = Parameter.patient_id
            }, securityTicket).Result;
            if (patient_details == null)
            {
                throw new Exception("Patient details not found for ID: " + Parameter.patient_id);
            }

            var doctor = ORM_HEC_Doctor.Query.Search(Connection, Transaction, new ORM_HEC_Doctor.Query()
            {
                Tenant_RefID = securityTicket.TenantID, HEC_DoctorID = Parameter.doctor_id, IsDeleted = false
            }).SingleOrDefault();
            if (doctor == null)
            {
                throw new Exception("Doctor not found for ID: " + Parameter.doctor_id);
            }


            var doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
            {
                DoctorID = Parameter.doctor_id
            }, securityTicket).Result.FirstOrDefault();

            if (doctor_details == null)
            {
                throw new Exception("Doctor details not found for ID: " + Parameter.doctor_id);
            }

            var practice_details = cls_Get_Practice_Details_for_PracticeID.Invoke(Connection, Transaction, new P_DO_GPDfPID_1432()
            {
                PracticeID = doctor_details.practice_id
            }, securityTicket).Result.FirstOrDefault();
            if (practice_details == null)
            {
                throw new Exception("Practice details not found for ID: " + doctor_details.practice_id);
            }

            var shouldDownloadReportProperty = cls_Get_Practice_PropertyValue_for_PropertyName_and_PracticeID.Invoke(Connection, Transaction, new P_DO_GPPVfPNaPID_0916()
            {
                PracticeID = doctor_details.practice_id, PropertyName = "Download Report Upon Submission"
            }, securityTicket).Result;
            var shouldDownloadReport = shouldDownloadReportProperty == null ? false : shouldDownloadReportProperty.BooleanValue;

            ORM_USR_Account.Query trigger_accQ = new ORM_USR_Account.Query();
            trigger_accQ.Tenant_RefID  = securityTicket.TenantID;
            trigger_accQ.USR_AccountID = securityTicket.AccountID;
            trigger_accQ.IsDeleted     = false;

            ORM_USR_Account trigger_acc = ORM_USR_Account.Query.Search(Connection, Transaction, trigger_accQ).Single();

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

            var all_languagesL           = ORM_CMN_Language.Query.Search(Connection, Transaction, all_languagesQ).ToArray();
            var intraocular_procedure_id = Guid.Empty;
            #endregion

            if (!Parameter.isResubmit)
            {
                #region NEW CASE
                ORM_HEC_CAS_Case new_case = new ORM_HEC_CAS_Case();
                new_case.HEC_CAS_CaseID     = Guid.NewGuid();
                new_case.Creation_Timestamp = DateTime.Now;
                new_case.CreatedBy_BusinessParticipant_RefID = trigger_acc.BusinessParticipant_RefID;
                new_case.Patient_RefID          = Parameter.patient_id;
                new_case.Patient_FirstName      = patient_details.patient_first_name;
                new_case.Patient_LastName       = patient_details.patient_last_name;
                new_case.Patient_Gender         = patient_details.gender;
                new_case.Patient_BirthDate      = patient_details.birthday;
                new_case.CaseNumber             = cls_Get_Next_Case_Number.Invoke(Connection, Transaction, securityTicket).Result.case_number;
                new_case.Modification_Timestamp = DateTime.Now;

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

                new_case.Patient_Age  = age;
                new_case.Tenant_RefID = securityTicket.TenantID;

                new_case.Save(Connection, Transaction);
                case_id = new_case.HEC_CAS_CaseID;
                #endregion NEW CASE

                #region INITIAL PERFORMED ACTION
                var initial_performed_action_id = cls_Create_Initial_Performed_Action.Invoke(Connection, Transaction, new P_CAS_CIPA_1140()
                {
                    all_languagesL    = all_languagesL,
                    case_id           = new_case.HEC_CAS_CaseID,
                    created_by_bpt    = trigger_acc.BusinessParticipant_RefID,
                    patient_id        = Parameter.patient_id,
                    practice_id       = doctor_details.practice_id,
                    action_type_gpmid = "mm.docconect.doc.app.performed.action.preexamination"
                }, securityTicket).Result;
                #endregion INITIAL PERFORMED ACTION

                #region LOCALIZATION
                ORM_HEC_DIA_Diagnosis_Localization diagnosis_localization = new ORM_HEC_DIA_Diagnosis_Localization();
                diagnosis_localization.Modification_Timestamp = DateTime.Now;
                diagnosis_localization.Tenant_RefID           = securityTicket.TenantID;
                diagnosis_localization.LocalizationCode       = Parameter.localization;

                diagnosis_localization.Save(Connection, Transaction);

                ORM_HEC_ACT_PerformedAction_DiagnosisUpdate initial_performed_action_diagnose = new ORM_HEC_ACT_PerformedAction_DiagnosisUpdate();
                initial_performed_action_diagnose.HEC_ACT_PerformedAction_RefID = initial_performed_action_id;
                initial_performed_action_diagnose.Modification_Timestamp        = DateTime.Now;
                initial_performed_action_diagnose.Tenant_RefID = securityTicket.TenantID;

                initial_performed_action_diagnose.Save(Connection, Transaction);

                ORM_HEC_ACT_PerformedAction_DiagnosisUpdate_Localization initial_performed_action_diagnose_localization = new ORM_HEC_ACT_PerformedAction_DiagnosisUpdate_Localization();
                initial_performed_action_diagnose_localization.HEX_EXC_Action_DiagnosisUpdate_RefID = initial_performed_action_diagnose.HEC_ACT_PerformedAction_DiagnosisUpdateID;
                initial_performed_action_diagnose_localization.HEC_DIA_Diagnosis_Localization_RefID = diagnosis_localization.HEC_DIA_Diagnosis_LocalizationID;
                initial_performed_action_diagnose_localization.Modification_Timestamp = DateTime.Now;
                initial_performed_action_diagnose_localization.Tenant_RefID           = securityTicket.TenantID;
                initial_performed_action_diagnose_localization.IM_PotentialDiagnosisLocalization_Code = Parameter.localization;

                initial_performed_action_diagnose_localization.Save(Connection, Transaction);
                #endregion

                #region PLANNED ACTION
                var action_gpmid = "mm.docconect.doc.app.planned.action.preexamination";

                var planned_action_type = ORM_HEC_ACT_ActionType.Query.Search(Connection, Transaction, new ORM_HEC_ACT_ActionType.Query()
                {
                    GlobalPropertyMatchingID = action_gpmid,
                    Tenant_RefID             = securityTicket.TenantID,
                    IsDeleted = false
                }).SingleOrDefault();

                if (planned_action_type == null)
                {
                    planned_action_type = new ORM_HEC_ACT_ActionType();
                    planned_action_type.GlobalPropertyMatchingID = action_gpmid;
                    planned_action_type.Modification_Timestamp   = DateTime.Now;
                    planned_action_type.Tenant_RefID             = securityTicket.TenantID;

                    planned_action_type.Save(Connection, Transaction);
                }

                // circular reference to same performed action in order to be compatible with treatment planned actions,
                // so that it can be accessed in the same way
                var preexamination_planned_action = new ORM_HEC_ACT_PlannedAction();
                preexamination_planned_action.IfPlannedFollowup_PreviousAction_RefID = initial_performed_action_id;
                preexamination_planned_action.IsPerformed = true;
                preexamination_planned_action.IfPerformed_PerformedAction_RefID = initial_performed_action_id;
                preexamination_planned_action.MedicalPractice_RefID             = doctor_details.practice_id;
                preexamination_planned_action.Modification_Timestamp            = DateTime.Now;
                preexamination_planned_action.Patient_RefID   = Parameter.patient_id;
                preexamination_planned_action.PlannedFor_Date = Parameter.date;
                preexamination_planned_action.ToBePerformedBy_BusinessParticipant_RefID = doctor.BusinessParticipant_RefID;
                preexamination_planned_action.Tenant_RefID = securityTicket.TenantID;

                preexamination_planned_action.Save(Connection, Transaction);

                var action_to_type = new ORM_HEC_ACT_PlannedAction_2_ActionType();
                action_to_type.HEC_ACT_ActionType_RefID    = planned_action_type.HEC_ACT_ActionTypeID;
                action_to_type.HEC_ACT_PlannedAction_RefID = preexamination_planned_action.HEC_ACT_PlannedActionID;
                action_to_type.Modification_Timestamp      = DateTime.Now;
                action_to_type.Tenant_RefID = securityTicket.TenantID;

                action_to_type.Save(Connection, Transaction);
                #endregion

                #region GPOS
                var patient_consent = ORM_HEC_CRT_InsuranceToBrokerContract_ParticipatingPatient.Query.Search(Connection, Transaction, new ORM_HEC_CRT_InsuranceToBrokerContract_ParticipatingPatient.Query()
                {
                    Patient_RefID = Parameter.patient_id,
                    IsDeleted     = false,
                    Tenant_RefID  = securityTicket.TenantID
                }).Where(t =>
                {
                    var ctrParameter = cls_Get_Contract_Parameter_Value_for_InsuranceToBrokerContractID.Invoke(Connection, Transaction, new P_MD_GCPVfITBCID_1647()
                    {
                        ParameterName = "Duration of participation consent – Month",
                        InsuranceToBrokerContractID = t.InsuranceToBrokerContract_RefID
                    }, securityTicket).Result;

                    var validThrough = ctrParameter == null || ctrParameter.ConsentValidForMonths == double.MaxValue ? DateTime.MaxValue : t.ValidFrom.AddMonths(Convert.ToInt32(ctrParameter.ConsentValidForMonths));
                    return(t.ValidFrom <= Parameter.date && validThrough >= Parameter.date);
                }).OrderBy(t => t.ValidFrom).FirstOrDefault();

                if (patient_consent == null)
                {
                    throw new Exception("No patients consents found for selected date: " + Parameter.date.ToString("dd.MM.yyyy") + " and  patient id: " + Parameter.patient_id);
                }


                var gpos_gpmid = "mm.docconnect.gpos.catalog.voruntersuchung";
                var preexamination_gpos_catalog = ORM_HEC_BIL_PotentialCode_Catalog.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_Catalog.Query()
                {
                    Tenant_RefID             = securityTicket.TenantID,
                    IsDeleted                = false,
                    GlobalPropertyMatchingID = gpos_gpmid
                }).SingleOrDefault();

                if (preexamination_gpos_catalog == null)
                {
                    throw new Exception("Preexamination catalog not found.");
                }

                var gpos_connections_to_drugs = ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_HealthcareProduct.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).GroupBy(t => t.HEC_BIL_PotentialCode_RefID);

                var gpos_connections_to_diagnoses = ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode_2_PotentialDiagnosis.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).GroupBy(t => t.HEC_BIL_PotentialCode_RefID);

                var preexamination_gposes = ORM_HEC_BIL_PotentialCode.Query.Search(Connection, Transaction, new ORM_HEC_BIL_PotentialCode.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false,
                    PotentialCode_Catalog_RefID = preexamination_gpos_catalog.HEC_BIL_PotentialCode_CatalogID
                });

                var covered_gposes = ORM_HEC_CTR_InsuranceToBrokerContracts_CoveredPotentialBillCode.Query.Search(Connection, Transaction, new ORM_HEC_CTR_InsuranceToBrokerContracts_CoveredPotentialBillCode.Query()
                {
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false,
                    InsuranceToBrokerContract_RefID = patient_consent.InsuranceToBrokerContract_RefID
                });

                preexamination_gposes = preexamination_gposes.Where(t => covered_gposes.Any(c => c.PotentialBillCode_RefID == t.HEC_BIL_PotentialCodeID)).ToList();

                var bill_header = new ORM_BIL_BillHeader();
                bill_header.Modification_Timestamp = DateTime.Now;
                bill_header.Tenant_RefID           = securityTicket.TenantID;

                foreach (var gpos in preexamination_gposes)
                {
                    if (!gpos_connections_to_diagnoses.Any(t => t.Key == gpos.HEC_BIL_PotentialCodeID) && !gpos_connections_to_drugs.Any(t => t.Key == gpos.HEC_BIL_PotentialCodeID))
                    {
                        var price_value = ORM_CMN_Price_Value.Query.Search(Connection, Transaction, new ORM_CMN_Price_Value.Query()
                        {
                            Price_RefID = gpos.Price_RefID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID
                        }).SingleOrDefault();
                        if (price_value == null)
                        {
                            throw new Exception("Price value not found for GPOS: " + gpos.BillingCode);
                        }

                        ORM_BIL_BillPosition gpos_position = new ORM_BIL_BillPosition();
                        gpos_position.BIL_BilHeader_RefID        = bill_header.BIL_BillHeaderID;
                        gpos_position.Modification_Timestamp     = DateTime.Now;
                        gpos_position.Tenant_RefID               = securityTicket.TenantID;
                        gpos_position.PositionValue_IncludingTax = Convert.ToDecimal(price_value.PriceValue_Amount);
                        gpos_position.PositionNumber             = cls_Get_Next_Bill_Position_Number.Invoke(Connection, Transaction, securityTicket).Result.bill_position_number;

                        gpos_position.Save(Connection, Transaction);

                        ORM_BIL_BillPosition_TransmitionStatus fs_status = new ORM_BIL_BillPosition_TransmitionStatus();
                        fs_status.BillPosition_RefID     = gpos_position.BIL_BillPositionID;
                        fs_status.IsActive               = true;
                        fs_status.Modification_Timestamp = DateTime.Now;
                        fs_status.Tenant_RefID           = securityTicket.TenantID;
                        fs_status.TransmitionCode        = 1;
                        fs_status.TransmitionStatusKey   = "preexamination";
                        fs_status.TransmittedOnDate      = DateTime.Now;

                        fs_status.Save(Connection, Transaction);

                        ORM_HEC_BIL_BillPosition hec_gpos_position = new ORM_HEC_BIL_BillPosition();
                        hec_gpos_position.Ext_BIL_BillPosition_RefID = gpos_position.BIL_BillPositionID;
                        hec_gpos_position.Modification_Timestamp     = DateTime.Now;
                        hec_gpos_position.Tenant_RefID = securityTicket.TenantID;
                        hec_gpos_position.PositionFor_Patient_RefID = Parameter.patient_id;

                        hec_gpos_position.Save(Connection, Transaction);

                        ORM_HEC_BIL_BillPosition_BillCode hec_gpos_position_code = new ORM_HEC_BIL_BillPosition_BillCode();
                        hec_gpos_position_code.BillPosition_RefID     = hec_gpos_position.HEC_BIL_BillPositionID;
                        hec_gpos_position_code.IM_BillingCode         = gpos.BillingCode;
                        hec_gpos_position_code.Modification_Timestamp = DateTime.Now;
                        hec_gpos_position_code.PotentialCode_RefID    = gpos.HEC_BIL_PotentialCodeID;
                        hec_gpos_position_code.Tenant_RefID           = securityTicket.TenantID;

                        hec_gpos_position_code.Save(Connection, Transaction);

                        ORM_HEC_CAS_Case_BillCode hec_gpos_case_code = new ORM_HEC_CAS_Case_BillCode();
                        hec_gpos_case_code.HEC_BIL_BillPosition_BillCode_RefID = hec_gpos_position_code.HEC_BIL_BillPosition_BillCodeID;
                        hec_gpos_case_code.HEC_CAS_Case_RefID     = new_case.HEC_CAS_CaseID;
                        hec_gpos_case_code.Modification_Timestamp = DateTime.Now;
                        hec_gpos_case_code.Tenant_RefID           = securityTicket.TenantID;

                        hec_gpos_case_code.Save(Connection, Transaction);

                        ORM_BIL_BillPosition_PropertyValue gpos_management_fee_property_value = new ORM_BIL_BillPosition_PropertyValue();
                        gpos_management_fee_property_value.BIL_BillPosition_RefID           = gpos_position.BIL_BillPositionID;
                        gpos_management_fee_property_value.BIL_BillPosition_PropertyValueID = Guid.NewGuid();
                        gpos_management_fee_property_value.Creation_Timestamp     = DateTime.Now;
                        gpos_management_fee_property_value.Modification_Timestamp = DateTime.Now;
                        gpos_management_fee_property_value.PropertyKey            = "mm.doc.connect.management.fee";
                        gpos_management_fee_property_value.PropertyValue          = "waived";
                        gpos_management_fee_property_value.Tenant_RefID           = securityTicket.TenantID;

                        gpos_management_fee_property_value.Save(Connection, Transaction);

                        bill_header.TotalValue_IncludingTax += Convert.ToDecimal(price_value.PriceValue_Amount);
                    }
                }

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

            return(returnValue);

            #endregion UserCode
        }
示例#11
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_HOCT_1013 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here
            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 elastic_index = securityTicket.TenantID.ToString();

            var oct_performed_action_type_id = cls_Get_ActionTypeID.Invoke(Connection, Transaction, new P_CAS_GATID_1514()
            {
                action_type_gpmid = EActionType.PerformedOct.Value()
            }, securityTicket).Result;

            var oct_doctor = ORM_HEC_Doctor.Query.Search(Connection, Transaction, new ORM_HEC_Doctor.Query()
            {
                HEC_DoctorID = Parameter.oct_doctor_id, Tenant_RefID = securityTicket.TenantID, IsDeleted = false
            }).SingleOrDefault();
            var patient_practice_name = cls_Get_Patient_PracticeName_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPPNfPID_1131()
            {
                PatientID = Parameter.patient_id
            }, securityTicket).Result;

            var current_treatment_year_start_date = DateTime.MaxValue;

            if (oct_doctor != null)
            {
                current_treatment_year_start_date = cls_Get_TreatmentYear.Invoke(Connection, Transaction, new P_CAS_GTY_1125()
                {
                    Date             = Parameter.treatment_date,
                    LocalizationCode = Parameter.localization,
                    PatientID        = Parameter.patient_id,
                }, securityTicket).Result;
            }
            else
            {
                current_treatment_year_start_date = cls_Get_TreatmentYear.Invoke(Connection, Transaction, new P_CAS_GTY_1125()
                {
                    Date             = Parameter.treatment_date,
                    LocalizationCode = Parameter.localization,
                    PatientID        = Parameter.patient_id
                }, securityTicket).Result;
            }
            var treatment_year_length = cls_Get_TreatmentYearLength.Invoke(Connection, Transaction, new P_CAS_GTYL_1317()
            {
                Date      = Parameter.treatment_date,
                PatientID = Parameter.patient_id
            }, securityTicket).Result;

            var current_treatment_year_end_date = current_treatment_year_start_date.AddDays(treatment_year_length - 1);

            var oct_gpos_ids = cls_Get_GposIDs_for_GposType.Invoke(Connection, Transaction, new P_MD_GGpoIDsfGposT_1145()
            {
                GposType = EGposType.Oct.Value()
            }, securityTicket).Result;
            if (!oct_gpos_ids.Any())
            {
                return(returnValue);
            }

            var last_potential_consent = cls_Get_Patient_Consents_before_Date_and_GposIDs.Invoke(Connection, Transaction, new P_PA_GPCbDaGposIDs_1154()
            {
                Date      = Parameter.treatment_date.Date,
                GposIDs   = oct_gpos_ids.Select(t => t.GposID).ToArray(),
                PatientID = Parameter.patient_id
            }, securityTicket).Result.FirstOrDefault(t => t.consent_valid_from.Date <= Parameter.treatment_date.Date);

            var latest_oct_planned_actions = cls_Get_Latest_PlannedActionID_for_PatientID_ActionTypeID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GLPAIDfPIDATIDaLC_1545()
            {
                ActionTypeID     = oct_planned_action_type_id,
                LocalizationCode = Parameter.localization,
                PatientID        = Parameter.patient_id
            }, securityTicket).Result;

            if (last_potential_consent == null && Parameter.oct_doctor_id != Guid.Empty && latest_oct_planned_actions.Any(t => t.OpDate >= current_treatment_year_start_date.Date && t.OpDate < current_treatment_year_start_date.AddDays(treatment_year_length).Date))
            {
                var latest_oct_planned_action_id = latest_oct_planned_actions.FirstOrDefault(t => t.CaseID != Parameter.case_id && t.OpDate >= current_treatment_year_start_date.Date && t.OpDate < current_treatment_year_start_date.AddDays(treatment_year_length).Date);
                if (latest_oct_planned_action_id == null)
                {
                    latest_oct_planned_action_id = latest_oct_planned_actions.FirstOrDefault(t => t.CaseID == Parameter.case_id && t.OpDate >= current_treatment_year_start_date.Date && t.OpDate < current_treatment_year_start_date.AddDays(treatment_year_length).Date);
                }
                var latest_oct_planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                {
                    HEC_ACT_PlannedActionID = latest_oct_planned_action_id.PlannedActionID
                }).Single();
            }
            else
            {
                var case_properties = cls_Get_Case_Properties_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GCPfCID_1204()
                {
                    CaseID = Parameter.case_id
                }, securityTicket).Result;

                var oct_planned_action_id = cls_Get_Latest_PlannedActionID_for_CaseID_and_ActionTypeID.Invoke(Connection, Transaction, new P_CAS_GLPAIDfCIDaATID_1635()
                {
                    ActionTypeID = oct_planned_action_type_id,
                    CaseID       = Parameter.case_id
                }, securityTicket).Result;

                #region Case creation
                if (!Parameter.is_submit)
                {
                    var case_fs_statuses = cls_Get_Case_TransmitionCode_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GCTCfCID_1427()
                    {
                        CaseID = Parameter.case_id
                    }, securityTicket).Result;
                    var op_submitted = case_fs_statuses.Any(t => t.gpos_type == EGposType.Operation.Value());

                    var latest_oct_planned_action_id = cls_Get_Latest_PlannedActionID_for_PatientID_ActionTypeID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GLPAIDfPIDATIDaLC_1545()
                    {
                        ActionTypeID     = oct_planned_action_type_id,
                        LocalizationCode = Parameter.localization,
                        PatientID        = Parameter.patient_id
                    }, securityTicket).Result.FirstOrDefault(t => t.CaseID != Parameter.case_id && t.OpDate >= current_treatment_year_start_date.Date && t.OpDate < current_treatment_year_start_date.AddDays(treatment_year_length).Date);

                    var properties_to_delete = case_properties.Where(t => t.property_gpmid == ECaseProperty.WithdrawOct.Value() || t.property_gpmid == ECaseProperty.SubmitOctUntilDate.Value());
                    if (Parameter.withdraw_oct && latest_oct_planned_action_id != null)
                    {
                        var latest_oct_planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                        {
                            HEC_ACT_PlannedActionID = latest_oct_planned_action_id.PlannedActionID
                        }).Single();

                        if (Parameter.submit_oct_until_date != DateTime.MinValue)
                        {
                            cls_Save_Case_Property.Invoke(Connection, Transaction, new P_CAS_SCP_1308()
                            {
                                case_id               = Parameter.case_id,
                                property_gpm_id       = ECaseProperty.SubmitOctUntilDate.Value(),
                                property_name         = "Submit OCT until date",
                                property_string_value = String.Format("{0};{1};{2};{3}", Parameter.submit_oct_until_date.ToString("yyyy-MM-ddTHH:mm:ss"), latest_oct_planned_action.ToBePerformedBy_BusinessParticipant_RefID, Parameter.localization, latest_oct_planned_action.HEC_ACT_PlannedActionID)
                            }, securityTicket);

                            properties_to_delete = properties_to_delete.Where(t => t.property_gpmid == ECaseProperty.WithdrawOct.Value()).ToList();
                        }
                        else if (Parameter.withdraw_oct)
                        {
                            cls_Save_Case_Property.Invoke(Connection, Transaction, new P_CAS_SCP_1308()
                            {
                                case_id               = Parameter.case_id,
                                property_name         = "Withdraw OCT",
                                property_gpm_id       = ECaseProperty.WithdrawOct.Value(),
                                property_string_value = String.Format("{0}", latest_oct_planned_action.ToBePerformedBy_BusinessParticipant_RefID.ToString())
                            }, securityTicket);

                            properties_to_delete = properties_to_delete.Where(t => t.property_gpmid == ECaseProperty.SubmitOctUntilDate.Value()).ToList();
                        }
                    }

                    foreach (var prop in properties_to_delete)
                    {
                        ORM_HEC_CAS_Case_UniversalPropertyValue.Query.SoftDelete(Connection, Transaction, new ORM_HEC_CAS_Case_UniversalPropertyValue.Query()
                        {
                            HEC_CAS_Case_UniversalPropertyValueID = prop.id
                        });
                    }

                    if (!op_submitted || Parameter.is_documentation)
                    {
                        if (oct_planned_action_id != null)
                        {
                            var latest_oct_planned_action = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                            {
                                HEC_ACT_PlannedActionID = oct_planned_action_id.PlannedActionID
                            }).Single();

                            if (Parameter.oct_doctor_id == Guid.Empty)
                            {
                                latest_oct_planned_action.IsDeleted = true;
                            }
                            else
                            {
                                latest_oct_planned_action.ToBePerformedBy_BusinessParticipant_RefID = oct_doctor.BusinessParticipant_RefID;
                            }

                            latest_oct_planned_action.Modification_Timestamp = DateTime.Now;
                            latest_oct_planned_action.Save(Connection, Transaction);

                            returnValue.Result = latest_oct_planned_action.HEC_ACT_PlannedActionID;

                            #region localization changed
                            if (Parameter.localization_changed)
                            {
                                var old_localization = Parameter.localization == "L" ? "R" : "L";

                                var latest_new_localization_oct_bill_position = cls_Get_Existing_OCT_BillPosition_for_PatientID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GEBPfPIDaLC_1803()
                                {
                                    LocalizationCode = Parameter.localization,
                                    PatientID        = Parameter.patient_id
                                }, securityTicket).Result;

                                var latest_old_localization_op = cls_Get_OpDates_for_PatientID_and_LocalizationCode_in_TreatmentYear.Invoke(Connection, Transaction, new P_CAS_GOpDfPIDaLCiTY_1110()
                                {
                                    LocalizationCode     = old_localization,
                                    PatientID            = Parameter.patient_id,
                                    TreatmentYearEndDate = DateTime.Now
                                }, securityTicket).Result.FirstOrDefault();

                                if (latest_new_localization_oct_bill_position != null && latest_new_localization_oct_bill_position.CaseID == Parameter.case_id)
                                {
                                    if (latest_old_localization_op == null)
                                    {
                                        // check if case has pending oct
                                        var case_has_pending_oct = cls_Get_CaseIDs_with_Pending_Octs_for_PatientID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GCIDswPOctsfPIDaLC_1103()
                                        {
                                            LocalizationCode = Parameter.localization,
                                            PatientID        = Parameter.patient_id
                                        }, securityTicket).Result.Any(t => t.case_id == Parameter.case_id);

                                        if (case_has_pending_oct)
                                        {
                                            throw new Exception(String.Format("Case has a pending OCT attached and there isn't another IVOM to transfer OCT to. Localization cannot be changed. Case id: {0}", Parameter.case_id));
                                        }
                                    }
                                    else
                                    {
                                        var case_details = cls_Get_Case_Details_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GCDfCID_1435()
                                        {
                                            CaseID = latest_old_localization_op.CaseID
                                        }, securityTicket).Result;

                                        cls_Calculate_Case_GPOS.Invoke(Connection, Transaction, new P_CAS_CCGPOS_1000()
                                        {
                                            case_id        = latest_old_localization_op.CaseID,
                                            diagnose_id    = case_details.diagnose_id,
                                            drug_id        = case_details.drug_id,
                                            patient_id     = case_details.patient_id,
                                            localization   = case_details.localization,
                                            treatment_date = case_details.treatment_date,
                                            oct_doctor_id  = Parameter.oct_doctor_id
                                        }, securityTicket);
                                    }
                                }

                                var new_localization_oct_bill_position = cls_Get_Existing_OCT_BillPosition_for_PatientID_and_LocalizationCode_where_not_CaseID.Invoke(Connection, Transaction, new P_CAS_GEBPfPIDaLCwnCID_1438()
                                {
                                    CaseID           = Parameter.case_id,
                                    PatientID        = Parameter.patient_id,
                                    LocalizationCode = Parameter.localization
                                }, securityTicket).Result;

                                if (new_localization_oct_bill_position != null)
                                {
                                    cls_Delete_BillingData_for_BillPositionID.Invoke(Connection, Transaction, new P_CAS_DBDfHBPID_1549()
                                    {
                                        bill_position_id = new_localization_oct_bill_position.BillPositionID
                                    }, securityTicket);
                                }
                            }
                            #endregion
                        }
                        else if (Parameter.oct_doctor_id != Guid.Empty)
                        {
                            var existing_rejection_properties = cls_Get_Localizations_where_Oct_Rejected.Invoke(Connection, Transaction, new P_CAS_GLwOctR_1026()
                            {
                                PatientID             = Parameter.patient_id,
                                RejectedOctPropertyID = ECaseProperty.HasRejectedOct.Value()
                            }, securityTicket).Result;

                            foreach (var existing_rejection_property in existing_rejection_properties.Where(t => t.localization == Parameter.localization))
                            {
                                ORM_HEC_CAS_Case_UniversalPropertyValue.Query.SoftDelete(Connection, Transaction, new ORM_HEC_CAS_Case_UniversalPropertyValue.Query()
                                {
                                    HEC_CAS_Case_UniversalPropertyValueID = existing_rejection_property.property_id,
                                    Tenant_RefID = securityTicket.TenantID,
                                    IsDeleted    = false
                                });
                            }

                            returnValue = cls_Create_OCT.Invoke(Connection, Transaction, new P_CAS_COCT_1703()
                            {
                                case_id            = Parameter.case_id,
                                oct_action_type_id = oct_planned_action_type_id,
                                oct_bpt_id         = oct_doctor.BusinessParticipant_RefID,
                                patient_id         = Parameter.patient_id,
                                treatment_date     = Parameter.treatment_date,
                                practice_id        = Parameter.oct_doctor_practice_id
                            }, securityTicket);

                            var existingBillPosition = cls_Get_Existing_OCT_BillPosition_for_PatientID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GEBPfPIDaLC_1803()
                            {
                                LocalizationCode = Parameter.localization,
                                PatientID        = Parameter.patient_id
                            }, securityTicket).Result;

                            if (existingBillPosition == null)
                            {
                                cls_Calculate_Case_GPOS.Invoke(Connection, Transaction, new P_CAS_CCGPOS_1000()
                                {
                                    case_id        = Parameter.case_id,
                                    diagnose_id    = Parameter.diagnose_id,
                                    drug_id        = Parameter.drug_id,
                                    patient_id     = Parameter.patient_id,
                                    localization   = Parameter.localization,
                                    treatment_date = Parameter.treatment_date,
                                    oct_doctor_id  = Parameter.oct_doctor_id
                                }, securityTicket);
                            }
                            else
                            {
                                cls_Delete_BillingData_for_BillPositionID.Invoke(Connection, Transaction, new P_CAS_DBDfHBPID_1549()
                                {
                                    bill_position_id = existingBillPosition.BillPositionID
                                }, securityTicket);

                                var isAutoGenerated = cls_Get_CasePropertyValue_for_CaseIDs_and_CasePropertyGpmID.Invoke(Connection, Transaction, new P_CAS_GCPVfCIDsaCGpmID_0832()
                                {
                                    CaseIDs        = new Guid[] { existingBillPosition.CaseID },
                                    IncludeDeleted = true,
                                    PropertyGpmID  = ECaseProperty.MissingIvom.Value()
                                }, securityTicket).Result.Any();

                                var octIds = new List <Guid>();
                                if (isAutoGenerated)
                                {
                                    var caseBillCodeIds = cls_Get_CaseBillCodeIDs_for_GposType_and_CaseID.Invoke(Connection, Transaction, new P_CAS_GCBCIDsfGposTaCID_1622()
                                    {
                                        CaseID      = existingBillPosition.CaseID,
                                        OctGposType = EGposType.Oct.Value()
                                    }, securityTicket).Result;

                                    foreach (var caseBillCodeId in caseBillCodeIds)
                                    {
                                        var caseBillCode = new ORM_HEC_CAS_Case_BillCode();
                                        caseBillCode.Load(Connection, Transaction, caseBillCodeId.HEC_CAS_Case_BillCodeID);

                                        caseBillCode.HEC_CAS_Case_RefID     = Parameter.case_id;
                                        caseBillCode.Modification_Timestamp = DateTime.Now;

                                        caseBillCode.Save(Connection, Transaction);
                                    }

                                    var relevantActions = ORM_HEC_CAS_Case_RelevantPlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_CAS_Case_RelevantPlannedAction.Query()
                                    {
                                        Case_RefID   = existingBillPosition.CaseID,
                                        Tenant_RefID = securityTicket.TenantID,
                                        IsDeleted    = false
                                    });

                                    foreach (var relevantAction in relevantActions)
                                    {
                                        relevantAction.Case_RefID             = Parameter.case_id;
                                        relevantAction.Modification_Timestamp = DateTime.Now;

                                        relevantAction.Save(Connection, Transaction);

                                        octIds.Add(relevantAction.PlannedAction_RefID);
                                    }
                                }

                                cls_Calculate_Case_GPOS.Invoke(Connection, Transaction, new P_CAS_CCGPOS_1000()
                                {
                                    case_id        = Parameter.case_id,
                                    diagnose_id    = Parameter.diagnose_id,
                                    drug_id        = Parameter.drug_id,
                                    patient_id     = Parameter.patient_id,
                                    localization   = Parameter.localization,
                                    treatment_date = Parameter.treatment_date,
                                    oct_doctor_id  = Parameter.oct_doctor_id
                                }, securityTicket);
                            }
                        }
                    }
                    else if (Parameter.localization_changed)
                    {
                        var old_localization = Parameter.localization == "L" ? "R" : "L";

                        #region OCT e-mail
                        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     = Parameter.patient_id,
                            TreatmentDate = Parameter.treatment_date.Date
                        }, securityTicket).Result;

                        var performedOcts = cls_Get_NonCancelledOcts_in_OpRenewedConsentTimespan.Invoke(Connection, Transaction, new P_CAS_GNCOctsiOPRCT_1416()
                        {
                            PatientID = Parameter.patient_id,
                            PlannedOctActionTypeID = oct_planned_action_type_id,
                            ConsentStart           = Parameter.treatment_date.Date,
                            ConsentEnd             = Parameter.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.Where(t => t.localization == old_localization).ToList();

                        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();

                            var patient_information = cls_Get_Patient_Details_for_PatientID.Invoke(Connection, Transaction, new P_P_PA_GPDfPID_1124()
                            {
                                PatientID = Parameter.patient_id
                            }, securityTicket).Result;
                            var treatment_doctor_details = cls_Get_Doctor_Details_for_DoctorID.Invoke(Connection, Transaction, new P_DO_GDDfDID_0823()
                            {
                                DoctorID = Parameter.treatment_doctor_id
                            }, securityTicket).Result.First();

                            email_template = EmailTemplater.SetTemplateData(email_template, new
                            {
                                patient_first_name          = patient_information.patient_first_name,
                                patient_last_name           = patient_information.patient_last_name,
                                treatment_date              = Parameter.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,
                                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 case from settlement: Email sending failed."), "EmailExceptions");
                            }
                        }
                        #endregion

                        #region OCT withdrawal
                        var existing_open_bill_position = cls_Get_Existing_OCT_BillPosition_for_CaseID.Invoke(Connection, Transaction, new P_CAS_GEBPfCID_1522()
                        {
                            CaseID = Parameter.case_id
                        }, securityTicket).Result;

                        if (existing_open_bill_position != null)
                        {
                            var non_performed_oct = cls_Get_NonPerformed_Oct_for_CaseID_and_PlannedActionTypeID.Invoke(Connection, Transaction, new P_CAS_GNPOctfCIDaPATID_1240()
                            {
                                CaseID = Parameter.case_id,
                                OctPlannedActionTypeID = oct_planned_action_type_id
                            }, securityTicket).Result;

                            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);

                            var new_id = cls_Create_OCT.Invoke(Connection, Transaction, new P_CAS_COCT_1703()
                            {
                                case_id            = Parameter.case_id,
                                oct_action_type_id = oct_planned_action_type_id,
                                oct_bpt_id         = oct_doctor.BusinessParticipant_RefID,
                                patient_id         = Parameter.patient_id,
                                practice_id        = Parameter.oct_doctor_practice_id,
                                treatment_date     = Parameter.treatment_date
                            }, securityTicket).Result;
                        }
                        #endregion
                    }
                }
                #endregion

                #region Case submission
                else
                {
                    var existingBillPosition = cls_Get_Existing_OCT_BillPosition_for_PatientID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GEBPfPIDaLC_1803()
                    {
                        LocalizationCode = Parameter.localization,
                        PatientID        = Parameter.patient_id
                    }, securityTicket).Result;

                    if (existingBillPosition != null)
                    {
                        var oct_planned_actions = cls_Get_Latest_PlannedActionID_for_PatientID_ActionTypeID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GLPAIDfPIDATIDaLC_1545()
                        {
                            ActionTypeID     = oct_planned_action_type_id,
                            PatientID        = Parameter.patient_id,
                            LocalizationCode = Parameter.localization
                        }, securityTicket).Result;
                        var oct = new Oct_Model();

                        #region Magic
                        // don't ask
                        var i = 0;
                        do
                        {
                            var oct_planned_action = oct_planned_actions[i++];
                            oct = Retrieve_Octs.GetOctForID(oct_planned_action.PlannedActionID.ToString(), elastic_index);
                            returnValue.Result = oct_planned_action.PlannedActionID;
                        } while (i < oct_planned_actions.Length && oct == null);
                        #endregion

                        if (oct != null)
                        {
                            if (case_properties.Any(t => t.property_gpmid == ECaseProperty.WithdrawOct.Value() || t.property_gpmid == ECaseProperty.SubmitOctUntilDate.Value()))
                            {
                                var withdraw_oct_property = case_properties.SingleOrDefault(t => t.property_gpmid == ECaseProperty.WithdrawOct.Value());
                                if (withdraw_oct_property != null)
                                {
                                    var doctor_whose_oct_is_withdrawn_bpt_id = Guid.Parse(withdraw_oct_property.string_value);
                                    var planned_oct_to_withdraw = oct_planned_actions.First(t => t.CaseID != Parameter.case_id && t.DoctorBptID == doctor_whose_oct_is_withdrawn_bpt_id);
                                    var planned_oct_action      = new ORM_HEC_ACT_PlannedAction();
                                    planned_oct_action.Load(Connection, Transaction, planned_oct_to_withdraw.PlannedActionID);
                                    planned_oct_action.IsCancelled            = true;
                                    planned_oct_action.Modification_Timestamp = DateTime.Now;

                                    planned_oct_action.Save(Connection, Transaction);
                                }
                            }
                            else
                            {
                                var oct_doctor_bpt_id = ORM_HEC_Doctor.Query.Search(Connection, Transaction, new ORM_HEC_Doctor.Query()
                                {
                                    HEC_DoctorID = Parameter.oct_doctor_id
                                }).Single().BusinessParticipant_RefID;
                                var oct_planned = ORM_HEC_ACT_PlannedAction.Query.Search(Connection, Transaction, new ORM_HEC_ACT_PlannedAction.Query()
                                {
                                    HEC_ACT_PlannedActionID = returnValue.Result
                                }).Single();
                                oct_planned.ToBePerformedBy_BusinessParticipant_RefID = oct_doctor_bpt_id;
                                oct_planned.Modification_Timestamp = DateTime.Now;

                                oct_planned.Save(Connection, Transaction);

                                if (oct.status == "OCT6")
                                {
                                    var case_with_pending_oct = cls_Get_CaseIDs_with_Pending_Octs_for_PatientID_and_LocalizationCode.Invoke(Connection, Transaction, new P_CAS_GCIDswPOctsfPIDaLC_1103()
                                    {
                                        LocalizationCode = Parameter.localization,
                                        PatientID        = Parameter.patient_id
                                    }, securityTicket).Result.SingleOrDefault();

                                    if (case_with_pending_oct != null)
                                    {
                                        var fs_status = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, new ORM_BIL_BillPosition_TransmitionStatus.Query()
                                        {
                                            BIL_BillPosition_TransmitionStatusID = case_with_pending_oct.fs_status_id
                                        }).Single();
                                        fs_status.IsActive = false;
                                        fs_status.Modification_Timestamp = DateTime.Now;

                                        fs_status.Save(Connection, Transaction);

                                        var new_fs_status = new ORM_BIL_BillPosition_TransmitionStatus();
                                        new_fs_status.IsActive = true;
                                        new_fs_status.IsTransmitionStatusManuallySet = false;
                                        new_fs_status.BillPosition_RefID             = fs_status.BillPosition_RefID;
                                        new_fs_status.Modification_Timestamp         = DateTime.Now;
                                        new_fs_status.Tenant_RefID         = securityTicket.TenantID;
                                        new_fs_status.TransmissionDataXML  = fs_status.TransmissionDataXML;
                                        new_fs_status.TransmitionCode      = 1;
                                        new_fs_status.TransmitionStatusKey = "oct";
                                        new_fs_status.TransmittedOnDate    = DateTime.Now;

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

            return(returnValue);

            #endregion UserCode
        }
示例#12
0
        protected static FR_CAS_CCS_1516 Execute(DbConnection Connection, DbTransaction Transaction, P_CAS_CCS_1516 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode

            #region Thread cultrue
            Thread.CurrentThread.CurrentCulture   = CultureInfo.GetCultureInfo("de-DE");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
            var germanCulture = new CultureInfo("de-de");
            #endregion

            #region Local variables
            var returnValue = new FR_CAS_CCS_1516();
            returnValue.Result = new CAS_CCS_1516();
            var settlements         = new List <Settlement_Model>();
            var patientDetailList   = new List <PatientDetailViewModel>();
            var cases_to_submit     = new List <Submitted_Case_Model>();
            var documents           = new List <Documents>();
            var statusChangedOnDate = Parameter.StatusChangedOnDate == DateTime.MinValue ? DateTime.Now : Parameter.StatusChangedOnDate;

            var DateForElastic = DateTime.Now;

            var cases = cls_Generate_Report.Invoke(Connection, Transaction, new P_CAS_GR_1608()
            {
                statuses         = Parameter.StatusFrom == 2 ? new int[] { 2, 11 } : Parameter.StatusFrom == 4 ? new int[] { 4, 8, 10 } : new int[] { Convert.ToInt32(Parameter.StatusFrom) },
                position_numbers = Parameter.PositionNumbers,
                updateCasesSubmittedBeforeDate = Parameter.UpdatedCasesSubmittedBeforeDate
            }, securityTicket).Result.cases;

            var earliestFsStatusDate = DateTime.MinValue;
            var latestFsStatusDate   = DateTime.MinValue;

            #endregion

            #region Pre-fetched data

            // todo: write queries for ids!
            var activeFsStatuses = ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, new ORM_BIL_BillPosition_TransmitionStatus.Query()
            {
                IsDeleted       = false,
                IsActive        = true,
                Tenant_RefID    = securityTicket.TenantID,
                TransmitionCode = Convert.ToInt32(Parameter.StatusFrom)
            }).ToDictionary(t => t.BIL_BillPosition_TransmitionStatusID, t => t);

            var casesToUpdate = ORM_HEC_CAS_Case.Query.Search(Connection, Transaction, new ORM_HEC_CAS_Case.Query()
            {
                IsDeleted    = false,
                Tenant_RefID = securityTicket.TenantID
            }).ToDictionary(t => t.HEC_CAS_CaseID, t => t);
            #endregion

            foreach (var reportCase in cases)
            {
                if (Parameter.StatusTo == 7 && (reportCase.CurrentFsStatusCode == 8 || reportCase.CurrentFsStatusCode == 11 || reportCase.CurrentFsStatusCode == 17))
                {
                    continue;
                }

                #region Patient age calculation
                DateTime today      = DateTime.Today;
                int      patientAge = today.Year - reportCase.PatientBirthday.Year;
                if (reportCase.PatientBirthday > today.AddYears(-patientAge))
                {
                    patientAge--;
                }
                #endregion

                #region FS status update
                var caseActiveFsStatus = activeFsStatuses.ContainsKey(reportCase.TransmitionStatusID) ? activeFsStatuses[reportCase.TransmitionStatusID] : ORM_BIL_BillPosition_TransmitionStatus.Query.Search(Connection, Transaction, new ORM_BIL_BillPosition_TransmitionStatus.Query()
                {
                    BIL_BillPosition_TransmitionStatusID = reportCase.TransmitionStatusID,
                    Tenant_RefID = securityTicket.TenantID,
                    IsDeleted    = false
                }).Single();

                var responseFromHip = "";
                if (Parameter.StatusTo == 5)
                {
                    var edifact        = new EDIFACT();
                    var edifactMessage = Parameter.EdifactMessage;
                    var parser         = new Parser(ref edifactMessage);
                    EDIMessage.segmentArray = parser.GetSegments();
                    var parsedEdifact = EDIMessage.SegmentsToParsedEdifact();
                    var message       = parsedEdifact.transmitionMessages.Single(t => Int32.Parse(t.Rgi.Segment5.Value.Split('K').Last()) == reportCase.InvoiceNumberForTheHIP);
                    responseFromHip = String.Join("; ", message.Fhl.Select(t => t.Segment4.Value));
                }

                if (!Parameter.AreCasesPaymentAndStatus)
                {
                    if (caseActiveFsStatus.TransmittedOnDate.Date > latestFsStatusDate)
                    {
                        latestFsStatusDate = caseActiveFsStatus.TransmittedOnDate;
                    }

                    if (earliestFsStatusDate < caseActiveFsStatus.TransmittedOnDate.Date)
                    {
                        earliestFsStatusDate = caseActiveFsStatus.TransmittedOnDate;
                    }

                    caseActiveFsStatus.Modification_Timestamp = DateTime.Now;
                    caseActiveFsStatus.IsActive = false;

                    caseActiveFsStatus.Save(Connection, Transaction);

                    var NewStatusForCase = new ORM_BIL_BillPosition_TransmitionStatus();
                    NewStatusForCase.Modification_Timestamp = DateTime.Now;
                    NewStatusForCase.Tenant_RefID           = securityTicket.TenantID;
                    NewStatusForCase.BillPosition_RefID     = caseActiveFsStatus.BillPosition_RefID;
                    NewStatusForCase.TransmitionStatusKey   = caseActiveFsStatus.TransmitionStatusKey;
                    NewStatusForCase.TransmittedOnDate      = statusChangedOnDate;
                    NewStatusForCase.PrimaryComment         = responseFromHip;
                    NewStatusForCase.TransmitionCode        = Convert.ToInt32(Parameter.StatusTo);
                    NewStatusForCase.TransmissionDataXML    = cls_Create_XML_for_Immutable_Fields.Invoke(Connection, Transaction, new P_CAS_CXFIF_0830()
                    {
                        DiagnosisCatalogCode             = reportCase.DiagnoseCode,
                        DiagnosisCatalogName             = "ICD-10",
                        IFPerformedMedicalPracticeName   = reportCase.PracticeName,
                        IFPerformedResponsibleBPFullName = reportCase.DocName,
                        Localization     = reportCase.Localization,
                        PatientBirthDate = reportCase.PatientBirthday.ToString("dd.MM.yyyy"),
                        PatientFirstName = reportCase.PatientFirstName,
                        PatientGender    = reportCase.PatientGender.ToString(),
                        PatientAge       = patientAge.ToString()
                    }, securityTicket).Result.XmlFileString;

                    if (caseActiveFsStatus.TransmitionCode == 11)
                    {
                        var cancellingStatus = new ORM_BIL_BillPosition_TransmitionStatus();
                        cancellingStatus.TransmitionCode        = 8;
                        cancellingStatus.BillPosition_RefID     = caseActiveFsStatus.BillPosition_RefID;
                        cancellingStatus.IsActive               = true;
                        cancellingStatus.Modification_Timestamp = DateTime.Now;
                        cancellingStatus.Tenant_RefID           = securityTicket.TenantID;
                        cancellingStatus.TransmittedOnDate      = statusChangedOnDate;
                        cancellingStatus.TransmitionStatusKey   = caseActiveFsStatus.TransmitionStatusKey;
                        cancellingStatus.TransmissionDataXML    = NewStatusForCase.TransmissionDataXML;

                        cancellingStatus.Save(Connection, Transaction);
                    }
                    else
                    {
                        NewStatusForCase.IsActive = true;
                    }

                    NewStatusForCase.Save(Connection, Transaction);


                    #region Elastic updates
                    var elasticId = reportCase.UniqueID.ToString();
                    try
                    {
                        var submitted_case_model_elastic = Get_Submitted_Cases.GetSubmittedCaseforSubmittedCaseID(elasticId, securityTicket);
                        var settlement     = Get_Settlement.GetSettlementForID(elasticId, securityTicket);
                        var patient_detail = Retrieve_Patients.Get_PatientDetaiForID(elasticId, securityTicket);

                        var newStatus = "";
                        if (caseActiveFsStatus.TransmitionCode == 11)
                        {
                            newStatus = "FS8";
                        }
                        else
                        {
                            newStatus = "FS" + Parameter.StatusTo;
                        }

                        submitted_case_model_elastic.status             = newStatus;
                        submitted_case_model_elastic.status_date        = statusChangedOnDate;
                        submitted_case_model_elastic.status_date_string = statusChangedOnDate.ToString("dd.MM.yyyy");
                        settlement.status      = newStatus;
                        settlement.status_date = statusChangedOnDate;
                        patient_detail.status  = newStatus;

                        cases_to_submit.Add(submitted_case_model_elastic);
                        settlements.Add(settlement);
                        patientDetailList.Add(patient_detail);
                    }
                    catch
                    {
                    }
                    #endregion
                }
                #endregion

                #region Immutable fields update
                var caseToUpdate = casesToUpdate[reportCase.CaseID];
                caseToUpdate.Modification_Timestamp = DateTime.Now;
                caseToUpdate.Patient_BirthDate      = reportCase.PatientBirthday;
                caseToUpdate.Patient_FirstName      = reportCase.PatientFirstName;
                caseToUpdate.Patient_LastName       = reportCase.PatientLastName;
                caseToUpdate.Patient_Gender         = reportCase.PatientGender;
                caseToUpdate.Patient_Age            = patientAge;

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

            if (cases.Any())
            {
                #region Edifact generation
                if (Parameter.StatusTo == 2)
                {
                    var contracts  = cases.GroupBy(i => i.ContractID).ToDictionary(t => t.Key, t => t.ToList());
                    var isTestData = false;
                    try
                    {
                        isTestData = bool.Parse(WebConfigurationManager.AppSettings["edifact-generate-test-data"]);
                    }
                    catch { }

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

                    foreach (var contract in contracts)
                    {
                        var contractID         = contract.Key;
                        var contractParameters = ORM_CMN_CTR_Contract_Parameter.Query.Search(Connection, Transaction, new ORM_CMN_CTR_Contract_Parameter.Query()
                        {
                            Contract_RefID = contractID,
                            Tenant_RefID   = securityTicket.TenantID,
                            IsDeleted      = false
                        });

                        var contractCharacteristicIDParameter = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.CharacteristicID.Value());
                        var edifactType                = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.EdifactType.Value());
                        var encryptEdifactParameter    = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.EncryptEdifact.Value());
                        var nextEdifactNumberParameter = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.NextEdifactNumber.Value());

                        var contractType      = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.ContractType.Value());
                        var messageType       = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.MessageType.Value());
                        var mergeForAllHips   = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.MergeForAllHips.Value());
                        var useKForCorrection = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.UseKForCorrection.Value());
                        var IKNumber          = contractParameters.SingleOrDefault(t => t.ParameterName == EContractParameter.IKNumber.Value());

                        var IKNumberValue = IKNumber != null ? IKNumber.IfStringValue_Value : contract.Value.First() != null?contract.Value.First().HIP_IK : "";

                        var mergeForAllHipsValue   = mergeForAllHips != null ? mergeForAllHips.IfBooleanValue_Value : false;
                        var useKForVorrectionValue = useKForCorrection != null ? useKForCorrection.IfBooleanValue_Value : true;
                        var contactTypeValue       = contractType != null ? contractType.IfStringValue_Value : "7";

                        var hipNameForMergedEdifact = mergeForAllHipsValue ? cls_Get_HIP_Name_for_HIP_IK_Number.Invoke(Connection, Transaction, new P_CAS_GHIPIKfHIPIKN_1207
                        {
                            HIPIKNumber = IKNumberValue
                        }, securityTicket).Result.Name : "";

                        var encryptEdifact = false;
                        if (encryptEdifactParameter != null)
                        {
                            encryptEdifact = encryptEdifactParameter.IfBooleanValue_Value;
                        }

                        var contractCharacteristicID = "000000";
                        if (contractCharacteristicIDParameter != null)
                        {
                            contractCharacteristicID = contractCharacteristicIDParameter.IfStringValue_Value;
                        }


                        var controldocumentExcel = cls_Get_Number_of_Edifacts.Invoke(Connection, Transaction, new P_ARCH_GNoE_0910 {
                            ContractID = contractID.ToString()
                        }, securityTicket).Result;

                        uint controlReference = 1;
                        if (controldocumentExcel != null && (uint)controldocumentExcel.numberOfEdifacts > 0 &&
                            nextEdifactNumberParameter != null && nextEdifactNumberParameter.IfNumericValue_Value > 0)
                        {
                            controlReference = nextEdifactNumberParameter != null?Convert.ToUInt32(nextEdifactNumberParameter.IfNumericValue_Value) : 1;
                        }

                        var casesINContract = contract.Value;
                        var hips            = mergeForAllHipsValue ? new Dictionary <string, List <CaseForReportModel> >()
                        {
                            { "", casesINContract }
                        } : casesINContract.GroupBy(i => i.HIP_IK).ToDictionary(t => t.Key, t => t.ToList());
                        foreach (var hip in hips)
                        {
                            var casesWithHIP_IK  = hip.Value;
                            var baseHipData      = casesWithHIP_IK.First();
                            var mmIkNumber       = Resources.InterchangeSenderID;
                            var minTreatmentDate = baseHipData.TreatmentDay;
                            var maxTreatmentDate = baseHipData.TreatmentDay;
                            var ikNumberForHIP   = mergeForAllHipsValue ? IKNumberValue : baseHipData.HIP_IK;

                            var edi = new EDIFACT();
                            edi.mmIkNumber  = mmIkNumber;
                            edi.hipIkNumber = ikNumberForHIP;

                            foreach (var _case in casesWithHIP_IK)
                            {
                                if (_case.TreatmentDay != DateTime.MinValue && _case.TreatmentDay < minTreatmentDate)
                                {
                                    minTreatmentDate = _case.TreatmentDay;
                                }

                                if (_case.TreatmentDay != DateTime.MaxValue && _case.TreatmentDay > maxTreatmentDate)
                                {
                                    maxTreatmentDate = _case.TreatmentDay;
                                }
                            }

                            edi.Una = "UNA:+,? '\n";
                            var edifactVersion = 3;
                            if (edifactType != null && edifactType.IfStringValue_Value == "4")
                            {
                                edifactVersion = 4;
                            }
                            edi.FileName = String.Format("{0}DRC0{1}", isTestData ? "T" : "E", controlReference.ToString("D3"));

                            #region UNB
                            edi.Unb.Segment1 = "UNOC";
                            edi.Unb.Segment2 = "3";
                            edi.Unb.Segment3 = mmIkNumber;
                            edi.Unb.Segment4 = ikNumberForHIP;
                            // todo: check if this date is always subtracted
                            edi.Unb.Segment5 = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
                            edi.Unb.Segment6 = DateTime.Now.ToString("HHmm");
                            edi.Unb.Segment7 = controlReference.ToString("D5");
                            edi.Unb.Segment8 = String.Format("{0}DRC0{1}{2}", isTestData ? "T" : "E", controlReference.ToString("D2"), DateTime.Now.ToString("yyMM"));
                            if (isTestData && edifactVersion == 4)
                            {
                                edi.Unb.Segment9 = "1";
                            }

                            #endregion

                            var referenceNumber = 1;
                            foreach (var caseModel in casesWithHIP_IK)
                            {
                                var hipIkNumber = mergeForAllHipsValue ? IKNumberValue : caseModel.HIP_IK;

                                var message = new TransmitionMessage();
                                var gender  = "0";
                                var currentMessageNumber = String.Format("99{0}", referenceNumber.ToString("D8"));

                                #region Gender

                                switch (caseModel.PatientGender)
                                {
                                case 0:
                                    gender = "2";
                                    break;

                                case 1:
                                    gender = "1";
                                    break;

                                case 2:
                                    gender = "3";
                                    break;
                                }

                                #endregion

                                #region Version independent

                                #region UNH

                                message.Unh.Segment1 = currentMessageNumber;
                                message.Unh.Segment2 = messageType != null ? messageType.IfStringValue_Value : "DIR73C";
                                message.Unh.Segment3 = edifactVersion.ToString();
                                message.Unh.Segment4 = "0";
                                message.Unh.Segment5 = "DR";

                                #endregion

                                #region IVK

                                message.Ivk.Segment1 = useKForVorrectionValue ? "10" : Convert.ToInt32(caseModel.NumberOfNegativeTry) > 0 ? "30" : "10";
                                message.Ivk.Segment2 = "01";
                                message.Ivk.Segment3 = mmIkNumber;
                                message.Ivk.Segment4 = hipIkNumber;

                                #endregion

                                #region IBH

                                message.Ibh.Segment1 = caseModel.LANR;
                                message.Ibh.Segment2 = caseModel.BSNR;

                                #endregion

                                #region INF

                                message.Inf.Segment1 = contractCharacteristicID;
                                message.Inf.Segment2 = "";
                                message.Inf.Segment3 = "0";
                                message.Inf.Segment4 = contactTypeValue;

                                #endregion

                                #region INV
                                message.Inv.Segment4 = caseModel.PatientInsuranceNumber;
                                message.Inv.Segment5 = hipIkNumber;
                                message.Inv.Segment6 = caseModel.PatientLastName;
                                message.Inv.Segment7 = caseModel.PatientFirstName;
                                message.Inv.Segment8 = caseModel.PatientBirthday.ToString("yyyyMMdd");
                                message.Inv.Segment9 = gender;

                                #endregion

                                #region DIA

                                message.Dia.Segment1 = caseModel.DiagnoseCode;
                                message.Dia.Segment2 = "G";
                                message.Dia.Segment3 = caseModel.Localization;

                                #endregion

                                #region ABR

                                message.Abr.Segment1  = "";
                                message.Abr.Segment2  = caseModel.GPOS;
                                message.Abr.Segment3  = "";
                                message.Abr.Segment4  = "";
                                message.Abr.Segment5  = "1";
                                message.Abr.Segment6  = caseModel.AmountForThisGPOS.ToString("F", germanCulture);
                                message.Abr.Segment7  = "";
                                message.Abr.Segment8  = "";
                                message.Abr.Segment9  = "";
                                message.Abr.Segment10 = "";
                                message.Abr.Segment11 = caseModel.TreatmentDay.ToString("yyyyMMdd");

                                #endregion

                                #region FKI

                                message.Fki.Segment1 = caseModel.AmountForThisGPOS.ToString("F", germanCulture);
                                message.Fki.Segment2 = "";
                                message.Fki.Segment3 = "";
                                message.Fki.Segment4 = "";
                                message.Fki.Segment5 = "";
                                message.Fki.Segment6 = "";
                                message.Fki.Segment7 = caseModel.AmountForThisGPOS.ToString("F", germanCulture);

                                #endregion

                                #region RGI
                                message.Rgi.Segment1 = minTreatmentDate.ToString("yyyyMMdd");
                                message.Rgi.Segment2 = maxTreatmentDate.ToString("yyyyMMdd");
                                message.Rgi.Segment3 = "1";
                                message.Rgi.Segment4 = mmIkNumber;

                                message.Rgi.Segment5 = useKForVorrectionValue && Convert.ToInt32(caseModel.NumberOfNegativeTry) > 0
                                    ? String.Format("{0}K{1}", caseModel.NumberOfNegativeTry, caseModel.InvoiceNumberForTheHIP.ToString())
                                    : caseModel.InvoiceNumberForTheHIP.ToString();

                                message.Rgi.Segment6 = DateTime.Now.ToString("yyyyMMdd");
                                message.Rgi.Segment7 = "";
                                message.Rgi.Segment8 = Convert.ToUInt32(caseModel.NumberOfNegativeTry).ToString("D3");

                                #endregion

                                #region UNT

                                message.Unt.Segment1 = "10";
                                message.Unt.Segment2 = currentMessageNumber;

                                #endregion

                                #endregion

                                #region Version specific

                                var InvSegment1Value = caseModel.PatientStatusNumber.Replace(" ", string.Empty);
                                switch (edifactVersion)
                                {
                                case 3:
                                    message.Inv.Segment1 = InvSegment1Value.Length < 5 ? InvSegment1Value.Substring(0, 1) + "0001" : InvSegment1Value;
                                    message.Ivk.Segment5 = caseModel.InvoiceNumberForTheHIP.ToString();
                                    break;

                                case 4:
                                    message.Inv.Segment1 = InvSegment1Value.Substring(0, 1);
                                    message.Inv.Segment2 = "";
                                    message.Inv.Segment3 = "";

                                    message.Ivk.Segment5 = "99999999999999";
                                    message.Ivk.Segment6 = hipIkNumber;

                                    break;

                                default:
                                    break;
                                }

                                #endregion

                                edi.transmitionMessages.Add(message);

                                referenceNumber++;
                            }

                            #region UNZ

                            edi.Unz.Segment1 = edi.transmitionMessages.Count.ToString();
                            edi.Unz.Segment2 = controlReference.ToString("D5");

                            #endregion

                            var edifact  = edi.GetEdifact();
                            var edi_path = System.IO.Path.GetTempPath() + edifact.edifactName;
                            var i        = 1;
                            while (File.Exists(edi_path))
                            {
                                edifact.edifactName = string.Format("{0}({1})", edifact.edifactName, i++);
                                edi_path            = System.IO.Path.GetTempPath() + edifact.edifactName;
                            }

                            File.WriteAllText(edi_path, edifact.edifactFileOutput);
                            var fi = new FileInfo(edi_path);
                            edi.decryptedFileSize = fi.Length;
                            edi.encryptedFileSize = fi.Length;

                            var aufFile  = edi.GetAufFile();
                            var path_auf = System.IO.Path.GetTempPath() + aufFile.aufName;
                            File.WriteAllText(path_auf, aufFile.aufFileOutput);

                            var files = new List <string>();

                            files.Add(edi_path);
                            files.Add(path_auf);

                            var zipPath = System.IO.Path.GetTempPath() + edifact.edifactName + ".zip";
                            ZipFIlesUtils.AddToArchive(zipPath, files);

                            var documentEdifact = new Documents();
                            documentEdifact.documentName           = "Export von " + minTreatmentDate.ToString("dd.MM.yyyy") + " - " + maxTreatmentDate.ToString("dd.MM.yyyy");
                            documentEdifact.documentOutputLocation = zipPath;
                            documentEdifact.ContractID             = contractID;
                            documentEdifact.receiver = mergeForAllHipsValue ? hipNameForMergedEdifact : casesWithHIP_IK[0].HIP;
                            documentEdifact.mimeType = "Application/Edifact";

                            documents.Add(documentEdifact);

                            controlReference++;
                        }

                        #region Update parameters
                        cls_Save_Contract_Parameter.Invoke(Connection, Transaction, new P_MD_SCP_1754()
                        {
                            Name         = EContractParameter.NextEdifactNumber.Value(),
                            ContractID   = contractID,
                            NumericValue = Convert.ToDouble(controlReference)
                        }, securityTicket);
                        #endregion
                    }
                }
                #endregion

                #region Excel report generation
                Documents documentExcel = new Documents();
                documentExcel.documentName           = "ExcelReport" + DateTime.Now.ToString("dd.MM.yyyy_HH.mm");
                documentExcel.documentOutputLocation = GenerateReportCases.CreateCaseXlsReport(cases.ToList(), documentExcel.documentName);
                documentExcel.mimeType = UtilMethods.GetMimeType(documentExcel.documentOutputLocation);
                documentExcel.receiver = "MM";
                documents.Add(documentExcel);
                #endregion

                #region Negative feedback edifact
                if (Parameter.StatusTo == 5 && !String.IsNullOrEmpty(Parameter.HipIkNumber))
                {
                    var files    = new List <string>();
                    var edi_path = Path.GetTempPath() + Parameter.EdifactFileName;
                    File.WriteAllText(edi_path, Parameter.EdifactMessage);
                    files.Add(edi_path);

                    var zipPath = Path.GetTempPath() + Parameter.EdifactFileName + ".zip";
                    ZipFIlesUtils.AddToArchive(zipPath, files);

                    var errorEdifact = new Documents();
                    errorEdifact.documentName           = String.Format("Import von {0} - {1}", earliestFsStatusDate.ToString("dd.MM.yyyy"), latestFsStatusDate.ToString("dd.MM.yyyy"));
                    errorEdifact.documentOutputLocation = zipPath;
                    errorEdifact.receiver = cls_Get_HIP_Name_for_HIP_IK_Number.Invoke(Connection, Transaction, new P_CAS_GHIPIKfHIPIKN_1207()
                    {
                        HIPIKNumber = Parameter.HipIkNumber
                    }, securityTicket).Result.Name;
                    errorEdifact.mimeType = "Application/Edifact_Error";

                    documents.Add(errorEdifact);
                }
                #endregion

                #region Document upload
                foreach (var document in documents)
                {
                    var ms = new MemoryStream(File.ReadAllBytes(document.documentOutputLocation));

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

                    var parameterDoc = new P_ARCH_UD_1326();
                    parameterDoc.DocumentID   = documentID;
                    parameterDoc.Mime         = document.mimeType;
                    parameterDoc.DocumentName = document.documentName;
                    parameterDoc.DocumentDate = DateForElastic;
                    parameterDoc.Receiver     = document.receiver;
                    parameterDoc.ContractID   = document.ContractID;
                    if (!Parameter.AreCasesFiltered)
                    {
                        if (parameterDoc.Mime == "Application/Edifact")
                        {
                            parameterDoc.Description = parameterDoc.DocumentName;
                        }
                        else
                        {
                            if (Parameter.AreCasesPositive)
                            {
                                parameterDoc.Description = "DATEV";
                            }
                            else
                            {
                                parameterDoc.Description = "EDIFACT";
                            }
                        }
                    }
                    else
                    {
                        if (Parameter.StatusTo == 5)
                        {
                            if (parameterDoc.Mime == "Application/Edifact_Error")
                            {
                                parameterDoc.Description = parameterDoc.DocumentName;
                            }
                            else
                            {
                                parameterDoc.Description = "KV Fehler";
                            }
                        }
                        else
                        {
                            parameterDoc.Description = "KV Import";
                        }
                    }

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

            #region Receipt pdf generation
            var create_pdf_report = false;
            try
            {
                create_pdf_report = Boolean.Parse(WebConfigurationManager.AppSettings["generateReceiptPdf"]);
            }
            catch { }

            if (create_pdf_report && Parameter.StatusTo == 7)
            {
                cls_Create_Pdf_Report.Invoke(Connection, Transaction, new P_CAS_CPR_1050()
                {
                    cases = cases
                }, securityTicket);
            }
            #endregion



            #region Elastic import
            if (cases_to_submit.Count != 0)
            {
                Add_New_Submitted_Case.Import_Submitted_Case_Data_to_ElasticDB(cases_to_submit, securityTicket.TenantID.ToString());
            }
            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());
            }
            #endregion

            returnValue.Result.caseList = cases.Select(t => new CaseLogObject()
            {
                BillPositionNumber = t.InvoiceNumberForTheHIP.ToString(),
                BillPositionType   = t.CaseType,
                CaseNumber         = t.CaseNumber.ToString()
            }).ToArray();

            return(returnValue);

            #endregion UserCode
        }
示例#13
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
        }