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