Ejemplo n.º 1
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_L5DWS_SDWSFST_1447 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Guid();

            ORM_CMN_PPS_ShiftTemplate.Query shiftTemplateQuery = new ORM_CMN_PPS_ShiftTemplate.Query();
            shiftTemplateQuery.CMN_PPS_ShiftTemplateID = Parameter.InstantiatedWithShiftTemplate_RefID;
            shiftTemplateQuery.Tenant_RefID            = securityTicket.TenantID;
            shiftTemplateQuery.IsDeleted = false;

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



            ORM_CMN_PPS_ShiftTemplate_WorkDetail.Query shiftTemplateWorkDetailQuery = new ORM_CMN_PPS_ShiftTemplate_WorkDetail.Query();
            shiftTemplateWorkDetailQuery.CMN_PPS_ShiftTemplate_RefID = Parameter.InstantiatedWithShiftTemplate_RefID;
            shiftTemplateWorkDetailQuery.Tenant_RefID = securityTicket.TenantID;
            shiftTemplateWorkDetailQuery.IsDeleted    = false;

            var shiftTemplateDetailsResult = ORM_CMN_PPS_ShiftTemplate_WorkDetail.Query.Search(Connection, Transaction, shiftTemplateWorkDetailQuery);

            double   totalTime = 0;
            DateTime?startTime = null;
            DateTime?endTime   = null;

            foreach (var shiftTemplateDetail in shiftTemplateDetailsResult)
            {
                DateTime detailStartTime = Parameter.WorkSheduleDate.Date.AddSeconds(shiftTemplateDetail.ShiftStart_Offset_sec);
                DateTime detailEndTime   = Parameter.WorkSheduleDate.Date.AddSeconds(shiftTemplateDetail.ShiftStart_Offset_sec + Math.Abs(shiftTemplateDetail.Duration_in_sec));

                if (startTime == null)
                {
                    startTime = detailStartTime;
                }
                if (endTime == null)
                {
                    endTime = detailEndTime;
                }

                if (detailStartTime < startTime)
                {
                    startTime = detailStartTime;
                }
                if (detailEndTime > endTime)
                {
                    endTime = detailEndTime;
                }

                totalTime += shiftTemplateDetail.Duration_in_sec;
            }

            double startTimeInSec = 0;
            double endTimeInSec   = 0;

            if (startTime.HasValue)
            {
                startTimeInSec = startTime.Value.TimeOfDay.TotalSeconds;
            }

            if (endTime.HasValue)
            {
                endTimeInSec = endTime.Value.TimeOfDay.TotalSeconds;
            }

            ORM_CMN_STR_PPS_DailyWorkSchedule dailyWorkSchedule = new ORM_CMN_STR_PPS_DailyWorkSchedule();
            dailyWorkSchedule.IsBreakTimeManualySpecified         = false;
            dailyWorkSchedule.SheduleBreakTemplate_RefID          = shiftTemplate.Default_AllowedBreakTimeTemplate_RefID;
            dailyWorkSchedule.InstantiatedWithShiftTemplate_RefID = Parameter.InstantiatedWithShiftTemplate_RefID;

            if (shiftTemplate.Default_AllowedBreakTimeTemplate_RefID != Guid.Empty && Parameter.IsBreakTimeCalculated_Planning)
            {
                ORM_CMN_PPS_BreakTime_Template_Assignment.Query breakTimeAssignmentQuery = new ORM_CMN_PPS_BreakTime_Template_Assignment.Query();
                breakTimeAssignmentQuery.BreakTime_Template_RefID = shiftTemplate.Default_AllowedBreakTimeTemplate_RefID;
                breakTimeAssignmentQuery.Tenant_RefID             = securityTicket.TenantID;
                breakTimeAssignmentQuery.IsDeleted = false;
                var breakTimeAssignments = ORM_CMN_PPS_BreakTime_Template_Assignment.Query.Search(Connection, Transaction, breakTimeAssignmentQuery);
                foreach (var breakTimeAssignment in breakTimeAssignments)
                {
                    ORM_CMN_PPS_BreakTime.Query breakTimeQuery = new ORM_CMN_PPS_BreakTime.Query();
                    breakTimeQuery.CMN_PPS_BreakTimeID = breakTimeAssignment.BreakTime_RefID;
                    breakTimeQuery.Tenant_RefID        = securityTicket.TenantID;
                    breakTimeQuery.IsDeleted           = false;
                    breakTimeQuery.IsDinnerBreak       = false;
                    breakTimeQuery.IsLunchBreak        = false;
                    breakTimeQuery.IsBreakfastBreak    = false;

                    var breakTime = ORM_CMN_PPS_BreakTime.Query.Search(Connection, Transaction, breakTimeQuery).FirstOrDefault();
                    if (breakTime != null)
                    {
                        dailyWorkSchedule.BreakDurationTime_in_sec += breakTime.Default_Duration_in_sec;
                    }
                }
            }
            else
            {
                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 = Parameter.R_ContractSpecified_WorkingTime_in_sec;
            dailyWorkSchedule.ContractWorkerText = "";
            dailyWorkSchedule.Employee_RefID     = Parameter.Employee_RefID;
            dailyWorkSchedule.WorkSheduleDate    = Parameter.WorkSheduleDate.Date;
            dailyWorkSchedule.Tenant_RefID       = securityTicket.TenantID;

            dailyWorkSchedule.Save(Connection, Transaction);
            returnValue.Result = dailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
            foreach (var shiftTemplateDetail in shiftTemplateDetailsResult)
            {
                P_L5DWS_SDWSD_1130 detailParam = new P_L5DWS_SDWSD_1130();
                detailParam.WorkTime_Start              = dailyWorkSchedule.WorkSheduleDate.AddSeconds(shiftTemplateDetail.ShiftStart_Offset_sec);
                detailParam.WorkTime_End                = dailyWorkSchedule.WorkSheduleDate.AddSeconds(shiftTemplateDetail.ShiftStart_Offset_sec + shiftTemplateDetail.Duration_in_sec);
                detailParam.DailyWorkSchedule_RefID     = dailyWorkSchedule.CMN_STR_PPS_DailyWorkScheduleID;
                detailParam.IsWorkBreak                 = false;
                detailParam.SheduleForWorkplace_RefID   = Guid.Empty;
                detailParam.AbsenceReason_RefID         = Guid.Empty;
                detailParam.RequestedBy_Employee_RefID  = Guid.Empty;
                detailParam.RequestedFor_Employee_RefID = Parameter.Employee_RefID;
                cls_Save_Employee_DailyWorkSchedule_Detail.Invoke(Connection, Transaction, detailParam, securityTicket);
            }

            return(returnValue);

            #endregion UserCode
        }
