Exemplo n.º 1
0
    private void GenerateHonorerEmployeeMonthlyPayrollAllowances(MonthlyPayrollDetailDTO monthlyPayrollDetailDTO, EmployeeDTO employeeDTO)
    {
        List <AllowanceDTO>   honorerAllowanceDTOs  = allowanceRepository.FindAllByAllowanceType(AllowanceType.HONORER).ToList();
        BasicSalaryHonorerDTO basicSalaryHonorerDTO = basicSalaryHonorerRepository.FindBySchoolAndUnit(employeeDTO.SchoolID, employeeDTO.UnitID);

        CalculateMonthlyPayrollAllowances(monthlyPayrollDetailDTO, employeeDTO, honorerAllowanceDTOs, basicSalaryHonorerDTO.Value);
    }
Exemplo n.º 2
0
    private void GeneratePermanentEmployeeMonthlyPayrollAllowances(MonthlyPayrollDetailDTO monthlyPayrollDetailDTO, EmployeeDTO employeeDTO)
    {
        List <AllowanceDTO> permanentAllowanceDTOs = allowanceRepository.FindAllByAllowanceType(AllowanceType.TETAP_PGPS)
                                                     .Concat(allowanceRepository.FindAllByAllowanceType(AllowanceType.TETAP_KHUSUS)).ToList();
        BasicSalaryPermanentDTO basicSalaryPermanentDTO = basicSalaryPermanentRepository.Find(employeeDTO.BasicSalaryPermanentID);

        CalculateMonthlyPayrollAllowances(monthlyPayrollDetailDTO, employeeDTO, permanentAllowanceDTOs, basicSalaryPermanentDTO.Value);
    }
Exemplo n.º 3
0
    private MonthlyPayrollDetailDTO SaveMonthlyPayrollDetail(MonthlyPayrollDetailDTO monthlyPayrollDetailDTO)
    {
        MonthlyPayrollDetailDTO existingMonthlyPayrollDetailDTO = monthlyPayrollDetailRepository
                                                                  .FindByMonthlyPayrollAndEmployee(monthlyPayrollDetailDTO.MonthlyPayrollID, monthlyPayrollDetailDTO.EmployeeID);

        monthlyPayrollDetailDTO.ID = existingMonthlyPayrollDetailDTO != null ? existingMonthlyPayrollDetailDTO.ID : 0;

        if (existingMonthlyPayrollDetailDTO != null)
        {
            return(monthlyPayrollDetailRepository.Insert(monthlyPayrollDetailDTO));
        }
        else
        {
            return(monthlyPayrollDetailRepository.Update(monthlyPayrollDetailDTO));
        }
    }
Exemplo n.º 4
0
    public void GenerateMonthlyPayroll(int schoolID, int unitID, PayrollPeriod payrollPeriod, GenerateMonthlyPayrollDefaultData generateMonthlyPayrollDefaultData)
    {
        List <EmployeeDTO> permanentEmployeeDTOs = employeeRepository.FindAllBySchoolAndUnitAndEmployeeStatus(
            schoolID,
            unitID,
            EmployeeStatus.TETAP
            ).ToList();

        List <EmployeeDTO> honorerEmployeesDTOs = employeeRepository.FindAllBySchoolAndUnitAndEmployeeStatus(
            schoolID,
            unitID,
            EmployeeStatus.HONORER
            ).ToList();

        MonthlyPayrollDTO monthlyPayrollDTO = monthlyPayrollRepository
                                              .FindBySchoolAndUnitAndMonthAndYear(schoolID, unitID, payrollPeriod.Month, payrollPeriod.Year);

        if (monthlyPayrollDTO == null)
        {
            monthlyPayrollDTO = monthlyPayrollRepository.Insert(new MonthlyPayrollDTO
            {
                SchoolID = schoolID,
                UnitID   = unitID,
                Month    = payrollPeriod.Month
            });
        }

        unitOfWork.Run((r, ctx) =>
        {
            foreach (EmployeeDTO employeeDTO in permanentEmployeeDTOs)
            {
                MonthlyPayrollDetailDTO monthlyPayrollDetailDTO = SaveMonthlyPayrollDetail(new MonthlyPayrollDetailDTO
                {
                    MonthlyPayrollID = monthlyPayrollDTO.ID,
                    EmployeeID       = employeeDTO.ID,
                    EmployeeStatusID = EmployeeStatus.TETAP,
                    WorkingDays      = generateMonthlyPayrollDefaultData.DefaultPermanentDayIn,
                    WorkingHours     = generateMonthlyPayrollDefaultData.DefaultPermanentOverTime
                });
                GeneratePermanentEmployeeMonthlyPayrollAllowances(monthlyPayrollDetailDTO, employeeDTO);
                GenerateMonthlyPayrollAdditionalAllowances(monthlyPayrollDetailDTO.ID, employeeDTO);
                GeneratePermanentEmployeeMonthlyPayrollDeductions(monthlyPayrollDetailDTO.ID, employeeDTO);
                GenerateMonthlyPayrollAdditionalDeductions(monthlyPayrollDetailDTO.ID, employeeDTO);
            }
            foreach (EmployeeDTO employeeDTO in honorerEmployeesDTOs)
            {
                MonthlyPayrollDetailDTO monthlyPayrollDetailDTO = SaveMonthlyPayrollDetail(new MonthlyPayrollDetailDTO
                {
                    MonthlyPayrollID = monthlyPayrollDTO.ID,
                    EmployeeID       = employeeDTO.ID,
                    EmployeeStatusID = EmployeeStatus.HONORER,
                    WorkingDays      = generateMonthlyPayrollDefaultData.DefaultHonorerDayIn,
                    WorkingHours     = generateMonthlyPayrollDefaultData.DefaultHonorerOverTime
                });
                GenerateHonorerEmployeeMonthlyPayrollAllowances(monthlyPayrollDetailDTO, employeeDTO);
                GenerateMonthlyPayrollAdditionalAllowances(monthlyPayrollDetailDTO.ID, employeeDTO);
                GenerateHonorerEmployeeMonthlyPayrollDeductions(monthlyPayrollDetailDTO.ID, employeeDTO);
                GenerateMonthlyPayrollAdditionalDeductions(monthlyPayrollDetailDTO.ID, employeeDTO);
            }
        });
    }
