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

            FR_CAS_SCCS_1520 functionReturn = new FR_CAS_SCCS_1520();

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

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

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

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

                throw new Exception("Exception occured in method cls_Settlement_Change_Case_Status", ex);
            }
            return(functionReturn);
        }
        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
        }