public IActionResult Process([FromBody] PayslipInput input) { try { //failed model will auto-send 400 badrequest by api bool isValidInput = _payslipService.ValidateInputModel(input); if (!isValidInput) { ErrorResponse errorResponse = new ErrorResponse("model is invalid or violate business rules, please change the input and try again.", ErrorTypes.BusinessRuleViolation); return(BadRequest(errorResponse)); } PayslipOutput payslipOutput = _payslipService.GeneratePayslip(input); return(Ok(payslipOutput)); } catch (ArgumentNullException ex) { ErrorResponse errorResponse = new ErrorResponse(ex.Message, ErrorTypes.BusinessRuleViolation); return(BadRequest(errorResponse)); } }
PayslipOutput IPayslipService.GeneratePayslip(PayslipInput input) { List <WageLevel> wageLevels = PayslipMapper.MapFromDictionaryToWageLevelModel(input.WageLevels); PayslipOutput payslipOutput = new PayslipOutput { EmployeeName = input.Employee?.Name, ShiftOutputs = new List <ShiftOutput>() }; foreach (var shift in input.Shifts) { var shiftOutput = ProcessShift(shift, wageLevels); payslipOutput.ShiftOutputs.Add(shiftOutput); } payslipOutput.TotalHoursWorked = payslipOutput.ShiftOutputs.Sum(so => so.TotalHoursWorked); payslipOutput.TotalNormalHoursWorked = payslipOutput.ShiftOutputs.Sum(so => so.NormalHoursWorked); payslipOutput.TotalOvertimeHoursWorked = payslipOutput.ShiftOutputs.Sum(so => so.OvertimeHoursWorked); payslipOutput.TotalEarning = payslipOutput.ShiftOutputs.Sum(so => so.Earning); //init response properties payslipOutput.Message = "payslip has been successfully generated"; payslipOutput.IsSuccessful = true; return(payslipOutput); }