Ejemplo n.º 3
0
        protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5DWS_SDWSD_1130 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            //Leave UserCode region to enable user code saving
            #region UserCode
            var returnValue = new FR_Guid();
            //Put your code here

            ORM_CMN_STR_PPS_DailyWorkSchedule_Detail scheduleDetail = new ORM_CMN_STR_PPS_DailyWorkSchedule_Detail();
            if (Parameter.CMN_STR_PPS_DailyWorkSchedule_DetailID != Guid.Empty)
            {
                var result = scheduleDetail.Load(Connection, Transaction, Parameter.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.AbsenceReason_RefID = Parameter.AbsenceReason_RefID;
                scheduleDetail.CMN_BPT_EMP_Employee_LeaveRequest_RefID = Parameter.CMN_BPT_EMP_Employee_LeaveRequest_RefID;
                scheduleDetail.CMN_CAL_Event_RefID       = Parameter.CMN_CAL_Event_RefID;
                scheduleDetail.DailyWorkSchedule_RefID   = Parameter.DailyWorkSchedule_RefID;
                scheduleDetail.IsWorkBreak               = Parameter.IsWorkBreak;
                scheduleDetail.SheduleForWorkplace_RefID = Parameter.SheduleForWorkplace_RefID;
                scheduleDetail.Tenant_RefID              = securityTicket.TenantID;
                scheduleDetail.Save(Connection, Transaction);

                ORM_CMN_CAL_Event.Query calEventQuery = new ORM_CMN_CAL_Event.Query();
                calEventQuery.CMN_CAL_EventID = Parameter.CMN_CAL_Event_RefID;
                calEventQuery.IsDeleted       = false;
                calEventQuery.Tenant_RefID    = securityTicket.TenantID;

                ORM_CMN_CAL_Event calEvent = ORM_CMN_CAL_Event.Query.Search(Connection, Transaction, calEventQuery).FirstOrDefault();

                calEvent.StartTime           = Parameter.WorkTime_Start;
                calEvent.EndTime             = Parameter.WorkTime_End;
                calEvent.R_EventDuration_sec = (int)Parameter.WorkTime_End.Subtract(Parameter.WorkTime_Start).TotalSeconds;
                calEvent.Save(Connection, Transaction);
            }
            else
            {
                scheduleDetail.AbsenceReason_RefID = Parameter.AbsenceReason_RefID;
                scheduleDetail.CMN_BPT_EMP_Employee_LeaveRequest_RefID = Parameter.CMN_BPT_EMP_Employee_LeaveRequest_RefID;
                scheduleDetail.CMN_CAL_Event_RefID       = Parameter.CMN_CAL_Event_RefID;
                scheduleDetail.DailyWorkSchedule_RefID   = Parameter.DailyWorkSchedule_RefID;
                scheduleDetail.IsWorkBreak               = Parameter.IsWorkBreak;
                scheduleDetail.SheduleForWorkplace_RefID = Parameter.SheduleForWorkplace_RefID;
                scheduleDetail.Tenant_RefID              = securityTicket.TenantID;


                ORM_CMN_CAL_Event calEvent = new ORM_CMN_CAL_Event();
                calEvent.StartTime           = Parameter.WorkTime_Start;
                calEvent.EndTime             = Parameter.WorkTime_End;
                calEvent.R_EventDuration_sec = (int)(Parameter.WorkTime_End - Parameter.WorkTime_Start).TotalSeconds;
                calEvent.Tenant_RefID        = securityTicket.TenantID;
                calEvent.Save(Connection, Transaction);

                scheduleDetail.CMN_CAL_Event_RefID = calEvent.CMN_CAL_EventID;
                scheduleDetail.Save(Connection, Transaction);
            }
            returnValue.Result = scheduleDetail.CMN_STR_PPS_DailyWorkSchedule_DetailID;

            return(returnValue);

            #endregion UserCode
        }
