Esempio n. 1
0
        public async Task <DtoResponse <CalcularLocacaoResposta> > Simular(CalcularLocacaoInput locacaoInput)
        {
            var veiculos = await _veiculoRepository.Filter(x => x.Id == locacaoInput.VeiculoId, v => v.Marca, v => v.Modelo, v => v.Categoria);

            if (veiculos == null || veiculos.Count() == 0)
            {
                return(new DtoResponse <CalcularLocacaoResposta>("Veículo não encontrado"));
            }

            var veiculo = veiculos.First();

            DateTime dataRetirada  = DateTime.Parse(locacaoInput.DataRetirada);
            DateTime dataDevolucao = DateTime.Parse(locacaoInput.DataDevolucao);

            double totalHoras = dataDevolucao.Subtract(dataRetirada).TotalHours;

            return(new DtoResponse <CalcularLocacaoResposta>(new CalcularLocacaoResposta()
            {
                Veiculo = _mapper.Map <Veiculo, VeiculoDto>(veiculo),
                Total = totalHoras * veiculo.ValorHora,
                TotalHoras = totalHoras,
                DataDevolucao = dataDevolucao,
                DataRetirada = dataRetirada
            }));
        }
Esempio n. 2
0
        public async Task <EntityResponse> Alugar(CalcularLocacaoInput input, IGeraPdf pdfWriter, string pathPDF)
        {
            if (input.UsuarioId == 0)
            {
                return(new EntityResponse("Usuário não identificado"));
            }

            if (input.OperadorId == 0)
            {
                return(new EntityResponse("Operador não identificado"));
            }

            var agendamentos = await _agendamentoRepository.Filter(ag => ag.VeiculoId == input.VeiculoId && ag.DataHoraEntregaRealizada == null);

            if (agendamentos.Count() > 0)
            {
                return(new EntityResponse("Veículo não está disponível"));
            }

            var simularValor = await Simular(input);

            if (!simularValor.Success)
            {
                return(new EntityResponse(simularValor.Message));
            }

            var simulado    = simularValor.Entity;
            var agendamento = new Agendamento()
            {
                DataAgendamento         = DateTime.Now,
                DataHoraColetaPrevista  = DateTime.Parse(input.DataRetirada),
                DataHoraEntregaPrevista = DateTime.Parse(input.DataDevolucao),
                ValorHora    = simulado.Veiculo.ValorHora,
                HorasLocacao = simulado.TotalHoras,
                SubTotal     = simulado.Total,
                VeiculoId    = simulado.Veiculo.Id,
                UsuarioId    = input.UsuarioId,
                OperadorId   = input.OperadorId
            };

            try
            {
                await _agendamentoRepository.AddAsync(agendamento);

                await _unitOfWork.CompleteAsync();

                var veiculo = await _veiculoRepository.Filter(x => x.Id == input.VeiculoId, v => v.Marca, v => v.Modelo, v => v.Categoria);

                new PdfService(pdfWriter).ContratoAluguelPdf(agendamento, veiculo.First(), pathPDF);

                return(new EntityResponse((IEntity)agendamento));
            }
            catch (Exception e)
            {
                return(new EntityResponse($"Um erro ocorreu ao salvar um agendamento: {e.Message}"));
            }
        }
Esempio n. 3
0
        public async Task <IActionResult> Simular([FromQuery] CalcularLocacaoInput calcularLocacaoInput)
        {
            var result = await _agendamentoService.Simular(calcularLocacaoInput);

            if (!result.Success)
            {
                return(BadRequest(result.Message));
            }

            // return Ok(result.Entity);
            return(StatusCode(200, result.Entity));
        }
Esempio n. 4
0
        public async Task <IActionResult> Alugar([FromBody] CalcularLocacaoInput input)
        {
            var path   = Startup.ContentRoot;
            var result = await _agendamentoService.Alugar(input, new GeraPdf(), path);

            if (!result.Success)
            {
                return(BadRequest(result.Message));
            }
            var agendamentoDto = _mapper.Map <Agendamento, AgendamentoDto>((Agendamento)result.Entity);

            return(StatusCode(200, agendamentoDto));
            // return Ok(result.Entity);
        }