Exemplo n.º 5
0
    private void CalculateMonthlyPayrollAllowances(MonthlyPayrollDetailDTO monthlyPayrollDetailDTO, EmployeeDTO employeeDTO, List <AllowanceDTO> allowanceDTOs, int basicSalary)
    {
        foreach (AllowanceDTO allowanceDTO in allowanceDTOs)
        {
            AllowanceDetailDTO allowanceDetailDTO = allowanceDetailRepository.FindByAllowanceAndSchool(allowanceDTO.ID, employeeDTO.SchoolID);
            switch (allowanceDTO.ID)
            {
            case Allowance.TETAP_PGPS_GAJI_POKOK:
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Amount = basicSalary
                });
                break;

            case Allowance.TETAP_PGPS_ISTRI:
                SpouseDTO spouseDTO   = spouseRepository.FindByEmployee(employeeDTO.ID);
                int       numOfSpouse = spouseDTO != null ? 1 : 0;
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = allowanceDetailDTO.Value,
                    Variable2 = numOfSpouse,
                    Variable3 = basicSalary,
                    Amount    = Convert.ToInt32(allowanceDetailDTO.Value * basicSalary) * numOfSpouse
                });
                break;

            case Allowance.TETAP_PGPS_ANAK:
                List <ChildDTO> childrenDTOs = childRepository.FindAllByEmployeeOrderByDateOfBirthDescending(employeeDTO.ID).ToList() ?? new List <ChildDTO>();

                if (childrenDTOs.Count > AllowanceRule.BATAS_JUMLAH_ANAK)
                {
                    childrenDTOs.RemoveRange(3, childrenDTOs.Count - AllowanceRule.BATAS_JUMLAH_ANAK);
                }
                childrenDTOs = childrenDTOs.Where(x => ChildAllowanceRule.ValidateAge(x.DateOfBirth)).ToList();

                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = allowanceDetailDTO.Value,
                    Variable2 = childrenDTOs.Count,
                    Variable3 = basicSalary,
                    Amount    = Convert.ToInt32(allowanceDetailDTO.Value * basicSalary) * childrenDTOs.Count
                });
                break;

            case Allowance.TETAP_PGPS_BERAS:
                childrenDTOs = childRepository.FindAllByEmployeeOrderByDateOfBirthDescending(employeeDTO.ID).ToList() ?? new List <ChildDTO>();
                spouseDTO    = spouseRepository.FindByEmployee(employeeDTO.ID);

                numOfSpouse = spouseDTO != null ? 1 : 0;

                if (childrenDTOs.Count > AllowanceRule.BATAS_JUMLAH_ANAK)
                {
                    childrenDTOs.RemoveRange(3, childrenDTOs.Count - AllowanceRule.BATAS_JUMLAH_ANAK);
                }
                childrenDTOs = childrenDTOs.Where(x => ChildAllowanceRule.ValidateAge(x.DateOfBirth)).ToList();

                int numOfChildren     = childrenDTOs.Count;
                int numOfFamilyMember = numOfSpouse + numOfChildren + 1;
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = allowanceDetailDTO.Value,
                    Variable2 = numOfFamilyMember,
                    Variable3 = 1,
                    Amount    = Convert.ToInt32(allowanceDetailDTO.Value * basicSalary) * numOfFamilyMember
                });
                break;

            case Allowance.HONORER_JABATAN:
            case Allowance.TETAP_PGPS_JABATAN:
                PositionalAllowanceDTO positionalAllowanceDTO = positionalAllowanceRepository
                                                                .FindByPositionAndSchoolAndEmployeeStatusAndUnit
                                                                    (employeeDTO.PositionID, employeeDTO.SchoolID, employeeDTO.EmployeeStatusID, employeeDTO.UnitID);
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = positionalAllowanceDTO.Value,
                    Amount    = positionalAllowanceDTO.Value
                });
                break;

            case Allowance.TETAP_PGPS_FUNGSIONAL:
                GradeDTO gradeDTO = gradeRepository.Find(employeeDTO.GradeID);
                FunctionalAllowanceDTO functionalAllowanceDTO = functionalAllowanceRepository
                                                                .FindBySchoolAndPayrollGroup(employeeDTO.SchoolID, gradeDTO.PayrollGroup);
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = functionalAllowanceDTO.Value,
                    Amount    = functionalAllowanceDTO.Value
                });
                break;

            case Allowance.TETAP_KHUSUS_ISTRI:
                spouseDTO   = spouseRepository.FindByEmployee(employeeDTO.ID);
                numOfSpouse = spouseDTO != null ? 1 : 0;
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = allowanceDetailDTO.Value,
                    Variable2 = numOfSpouse,
                    Amount    = Convert.ToInt32(allowanceDetailDTO.Value * numOfSpouse)
                });
                break;

            case Allowance.TETAP_KHUSUS_ANAK:
                childrenDTOs = childRepository.FindAllByEmployeeOrderByDateOfBirthDescending(employeeDTO.ID).ToList() ?? new List <ChildDTO>();

                if (childrenDTOs.Count > AllowanceRule.BATAS_JUMLAH_ANAK)
                {
                    childrenDTOs.RemoveRange(3, childrenDTOs.Count - AllowanceRule.BATAS_JUMLAH_ANAK);
                }
                childrenDTOs = childrenDTOs.Where(x => ChildAllowanceRule.ValidateAge(x.DateOfBirth)).ToList();

                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = allowanceDetailDTO.Value,
                    Variable2 = childrenDTOs.Count,
                    Amount    = Convert.ToInt32(allowanceDetailDTO.Value * childrenDTOs.Count)
                });
                break;

            case Allowance.HONORER_TRANSPORT_DAN_MAKAN:
            case Allowance.TETAP_KHUSUS_TRANSPORT_DAN_MAKAN:
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = allowanceDetailDTO.Value,
                    Variable2 = monthlyPayrollDetailDTO.WorkingDays,
                    Amount    = Convert.ToInt32(allowanceDetailDTO.Value * monthlyPayrollDetailDTO.WorkingDays)
                });
                break;

            case Allowance.TETAP_KHUSUS_KARYA:
                KaryaAllowanceDTO karyaAllowanceDTO = karyaAllowanceRepository.FindBySchoolAndUnit(employeeDTO.SchoolID, employeeDTO.UnitID);
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = karyaAllowanceDTO.Value,
                    Amount    = karyaAllowanceDTO.Value
                });
                break;

            case Allowance.TETAP_KHUSUS_MASA_KERJA:
                ServiceYearAllowanceDTO serviceYearAllowanceDTO = serviceYearAllowanceRepository
                                                                  .FindBySchoolAndCurrentDate(employeeDTO.SchoolID, DateTime.Now);
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = serviceYearAllowanceDTO.Value + employeeDTO.ServiceYearAllowanceAccumulation,
                    Amount    = serviceYearAllowanceDTO.Value + employeeDTO.ServiceYearAllowanceAccumulation
                });
                break;

            case Allowance.HONORER_PENGOBATAN:
            case Allowance.TETAP_KHUSUS_PENGOBATAN:
                double uangPengobatan = (employeeDTO.IsBPJSKesehatan) ? 0 : allowanceDetailDTO.Value;
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = uangPengobatan,
                    Amount    = Convert.ToInt32(uangPengobatan)
                });
                break;

            case Allowance.TETAP_KHUSUS_JAM_KERJA_LEBIH:
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = allowanceDetailDTO.Value,
                    Variable2 = monthlyPayrollDetailDTO.WorkingHours,
                    Amount    = Convert.ToInt32(allowanceDetailDTO.Value * monthlyPayrollDetailDTO.WorkingHours)
                });
                break;

            case Allowance.HONORER_GAJI_POKOK:
                SaveMonthlyPayrollAllowance(new MonthlyAllowanceDetail
                {
                    MonthlyPayrollDetailID = monthlyPayrollDetailDTO.ID,
                    AllowanceID            = allowanceDTO.ID,
                    Variable1 = basicSalary,
                    Variable2 = monthlyPayrollDetailDTO.WorkingHours,
                    Amount    = basicSalary * monthlyPayrollDetailDTO.WorkingHours
                });
                break;
            }
        }
    }