Пример #1
0
        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." }));
        }