Ejemplo n.º 4
0
        ///<summary>
        /// Method Invocation of wrapper classes
        ///<summary>
        protected static FR_Guid Invoke(DbConnection Connection, DbTransaction Transaction, string ConnectionString, P_L5DWS_SDWSD_1130 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            bool cleanupConnection  = Connection == null;
            bool cleanupTransaction = Transaction == null;

            FR_Guid functionReturn = new FR_Guid();

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

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

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

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

                Guid errorID = Guid.NewGuid();
                ServerLog.Instance.Fatal("Application error occured. ErrorID = " + errorID, ex);
                throw new Exception("Exception occured in method cls_Save_Employee_DailyWorkSchedule_Detail", ex);
            }
            return(functionReturn);
        }
Ejemplo n.º 5
0
 ///<summary>
 /// Invokes the method for the given Connection, and Transaction, leaving them open/not commited if no exceptions occured
 ///<summary>
 public static FR_Guid Invoke(DbConnection Connection, DbTransaction Transaction, P_L5DWS_SDWSD_1130 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
 {
     return(Invoke(Connection, Transaction, null, Parameter, securityTicket));
 }
Ejemplo n.º 6
0
 ///<summary>
 /// Opens the connection/transaction for the given connectionString, and closes them when complete
 ///<summary>
 public static FR_Guid Invoke(string ConnectionString, P_L5DWS_SDWSD_1130 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
 {
     return(Invoke(null, null, ConnectionString, Parameter, securityTicket));
 }