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

            FR_L5BTS_EA_2008 functionReturn = new FR_L5BTS_EA_2008();

            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_Edit_Appointment", ex);
            }
            return(functionReturn);
        }
        protected static FR_L5BTS_EA_2008 Execute(DbConnection Connection, DbTransaction Transaction, P_L5BTS_EA_2008 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L5BTS_EA_2008();
            returnValue.Result = new L5BTS_EA_2008();

            var appointment = cls_Get_AllAppointment_Task_for_AppointmentID.Invoke(Connection, Transaction, new P_L5A_GAATfAID_1530()
            {
                AppointmentID = Parameter.AppointmentID
            }, securityTicket).Result;

            var oldCombinationORM = ORM_PPS_TSK_BOK_AvailableResourceCombination.Query.Search(Connection, Transaction, new ORM_PPS_TSK_BOK_AvailableResourceCombination.Query()
            {
                Tenant_RefID = securityTicket.TenantID,
                IsDeleted    = false,
                PPS_TSK_BOK_AvailableResourceCombinationID = Parameter.OldCombinationID
            }).Single();
            oldCombinationORM.IsAvailable = true;
            oldCombinationORM.Save(Connection, Transaction);

            var newCombinationORM = ORM_PPS_TSK_BOK_AvailableResourceCombination.Query.Search(Connection, Transaction, new ORM_PPS_TSK_BOK_AvailableResourceCombination.Query()
            {
                Tenant_RefID = securityTicket.TenantID,
                IsDeleted    = false,
                PPS_TSK_BOK_AvailableResourceCombinationID = Parameter.NewCombinationID
            }).Single();

            var newSlot = ORM_PPS_TSK_BOK_BookableTimeSlot.Query.Search(Connection, Transaction, new ORM_PPS_TSK_BOK_BookableTimeSlot.Query()
            {
                Tenant_RefID = securityTicket.TenantID,
                IsDeleted    = false,
                PPS_TSK_BOK_BookableTimeSlotID = newCombinationORM.BookableTimeSlot_RefID
            }).Single();


            var allCombs = cls_Get_Slot_Combiantions_for_SlotID.Invoke(Connection, Transaction, new P_L5BTS_GSCfSID_1319()
            {
                SlotID = newSlot.PPS_TSK_BOK_BookableTimeSlotID
            }, securityTicket).Result;
            var selectedCombination = allCombs.Single(s => s.PPS_TSK_BOK_AvailableResourceCombinationID == Parameter.NewCombinationID);

            bool _isSameAppointmentType = newSlot.TaskTemplate_RefID == appointment.InstantiatedFrom_TaskTemplate_RefID;

            var paramDevice = new List <P_L5BTS_STI_1331_Device>();
            foreach (var instance in selectedCombination.Devices)
            {
                var _assignemtID = Guid.Empty;
                if (_isSameAppointmentType)
                {
                    var persistedInstance = appointment.Devices.SingleOrDefault(s => s.PPS_DEV_Device_Instance_RefID == instance.PPS_DEV_Device_Instance_RefID);
                    if (persistedInstance != null)
                    {
                        _assignemtID = persistedInstance.PPS_TSK_Task_DeviceBookingID;
                    }
                }
                paramDevice.Add(new P_L5BTS_STI_1331_Device()
                {
                    PPS_DEV_Device_Instance_RefID = instance.PPS_DEV_Device_Instance_RefID,
                    PPS_TSK_Task_DeviceBookingID  = _assignemtID
                });
            }

            var paramStaff = new List <P_L5BTS_STI_1331_Employee>();
            foreach (var staffCombo in selectedCombination.Staff)
            {
                var _assignemtID = Guid.Empty;
                if (_isSameAppointmentType)
                {
                    var persistedStaff = appointment.Staff.SingleOrDefault(s => s.CreatedFrom_TaskTemplate_RequiredStaff_RefID == staffCombo.CreatedFor_TaskTemplateRequiredStaff_RefID);
                    if (persistedStaff != null)
                    {
                        _assignemtID = persistedStaff.PPS_TSK_Task_StaffBookingsID;
                    }
                }

                paramStaff.Add(new P_L5BTS_STI_1331_Employee()
                {
                    CMN_BPT_EMP_Employee_RefID = staffCombo.CMN_BPT_EMP_Employee_RefID,
                    CreatedFrom_TaskTemplate_RequiredStaff_RefID = staffCombo.CreatedFor_TaskTemplateRequiredStaff_RefID,
                    PPS_TSK_Task_StaffBookingsID = _assignemtID
                });
            }

            P_L5BTS_STI_1331_Patient patientInfo = new P_L5BTS_STI_1331_Patient();
            patientInfo.Patient_RefID = Parameter.PatientID;
            P_L5BTS_STI_1331 param = new P_L5BTS_STI_1331()
            {
                Patient        = patientInfo,
                PPS_TSK_TaskID = Parameter.AppointmentID,
                Office         = new P_L5BTS_STI_1331_Office()
                {
                    CMN_STR_Office_RefID         = newSlot.Office_RefID,
                    PPS_TSK_Task_OfficeBookingID = appointment.Offices.PPS_TSK_Task_OfficeBookingID
                },
                PlannedStartDate       = newSlot.FreeInterval_Start,
                PlannedDuration_in_sec = (int)(newSlot.FreeInterval_End - newSlot.FreeInterval_Start).TotalSeconds,
                TaskTemplate_RefID     = newSlot.TaskTemplate_RefID,
                Devices  = paramDevice.ToArray(),
                Employee = paramStaff.ToArray()
            };

            var result = cls_Save_Task.Invoke(Connection, Transaction, param, securityTicket).Result;
            returnValue.Result.ID = result.ID;

            if (result.ReplacedPatient != null)
            {
                returnValue.Result.ReplacedPatient = new L5S_CAfSCID_1705_ReplacedPatient()
                {
                    ID = result.ReplacedPatient.ID
                }
            }
            ;

            newCombinationORM.IsAvailable = false;
            newCombinationORM.Save(Connection, Transaction);


            return(returnValue);

            #endregion UserCode
        }