public Payslip createPayslip(DateTime startDatePeriod, DateTime endDatePeriod, Employee employee)
        {
            // attendanceLogSheet
            List <Attendance> attendances = attendanceService.fetchEmployeeAttendance(startDatePeriod, endDatePeriod, employee);
            //int hoursSpent = attendanceService.calcuteSalary(attendances);
            decimal dailyBasedSalary = 0.00M;

            Decimal.TryParse(employee.jobPosition.salary, out dailyBasedSalary);
            decimal periodSalary = salaryService.calculatePeriodSalary(attendances, dailyBasedSalary);

            List <Request> overtimeRequests = requestService.fetchOvertimeRequests(employee, startDatePeriod, endDatePeriod);

            periodSalary += salaryService.calculatePeriodSalaryWithOvertimeRequests(overtimeRequests, dailyBasedSalary);
            Console.WriteLine("periodSalary---->>" + periodSalary);

            List <Miscellaneous> deductions = miscellaneousService.fetchMiscellaneousByDeductionType(employee);

            // fetch all request from that has an approved status within the inclusive dates
            // List<Request> listOfRequest = attendanceService.fetchEmployeeRequest(startDatePeriod, endDatePeriod, employee);
            // * type of request
            //  - OVERTIME ?
            //  - UNDERTIME ?
            //  - VACATION_LEAVE
            //  - SICK_LEAVE
            //  - BEREAVEMENT_LEAVE
            //  - PATERNITY_LEAVE
            //  - MATERNITY_LEAVE
            //  - MISSED_TIME_IN
            //  - MISSED_TIME_OUT

            //
            // if missed_time_in_time_out, check attendance if the date of *typeOf_request is available and if exists, update time_in_time_out
            // just check and clear everything
            // get the employee salary and calculate


            // List<Holiday> holidays = holidayService.fetchAllHolidays(DateTime.Now.Year);
            // decimal
            return(payrollService.createPayslip());
        }
