protected static FR_L5DWS_GDWSFW_1148 Execute(DbConnection Connection, DbTransaction Transaction, P_L5DWS_GDWSFW_1148 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L5DWS_GDWSFW_1148();
            //Put your code here
            returnValue.Result = new L5DWS_GDWSFW_1148();

            List <L5DWS_GDWSFT_1154> resultSchedules = new List <L5DWS_GDWSFT_1154>();

            DateTime scheduleDate = Parameter.WeekStartDate.Date;

            for (var i = 0; i < 7; i++)
            {
                ORM_CMN_STR_PPS_DailyWorkSchedule.Query scheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
                scheduleQuery.WorkSheduleDate = scheduleDate;
                scheduleQuery.Tenant_RefID    = securityTicket.TenantID;
                scheduleQuery.IsDeleted       = false;

                var schedules = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, scheduleQuery);

                foreach (var schedule in schedules)
                {
                    L5DWS_GDWSFT_1154 resultSchedule = new L5DWS_GDWSFT_1154();
                    resultSchedule.BreakDurationTime_in_sec        = schedule.BreakDurationTime_in_sec;
                    resultSchedule.CMN_STR_PPS_DailyWorkScheduleID = schedule.CMN_STR_PPS_DailyWorkScheduleID;
                    resultSchedule.ContractWorkerText = schedule.ContractWorkerText;
                    resultSchedule.Employee_RefID     = schedule.Employee_RefID;
                    resultSchedule.InstantiatedWithShiftTemplate_RefID    = schedule.InstantiatedWithShiftTemplate_RefID;
                    resultSchedule.IsBreakTimeManualySpecified            = schedule.IsBreakTimeManualySpecified;
                    resultSchedule.IsWorkShedule_Confirmed                = schedule.IsWorkShedule_Confirmed;
                    resultSchedule.R_ContractSpecified_WorkingTime_in_sec = schedule.R_ContractSpecified_WorkingTime_in_sec;
                    resultSchedule.R_WorkDay_Duration_in_sec              = schedule.R_WorkDay_Duration_in_sec;
                    resultSchedule.R_WorkDay_Start_in_sec                = schedule.R_WorkDay_Start_in_sec;
                    resultSchedule.SheduleBreakTemplate_RefID            = schedule.SheduleBreakTemplate_RefID;
                    resultSchedule.WorkingSheduleComment                 = schedule.WorkingSheduleComment;
                    resultSchedule.WorkShedule_ConfirmedBy_Account_RefID = schedule.WorkShedule_ConfirmedBy_Account_RefID;
                    resultSchedule.WorkSheduleDate      = schedule.WorkSheduleDate;
                    resultSchedule.R_WorkDay_End_in_sec = schedule.R_WorkDay_End_in_sec;


                    resultSchedules.Add(resultSchedule);
                }
                scheduleDate = scheduleDate.AddDays(1);
            }


            returnValue.Result.DailyWorkSchedules = resultSchedules.ToArray();

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_L5DWS_GDWSWDFT_0946_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L5DWS_GDWSWDFT_0946 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L5DWS_GDWSWDFT_0946_Array();
            //Put your code here



            ORM_CMN_STR_PPS_DailyWorkSchedule.Query scheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
            scheduleQuery.Tenant_RefID    = securityTicket.TenantID;
            scheduleQuery.IsDeleted       = false;
            scheduleQuery.WorkSheduleDate = Parameter.WorkSheduleDate.Date;
            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 = Parameter.WorkSheduleDate.Date;

                scheduleList.Add(resultItem);
            }
            returnValue.Result = scheduleList.ToArray();
            return(returnValue);

            #endregion UserCode
        }
