protected static FR_Base Execute(DbConnection Connection, DbTransaction Transaction, P_L6DWS_DDWSDFIDL_1014 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Base();

            L6TN_GSFT_1017 settings = cls_Get_Settings_For_Tenant.Invoke(Connection, Transaction, securityTicket).Result;

            ORM_CMN_STR_PPS_DailyWorkSchedule_Detail scheduleDetail = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail();
            var result = scheduleDetail.Load(Connection, Transaction, Parameter.DailyWorkSchedule_DetailID);
            if (result.Status != FR_Status.Success || scheduleDetail.CMN_STR_PPS_DailyWorkSchedule_DetailID == Guid.Empty)
            {
                var error = new FR_Guid();
                error.ErrorMessage = "No Such ID.";
                error.Status       = FR_Status.Error_Internal;
                return(error);
            }


            ORM_CMN_CAL_Event calEvent = new ORM_CMN_CAL_Event();
            calEvent.Load(Connection, Transaction, scheduleDetail.CMN_CAL_Event_RefID);

            if (scheduleDetail.CMN_BPT_EMP_Employee_LeaveRequest_RefID != Guid.Empty)
            {
                ORM_CMN_BPT_EMP_Employee_LeaveRequest leaveRequest = new ORM_CMN_BPT_EMP_Employee_LeaveRequest();
                leaveRequest.Load(Connection, Transaction, scheduleDetail.CMN_BPT_EMP_Employee_LeaveRequest_RefID);

                Guid oldLeaveRequestID = leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID;
                ORM_CMN_CAL_Event leaveRequestEvent = new ORM_CMN_CAL_Event();
                leaveRequestEvent.Load(Connection, Transaction, leaveRequest.CMN_CAL_Event_RefID);
                var calQuery = new ORM_CMN_CAL_Event.Query();
                calQuery.CMN_CAL_EventID = leaveRequest.CMN_CAL_Event_RefID;
                var calendarRes = ORM_CMN_CAL_Event.Query.Search(Connection, Transaction, calQuery);
                ORM_CMN_CAL_Event calendarEvent = calendarRes[0];
                var timeFrame = cls_Get_CalculationTimeFramesForTenant.Invoke(Connection, Transaction, securityTicket).Result.Where(x => x.CalculationTimeframe_StartDate.Year == calendarEvent.StartTime.Year).FirstOrDefault();


                if (leaveRequestEvent.StartTime.Date != leaveRequestEvent.EndTime.Date)
                {
                    DateTimeRange firstRange  = null;
                    DateTimeRange secondRange = null;
                    DateTimeRange thirdRange  = null;

                    ORM_CMN_STR_PPS_DailyWorkSchedule dailySchedule = new ORM_CMN_STR_PPS_DailyWorkSchedule();
                    dailySchedule.Load(Connection, Transaction, scheduleDetail.DailyWorkSchedule_RefID);

                    if (leaveRequestEvent.StartTime.Date == dailySchedule.WorkSheduleDate)
                    {
                        P_L5DWS_GDWSWDFT_0946 dailyScheduleDetailsPar = new P_L5DWS_GDWSWDFT_0946();
                        dailyScheduleDetailsPar.WorkSheduleDate = dailySchedule.WorkSheduleDate.AddDays(1).Date;
                        var schedule = cls_Get_DailyWorkSchedules_WithDetails_For_Date.Invoke(Connection, Transaction, dailyScheduleDetailsPar, securityTicket).Result.FirstOrDefault(i => i.Employee_RefID == dailySchedule.Employee_RefID);
                        secondRange = new DateTimeRange();
                        if (schedule != null && schedule.Details.Any(i => i.LeaveRequest_RefID == leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID))
                        {
                            secondRange.Start = schedule.Details.FirstOrDefault(i => i.LeaveRequest_RefID == leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID).FromTime_as_DateTime;
                            secondRange.End   = leaveRequestEvent.EndTime;
                        }
                        else
                        {
                            secondRange = null;
                        }
                    }
                    else if (leaveRequestEvent.EndTime.Date == dailySchedule.WorkSheduleDate)
                    {
                        firstRange       = new DateTimeRange();
                        firstRange.Start = leaveRequestEvent.StartTime;


                        P_L5DWS_GDWSWDFT_0946 dailyScheduleDetailsPar = new P_L5DWS_GDWSWDFT_0946();
                        dailyScheduleDetailsPar.WorkSheduleDate = dailySchedule.WorkSheduleDate.AddDays(-1).Date;
                        var schedule = cls_Get_DailyWorkSchedules_WithDetails_For_Date.Invoke(Connection, Transaction, dailyScheduleDetailsPar, securityTicket).Result.FirstOrDefault(i => i.Employee_RefID == dailySchedule.Employee_RefID);
                        if (schedule != null && schedule.Details.Any(i => i.LeaveRequest_RefID == leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID))
                        {
                            firstRange.End = schedule.Details.FirstOrDefault(i => i.LeaveRequest_RefID == leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID).ToTime_as_DateTime;
                        }
                        else
                        {
                            firstRange = null;
                        }
                    }
                    else
                    {
                        firstRange       = new DateTimeRange();
                        firstRange.Start = leaveRequestEvent.StartTime;

                        P_L5DWS_GDWSWDFT_0946 dailyScheduleDetailsPar = new P_L5DWS_GDWSWDFT_0946();
                        dailyScheduleDetailsPar.WorkSheduleDate = dailySchedule.WorkSheduleDate.AddDays(-1).Date;
                        var schedule = cls_Get_DailyWorkSchedules_WithDetails_For_Date.Invoke(Connection, Transaction, dailyScheduleDetailsPar, securityTicket).Result.FirstOrDefault(i => i.Employee_RefID == dailySchedule.Employee_RefID);
                        if (schedule != null && schedule.Details.Any(i => i.LeaveRequest_RefID == leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID))
                        {
                            firstRange.End = schedule.Details.FirstOrDefault(i => i.LeaveRequest_RefID == leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID).ToTime_as_DateTime;
                        }
                        else
                        {
                            firstRange = null;
                        }
                        P_L5DWS_GDWSWDFT_0946 dailyScheduleDetailsParSecond = new P_L5DWS_GDWSWDFT_0946();
                        dailyScheduleDetailsParSecond.WorkSheduleDate = dailySchedule.WorkSheduleDate.AddDays(1).Date;
                        var scheduleSecond = cls_Get_DailyWorkSchedules_WithDetails_For_Date.Invoke(Connection, Transaction, dailyScheduleDetailsParSecond, securityTicket).Result.FirstOrDefault(i => i.Employee_RefID == dailySchedule.Employee_RefID);
                        secondRange = new DateTimeRange();

                        if (scheduleSecond != null && scheduleSecond.Details.Any(i => i.LeaveRequest_RefID == leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID))
                        {
                            secondRange.End   = leaveRequestEvent.EndTime;
                            secondRange.Start = scheduleSecond.Details.FirstOrDefault(i => i.LeaveRequest_RefID == leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID).FromTime_as_DateTime;
                        }
                        else
                        {
                            secondRange = null;
                        }
                    }

                    #region cancelLeaveRequest

                    P_L5LR_SEAA_1351 ApprovalActionParam = new P_L5LR_SEAA_1351();
                    ApprovalActionParam.Approval_Action_Commnet         = "";
                    ApprovalActionParam.CMN_CAL_Event_Approval_ActionID = Guid.Empty;
                    ApprovalActionParam.EventApproval_RefID             = leaveRequest.CMN_CAL_Event_Approval_RefID;
                    ApprovalActionParam.IsApproval   = false;
                    ApprovalActionParam.IsDenial     = false;
                    ApprovalActionParam.IsRevocation = true;
                    cls_Save_Employee_ApprovalAction.Invoke(Connection, Transaction, ApprovalActionParam, securityTicket);



                    var approvalItem = new ORM_CMN_CAL_Event_Approval();
                    if (leaveRequest.CMN_CAL_Event_Approval_RefID != Guid.Empty)
                    {
                        var approvalResult = approvalItem.Load(Connection, Transaction, leaveRequest.CMN_CAL_Event_Approval_RefID);
                        if (approvalResult.Status != FR_Status.Success || approvalItem.CMN_CAL_Event_ApprovalID == Guid.Empty)
                        {
                            var error = new FR_Guid();
                            error.ErrorMessage = "No Such ID";
                            error.Status       = FR_Status.Error_Internal;
                            return(error);
                        }
                    }

                    bool isApprovedBefore = approvalItem.IsApproved;

                    approvalItem.IsApprovalProcessDenied         = false;
                    approvalItem.IsApprovalProcessOpened         = false;
                    approvalItem.IsApprovalProcessCanceledByUser = true;
                    approvalItem.IsApproved = false;

                    approvalItem.Save(Connection, Transaction);


                    P_L5EM_GEATFSbRTFE_1423 statParam = new P_L5EM_GEATFSbRTFE_1423();
                    statParam.absenceReasonID = leaveRequest.CMN_BPT_STA_AbsenceReason_RefID;
                    statParam.employeeID      = leaveRequest.RequestedFor_Employee_RefID;
                    statParam.timeFrameID     = timeFrame.CMN_CAL_CalculationTimeframeID;
                    var statistics = cls_Get_Employee_AbsenceReason_TimeframeStatistic_byReasonTimeFrameEmployee.Invoke(Connection, Transaction, statParam, securityTicket).Result;
                    if (statistics != null)
                    {
                        P_L5EM_SEARTFS_1356 updateStatisticsParam = new P_L5EM_SEARTFS_1356();
                        updateStatisticsParam.CMN_BPT_EMP_Employee_AbsenceReason_TimeframeStatisticsID = statistics.CMN_BPT_EMP_Employee_AbsenceReason_TimeframeStatisticsID;
                        updateStatisticsParam.Employee_RefID             = statistics.Employee_RefID;
                        updateStatisticsParam.CalculationTimeframe_RefID = statistics.CalculationTimeframe_RefID;
                        updateStatisticsParam.AbsenceReason_RefID        = statistics.AbsenceReason_RefID;

                        if (isApprovedBefore)
                        {
                            updateStatisticsParam.R_RequestReservedAbsence_InDays  = statistics.R_RequestReservedAbsence_InDays;
                            updateStatisticsParam.R_RequestReservedAbsence_InHours = statistics.R_RequestReservedAbsence_InHours;

                            updateStatisticsParam.R_AbsenceTimeUsed_InDays  = statistics.R_AbsenceTimeUsed_InDays - Parameter.durationInDays;
                            updateStatisticsParam.R_AbsenceTimeUsed_InHours = statistics.R_AbsenceTimeUsed_InHours - Parameter.durationInHours;

                            updateStatisticsParam.R_TotalAllowedAbsenceTime_InDays  = statistics.R_TotalAllowedAbsenceTime_InDays + Parameter.durationInDays;
                            updateStatisticsParam.R_TotalAllowedAbsenceTime_InHours = statistics.R_TotalAllowedAbsenceTime_InHours + Parameter.durationInHours;
                        }
                        else
                        {
                            updateStatisticsParam.R_RequestReservedAbsence_InDays  = statistics.R_RequestReservedAbsence_InDays - Parameter.durationInDays;
                            updateStatisticsParam.R_RequestReservedAbsence_InHours = statistics.R_RequestReservedAbsence_InHours - Parameter.durationInHours;

                            updateStatisticsParam.R_AbsenceTimeUsed_InDays  = statistics.R_AbsenceTimeUsed_InDays;
                            updateStatisticsParam.R_AbsenceTimeUsed_InHours = statistics.R_AbsenceTimeUsed_InHours;

                            updateStatisticsParam.R_TotalAllowedAbsenceTime_InDays  = statistics.R_TotalAllowedAbsenceTime_InDays;
                            updateStatisticsParam.R_TotalAllowedAbsenceTime_InHours = statistics.R_TotalAllowedAbsenceTime_InHours;
                        }

                        var res = cls_Save_Employee_AbsenceReason_TimeframeStatistic.Invoke(Connection, Transaction, updateStatisticsParam, securityTicket);
                    }
                    leaveRequest.Save(Connection, Transaction);

                    Guid absenceReasonID = leaveRequest.CMN_BPT_STA_AbsenceReason_RefID;

                    #endregion


                    #region FirstRange

                    var authRequired = true;

                    var absenceReasons = cls_get_Active_AbsenceReason_For_TenantID.Invoke(Connection, Transaction, securityTicket).Result;
                    if (absenceReasons != null)
                    {
                        if (absenceReasons.Any(r => r.CMN_BPT_STA_AbsenceReasonID == absenceReasonID))
                        {
                            var reason = absenceReasons.FirstOrDefault(r => r.CMN_BPT_STA_AbsenceReasonID == absenceReasonID);
                            if (reason != null)
                            {
                                authRequired = reason.IsAuthorizationRequired;
                            }
                        }
                    }

                    if (firstRange != null)
                    {
                        leaveRequestEvent = new ORM_CMN_CAL_Event();
                        leaveRequestEvent.CMN_CAL_EventID          = Guid.NewGuid();
                        leaveRequestEvent.StartTime                = firstRange.Start;
                        leaveRequestEvent.EndTime                  = firstRange.End;
                        leaveRequestEvent.R_EventDuration_sec      = (int)firstRange.End.Subtract(firstRange.Start).TotalSeconds;
                        leaveRequestEvent.IsRepetitive             = false;
                        leaveRequestEvent.IsWholeDayEvent          = false;
                        leaveRequestEvent.IsCalendarEvent_Editable = true;
                        leaveRequestEvent.Tenant_RefID             = securityTicket.TenantID;
                        leaveRequestEvent.Save(Connection, Transaction);

                        approvalItem = new ORM_CMN_CAL_Event_Approval();
                        approvalItem.CMN_CAL_Event_ApprovalID = Guid.NewGuid();
                        approvalItem.Event_RefID             = leaveRequestEvent.CMN_CAL_EventID;
                        approvalItem.IsApprovalProcessDenied = false;
                        approvalItem.IsApprovalProcessOpened = false;
                        if (settings.NumberOfResponsiblePersonsRequiredToApprove == 0 || !authRequired)
                        {
                            approvalItem.IsApproved = true;
                            approvalItem.IsApprovalProcessOpened = false;
                        }
                        else
                        {
                            approvalItem.IsApproved = false;
                            approvalItem.IsApprovalProcessOpened = true;
                        }
                        approvalItem.IsApprovalProcessCanceledByUser = false;
                        approvalItem.IsDeleted          = false;
                        approvalItem.Creation_Timestamp = DateTime.Now;
                        approvalItem.Tenant_RefID       = securityTicket.TenantID;
                        approvalItem.Save(Connection, Transaction);



                        leaveRequest = new ORM_CMN_BPT_EMP_Employee_LeaveRequest();
                        leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID = Guid.NewGuid();
                        leaveRequest.CMN_BPT_STA_AbsenceReason_RefID     = absenceReasonID;
                        leaveRequest.CMN_CAL_Event_Approval_RefID        = approvalItem.CMN_CAL_Event_ApprovalID;
                        leaveRequest.CMN_CAL_Event_RefID         = leaveRequestEvent.CMN_CAL_EventID;
                        leaveRequest.IsDeleted                   = false;
                        leaveRequest.RequestedFor_Employee_RefID = dailySchedule.Employee_RefID;
                        leaveRequest.Tenant_RefID                = securityTicket.TenantID;
                        leaveRequest.Creation_Timestamp          = DateTime.Now;
                        leaveRequest.LeaveRequestCreationSource  = "plannico.time";
                        leaveRequest.Save(Connection, Transaction);


                        P_L5DWS_GDWSWDFP_1225 par = new P_L5DWS_GDWSWDFP_1225();
                        par.StartDate = firstRange.Start;
                        par.EndDate   = firstRange.End;
                        var schedulesWithDetails = cls_Get_DailyWorkSchedules_WithDetails_For_Period.Invoke(Connection, Transaction, par, securityTicket).Result.DailyWorkSchedulesWithDetails;

                        foreach (var schedule in schedulesWithDetails)
                        {
                            if (schedule.Details.Any(i => i.LeaveRequest_RefID == oldLeaveRequestID))
                            {
                                foreach (var detailItem in schedule.Details.Where(i => i.LeaveRequest_RefID == oldLeaveRequestID).ToArray())
                                {
                                    ORM_CMN_STR_PPS_DailyWorkSchedule_Detail detail = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail();
                                    detail.Load(Connection, Transaction, detailItem.CMN_STR_PPS_DailyWorkSchedule_DetailID);
                                    detail.CMN_BPT_EMP_Employee_LeaveRequest_RefID = leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID;
                                    detail.Save(Connection, Transaction);
                                }
                            }
                        }
                    }
                    #endregion

                    #region secondRange
                    if (secondRange != null)
                    {
                        leaveRequestEvent = new ORM_CMN_CAL_Event();
                        leaveRequestEvent.CMN_CAL_EventID          = Guid.NewGuid();
                        leaveRequestEvent.StartTime                = secondRange.Start;
                        leaveRequestEvent.EndTime                  = secondRange.End;
                        leaveRequestEvent.R_EventDuration_sec      = (int)secondRange.End.Subtract(secondRange.Start).TotalSeconds;
                        leaveRequestEvent.IsRepetitive             = false;
                        leaveRequestEvent.IsWholeDayEvent          = false;
                        leaveRequestEvent.IsCalendarEvent_Editable = true;
                        leaveRequestEvent.Tenant_RefID             = securityTicket.TenantID;
                        leaveRequestEvent.Save(Connection, Transaction);

                        approvalItem = new ORM_CMN_CAL_Event_Approval();
                        approvalItem.CMN_CAL_Event_ApprovalID = Guid.NewGuid();
                        approvalItem.Event_RefID             = leaveRequestEvent.CMN_CAL_EventID;
                        approvalItem.IsApprovalProcessDenied = false;
                        approvalItem.IsApprovalProcessOpened = false;
                        if (settings.NumberOfResponsiblePersonsRequiredToApprove == 0 || !authRequired)
                        {
                            approvalItem.IsApproved = true;
                            approvalItem.IsApprovalProcessOpened = false;
                        }
                        else
                        {
                            approvalItem.IsApprovalProcessOpened = true;
                            approvalItem.IsApproved = false;
                        }
                        approvalItem.IsApprovalProcessCanceledByUser = false;
                        approvalItem.IsDeleted          = false;
                        approvalItem.Creation_Timestamp = DateTime.Now;
                        approvalItem.Tenant_RefID       = securityTicket.TenantID;
                        approvalItem.Save(Connection, Transaction);



                        leaveRequest = new ORM_CMN_BPT_EMP_Employee_LeaveRequest();
                        leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID = Guid.NewGuid();
                        leaveRequest.CMN_BPT_STA_AbsenceReason_RefID     = absenceReasonID;
                        leaveRequest.CMN_CAL_Event_Approval_RefID        = approvalItem.CMN_CAL_Event_ApprovalID;
                        leaveRequest.CMN_CAL_Event_RefID         = leaveRequestEvent.CMN_CAL_EventID;
                        leaveRequest.IsDeleted                   = false;
                        leaveRequest.RequestedFor_Employee_RefID = dailySchedule.Employee_RefID;
                        leaveRequest.Tenant_RefID                = securityTicket.TenantID;
                        leaveRequest.Creation_Timestamp          = DateTime.Now;
                        leaveRequest.LeaveRequestCreationSource  = "plannico.time";
                        leaveRequest.Save(Connection, Transaction);

                        P_L5DWS_GDWSWDFP_1225 par = new P_L5DWS_GDWSWDFP_1225();
                        par.StartDate = secondRange.Start;
                        par.EndDate   = secondRange.End;
                        var schedulesWithDetails = cls_Get_DailyWorkSchedules_WithDetails_For_Period.Invoke(Connection, Transaction, par, securityTicket).Result.DailyWorkSchedulesWithDetails;

                        foreach (var schedule in schedulesWithDetails)
                        {
                            if (schedule.Details.Any(i => i.LeaveRequest_RefID == oldLeaveRequestID))
                            {
                                foreach (var detailItem in schedule.Details.Where(i => i.LeaveRequest_RefID == oldLeaveRequestID).ToArray())
                                {
                                    ORM_CMN_STR_PPS_DailyWorkSchedule_Detail detail = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail();
                                    detail.Load(Connection, Transaction, detailItem.CMN_STR_PPS_DailyWorkSchedule_DetailID);
                                    detail.CMN_BPT_EMP_Employee_LeaveRequest_RefID = leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID;
                                    detail.Save(Connection, Transaction);
                                }
                            }
                        }
                    }

                    #endregion

                    #region thirdRange
                    if (thirdRange != null)
                    {
                        leaveRequestEvent = new ORM_CMN_CAL_Event();
                        leaveRequestEvent.CMN_CAL_EventID          = Guid.NewGuid();
                        leaveRequestEvent.StartTime                = thirdRange.Start;
                        leaveRequestEvent.EndTime                  = thirdRange.End;
                        leaveRequestEvent.R_EventDuration_sec      = (int)thirdRange.End.Subtract(thirdRange.Start).TotalSeconds;
                        leaveRequestEvent.IsRepetitive             = false;
                        leaveRequestEvent.IsWholeDayEvent          = false;
                        leaveRequestEvent.IsCalendarEvent_Editable = true;
                        leaveRequestEvent.Tenant_RefID             = securityTicket.TenantID;
                        leaveRequestEvent.Save(Connection, Transaction);

                        approvalItem = new ORM_CMN_CAL_Event_Approval();
                        approvalItem.CMN_CAL_Event_ApprovalID = Guid.NewGuid();
                        approvalItem.Event_RefID             = leaveRequestEvent.CMN_CAL_EventID;
                        approvalItem.IsApprovalProcessDenied = false;
                        approvalItem.IsApprovalProcessOpened = false;
                        if (settings.NumberOfResponsiblePersonsRequiredToApprove == 0 || !authRequired)
                        {
                            approvalItem.IsApprovalProcessOpened = false;
                            approvalItem.IsApproved = true;
                        }
                        else
                        {
                            approvalItem.IsApprovalProcessOpened = true;
                            approvalItem.IsApproved = false;
                        }
                        approvalItem.IsApprovalProcessCanceledByUser = false;
                        approvalItem.IsDeleted          = false;
                        approvalItem.Creation_Timestamp = DateTime.Now;
                        approvalItem.Tenant_RefID       = securityTicket.TenantID;
                        approvalItem.Save(Connection, Transaction);



                        leaveRequest = new ORM_CMN_BPT_EMP_Employee_LeaveRequest();
                        leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID = Guid.NewGuid();
                        leaveRequest.CMN_BPT_STA_AbsenceReason_RefID     = absenceReasonID;
                        leaveRequest.CMN_CAL_Event_Approval_RefID        = approvalItem.CMN_CAL_Event_ApprovalID;
                        leaveRequest.CMN_CAL_Event_RefID         = leaveRequestEvent.CMN_CAL_EventID;
                        leaveRequest.IsDeleted                   = false;
                        leaveRequest.RequestedFor_Employee_RefID = dailySchedule.Employee_RefID;
                        leaveRequest.Tenant_RefID                = securityTicket.TenantID;
                        leaveRequest.Creation_Timestamp          = DateTime.Now;
                        leaveRequest.LeaveRequestCreationSource  = "plannico.time";
                        leaveRequest.Save(Connection, Transaction);


                        P_L5DWS_GDWSWDFP_1225 par = new P_L5DWS_GDWSWDFP_1225();
                        par.StartDate = thirdRange.Start;
                        par.EndDate   = thirdRange.End;
                        var schedulesWithDetails = cls_Get_DailyWorkSchedules_WithDetails_For_Period.Invoke(Connection, Transaction, par, securityTicket).Result.DailyWorkSchedulesWithDetails;

                        foreach (var schedule in schedulesWithDetails)
                        {
                            if (schedule.Details.Any(i => i.LeaveRequest_RefID == oldLeaveRequestID))
                            {
                                foreach (var detailItem in schedule.Details.Where(i => i.LeaveRequest_RefID == oldLeaveRequestID).ToArray())
                                {
                                    ORM_CMN_STR_PPS_DailyWorkSchedule_Detail detail = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail();
                                    detail.Load(Connection, Transaction, detailItem.CMN_STR_PPS_DailyWorkSchedule_DetailID);
                                    detail.CMN_BPT_EMP_Employee_LeaveRequest_RefID = leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID;
                                    detail.Save(Connection, Transaction);
                                }
                            }
                        }
                    }

                    #endregion
                }
                else
                {
                    leaveRequestEvent.Remove(Connection, Transaction);
                    leaveRequest.Remove(Connection, Transaction);

                    var approvalItem = new ORM_CMN_CAL_Event_Approval();
                    if (leaveRequest.CMN_CAL_Event_Approval_RefID != Guid.Empty)
                    {
                        var approvalResult = approvalItem.Load(Connection, Transaction, leaveRequest.CMN_CAL_Event_Approval_RefID);
                        if (approvalResult.Status != FR_Status.Success || approvalItem.CMN_CAL_Event_ApprovalID == Guid.Empty)
                        {
                            var error = new FR_Guid();
                            error.ErrorMessage = "No Such ID";
                            error.Status       = FR_Status.Error_Internal;
                            return(error);
                        }
                    }

                    bool isApprovedBefore = approvalItem.IsApproved;

                    P_L5EM_GEATFSbRTFE_1423 statParam = new P_L5EM_GEATFSbRTFE_1423();
                    statParam.absenceReasonID = leaveRequest.CMN_BPT_STA_AbsenceReason_RefID;
                    statParam.employeeID      = leaveRequest.RequestedFor_Employee_RefID;
                    statParam.timeFrameID     = timeFrame.CMN_CAL_CalculationTimeframeID;
                    var statistics = cls_Get_Employee_AbsenceReason_TimeframeStatistic_byReasonTimeFrameEmployee.Invoke(Connection, Transaction, statParam, securityTicket).Result;
                    if (statistics != null)
                    {
                        P_L5EM_SEARTFS_1356 updateStatisticsParam = new P_L5EM_SEARTFS_1356();
                        updateStatisticsParam.CMN_BPT_EMP_Employee_AbsenceReason_TimeframeStatisticsID = statistics.CMN_BPT_EMP_Employee_AbsenceReason_TimeframeStatisticsID;
                        updateStatisticsParam.Employee_RefID             = statistics.Employee_RefID;
                        updateStatisticsParam.CalculationTimeframe_RefID = statistics.CalculationTimeframe_RefID;
                        updateStatisticsParam.AbsenceReason_RefID        = statistics.AbsenceReason_RefID;

                        if (isApprovedBefore)
                        {
                            updateStatisticsParam.R_RequestReservedAbsence_InDays  = statistics.R_RequestReservedAbsence_InDays;
                            updateStatisticsParam.R_RequestReservedAbsence_InHours = statistics.R_RequestReservedAbsence_InHours;

                            updateStatisticsParam.R_AbsenceTimeUsed_InDays  = statistics.R_AbsenceTimeUsed_InDays - Parameter.durationInDays;
                            updateStatisticsParam.R_AbsenceTimeUsed_InHours = statistics.R_AbsenceTimeUsed_InHours - Parameter.durationInHours;

                            updateStatisticsParam.R_TotalAllowedAbsenceTime_InDays  = statistics.R_TotalAllowedAbsenceTime_InDays + Parameter.durationInDays;
                            updateStatisticsParam.R_TotalAllowedAbsenceTime_InHours = statistics.R_TotalAllowedAbsenceTime_InHours + Parameter.durationInHours;
                        }
                        else
                        {
                            updateStatisticsParam.R_RequestReservedAbsence_InDays  = statistics.R_RequestReservedAbsence_InDays - Parameter.durationInDays;
                            updateStatisticsParam.R_RequestReservedAbsence_InHours = statistics.R_RequestReservedAbsence_InHours - Parameter.durationInHours;

                            updateStatisticsParam.R_AbsenceTimeUsed_InDays  = statistics.R_AbsenceTimeUsed_InDays;
                            updateStatisticsParam.R_AbsenceTimeUsed_InHours = statistics.R_AbsenceTimeUsed_InHours;

                            updateStatisticsParam.R_TotalAllowedAbsenceTime_InDays  = statistics.R_TotalAllowedAbsenceTime_InDays;
                            updateStatisticsParam.R_TotalAllowedAbsenceTime_InHours = statistics.R_TotalAllowedAbsenceTime_InHours;
                        }

                        var res = cls_Save_Employee_AbsenceReason_TimeframeStatistic.Invoke(Connection, Transaction, updateStatisticsParam, securityTicket);
                    }
                }
            }

            P_L5DWS_DDWSDFIDL_1014 param = new P_L5DWS_DDWSDFIDL_1014();
            param.DailyWorkSchedule_DetailID = Parameter.DailyWorkSchedule_DetailID;
            cls_Delete_Employee_DailyWorkSchedule_Detail.Invoke(Connection, Transaction, param, securityTicket);

            //Put your code here
            return(returnValue);

            #endregion UserCode
        }
        protected static FR_L5DWS_GDWSWDFP_1225 Execute(DbConnection Connection, DbTransaction Transaction, P_L5DWS_GDWSWDFP_1225 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L5DWS_GDWSWDFP_1225();

            List <L5DWS_GDWSWDFT_0946> resultList = new List <L5DWS_GDWSWDFT_0946>();
            DateTime currentDate = Parameter.StartDate.Date;
            while (currentDate.Ticks <= Parameter.EndDate.Ticks)
            {
                ORM_CMN_STR_PPS_DailyWorkSchedule.Query scheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
                scheduleQuery.Tenant_RefID    = securityTicket.TenantID;
                scheduleQuery.IsDeleted       = false;
                scheduleQuery.WorkSheduleDate = currentDate;
                List <ORM_CMN_STR_PPS_DailyWorkSchedule> workSechedules = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, scheduleQuery);
                var scheduleList = new List <L5DWS_GDWSWDFT_0946>();
                foreach (var workSchedule in workSechedules)
                {
                    var resultItem = new L5DWS_GDWSWDFT_0946();
                    resultItem.BreakDurationTime_in_sec        = workSchedule.BreakDurationTime_in_sec;
                    resultItem.CMN_STR_PPS_DailyWorkScheduleID = workSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                    resultItem.ContractWorkerText = workSchedule.ContractWorkerText;
                    resultItem.Employee_RefID     = workSchedule.Employee_RefID;
                    resultItem.InstantiatedWithShiftTemplate_RefID    = workSchedule.InstantiatedWithShiftTemplate_RefID;
                    resultItem.IsBreakTimeManualySpecified            = workSchedule.IsBreakTimeManualySpecified;
                    resultItem.IsWorkShedule_Confirmed                = workSchedule.IsWorkShedule_Confirmed;
                    resultItem.R_ContractSpecified_WorkingTime_in_sec = workSchedule.R_ContractSpecified_WorkingTime_in_sec;
                    resultItem.R_WorkDay_Duration_in_sec              = workSchedule.R_WorkDay_Duration_in_sec;
                    resultItem.R_WorkDay_End_in_sec                  = workSchedule.R_WorkDay_End_in_sec;
                    resultItem.R_WorkDay_Start_in_sec                = workSchedule.R_WorkDay_Start_in_sec;
                    resultItem.SheduleBreakTemplate_RefID            = workSchedule.SheduleBreakTemplate_RefID;
                    resultItem.WorkingSheduleComment                 = workSchedule.WorkingSheduleComment;
                    resultItem.WorkShedule_ConfirmedBy_Account_RefID = workSchedule.WorkShedule_ConfirmedBy_Account_RefID;
                    resultItem.WorkSheduleDate = workSchedule.WorkSheduleDate;
                    P_L5DWS_GDWSDFDWSID_1156 par = new P_L5DWS_GDWSDFDWSID_1156();
                    par.DailyWorkScheduleID = workSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                    List <L5DWS_GDWSDFDWSID_1156>     details       = cls_Get_DailyWorkSchedule_Detail_For_DailyWorkScheduleID.Invoke(Connection, Transaction, par, securityTicket).Result.ToList();
                    List <L5DWS_GDWSWDFT_0946_Detail> resultDetails = new List <L5DWS_GDWSWDFT_0946_Detail>();
                    foreach (var detail in details)
                    {
                        L5DWS_GDWSWDFT_0946_Detail resultDetail = new L5DWS_GDWSWDFT_0946_Detail();
                        resultDetail.AbsenceReason_RefID = detail.AbsenceReason_RefID;
                        resultDetail.CMN_CAL_Event_RefID = detail.CMN_CAL_Event_RefID;
                        resultDetail.CMN_STR_PPS_DailyWorkSchedule_DetailID = detail.CMN_STR_PPS_DailyWorkSchedule_DetailID;
                        resultDetail.FromTime_as_DateTime      = detail.FromTime_as_DateTime;
                        resultDetail.FromTime_as_time          = detail.FromTime_as_time;
                        resultDetail.IsWorkBreak               = detail.IsWorkBreak;
                        resultDetail.SheduleForWorkplace_RefID = detail.SheduleForWorkplace_RefID;
                        resultDetail.TotalWorkTime_as_time     = detail.TotalWorkTime_as_time;
                        resultDetail.ToTime_as_DateTime        = detail.ToTime_as_DateTime;
                        resultDetail.ToTime_as_time            = detail.ToTime_as_time;
                        resultDetail.LeaveRequest_RefID        = detail.LeaveRequest_RefID;
                        resultDetails.Add(resultDetail);
                    }
                    resultItem.Details = resultDetails.ToArray();
                    P_L5DWS_GEWTFD_1648 param = new P_L5DWS_GEWTFD_1648();
                    param.currentDate = currentDate;

                    scheduleList.Add(resultItem);
                }
                resultList.AddRange(scheduleList);
                currentDate = currentDate.AddDays(1);
            }

            returnValue.Result = new L5DWS_GDWSWDFP_1225();
            returnValue.Result.DailyWorkSchedulesWithDetails = resultList.ToArray();
            //Put your code here
            return(returnValue);

            #endregion UserCode
        }
 ///<summary>
 /// Invokes the method for the given Connection, and Transaction, leaving them open/not commited if no exceptions occured
 ///<summary>
 public static FR_L5DWS_GDWSWDFP_1225 Invoke(DbConnection Connection, DbTransaction Transaction, P_L5DWS_GDWSWDFP_1225 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
 {
     return(Invoke(Connection, Transaction, null, Parameter, securityTicket));
 }
        ///<summary>
        /// Method Invocation of wrapper classes
        ///<summary>
        protected static FR_L5DWS_GDWSWDFP_1225 Invoke(DbConnection Connection, DbTransaction Transaction, string ConnectionString, P_L5DWS_GDWSWDFP_1225 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            bool cleanupConnection  = Connection == null;
            bool cleanupTransaction = Transaction == null;

            FR_L5DWS_GDWSWDFP_1225 functionReturn = new FR_L5DWS_GDWSWDFP_1225();

            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 { }

                Guid errorID = Guid.NewGuid();
                ServerLog.Instance.Fatal("Application error occured. ErrorID = " + errorID, ex);
                throw new Exception("Exception occured in method cls_Get_DailyWorkSchedules_WithDetails_For_Period", ex);
            }
            return(functionReturn);
        }
 ///<summary>
 /// Opens the connection/transaction for the given connectionString, and closes them when complete
 ///<summary>
 public static FR_L5DWS_GDWSWDFP_1225 Invoke(string ConnectionString, P_L5DWS_GDWSWDFP_1225 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
 {
     return(Invoke(null, null, ConnectionString, Parameter, securityTicket));
 }