Beispiel #2
0
        public Payslip createPayslip(DateTime startDatePeriod, DateTime endDatePeriod, Employee employee)
        {
            // attendanceLogSheet
            Payslip payslip = new Payslip();

            payslip.employee        = employee;
            payslip.startDatePeriod = startDatePeriod;
            payslip.endDatePeriod   = endDatePeriod;
            List <Attendance> attendances   = attendanceService.fetchEmployeeAttendance(startDatePeriod, endDatePeriod, employee);
            decimal           monthlySalary = decimal.Multiply(employee.jobPosition.salary, AVERAGE_WORKING_DAY_PER_MONTH);

            decimal dailyBasedSalary = 0.00M;

            dailyBasedSalary = employee.jobPosition.salary;
            decimal periodSalary = decimal.Round(salaryService.calculatePeriodSalary(attendances, dailyBasedSalary), 2);

            AttendanceControllerInterface attendanceController = new AttendanceController();
            TimeSpan timeSpent = fetchTotalHoursSpent(payslip.startDatePeriod, payslip.endDatePeriod, payslip.employee, attendanceController);

            periodSalary    = calculateTotalBasePay(timeSpent, payslip.employee.jobPosition.salary);
            payslip.basePay = periodSalary;

            decimal totalAllowanceAmount = 0.00M;
            MiscellaneousControllerInterface miscellaneousController = new MiscellaneousController();
            decimal foodAllowanceAmount      = fetchFoodAllowance(payslip, miscellaneousController);
            decimal totalFoodAllowanceAmount = calculateTotalSpecificAllowance(foodAllowanceAmount, timeSpent);

            totalAllowanceAmount += totalFoodAllowanceAmount;

            decimal transpoAllowanceAmount      = fetchTranspoAllowance(payslip, miscellaneousController);
            decimal totalTranspoAllowanceAmount = calculateTotalSpecificAllowance(transpoAllowanceAmount, timeSpent);

            totalAllowanceAmount += totalTranspoAllowanceAmount;

            List <Request> overtimeRequests = requestService.fetchOvertimeRequests(employee, startDatePeriod, endDatePeriod);

            payslip.requests = overtimeRequests;

            List <Request> leaveRequests = requestService.fetchLeaveRequest(employee, startDatePeriod, endDatePeriod);

            payslip.requests.AddRange(leaveRequests);

            decimal totalLeaveAmount = decimal.Round(salaryService.calculateDailBasedSalaryWithLeaveRequest(leaveRequests, dailyBasedSalary), 2);

            List <Miscellaneous> benefits = miscellaneousService.fetchMiscellaneousByBenefitType(employee);

            payslip.miscellaneous = benefits;

            RequestControllerInterface requestController = new RequestController();
            SalaryControllerInterface  salaryController  = new SalaryController();
            decimal totalOvertimeAmount = calculateDailyBasedSalaryWithOvertimeRequests(payslip.startDatePeriod, payslip.endDatePeriod, payslip.employee, requestController, salaryController);

            totalAllowanceAmount += totalOvertimeAmount;

            payslip.totalBenefits = totalAllowanceAmount + totalLeaveAmount;

            decimal cashAdvanceAmount = calculateTotalCashAdvanceAmount(payslip.startDatePeriod, payslip.endDatePeriod, payslip.employee, requestController, salaryController);

            payslip.sssDeduction = decimal.Divide(salaryService.fetchSssDeductionsWithPeriodSalary(monthlySalary), 2);
            payslip.sssDeduction = decimal.Round(payslip.sssDeduction, 2);

            payslip.pagIbigDeduction = decimal.Divide(salaryService.fetchPagIbigDeductionWithPeriodSalary(monthlySalary), 2);
            payslip.pagIbigDeduction = decimal.Round(payslip.pagIbigDeduction, 2);

            payslip.philHealthDeduction = decimal.Divide(salaryService.fetchPhilHealthDeductionWithPeriodSalary(monthlySalary), 2);
            payslip.philHealthDeduction = decimal.Round(payslip.philHealthDeduction, 2);

            Miscellaneous thirteenMonth = miscellaneousService.calculateThirteenMonth(employee, endDatePeriod);

            payslip.taxDeduction = decimal.Divide(salaryService.calculatePeriodSalaryTax(employee, monthlySalary), 2);

            decimal totalDeductions = (decimal.Round(payslip.taxDeduction, 2) + decimal.Round(payslip.sssDeduction, 2) + decimal.Round(payslip.pagIbigDeduction, 2) + decimal.Round(payslip.philHealthDeduction, 2) + decimal.Round(cashAdvanceAmount, 2));

            payslip.totalDeduction = totalDeductions;

            decimal totalSalary = payslip.basePay + payslip.totalBenefits - totalDeductions;

            payslip.netPay = totalSalary;

            return(payrollService.createPayslip(employee, payslip));

            /*
             * List<Request> overtimeRequests = requestService.fetchOvertimeRequests(employee, startDatePeriod, endDatePeriod);
             * payslip.requests = overtimeRequests;
             *
             * periodSalary += decimal.Round(salaryService.calculateDailyBasedSalaryWithOvertimeRequests(overtimeRequests, dailyBasedSalary), 2);
             * Console.WriteLine("periodSalaryWithOvertime---->>" + periodSalary);
             *
             * List<Request> leaveRequests = requestService.fetchLeaveRequest(employee, startDatePeriod, endDatePeriod);
             * payslip.requests.AddRange(leaveRequests);
             *
             * periodSalary += decimal.Round(salaryService.calculateDailBasedSalaryWithLeaveRequest(leaveRequests, dailyBasedSalary), 2);
             * Console.WriteLine("periodSalaryWithLeave---->>" + periodSalary);
             *
             * List<Miscellaneous> benefits = miscellaneousService.fetchMiscellaneousByBenefitType(employee);
             * payslip.miscellaneous = benefits;
             *
             * periodSalary += decimal.Round(salaryService.fetchTotalAmountOfBenefits(benefits, attendances, leaveRequests), 2);
             * Console.WriteLine("periodSalaryWIthBenefits---->>" + periodSalary);
             *
             * //List<Miscellaneous> bonuses = miscellaneousService.fetchBonusMiscellaneousByDescriptionAsDate(employee, startDatePeriod, endDatePeriod);
             * //payslip.miscellaneous.AddRange(bonuses);
             *
             * //periodSalary += salaryService.fetchTotalBonus(bonuses);
             * //Console.WriteLine("periodSalaryWIthBonus---->>" + periodSalary);
             *
             * List<Request> cashAdvanceList = requestService.fetchAllApprovedCashAdvanceRequests(startDatePeriod, endDatePeriod, employee);
             * periodSalary -= decimal.Round(salaryService.fetchTotalCashAdvanceAmount(cashAdvanceList), 2);
             * Console.WriteLine("periodSalaryWIthCashAdvance---->>" + periodSalary);
             *
             * //List<Miscellaneous> deductions = miscellaneousService.fetchMiscellaneousByDeductionType(employee);
             *
             * //periodSalary -= decimal.Round(salaryService.fetchTotalDeductions(deductions), 2);
             *
             * payslip.sssDeduction = decimal.Divide(salaryService.fetchSssDeductionsWithPeriodSalary(monthlySalary), 2);
             * payslip.sssDeduction = decimal.Round(payslip.sssDeduction, 2);
             *
             * payslip.pagIbigDeduction = decimal.Divide(salaryService.fetchPagIbigDeductionWithPeriodSalary(monthlySalary), 2);
             * payslip.pagIbigDeduction = decimal.Round(payslip.pagIbigDeduction, 2);
             *
             * payslip.philHealthDeduction = decimal.Divide(salaryService.fetchPhilHealthDeductionWithPeriodSalary(monthlySalary), 2);
             * payslip.philHealthDeduction = decimal.Round(payslip.philHealthDeduction, 2);
             *
             * periodSalary -= payslip.sssDeduction;
             * periodSalary -= payslip.pagIbigDeduction;
             * periodSalary -= payslip.philHealthDeduction;
             * Console.WriteLine("periodSalaryWIthDeductions---->>" + periodSalary);
             *
             * payslip.taxDeduction = decimal.Divide(salaryService.calculatePeriodSalaryTax(employee, monthlySalary), 2);
             * periodSalary -= payslip.taxDeduction;
             *
             * payslip.netPay = decimal.Round(periodSalary, 2);
             * Console.WriteLine("periodSalaryWithholdingTax---->>" + periodSalary);
             */
        }