public ActionResult ChargeRegistration(int recordId) { Rules rules; FlowRecord record; using (var providerDAO = new RulesDAO()) rules = providerDAO.Get(); if (rules == null) { return(StatusCode(404, new { Message = "Não há regras base para o cálculo da fatura" })); } using (var flowRecordDAO = new FlowRecordDAO()) record = flowRecordDAO.Get(recordId); if (record == null) { return(StatusCode(404, new { Message = "Registro não encontrado" })); } if (record.Departure != null) { var permanence = record.Departure - record.Arrival; var total = rules.Tax * Convert.ToDecimal(Math.Floor(permanence.Value.TotalMinutes / rules.IntervalMinutes)); // Caso tenha permanecido menos que o intervalo de cobrança, é cobrado a taxa mínima if (total <= 0) { total += rules.Tax; } return(StatusCode(200, new Invoice() { Id = 0, GenerationDate = DateTime.Now, TaxConsidered = rules.Tax, IntervalMinutesConsidered = rules.IntervalMinutes, CompanyDebtor = record.BusRegistered.BusCompany, TotalCost = total })); } return(StatusCode(412, new { Message = "O registro deve estar fechado para ser tarifado." })); }