Exemplo n.º 3
0
        protected static FR_L6DWS_LPD_1451_Array Execute(DbConnection Connection, DbTransaction Transaction, P_L6DWS_LPD_1451 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L6DWS_LPD_1451_Array();

            LeaveRequestUtils leaveRequestUtil = new LeaveRequestUtils();

            var dayCount = 1;
            if (Parameter.LoadFor_Week)
            {
                dayCount = 7;
            }

            for (int i = 0; i < dayCount; i++)
            {
                var date = Parameter.WorkSheduleDate.Date.AddDays(i);
                if (Parameter.LoadFrom_LastWeek || Parameter.LoadFrom_Specific_Date_Or_Week)
                {
                    P_L5DWS_GDWSWDFT_0946 param = new P_L5DWS_GDWSWDFT_0946();
                    if (Parameter.LoadFrom_Specific_Date_Or_Week)
                    {
                        param.WorkSheduleDate = Parameter.IfLoadFrom_Specific_Date_Or_Week_DateTime.AddDays(i);
                    }
                    else
                    {
                        param.WorkSheduleDate = Parameter.WorkSheduleDate.AddDays(-7).AddDays(i);
                    }

                    var lastWeekSchedules = cls_Get_DailyWorkSchedules_WithDetails_For_Date.Invoke(Connection, Transaction, param, securityTicket).Result;

                    foreach (var lastWeekSchedule in lastWeekSchedules)
                    {
                        var empInfo = Parameter.EmployeeInformation.FirstOrDefault(x => x.EmployeeID == lastWeekSchedule.Employee_RefID);

                        ORM_CMN_STR_PPS_DailyWorkSchedule.Query dailyWorkScheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
                        dailyWorkScheduleQuery.Employee_RefID  = lastWeekSchedule.Employee_RefID;
                        dailyWorkScheduleQuery.WorkSheduleDate = date;
                        dailyWorkScheduleQuery.IsDeleted       = false;
                        dailyWorkScheduleQuery.Tenant_RefID    = securityTicket.TenantID;

                        var oldDailyWorkSchedule = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, dailyWorkScheduleQuery).FirstOrDefault();

                        if (oldDailyWorkSchedule != null)
                        {
                            ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query oldDailyWorkScheduleDetailQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query();
                            oldDailyWorkScheduleDetailQuery.DailyWorkSchedule_RefID = oldDailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                            oldDailyWorkScheduleDetailQuery.IsDeleted    = false;
                            oldDailyWorkScheduleDetailQuery.Tenant_RefID = securityTicket.TenantID;

                            var oldDailyWorkScheduleDetails = ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query.Search(Connection, Transaction, oldDailyWorkScheduleDetailQuery);

                            List <P_L6DWS_DDWS_1126_Details> detailsList = new List <P_L6DWS_DDWS_1126_Details>();

                            foreach (var detail in oldDailyWorkScheduleDetails)
                            {
                                ORM_CMN_CAL_Event.Query eventQuery = new ORM_CMN_CAL_Event.Query();
                                eventQuery.CMN_CAL_EventID = detail.CMN_CAL_Event_RefID;
                                eventQuery.IsDeleted       = false;
                                eventQuery.Tenant_RefID    = securityTicket.TenantID;

                                var detailEvent = ORM_CMN_CAL_Event.Query.Search(Connection, Transaction, eventQuery).FirstOrDefault();

                                if (detailEvent != null)
                                {
                                    P_L6DWS_DDWS_1126_Details detailParam = new P_L6DWS_DDWS_1126_Details();
                                    detailParam.DailyWorkSchedule_DetailID = detail.CMN_STR_PPS_DailyWorkSchedule_DetailID;
                                    detailParam.durationInDays             = leaveRequestUtil.LeaveRequestDuration(detailEvent.StartTime, detailEvent.EndTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == lastWeekSchedule.Employee_RefID), true);
                                    detailParam.durationInHours            = leaveRequestUtil.LeaveRequestDuration(detailEvent.StartTime, detailEvent.EndTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == lastWeekSchedule.Employee_RefID), false);
                                    detailsList.Add(detailParam);
                                }
                            }


                            P_L6DWS_DDWS_1126 deleteParam = new P_L6DWS_DDWS_1126();
                            deleteParam.CMN_STR_PPS_DailyWorkScheduleID = oldDailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                            deleteParam.Details = detailsList.ToArray();
                            cls_Delete_DailyWorkSchedule.Invoke(Connection, Transaction, deleteParam, securityTicket);
                        }

                        ORM_CMN_STR_PPS_DailyWorkSchedule dailyWorkSchedule = new ORM_CMN_STR_PPS_DailyWorkSchedule();
                        dailyWorkSchedule.BreakDurationTime_in_sec               = lastWeekSchedule.BreakDurationTime_in_sec;
                        dailyWorkSchedule.ContractWorkerText                     = lastWeekSchedule.ContractWorkerText;
                        dailyWorkSchedule.Employee_RefID                         = lastWeekSchedule.Employee_RefID;
                        dailyWorkSchedule.InstantiatedWithShiftTemplate_RefID    = lastWeekSchedule.InstantiatedWithShiftTemplate_RefID;
                        dailyWorkSchedule.IsBreakTimeManualySpecified            = lastWeekSchedule.IsBreakTimeManualySpecified;
                        dailyWorkSchedule.IsWorkShedule_Confirmed                = lastWeekSchedule.IsWorkShedule_Confirmed;
                        dailyWorkSchedule.R_ContractSpecified_WorkingTime_in_sec = empInfo.ContractInfo.FirstOrDefault(x => x.Date.Date == date.Date).ContractSpecified_WorkingTime_in_sec;
                        dailyWorkSchedule.R_WorkDay_Duration_in_sec              = lastWeekSchedule.R_WorkDay_Duration_in_sec;
                        dailyWorkSchedule.R_WorkDay_End_in_sec                   = lastWeekSchedule.R_WorkDay_End_in_sec;
                        dailyWorkSchedule.R_WorkDay_Start_in_sec                 = lastWeekSchedule.R_WorkDay_Start_in_sec;
                        dailyWorkSchedule.SheduleBreakTemplate_RefID             = lastWeekSchedule.SheduleBreakTemplate_RefID;
                        dailyWorkSchedule.Tenant_RefID          = securityTicket.TenantID;
                        dailyWorkSchedule.WorkingSheduleComment = lastWeekSchedule.WorkingSheduleComment;
                        dailyWorkSchedule.WorkShedule_ConfirmedBy_Account_RefID = lastWeekSchedule.WorkShedule_ConfirmedBy_Account_RefID;
                        dailyWorkSchedule.WorkSheduleDate = date;
                        dailyWorkSchedule.Save(Connection, Transaction);

                        foreach (var lastWeekDetail in lastWeekSchedule.Details)
                        {
                            ORM_CMN_STR_PPS_DailyWorkSchedule_Detail detail = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail();
                            detail.AbsenceReason_RefID = lastWeekDetail.AbsenceReason_RefID;
                            if (lastWeekDetail.CMN_CAL_Event_RefID != Guid.Empty)
                            {
                                ORM_CMN_CAL_Event.Query eventQuery = new ORM_CMN_CAL_Event.Query();
                                eventQuery.CMN_CAL_EventID = lastWeekDetail.CMN_CAL_Event_RefID;
                                eventQuery.Tenant_RefID    = securityTicket.TenantID;
                                eventQuery.IsDeleted       = false;

                                var eventResult            = ORM_CMN_CAL_Event.Query.Search(Connection, Transaction, eventQuery).FirstOrDefault();
                                ORM_CMN_CAL_Event newEvent = new ORM_CMN_CAL_Event();
                                newEvent.CalendarInstance_RefID = eventResult.CalendarInstance_RefID;
                                newEvent.EndTime = date.AddHours(eventResult.EndTime.TimeOfDay.TotalHours);
                                newEvent.IsCalendarEvent_Editable = eventResult.IsCalendarEvent_Editable;
                                newEvent.IsRepetitive             = eventResult.IsRepetitive;
                                newEvent.IsWholeDayEvent          = eventResult.IsWholeDayEvent;
                                newEvent.R_EventDuration_sec      = eventResult.R_EventDuration_sec;
                                newEvent.Repetition_RefID         = eventResult.Repetition_RefID;
                                newEvent.StartTime    = date.AddHours(eventResult.StartTime.TimeOfDay.TotalHours);
                                newEvent.Tenant_RefID = securityTicket.TenantID;
                                newEvent.Save(Connection, Transaction);
                                detail.CMN_CAL_Event_RefID = newEvent.CMN_CAL_EventID;
                            }
                            else
                            {
                                detail.CMN_CAL_Event_RefID = Guid.Empty;
                            }
                            detail.DailyWorkSchedule_RefID   = dailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                            detail.IsWorkBreak               = lastWeekDetail.IsWorkBreak;
                            detail.SheduleForWorkplace_RefID = lastWeekDetail.SheduleForWorkplace_RefID;
                            detail.Tenant_RefID              = securityTicket.TenantID;


                            if (detail.AbsenceReason_RefID != Guid.Empty)
                            {
                                ORM_CMN_CAL_Event leaveRequestEvent = new ORM_CMN_CAL_Event();
                                leaveRequestEvent.EndTime      = date.AddSeconds(lastWeekDetail.ToTime_as_DateTime.TimeOfDay.TotalSeconds);
                                leaveRequestEvent.StartTime    = date.AddSeconds(lastWeekDetail.FromTime_as_DateTime.TimeOfDay.TotalSeconds);
                                leaveRequestEvent.Tenant_RefID = securityTicket.TenantID;
                                leaveRequestEvent.Save(Connection, Transaction);

                                var approvalItem = new ORM_CMN_CAL_Event_Approval();
                                approvalItem.Event_RefID             = leaveRequestEvent.CMN_CAL_EventID;
                                approvalItem.IsApprovalProcessDenied = false;
                                approvalItem.IsApprovalProcessOpened = false;
                                approvalItem.IsApproved = true;

                                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 == detail.AbsenceReason_RefID))
                                    {
                                        var reason = absenceReasons.FirstOrDefault(r => r.CMN_BPT_STA_AbsenceReasonID == detail.AbsenceReason_RefID);
                                        if (reason != null)
                                        {
                                            authRequired = reason.IsAuthorizationRequired;
                                        }
                                    }
                                }

                                L6TN_GSFT_1017 settings = cls_Get_Settings_For_Tenant.Invoke(Connection, Transaction, securityTicket).Result;
                                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);

                                var leaveRequest = new ORM_CMN_BPT_EMP_Employee_LeaveRequest();
                                leaveRequest.CMN_BPT_STA_AbsenceReason_RefID = detail.AbsenceReason_RefID;
                                leaveRequest.CMN_CAL_Event_Approval_RefID    = approvalItem.CMN_CAL_Event_ApprovalID;
                                leaveRequest.CMN_CAL_Event_RefID             = leaveRequestEvent.CMN_CAL_EventID;
                                leaveRequest.IsDeleted = false;
                                leaveRequest.RequestedBy_Employee_RefID  = Parameter.LoggedEmployeeID;
                                leaveRequest.RequestedFor_Employee_RefID = lastWeekSchedule.Employee_RefID;
                                leaveRequest.Tenant_RefID       = securityTicket.TenantID;
                                leaveRequest.Creation_Timestamp = DateTime.Now;
                                leaveRequest.Save(Connection, Transaction);
                                detail.CMN_BPT_EMP_Employee_LeaveRequest_RefID = leaveRequest.CMN_BPT_EMP_Employee_LeaveRequestID;

                                detail.Save(Connection, Transaction);

                                #region updateStatistics

                                P_L5TN_GCTFFTAY_1320 timeFrameParam = new P_L5TN_GCTFFTAY_1320();
                                timeFrameParam.Year = leaveRequestEvent.StartTime.Year;
                                var timeFrame = cls_Get_CalculationTimeFramesForTenant_And_Year.Invoke(Connection, Transaction, timeFrameParam, securityTicket).Result.CalculationTimeFrame;

                                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;

                                    var durationInDays  = leaveRequestUtil.LeaveRequestDuration(leaveRequestEvent.StartTime, leaveRequestEvent.EndTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == leaveRequest.RequestedFor_Employee_RefID), true);
                                    var durationInHours = leaveRequestUtil.LeaveRequestDuration(leaveRequestEvent.StartTime, leaveRequestEvent.EndTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == leaveRequest.RequestedFor_Employee_RefID), false);

                                    if (approvalItem.IsApproved)
                                    {
                                        updateStatisticsParam.R_TotalAllowedAbsenceTime_InDays  = statistics.R_TotalAllowedAbsenceTime_InDays - durationInDays;
                                        updateStatisticsParam.R_TotalAllowedAbsenceTime_InHours = statistics.R_TotalAllowedAbsenceTime_InHours - durationInHours;

                                        updateStatisticsParam.R_RequestReservedAbsence_InDays  = statistics.R_RequestReservedAbsence_InDays;
                                        updateStatisticsParam.R_RequestReservedAbsence_InHours = statistics.R_RequestReservedAbsence_InHours;

                                        updateStatisticsParam.R_AbsenceTimeUsed_InDays  = statistics.R_AbsenceTimeUsed_InDays + durationInDays;
                                        updateStatisticsParam.R_AbsenceTimeUsed_InHours = statistics.R_AbsenceTimeUsed_InHours + durationInHours;
                                    }
                                    else
                                    {
                                        updateStatisticsParam.R_TotalAllowedAbsenceTime_InDays  = statistics.R_TotalAllowedAbsenceTime_InDays;
                                        updateStatisticsParam.R_TotalAllowedAbsenceTime_InHours = statistics.R_TotalAllowedAbsenceTime_InHours;

                                        updateStatisticsParam.R_RequestReservedAbsence_InDays  = statistics.R_RequestReservedAbsence_InDays + durationInDays;
                                        updateStatisticsParam.R_RequestReservedAbsence_InHours = statistics.R_RequestReservedAbsence_InHours + durationInHours;

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


                                    var res = cls_Save_Employee_AbsenceReason_TimeframeStatistic.Invoke(Connection, Transaction, updateStatisticsParam, securityTicket);
                                }
                                #endregion
                            }
                            else
                            {
                                detail.Save(Connection, Transaction);
                            }
                        }
                    }
                }
                else if (Parameter.LoadFrom_StandardTimes)
                {
                    bool isEven = false;

                    if (CronExtender.weekNumber(date) % 2 == 0)
                    {
                        isEven = true;
                    }

                    ORM_CMN_BPT_EMP_Employee_WorkplaceAssignment.Query workplaceAssignementQuery = new ORM_CMN_BPT_EMP_Employee_WorkplaceAssignment.Query();
                    foreach (var empInfo in Parameter.EmployeeInformation)
                    {
                        var empID = empInfo.EmployeeID;
                        workplaceAssignementQuery.CMN_BPT_EMP_Employee_RefID = empID;
                        workplaceAssignementQuery.Tenant_RefID = securityTicket.TenantID;
                        workplaceAssignementQuery.IsDeleted    = false;

                        var workplaceAssignements = ORM_CMN_BPT_EMP_Employee_WorkplaceAssignment.Query.Search(Connection, Transaction, workplaceAssignementQuery);

                        if (workplaceAssignements != null)
                        {
                            var workplaceAssignement = workplaceAssignements.FirstOrDefault(x => x.WorkplaceAssignment_StartDate <= date && (x.WorkplaceAssignment_EndDate >= date || x.WorkplaceAssignment_EndDate == new DateTime()));

                            if (workplaceAssignement != null)
                            {
                                ORM_CMN_BPT_EMP_WorkplaceAssignments_WorkPattern.Query patternQuery = new ORM_CMN_BPT_EMP_WorkplaceAssignments_WorkPattern.Query();
                                patternQuery.BoundTo_WorkplaceAssignment_RefID = workplaceAssignement.CMN_BPT_EMP_Employee_WorkplaceAssignment;
                                patternQuery.Tenant_RefID = securityTicket.TenantID;
                                patternQuery.IsDeleted    = false;

                                var patterns = ORM_CMN_BPT_EMP_WorkplaceAssignments_WorkPattern.Query.Search(Connection, Transaction, patternQuery);
                                if (patterns != null)
                                {
                                    foreach (var pattern in patterns)
                                    {
                                        if (pattern.IsWeek_Even == isEven || !pattern.IsWeek_Even && pattern.IsWeek_Odd)
                                        {
                                            switch (date.DayOfWeek)
                                            {
                                            case DayOfWeek.Monday:
                                                if (!pattern.IsMonday)
                                                {
                                                    continue;
                                                }
                                                break;

                                            case DayOfWeek.Tuesday:
                                                if (!pattern.IsTuesday)
                                                {
                                                    continue;
                                                }
                                                break;

                                            case DayOfWeek.Wednesday:
                                                if (!pattern.IsWednesday)
                                                {
                                                    continue;
                                                }
                                                break;

                                            case DayOfWeek.Thursday:
                                                if (!pattern.IsThursday)
                                                {
                                                    continue;
                                                }
                                                break;

                                            case DayOfWeek.Friday:
                                                if (!pattern.IsFriday)
                                                {
                                                    continue;
                                                }
                                                break;

                                            case DayOfWeek.Saturday:
                                                if (!pattern.IsSaturday)
                                                {
                                                    continue;
                                                }
                                                break;

                                            case DayOfWeek.Sunday:
                                                if (!pattern.IsSunday)
                                                {
                                                    continue;
                                                }
                                                break;
                                            }


                                            if (pattern.CMN_PPS_ShiftTemplate_RefID == Guid.Empty && pattern.CMN_BPT_STA_AbsenceReason_RefID != Guid.Empty)
                                            {
                                                double   totalTime = 0;
                                                DateTime startTime = date.AddMinutes(empInfo.ContractInfo.FirstOrDefault(x => x.Date == date).startTime);
                                                DateTime endTime   = date.AddMinutes(empInfo.ContractInfo.FirstOrDefault(x => x.Date == date).endTime);


                                                double startTimeInSec = startTime.TimeOfDay.TotalSeconds;
                                                double endTimeInSec   = endTime.TimeOfDay.TotalSeconds;


                                                ORM_CMN_STR_PPS_DailyWorkSchedule.Query dailyWorkScheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
                                                dailyWorkScheduleQuery.Employee_RefID  = empID;
                                                dailyWorkScheduleQuery.WorkSheduleDate = date;
                                                dailyWorkScheduleQuery.IsDeleted       = false;
                                                dailyWorkScheduleQuery.Tenant_RefID    = securityTicket.TenantID;

                                                var oldDailyWorkSchedule = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, dailyWorkScheduleQuery).FirstOrDefault();

                                                if (oldDailyWorkSchedule != null)
                                                {
                                                    ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query oldDailyWorkScheduleDetailQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query();
                                                    oldDailyWorkScheduleDetailQuery.DailyWorkSchedule_RefID = oldDailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                                                    oldDailyWorkScheduleDetailQuery.IsDeleted    = false;
                                                    oldDailyWorkScheduleDetailQuery.Tenant_RefID = securityTicket.TenantID;

                                                    var oldDailyWorkScheduleDetails = ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query.Search(Connection, Transaction, oldDailyWorkScheduleDetailQuery);

                                                    List <P_L6DWS_DDWS_1126_Details> detailsList = new List <P_L6DWS_DDWS_1126_Details>();

                                                    foreach (var detail in oldDailyWorkScheduleDetails)
                                                    {
                                                        ORM_CMN_CAL_Event.Query eventQuery = new ORM_CMN_CAL_Event.Query();
                                                        eventQuery.CMN_CAL_EventID = detail.CMN_CAL_Event_RefID;
                                                        eventQuery.IsDeleted       = false;
                                                        eventQuery.Tenant_RefID    = securityTicket.TenantID;

                                                        var detailEvent = ORM_CMN_CAL_Event.Query.Search(Connection, Transaction, eventQuery).FirstOrDefault();

                                                        if (detailEvent != null)
                                                        {
                                                            P_L6DWS_DDWS_1126_Details deleteDetailParam = new P_L6DWS_DDWS_1126_Details();
                                                            deleteDetailParam.DailyWorkSchedule_DetailID = detail.CMN_STR_PPS_DailyWorkSchedule_DetailID;
                                                            deleteDetailParam.durationInDays             = leaveRequestUtil.LeaveRequestDuration(detailEvent.StartTime, detailEvent.EndTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == empID), true);
                                                            deleteDetailParam.durationInHours            = leaveRequestUtil.LeaveRequestDuration(detailEvent.StartTime, detailEvent.EndTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == empID), false);
                                                            detailsList.Add(deleteDetailParam);
                                                        }
                                                    }


                                                    P_L6DWS_DDWS_1126 deleteParam = new P_L6DWS_DDWS_1126();
                                                    deleteParam.CMN_STR_PPS_DailyWorkScheduleID = oldDailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                                                    deleteParam.Details = detailsList.ToArray();
                                                    cls_Delete_DailyWorkSchedule.Invoke(Connection, Transaction, deleteParam, securityTicket);
                                                }

                                                ORM_CMN_STR_PPS_DailyWorkSchedule dailyWorkSchedule = new ORM_CMN_STR_PPS_DailyWorkSchedule();
                                                dailyWorkSchedule.IsBreakTimeManualySpecified = false;
                                                dailyWorkSchedule.BreakDurationTime_in_sec    = 0;

                                                dailyWorkSchedule.R_WorkDay_Start_in_sec    = (int)startTimeInSec;
                                                dailyWorkSchedule.R_WorkDay_Duration_in_sec = (int)totalTime;
                                                dailyWorkSchedule.R_WorkDay_End_in_sec      = (int)endTimeInSec;
                                                dailyWorkSchedule.R_ContractSpecified_WorkingTime_in_sec = 0;
                                                dailyWorkSchedule.ContractWorkerText = "";
                                                dailyWorkSchedule.Employee_RefID     = empID;
                                                dailyWorkSchedule.WorkSheduleDate    = date;
                                                dailyWorkSchedule.Tenant_RefID       = securityTicket.TenantID;

                                                dailyWorkSchedule.Save(Connection, Transaction);


                                                var durationInDays  = leaveRequestUtil.LeaveRequestDuration(date.AddSeconds(startTimeInSec), date.AddSeconds(endTimeInSec), Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == empID), true);
                                                var durationInHours = leaveRequestUtil.LeaveRequestDuration(date.AddSeconds(startTimeInSec), date.AddSeconds(endTimeInSec), Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == empID), false);

                                                P_L6DWS_SDWSD_1130 detailParam = new P_L6DWS_SDWSD_1130();
                                                detailParam.WorkTime_Start              = dailyWorkSchedule.WorkSheduleDate.AddSeconds(startTimeInSec);
                                                detailParam.WorkTime_End                = dailyWorkSchedule.WorkSheduleDate.AddSeconds(endTimeInSec);
                                                detailParam.DailyWorkSchedule_RefID     = dailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                                                detailParam.IsWorkBreak                 = false;
                                                detailParam.SheduleForWorkplace_RefID   = Guid.Empty;
                                                detailParam.AbsenceReason_RefID         = pattern.CMN_BPT_STA_AbsenceReason_RefID;
                                                detailParam.RequestedBy_Employee_RefID  = Guid.Empty;
                                                detailParam.RequestedFor_Employee_RefID = empID;
                                                detailParam.durationInDays              = durationInDays;
                                                detailParam.durationInHours             = durationInHours;
                                                cls_Save_DailyWorkSchedule_Detail.Invoke(Connection, Transaction, detailParam, securityTicket);
                                            }
                                            else if (pattern.CMN_PPS_ShiftTemplate_RefID != Guid.Empty)
                                            {
                                                ORM_CMN_PPS_ShiftTemplate.Query shiftTemplateQuery = new ORM_CMN_PPS_ShiftTemplate.Query();
                                                shiftTemplateQuery.CMN_PPS_ShiftTemplateID = pattern.CMN_PPS_ShiftTemplate_RefID;
                                                shiftTemplateQuery.Tenant_RefID            = securityTicket.TenantID;
                                                shiftTemplateQuery.IsDeleted = false;


                                                var shiftTemplate = ORM_CMN_PPS_ShiftTemplate.Query.Search(Connection, Transaction, shiftTemplateQuery).FirstOrDefault();

                                                if (shiftTemplate != null)
                                                {
                                                    ORM_CMN_STR_PPS_DailyWorkSchedule.Query dailyWorkScheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
                                                    dailyWorkScheduleQuery.Employee_RefID  = empID;
                                                    dailyWorkScheduleQuery.WorkSheduleDate = date;
                                                    dailyWorkScheduleQuery.IsDeleted       = false;
                                                    dailyWorkScheduleQuery.Tenant_RefID    = securityTicket.TenantID;

                                                    var oldDailyWorkSchedule = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, dailyWorkScheduleQuery).FirstOrDefault();

                                                    if (oldDailyWorkSchedule != null)
                                                    {
                                                        ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query oldDailyWorkScheduleDetailQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query();
                                                        oldDailyWorkScheduleDetailQuery.DailyWorkSchedule_RefID = oldDailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                                                        oldDailyWorkScheduleDetailQuery.IsDeleted    = false;
                                                        oldDailyWorkScheduleDetailQuery.Tenant_RefID = securityTicket.TenantID;

                                                        var oldDailyWorkScheduleDetails = ORM_CMN_STR_PPS_DailyWorkSchedule_Detail.Query.Search(Connection, Transaction, oldDailyWorkScheduleDetailQuery);

                                                        List <P_L6DWS_DDWS_1126_Details> detailsList = new List <P_L6DWS_DDWS_1126_Details>();

                                                        foreach (var detail in oldDailyWorkScheduleDetails)
                                                        {
                                                            ORM_CMN_CAL_Event.Query eventQuery = new ORM_CMN_CAL_Event.Query();
                                                            eventQuery.CMN_CAL_EventID = detail.CMN_CAL_Event_RefID;
                                                            eventQuery.IsDeleted       = false;
                                                            eventQuery.Tenant_RefID    = securityTicket.TenantID;

                                                            var detailEvent = ORM_CMN_CAL_Event.Query.Search(Connection, Transaction, eventQuery).FirstOrDefault();

                                                            if (detailEvent != null)
                                                            {
                                                                P_L6DWS_DDWS_1126_Details detailParam = new P_L6DWS_DDWS_1126_Details();
                                                                detailParam.DailyWorkSchedule_DetailID = detail.CMN_STR_PPS_DailyWorkSchedule_DetailID;
                                                                detailParam.durationInDays             = leaveRequestUtil.LeaveRequestDuration(detailEvent.StartTime, detailEvent.EndTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == empID), true);
                                                                detailParam.durationInHours            = leaveRequestUtil.LeaveRequestDuration(detailEvent.StartTime, detailEvent.EndTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == empID), false);
                                                                detailsList.Add(detailParam);
                                                            }
                                                        }


                                                        P_L6DWS_DDWS_1126 deleteParam = new P_L6DWS_DDWS_1126();
                                                        deleteParam.CMN_STR_PPS_DailyWorkScheduleID = oldDailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                                                        deleteParam.Details = detailsList.ToArray();
                                                        cls_Delete_DailyWorkSchedule.Invoke(Connection, Transaction, deleteParam, securityTicket);
                                                    }
                                                    P_L5DWS_SDWSFST_1447 param = new P_L5DWS_SDWSFST_1447();
                                                    param.Employee_RefID = empID;
                                                    param.InstantiatedWithShiftTemplate_RefID = shiftTemplate.CMN_PPS_ShiftTemplateID;
                                                    param.WorkSheduleDate = date;
                                                    param.R_ContractSpecified_WorkingTime_in_sec = empInfo.ContractInfo.FirstOrDefault(x => x.Date == date).ContractSpecified_WorkingTime_in_sec;
                                                    cls_Save_DailyWorkSchedule_For_ShiftTemplate.Invoke(Connection, Transaction, param, securityTicket);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }



            //Put your code here
            return(returnValue);

            #endregion UserCode
        }
