Пример #1
0
        public Result <ComputeSalaryResponse> CalculateSalary(ComputeSalaryRequest model)
        {
            if (string.IsNullOrEmpty(model.Month))
            {
                return(Result <ComputeSalaryResponse> .Failure("Month is required"));
            }
            if (model.EmployeeId == Guid.Empty)
            {
                return(Result <ComputeSalaryResponse> .Failure("EmployeeId is required"));
            }

            var emp = _employeeContext.GetById(model.EmployeeId);

            if (emp == null)
            {
                return(Result <ComputeSalaryResponse> .Failure($"Sorry, employee  not found"));
            }

            var sal = new Result <ComputeSalaryResponse>();

            switch (emp.EmployeeType.SalaryType)
            {
            case SalaryType.RegularStaff:
                sal = _salaryCalculator.ComputeForRegularStaff(emp.EmployeeType, model.DaysAbsent, model.Month);
                break;

            case SalaryType.ContractualStaff:
                sal = _salaryCalculator.ComputeForContractualStaff(emp.EmployeeType, model.DaysWorked, model.Month);
                break;

            default:
                return(Result <ComputeSalaryResponse> .Failure(null, "Salary Type Not Found"));
            }

            //save to paymeent
            _ = _paymentManager.Create(new Payment
            {
                Month      = sal.Data.Month.ToUpper(),
                Days       = sal.Data.Days,
                Employee   = emp,
                EmployeeId = emp.Id,
                SalaryPaid = sal.Data.Salary,
                Tax        = sal.Data.Tax
            });

            return(sal);
        }