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); }