Exemplo n.º 4
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L6LR_SLR_1142 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();

            ORM_CMN_BPT_STA_AbsenceReason.Query selectedLeaveTypeQuery = new ORM_CMN_BPT_STA_AbsenceReason.Query();
            selectedLeaveTypeQuery.Tenant_RefID = securityTicket.TenantID;
            selectedLeaveTypeQuery.CMN_BPT_STA_AbsenceReasonID = Parameter.LeaveRequest.AbsenceReason_RefID;
            selectedLeaveTypeQuery.IsDeleted = false;

            var selectedLeaveType = ORM_CMN_BPT_STA_AbsenceReason.Query.Search(Connection, Transaction, selectedLeaveTypeQuery).FirstOrDefault();

            LeaveRequestUtils leaveRequestUtils = new LeaveRequestUtils();

            P_L5LR_SELR_255 par      = Parameter.LeaveRequest;
            L6TN_GSFT_1017  settings = cls_Get_Settings_For_Tenant.Invoke(Connection, Transaction, securityTicket).Result;
            par.NumberOfResponsiblePersonsRequiredToApprove = settings.NumberOfResponsiblePersonsRequiredToApprove;
            if (settings.NumberOfResponsiblePersonsRequiredToApprove == 0 || !Parameter.IsAuthRequired)
            {
                par.IsApprovalProcessOpened = false;
                par.IsApproved = true;
            }
            Guid leaveRequestID = cls_Save_Employee_LeaveRequest.Invoke(Connection, Transaction, par, securityTicket).Result;
            returnValue.Result = leaveRequestID;
            P_L5CT_GER2AAR_1258 getParam = new P_L5CT_GER2AAR_1258();
            getParam.AbsenceReasonID = Parameter.LeaveRequest.AbsenceReason_RefID;
            getParam.ForEmployeeID   = Parameter.LeaveRequest.RequestedFor_Employee_RefID;
            L5CT_GER2AAR_1258 wc2aar = cls_Get_EmploymentRelationships_2_AllowedAbsenceReasons.Invoke(Connection, Transaction, getParam, securityTicket).Result;
            L5EM_GEFE_1150_WorkingContract activeWorkingContract = new L5EM_GEFE_1150_WorkingContract();
            P_L5EM_GEFE_1150 param = new P_L5EM_GEFE_1150();
            param.EmployeeID = Parameter.LeaveRequest.RequestedFor_Employee_RefID;
            var employeeData = cls_Get_Employee_For_EmployeeID.Invoke(Connection, Transaction, param, securityTicket).Result;
            if (employeeData != null && employeeData.WorkingContracts != null)
            {
                activeWorkingContract = employeeData.WorkingContracts.FirstOrDefault(t => t.IsContract_Active == true);
                if (wc2aar == null)
                {
                    if (activeWorkingContract != null)
                    {
                        ORM_CMN_BPT_EMP_WorkingContract_AllowedAbsenceReason workingContractToabsenceReason = new ORM_CMN_BPT_EMP_WorkingContract_AllowedAbsenceReason();
                        workingContractToabsenceReason.ContractAllowedAbsence_per_Month = 0;
                        workingContractToabsenceReason.WorkingContract_RefID            = activeWorkingContract.CMN_BPT_EMP_WorkingContractID;
                        workingContractToabsenceReason.IsAbsenceCalculated_InDays       = activeWorkingContract.IsWorkTimeCalculated_InDays;
                        workingContractToabsenceReason.IsAbsenceCalculated_InHours      = activeWorkingContract.IsWorkTimeCalculated_InHours;
                        workingContractToabsenceReason.ContractAllowedAbsence_per_Month = 0;
                        workingContractToabsenceReason.STA_AbsenceReason_RefID          = Parameter.LeaveRequest.AbsenceReason_RefID;
                        workingContractToabsenceReason.Tenant_RefID = securityTicket.TenantID;
                        workingContractToabsenceReason.Save(Connection, Transaction);
                    }
                }
            }


            // update statistics ************************************************
            var timeFrame = cls_Get_CalculationTimeFramesForTenant.Invoke(Connection, Transaction, securityTicket).Result.Where(x => x.CalculationTimeframe_StartDate.Year == par.StartTime.Year).FirstOrDefault();
            if (timeFrame == null)
            {
                ORM_CMN_CAL_CalculationTimeframe timeFramePar = new ORM_CMN_CAL_CalculationTimeframe();
                timeFramePar.CalculationTimeframe_StartDate        = new DateTime(par.StartTime.Year, 1, 1);
                timeFramePar.CalculationTimefrate_EndDate          = new DateTime(0);
                timeFramePar.CalculationTimeframe_EstimatedEndDate = new DateTime(par.StartTime.Year, 12, 31);
                timeFramePar.IsCalculationTimeframe_Active         = false;
                timeFramePar.Tenant_RefID = securityTicket.TenantID;
                timeFramePar.Save(Connection, Transaction);
                L5EM_GEFT_0959[] employees = cls_Get_Employees_For_Tenant.Invoke(Connection, Transaction, securityTicket).Result;
                foreach (var emp in employees)
                {
                    ORM_CMN_BPT_EMP_EmploymentRelationship_Timeframe workingContactTimeFrame = new ORM_CMN_BPT_EMP_EmploymentRelationship_Timeframe();
                    workingContactTimeFrame.CalculationTimeframe_RefID = timeFramePar.CMN_CAL_CalculationTimeframeID;
                    workingContactTimeFrame.CMN_BPT_EMP_EmploymentRelationship_TimeframeID = emp.CMN_BPT_EMP_EmploymentRelationshipID;
                    workingContactTimeFrame.Tenant_RefID = securityTicket.TenantID;
                    workingContactTimeFrame.Save(Connection, Transaction);
                }

                ORM_CMN_BPT_EMP_Employee_AbsenceReason_TimeframeStatistic timeFrameStatisticsPar = new ORM_CMN_BPT_EMP_Employee_AbsenceReason_TimeframeStatistic();
                timeFrameStatisticsPar.AbsenceReason_RefID        = par.AbsenceReason_RefID;
                timeFrameStatisticsPar.CalculationTimeframe_RefID = timeFramePar.CMN_CAL_CalculationTimeframeID;
                timeFrameStatisticsPar.Employee_RefID             = par.RequestedFor_Employee_RefID;
                timeFrameStatisticsPar.R_AbsenceCarryOver_InDays  = 0;
                timeFrameStatisticsPar.R_AbsenceCarryOver_InHours = 0;
                double timeToSubtractDays  = 0;
                double timeToSubtractHours = 0;

                if (par.IsApproved)
                {
                    timeToSubtractDays  = Parameter.durationInDays;
                    timeToSubtractHours = Parameter.durationInHours;
                    timeFrameStatisticsPar.R_RequestReservedAbsence_InDays  = 0;
                    timeFrameStatisticsPar.R_RequestReservedAbsence_InHours = 0;
                    timeFrameStatisticsPar.R_AbsenceTimeUsed_InDays         = Parameter.durationInDays;
                    timeFrameStatisticsPar.R_AbsenceTimeUsed_InHours        = Parameter.durationInHours;
                }
                else
                {
                    timeFrameStatisticsPar.R_RequestReservedAbsence_InDays  = Parameter.durationInDays;
                    timeFrameStatisticsPar.R_RequestReservedAbsence_InHours = Parameter.durationInDays;
                    timeFrameStatisticsPar.R_AbsenceTimeUsed_InDays         = 0;
                    timeFrameStatisticsPar.R_AbsenceTimeUsed_InHours        = 0;
                }
                if (wc2aar != null && activeWorkingContract != null)
                {
                    if (wc2aar.IsAbsenceCalculated_InDays)
                    {
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InDays  = wc2aar.ContractAllowedAbsence_per_Month - timeToSubtractDays;
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InHours = WeeklyOfficeHoursUtils.DaysToHoursPeriod(leaveRequestUtils.PresiPatch(activeWorkingContract.WeeklyOfficeHours), wc2aar.ContractAllowedAbsence_per_Month - timeToSubtractHours);
                    }
                    else
                    {
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InDays  = WeeklyOfficeHoursUtils.HoursToDaysPeriod(leaveRequestUtils.PresiPatch(activeWorkingContract.WeeklyOfficeHours), wc2aar.ContractAllowedAbsence_per_Month - timeToSubtractDays);
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InHours = wc2aar.ContractAllowedAbsence_per_Month - timeToSubtractHours;
                    }
                }
                else
                {
                    timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InDays  = 0;
                    timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InHours = 0;
                }
                timeFrameStatisticsPar.Tenant_RefID = securityTicket.TenantID;
                timeFrameStatisticsPar.Save(Connection, Transaction);
            }
            else
            {
                P_L5EM_GEATFSbRTFE_1423 statParam = new P_L5EM_GEATFSbRTFE_1423();
                statParam.absenceReasonID = Parameter.LeaveRequest.AbsenceReason_RefID;
                statParam.employeeID      = Parameter.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;

                    updateStatisticsParam.R_AbsenceCarryOver_InDays  = statistics.R_AbsenceCarryOver_InDays;
                    updateStatisticsParam.R_AbsenceCarryOver_InHours = statistics.R_AbsenceCarryOver_InHours;

                    if (par.IsApproved)
                    {
                        updateStatisticsParam.R_TotalAllowedAbsenceTime_InDays  = statistics.R_TotalAllowedAbsenceTime_InDays - Parameter.durationInDays;
                        updateStatisticsParam.R_TotalAllowedAbsenceTime_InHours = statistics.R_TotalAllowedAbsenceTime_InHours - Parameter.durationInHours;

                        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;
                    }
                    else
                    {
                        updateStatisticsParam.R_TotalAllowedAbsenceTime_InDays  = statistics.R_TotalAllowedAbsenceTime_InDays;
                        updateStatisticsParam.R_TotalAllowedAbsenceTime_InHours = statistics.R_TotalAllowedAbsenceTime_InHours;

                        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;
                    }
                    var res = cls_Save_Employee_AbsenceReason_TimeframeStatistic.Invoke(Connection, Transaction, updateStatisticsParam, securityTicket);
                }
                else
                {
                    ORM_CMN_BPT_EMP_Employee_AbsenceReason_TimeframeStatistic timeFrameStatisticsPar = new ORM_CMN_BPT_EMP_Employee_AbsenceReason_TimeframeStatistic();
                    timeFrameStatisticsPar.AbsenceReason_RefID        = par.AbsenceReason_RefID;
                    timeFrameStatisticsPar.CalculationTimeframe_RefID = timeFrame.CMN_CAL_CalculationTimeframeID;
                    timeFrameStatisticsPar.Employee_RefID             = par.RequestedFor_Employee_RefID;
                    timeFrameStatisticsPar.R_AbsenceCarryOver_InDays  = 0;
                    timeFrameStatisticsPar.R_AbsenceCarryOver_InHours = 0;
                    double timeToSubtractDays  = 0;
                    double timeToSubtractHours = 0;

                    if (par.IsApproved)
                    {
                        timeToSubtractDays  = Parameter.durationInDays;
                        timeToSubtractHours = Parameter.durationInHours;
                        timeFrameStatisticsPar.R_RequestReservedAbsence_InDays  = 0;
                        timeFrameStatisticsPar.R_RequestReservedAbsence_InHours = 0;
                        timeFrameStatisticsPar.R_AbsenceTimeUsed_InDays         = Parameter.durationInDays;
                        timeFrameStatisticsPar.R_AbsenceTimeUsed_InHours        = Parameter.durationInHours;
                    }
                    else
                    {
                        timeFrameStatisticsPar.R_RequestReservedAbsence_InDays  = Parameter.durationInDays;
                        timeFrameStatisticsPar.R_RequestReservedAbsence_InHours = Parameter.durationInDays;
                        timeFrameStatisticsPar.R_AbsenceTimeUsed_InDays         = 0;
                        timeFrameStatisticsPar.R_AbsenceTimeUsed_InHours        = 0;
                    }
                    if (wc2aar != null && activeWorkingContract != null)
                    {
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InDays  = 0;
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InHours = 0;

                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InDays  = 0;
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InHours = 0;
                    }
                    else
                    {
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InDays  = 0;
                        timeFrameStatisticsPar.R_TotalAllowedAbsenceTime_InHours = 0;
                    }
                    timeFrameStatisticsPar.Tenant_RefID = securityTicket.TenantID;
                    timeFrameStatisticsPar.Save(Connection, Transaction);
                }
            }

            //cls_get

            // statistics update end :)

            //Create daily work schedule
            DateTime startTime = Parameter.LeaveRequest.StartTime;
            while (startTime.Date <= Parameter.LeaveRequest.EndTime.Date)
            {
                ORM_CMN_STR_PPS_DailyWorkSchedule.Query scheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
                scheduleQuery.Tenant_RefID    = securityTicket.TenantID;
                scheduleQuery.IsDeleted       = false;
                scheduleQuery.WorkSheduleDate = startTime.Date;
                scheduleQuery.Employee_RefID  = Parameter.LeaveRequest.RequestedFor_Employee_RefID;
                List <ORM_CMN_STR_PPS_DailyWorkSchedule> workSechedules = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, scheduleQuery);

                if (workSechedules.Count == 0)
                {
                    ORM_CMN_STR_PPS_DailyWorkSchedule schedule = new ORM_CMN_STR_PPS_DailyWorkSchedule();
                    var workingTimeInHours   = 0.0;
                    var daysFromContractTerm = WeeklyOfficeHoursUtils.DaysFromContractTerm(leaveRequestUtils.PresiPatch(activeWorkingContract.WeeklyOfficeHours));
                    var dayFromContractTerm  = daysFromContractTerm.FirstOrDefault(x => x.dayOfWeek == startTime.DayOfWeek);

                    if (dayFromContractTerm != null)
                    {
                        workingTimeInHours = (double)dayFromContractTerm.hours;
                    }

                    TimeSpan workingTimeSpan = TimeSpan.FromHours(workingTimeInHours);
                    var      workingHours    = workingTimeSpan.Hours;
                    var      workingMinutes  = workingTimeSpan.Minutes;
                    var      workingSeconds  = workingTimeSpan.Seconds;


                    DateTime detailStartTime;;
                    DateTime detailEndTime;

                    if (startTime.Date == Parameter.LeaveRequest.StartTime.Date)
                    {
                        detailStartTime = startTime;
                        if (startTime.Hour + workingTimeInHours < 24)
                        {
                            var newEndTime = startTime.TimeOfDay + workingTimeSpan;
                            detailEndTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, newEndTime.Hours, newEndTime.Minutes, newEndTime.Seconds);
                        }
                        else
                        {
                            detailEndTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, 23, 59, 59);
                        }
                    }
                    else if (startTime.Date == Parameter.LeaveRequest.EndTime.Date)
                    {
                        if (Parameter.LeaveRequest.EndTime.TimeOfDay > workingTimeSpan)
                        {
                            var newStartTime = Parameter.LeaveRequest.EndTime.TimeOfDay - workingTimeSpan;
                            detailStartTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, newStartTime.Hours, newStartTime.Minutes, newStartTime.Seconds);
                        }
                        else
                        {
                            detailStartTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0);
                        }
                        detailEndTime = Parameter.LeaveRequest.EndTime;
                    }
                    else
                    {
                        int hours   = (int)Parameter.WorkTimeStart / (int)60;
                        int mintues = Parameter.WorkTimeStart - hours * 60;
                        detailStartTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, hours, mintues, 0);
                        if (hours + workingTimeSpan.Hours >= 24)
                        {
                            if (mintues + workingTimeSpan.Minutes >= 60)
                            {
                                detailEndTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, hours + workingTimeSpan.Hours - 24, workingTimeSpan.Minutes, workingTimeSpan.Seconds);
                            }
                            else
                            {
                                detailEndTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, hours + workingTimeSpan.Hours - 24, workingTimeSpan.Minutes - 60, workingTimeSpan.Seconds);
                            }
                        }
                        else
                        {
                            if (mintues + workingTimeSpan.Minutes >= 60)
                            {
                                detailEndTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, hours + workingTimeSpan.Hours, workingTimeSpan.Minutes - 60, workingTimeSpan.Seconds);
                            }
                            else
                            {
                                detailEndTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, hours + workingTimeSpan.Hours, workingTimeSpan.Minutes, workingTimeSpan.Seconds);
                            }
                        }
                    }

                    schedule.Employee_RefID                         = Parameter.LeaveRequest.RequestedFor_Employee_RefID;
                    schedule.ContractWorkerText                     = "";
                    schedule.BreakDurationTime_in_sec               = 0;
                    schedule.IsBreakTimeManualySpecified            = false;
                    schedule.IsWorkShedule_Confirmed                = false;
                    schedule.R_ContractSpecified_WorkingTime_in_sec = (int)workingTimeSpan.TotalSeconds;
                    if (selectedLeaveType.IsLeaveTimeReducing_WorkingHours)
                    {
                        schedule.R_WorkDay_Duration_in_sec = (int)detailEndTime.Subtract(detailStartTime).TotalSeconds;
                    }
                    else
                    {
                        schedule.R_WorkDay_Duration_in_sec = 0;
                    }
                    schedule.R_WorkDay_Start_in_sec     = (int)new TimeSpan(detailStartTime.Hour, detailStartTime.Minute, detailStartTime.Second).TotalSeconds;
                    schedule.R_WorkDay_End_in_sec       = (int)detailEndTime.Subtract(detailStartTime).TotalSeconds;
                    schedule.SheduleBreakTemplate_RefID = Guid.Empty;
                    schedule.Tenant_RefID          = securityTicket.TenantID;
                    schedule.WorkingSheduleComment = "";
                    schedule.WorkShedule_ConfirmedBy_Account_RefID = Guid.Empty;
                    schedule.WorkSheduleDate = startTime.Date;
                    schedule.InstantiatedWithShiftTemplate_RefID = Guid.Empty;
                    schedule.Save(Connection, Transaction);



                    P_L5DWS_SDWSD_1130 detailParam = new P_L5DWS_SDWSD_1130();
                    detailParam.WorkTime_Start                          = detailStartTime;
                    detailParam.WorkTime_End                            = detailEndTime;
                    detailParam.DailyWorkSchedule_RefID                 = schedule.CMN_STR_PPS_DailyWorkScheduleID;
                    detailParam.IsWorkBreak                             = false;
                    detailParam.SheduleForWorkplace_RefID               = Guid.Empty;
                    detailParam.AbsenceReason_RefID                     = Parameter.LeaveRequest.AbsenceReason_RefID;
                    detailParam.RequestedBy_Employee_RefID              = Parameter.LeaveRequest.RequestedBy_Employee_RefID;
                    detailParam.RequestedFor_Employee_RefID             = Parameter.LeaveRequest.RequestedFor_Employee_RefID;
                    detailParam.CMN_BPT_EMP_Employee_LeaveRequest_RefID = leaveRequestID;
                    detailParam.createRequest                           = false;
                    cls_Save_Employee_DailyWorkSchedule_Detail.Invoke(Connection, Transaction, detailParam, securityTicket);
                }
                else
                {
                    var dwsParam = new P_L5DWS_GDWSWDFT_0946();
                    dwsParam.WorkSheduleDate = startTime.Date;
                    var resultDailyWorkSchedule        = cls_Get_DailyWorkSchedules_WithDetails_For_Date.Invoke(Connection, Transaction, dwsParam, securityTicket);
                    LeaveRequestUtils leaveRequestUtil = new LeaveRequestUtils();
                    var dailySchedule = resultDailyWorkSchedule.Result.FirstOrDefault(i => i.Employee_RefID == Parameter.LeaveRequest.RequestedFor_Employee_RefID);
                    foreach (var detail in dailySchedule.Details)
                    {
                        var durationInDays  = leaveRequestUtil.LeaveRequestDuration(detail.FromTime_as_DateTime, detail.ToTime_as_DateTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == Parameter.LeaveRequest.RequestedFor_Employee_RefID), true);
                        var durationInHours = leaveRequestUtil.LeaveRequestDuration(detail.FromTime_as_DateTime, detail.ToTime_as_DateTime, Parameter.Events, Parameter.Employees.FirstOrDefault(x => x.CMN_BPT_EMP_EmployeeID == Parameter.LeaveRequest.RequestedFor_Employee_RefID), false);
                        P_L5DWS_DDWSDFIDL_1014 deleteParam = new P_L5DWS_DDWSDFIDL_1014();
                        deleteParam.DailyWorkSchedule_DetailID = detail.CMN_STR_PPS_DailyWorkSchedule_DetailID;

                        var scheduleID = cls_Delete_Employee_DailyWorkSchedule_Detail.Invoke(Connection, Transaction, deleteParam, securityTicket);
                    }
                    ORM_CMN_STR_PPS_DailyWorkSchedule schedule = new ORM_CMN_STR_PPS_DailyWorkSchedule();
                    schedule.Load(Connection, Transaction, dailySchedule.CMN_STR_PPS_DailyWorkScheduleID);

                    var workingTimeInHours   = 0;
                    var daysFromContractTerm = WeeklyOfficeHoursUtils.DaysFromContractTerm(leaveRequestUtils.PresiPatch(activeWorkingContract.WeeklyOfficeHours));
                    var dayFromContractTerm  = daysFromContractTerm.FirstOrDefault(x => x.dayOfWeek == startTime.DayOfWeek);

                    if (dayFromContractTerm != null)
                    {
                        workingTimeInHours = (int)dayFromContractTerm.hours;
                    }


                    DateTime detailStartTime;;
                    DateTime detailEndTime;

                    if (startTime.Date == Parameter.LeaveRequest.StartTime.Date)
                    {
                        detailStartTime = startTime;
                        detailEndTime   = new DateTime(startTime.Year, startTime.Month, startTime.Day, 23, 59, 59);
                    }
                    else if (startTime.Date == Parameter.LeaveRequest.EndTime.Date)
                    {
                        detailStartTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0);
                        detailEndTime   = Parameter.LeaveRequest.EndTime;
                    }
                    else
                    {
                        detailStartTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0);
                        detailEndTime   = new DateTime(startTime.Year, startTime.Month, startTime.Day, 23, 59, 59);
                    }

                    schedule.Employee_RefID                         = Parameter.LeaveRequest.RequestedFor_Employee_RefID;
                    schedule.ContractWorkerText                     = "";
                    schedule.BreakDurationTime_in_sec               = 0;
                    schedule.IsBreakTimeManualySpecified            = false;
                    schedule.IsWorkShedule_Confirmed                = false;
                    schedule.R_ContractSpecified_WorkingTime_in_sec = workingTimeInHours * 360;
                    if (selectedLeaveType.IsLeaveTimeReducing_WorkingHours)
                    {
                        schedule.R_WorkDay_Duration_in_sec = (int)detailEndTime.Subtract(detailStartTime).TotalSeconds;
                    }
                    else
                    {
                        schedule.R_WorkDay_Duration_in_sec = 0;
                    }
                    schedule.R_WorkDay_Start_in_sec     = (int)new TimeSpan(detailStartTime.Hour, detailStartTime.Minute, detailStartTime.Second).TotalSeconds;
                    schedule.R_WorkDay_End_in_sec       = schedule.R_WorkDay_Start_in_sec + (int)detailEndTime.Subtract(detailStartTime).TotalSeconds;
                    schedule.SheduleBreakTemplate_RefID = Guid.Empty;
                    schedule.Tenant_RefID          = securityTicket.TenantID;
                    schedule.WorkingSheduleComment = "";
                    schedule.WorkShedule_ConfirmedBy_Account_RefID = Guid.Empty;
                    schedule.WorkSheduleDate = startTime.Date;
                    schedule.InstantiatedWithShiftTemplate_RefID = Guid.Empty;
                    schedule.Save(Connection, Transaction);



                    P_L5DWS_SDWSD_1130 detailParam = new P_L5DWS_SDWSD_1130();
                    detailParam.WorkTime_Start                          = detailStartTime;
                    detailParam.WorkTime_End                            = detailEndTime;
                    detailParam.DailyWorkSchedule_RefID                 = schedule.CMN_STR_PPS_DailyWorkScheduleID;
                    detailParam.IsWorkBreak                             = false;
                    detailParam.SheduleForWorkplace_RefID               = Guid.Empty;
                    detailParam.AbsenceReason_RefID                     = Parameter.LeaveRequest.AbsenceReason_RefID;
                    detailParam.RequestedBy_Employee_RefID              = Parameter.LeaveRequest.RequestedBy_Employee_RefID;
                    detailParam.RequestedFor_Employee_RefID             = Parameter.LeaveRequest.RequestedFor_Employee_RefID;
                    detailParam.CMN_BPT_EMP_Employee_LeaveRequest_RefID = leaveRequestID;
                    detailParam.createRequest                           = false;
                    cls_Save_Employee_DailyWorkSchedule_Detail.Invoke(Connection, Transaction, detailParam, securityTicket);
                }
                startTime = startTime.AddDays(1);
            }

            return(returnValue);

            #endregion UserCode
        }
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L6LR_SLRCA_1055 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_Guid();
            if (Parameter.LeaveRequestID != Guid.Empty)
            {
                var lrQuery = new ORM_CMN_BPT_EMP_Employee_LeaveRequest.Query();
                lrQuery.CMN_BPT_EMP_Employee_LeaveRequestID = Parameter.LeaveRequestID;
                lrQuery.Tenant_RefID = securityTicket.TenantID;
                lrQuery.IsDeleted    = false;
                var leaveRequestsRes = ORM_CMN_BPT_EMP_Employee_LeaveRequest.Query.Search(Connection, Transaction, lrQuery);
                ORM_CMN_BPT_EMP_Employee_LeaveRequest leaveRequest = leaveRequestsRes[0];

                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 result = approvalItem.Load(Connection, Transaction, leaveRequest.CMN_CAL_Event_Approval_RefID);
                    if (result.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);



                // update statistics ************************************************
                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();

                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;

                    updateStatisticsParam.R_AbsenceCarryOver_InDays  = statistics.R_AbsenceCarryOver_InDays;
                    updateStatisticsParam.R_AbsenceCarryOver_InHours = statistics.R_AbsenceCarryOver_InHours;

                    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);
                    // statistics update end :)
                }

                DateTime startTime = calendarEvent.StartTime;
                while (startTime.Date <= calendarEvent.EndTime.Date)
                {
                    ORM_CMN_STR_PPS_DailyWorkSchedule.Query scheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
                    scheduleQuery.Tenant_RefID    = securityTicket.TenantID;
                    scheduleQuery.IsDeleted       = false;
                    scheduleQuery.WorkSheduleDate = startTime.Date;
                    scheduleQuery.Employee_RefID  = leaveRequest.RequestedFor_Employee_RefID;
                    List <ORM_CMN_STR_PPS_DailyWorkSchedule> workSechedules = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, scheduleQuery);

                    if (workSechedules.Count != 0)
                    {
                        var dwsParam = new P_L5DWS_GDWSWDFT_0946();
                        dwsParam.WorkSheduleDate = startTime.Date;
                        var resultDailyWorkSchedule = cls_Get_DailyWorkSchedules_WithDetails_For_Date.Invoke(Connection, Transaction, dwsParam, securityTicket);

                        var dailySchedule = resultDailyWorkSchedule.Result.FirstOrDefault(i => i.Employee_RefID == leaveRequest.RequestedFor_Employee_RefID);
                        foreach (var detail in dailySchedule.Details)
                        {
                            P_L5DWS_DDWSDFIDL_1014 deleteParam = new P_L5DWS_DDWSDFIDL_1014();
                            deleteParam.DailyWorkSchedule_DetailID = detail.CMN_STR_PPS_DailyWorkSchedule_DetailID;

                            var scheduleID = cls_Delete_Employee_DailyWorkSchedule_Detail.Invoke(Connection, Transaction, deleteParam, securityTicket);
                        }
                        ORM_CMN_STR_PPS_DailyWorkSchedule schedule = new ORM_CMN_STR_PPS_DailyWorkSchedule();
                        if (dailySchedule.CMN_STR_PPS_DailyWorkScheduleID != Guid.Empty)
                        {
                            var result = schedule.Load(Connection, Transaction, dailySchedule.CMN_STR_PPS_DailyWorkScheduleID);
                            if (result.Status != FR_Status.Success || schedule.CMN_STR_PPS_DailyWorkScheduleID == Guid.Empty)
                            {
                                var error = new FR_Guid();
                                error.ErrorMessage = "No Such ID.";
                                error.Status       = FR_Status.Error_Internal;
                                return(error);
                            }
                        }

                        schedule.IsDeleted = true;
                        schedule.Save(Connection, Transaction);
                    }
                    startTime = startTime.AddDays(1);
                }
            }

            return(returnValue);

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

            ORM_CMN_STR_PPS_DailyWorkSchedule.Query scheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
            scheduleQuery.Employee_RefID  = Parameter.EmployeeID;
            scheduleQuery.WorkSheduleDate = Parameter.WorkscheduleDate;
            scheduleQuery.Tenant_RefID    = securityTicket.TenantID;
            scheduleQuery.IsDeleted       = false;
            List <ORM_CMN_STR_PPS_DailyWorkSchedule> schedules = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, scheduleQuery);
            if (schedules.Count == 1)
            {
                ORM_CMN_STR_PPS_DailyWorkSchedule schedule = schedules[0];
                if (Parameter.SheduleBreakTemplate_RefID != Guid.Empty)
                {
                    ORM_CMN_PPS_BreakTime_Template breakTemplate = new ORM_CMN_PPS_BreakTime_Template();
                    var result = breakTemplate.Load(Connection, Transaction, Parameter.SheduleBreakTemplate_RefID);
                    if (result.Status != FR_Status.Success || breakTemplate.CMN_PPS_BreakTime_TemplateID == Guid.Empty)
                    {
                        var error = new FR_Guid();
                        error.ErrorMessage = "No Such ID.";
                        error.Status       = FR_Status.Error_Internal;
                        return(error);
                    }

                    int duration = 0;
                    ORM_CMN_PPS_BreakTime_Template_Assignment.Query breakeTimeAssigmentQuery = new ORM_CMN_PPS_BreakTime_Template_Assignment.Query();
                    breakeTimeAssigmentQuery.IsDeleted                = false;
                    breakeTimeAssigmentQuery.Tenant_RefID             = securityTicket.TenantID;
                    breakeTimeAssigmentQuery.BreakTime_Template_RefID = breakTemplate.CMN_PPS_BreakTime_TemplateID;
                    List <ORM_CMN_PPS_BreakTime_Template_Assignment> breakTimeAssignemnts = ORM_CMN_PPS_BreakTime_Template_Assignment.Query.Search(Connection, Transaction, breakeTimeAssigmentQuery);
                    foreach (var assignment in breakTimeAssignemnts)
                    {
                        ORM_CMN_PPS_BreakTime breakeTime = new ORM_CMN_PPS_BreakTime();
                        breakeTime.Load(Connection, Transaction, assignment.BreakTime_RefID);
                        duration += breakeTime.Default_Duration_in_sec;
                    }
                    schedule.SheduleBreakTemplate_RefID = breakTemplate.CMN_PPS_BreakTime_TemplateID;
                    schedule.BreakDurationTime_in_sec   = duration;
                    schedule.Save(Connection, Transaction);
                }
                else
                {
                    P_L5DWS_GDWSDFDWSID_1156 par = new P_L5DWS_GDWSDFDWSID_1156();
                    par.DailyWorkScheduleID = schedule.CMN_STR_PPS_DailyWorkScheduleID;
                    List <L5DWS_GDWSDFDWSID_1156> details = cls_Get_DailyWorkSchedule_Detail_For_DailyWorkScheduleID.Invoke(Connection, Transaction, par, securityTicket).Result.ToList();
                    foreach (var detail in details)
                    {
                        ORM_CMN_STR_PPS_DailyWorkSchedule_Detail scheduleDetail = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail();
                        var result = scheduleDetail.Load(Connection, Transaction, detail.CMN_STR_PPS_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);
                        }
                        scheduleDetail.SheduleForWorkplace_RefID = Parameter.WorkplaceID;
                        scheduleDetail.Save(Connection, Transaction);
                    }
                }
            }


            //Put your code here
            return(returnValue);

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

            L5DWS_CDWSFP_1053 returnVal = new L5DWS_CDWSFP_1053();


            DateTime currentDate = Parameter.StartDate.Date;
            while (currentDate <= Parameter.EndDate.Date)
            {
                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;
                scheduleQuery.Employee_RefID  = Parameter.EmployeeID;
                List <ORM_CMN_STR_PPS_DailyWorkSchedule> workSechedules = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, scheduleQuery);
                if (Parameter.StartDate.Date == Parameter.EndDate.Date && workSechedules.Count != 0)
                {
                    DateTimeRange requestRange = new DateTimeRange();
                    requestRange.Start = Parameter.StartDate;
                    requestRange.End   = Parameter.EndDate;
                    P_L5DWS_GDWSDFDWSID_1156 par = new P_L5DWS_GDWSDFDWSID_1156();
                    par.DailyWorkScheduleID = workSechedules[0].CMN_STR_PPS_DailyWorkScheduleID;
                    var details = cls_Get_DailyWorkSchedule_Detail_For_DailyWorkScheduleID.Invoke(Connection, Transaction, par, securityTicket).Result;
                    foreach (var detail in details)
                    {
                        DateTimeRange dateRange = new DateTimeRange();
                        dateRange.Start = detail.FromTime_as_DateTime;
                        dateRange.End   = detail.ToTime_as_DateTime;
                        if (requestRange.Intersects(dateRange))
                        {
                            returnVal.hasPlaning = true;
                        }
                    }
                }
                else if (currentDate == Parameter.StartDate.Date && workSechedules.Count != 0)
                {
                    DateTimeRange requestRange = new DateTimeRange();
                    requestRange.Start = Parameter.StartDate;
                    requestRange.End   = new DateTime(Parameter.StartDate.Year, Parameter.StartDate.Month, Parameter.StartDate.Day, 23, 59, 59);
                    P_L5DWS_GDWSDFDWSID_1156 par = new P_L5DWS_GDWSDFDWSID_1156();
                    par.DailyWorkScheduleID = workSechedules[0].CMN_STR_PPS_DailyWorkScheduleID;
                    var details = cls_Get_DailyWorkSchedule_Detail_For_DailyWorkScheduleID.Invoke(Connection, Transaction, par, securityTicket).Result;
                    foreach (var detail in details)
                    {
                        DateTimeRange dateRange = new DateTimeRange();
                        dateRange.Start = detail.FromTime_as_DateTime;
                        dateRange.End   = detail.ToTime_as_DateTime;
                        if (requestRange.Intersects(dateRange))
                        {
                            returnVal.hasPlaning = true;
                        }
                    }
                }
                else if (currentDate == Parameter.EndDate.Date && workSechedules.Count != 0)
                {
                    DateTimeRange requestRange = new DateTimeRange();
                    requestRange.Start = new DateTime(Parameter.EndDate.Year, Parameter.EndDate.Month, Parameter.EndDate.Day, 0, 0, 0);
                    requestRange.End   = Parameter.EndDate;
                    P_L5DWS_GDWSDFDWSID_1156 par = new P_L5DWS_GDWSDFDWSID_1156();
                    par.DailyWorkScheduleID = workSechedules[0].CMN_STR_PPS_DailyWorkScheduleID;
                    var details = cls_Get_DailyWorkSchedule_Detail_For_DailyWorkScheduleID.Invoke(Connection, Transaction, par, securityTicket).Result;
                    foreach (var detail in details)
                    {
                        DateTimeRange dateRange = new DateTimeRange();
                        dateRange.Start = detail.FromTime_as_DateTime;
                        dateRange.End   = detail.ToTime_as_DateTime;
                        if (requestRange.Intersects(dateRange))
                        {
                            returnVal.hasPlaning = true;
                        }
                    }
                }
                else
                {
                    if (workSechedules.Count != 0)
                    {
                        returnVal.hasPlaning = true;
                    }
                }
                //   ORM_CMN_STR_PPS_EffectiveWorkTime.Query effectiveWorkTimeQuery = new ORM_CMN_STR_PPS_EffectiveWorkTime.Query();
                //   effectiveWorkTimeQuery.IsDeleted = false;
                //   effectiveWorkTimeQuery.Tenant_RefID = securityTicket.TenantID;
                //   var actuals = ORM_CMN_STR_PPS_EffectiveWorkTime.Query.Search(Connection, Transaction, effectiveWorkTimeQuery).Where(x => x.WorkTime_StartTime.Date == currentDate).ToArray();

                //   if (Parameter.StartDate.Date == Parameter.EndDate.Date && workSechedules.Count != 0)
                //   {
                //       DateTimeRange requestRange = new DateTimeRange();
                //       requestRange.Start = Parameter.StartDate;
                //       requestRange.End = Parameter.EndDate;
                //       foreach (var actual in actuals)
                //       {
                //           DateTimeRange dateRange = new DateTimeRange();
                //           dateRange.Start = actual.WorkTime_StartTime;
                //           dateRange.End = actual.WorkTime_StartTime.AddSeconds(actual.WorkTime_Duration_in_sec);
                //           if (requestRange.Intersects(dateRange))
                //           {
                //               returnVal.hasActuals = true;
                //           }
                //       }
                //   }
                //   else if (currentDate == Parameter.StartDate.Date && workSechedules.Count != 0)
                //   {
                //       DateTimeRange requestRange = new DateTimeRange();
                //       requestRange.Start = Parameter.StartDate;
                //       requestRange.End = new DateTime(Parameter.StartDate.Year, Parameter.StartDate.Month, Parameter.StartDate.Day, 23, 59, 59);
                //       foreach (var actual in actuals)
                //       {
                //           DateTimeRange dateRange = new DateTimeRange();
                //           dateRange.Start = actual.WorkTime_StartTime;
                //           dateRange.End = actual.WorkTime_StartTime.AddSeconds(actual.WorkTime_Duration_in_sec);
                //           if (requestRange.Intersects(dateRange))
                //           {
                //               returnVal.hasActuals = true;
                //           }
                //       }
                //   }
                //   else if (currentDate == Parameter.EndDate.Date && workSechedules.Count != 0)
                //   {
                //       DateTimeRange requestRange = new DateTimeRange();
                //       requestRange.Start = new DateTime(Parameter.EndDate.Year, Parameter.EndDate.Month, Parameter.EndDate.Day, 0, 0, 0);
                //       requestRange.End = Parameter.EndDate;
                //       foreach (var actual in actuals)
                //       {
                //           DateTimeRange dateRange = new DateTimeRange();
                //           dateRange.Start = actual.WorkTime_StartTime;
                //           dateRange.End = actual.WorkTime_StartTime.AddSeconds(actual.WorkTime_Duration_in_sec);
                //           if (requestRange.Intersects(dateRange))
                //           {
                //               returnVal.hasActuals = true;
                //           }
                //       }
                //   }
                //   else
                //   {
                //       if (workSechedules.Count != 0)
                //       {
                //           returnVal.hasActuals = true;
                //       }

                //   }
                //
                currentDate = currentDate.AddDays(1);
            }
            returnValue.Result = returnVal;
            //Put your code here
            return(returnValue);

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

            DateTime startTime = Parameter.WorkSheduleDate.AddMinutes(Parameter.dayStartInMins);

            ORM_CMN_STR_PPS_DailyWorkSchedule dailyWorkSchedule = new ORM_CMN_STR_PPS_DailyWorkSchedule();

            double startTimeInSec = startTime.TimeOfDay.TotalSeconds;
            double endTimeInSec   = startTime.TimeOfDay.TotalSeconds + Parameter.R_ContractSpecified_WorkingTime_in_sec;

            if (Parameter.DailyWorkScheduleID != Guid.Empty)
            {
                ORM_CMN_STR_PPS_DailyWorkSchedule.Query dailyWorkScheduleQuery = new ORM_CMN_STR_PPS_DailyWorkSchedule.Query();
                dailyWorkScheduleQuery.CMN_STR_PPS_DailyWorkScheduleID = Parameter.DailyWorkScheduleID;
                dailyWorkScheduleQuery.Tenant_RefID = securityTicket.TenantID;
                dailyWorkScheduleQuery.IsDeleted    = false;

                ORM_CMN_STR_PPS_DailyWorkSchedule dailyWorkScheduleForSave = ORM_CMN_STR_PPS_DailyWorkSchedule.Query.Search(Connection, Transaction, dailyWorkScheduleQuery).FirstOrDefault();
                dailyWorkScheduleForSave.IsBreakTimeManualySpecified = false;
                dailyWorkScheduleForSave.BreakDurationTime_in_sec    = 0;

                dailyWorkScheduleForSave.R_WorkDay_Start_in_sec    = (int)startTimeInSec;
                dailyWorkScheduleForSave.R_WorkDay_Duration_in_sec = Parameter.R_ContractSpecified_WorkingTime_in_sec;
                dailyWorkScheduleForSave.R_WorkDay_End_in_sec      = (int)endTimeInSec;
                dailyWorkScheduleForSave.R_ContractSpecified_WorkingTime_in_sec = Parameter.R_ContractSpecified_WorkingTime_in_sec;
                dailyWorkScheduleForSave.ContractWorkerText = "";
                dailyWorkScheduleForSave.Employee_RefID     = Parameter.Employee_RefID;
                dailyWorkScheduleForSave.WorkSheduleDate    = Parameter.WorkSheduleDate.Date;

                dailyWorkScheduleForSave.Save(Connection, Transaction);

                dailyWorkSchedule = dailyWorkScheduleForSave;
            }
            else
            {
                ORM_CMN_STR_PPS_DailyWorkSchedule dailyWorkScheduleForSave = new ORM_CMN_STR_PPS_DailyWorkSchedule();
                dailyWorkScheduleForSave.IsBreakTimeManualySpecified = false;
                dailyWorkScheduleForSave.BreakDurationTime_in_sec    = 0;

                dailyWorkScheduleForSave.R_WorkDay_Start_in_sec    = (int)startTimeInSec;
                dailyWorkScheduleForSave.R_WorkDay_Duration_in_sec = Parameter.R_ContractSpecified_WorkingTime_in_sec;
                dailyWorkScheduleForSave.R_WorkDay_End_in_sec      = (int)endTimeInSec;
                dailyWorkScheduleForSave.R_ContractSpecified_WorkingTime_in_sec = Parameter.R_ContractSpecified_WorkingTime_in_sec;
                dailyWorkScheduleForSave.ContractWorkerText = "";
                dailyWorkScheduleForSave.Employee_RefID     = Parameter.Employee_RefID;
                dailyWorkScheduleForSave.WorkSheduleDate    = Parameter.WorkSheduleDate.Date;
                dailyWorkScheduleForSave.Tenant_RefID       = securityTicket.TenantID;

                dailyWorkScheduleForSave.Save(Connection, Transaction);

                dailyWorkSchedule = dailyWorkScheduleForSave;
            }
            P_L6DWS_SDWSD_1130 detailParam = new P_L6DWS_SDWSD_1130();
            detailParam.WorkTime_Start              = dailyWorkSchedule.WorkSheduleDate.AddSeconds(startTimeInSec);
            detailParam.WorkTime_End                = dailyWorkSchedule.WorkSheduleDate.AddSeconds(endTimeInSec);
            detailParam.DailyWorkSchedule_RefID     = dailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
            detailParam.IsWorkBreak                 = false;
            detailParam.SheduleForWorkplace_RefID   = Guid.Empty;
            detailParam.AbsenceReason_RefID         = Parameter.LeaveTypeID;
            detailParam.RequestedBy_Employee_RefID  = Guid.Empty;
            detailParam.RequestedFor_Employee_RefID = Parameter.Employee_RefID;
            detailParam.durationInDays              = Parameter.durationInDays;
            detailParam.durationInHours             = Parameter.durationInHours;
            cls_Save_DailyWorkSchedule_Detail.Invoke(Connection, Transaction, detailParam, securityTicket);

            returnValue.Result = dailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;

            //Put your code here
            return(returnValue);

            #endregion UserCode
        }