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 PdfService(IGeraPdf pdfWriter) { this.pdfWriter = pdfWriter; }
public async Task <EntityResponse> Devolver(DevolucaoInput resource, IGeraPdf pdfWriter, string pathPDF) { var agendamento = await _agendamentoRepository.FindByIdAsync(resource.AgendamentoId); if (agendamento == null) { return(new EntityResponse("Agendamento não encontrado")); } if (resource.OperadorId == 0) { return(new EntityResponse("Operador Obrigatório")); } var checklist = _mapper.Map <DevolucaoInput, Checklist>(resource); agendamento.DataHoraEntregaRealizada = DateTime.Now; double adicional = 0; if (!resource.CarroLimpo) { adicional += agendamento.SubTotal * 0.30; } if (!resource.TanqueCheio) { adicional += agendamento.SubTotal * 0.30; } if (resource.Amassados) { adicional += agendamento.SubTotal * 0.30; } if (resource.Arranhoes) { adicional += agendamento.SubTotal * 0.30; } agendamento.CustosAdicional = adicional; agendamento.ValorTotal = agendamento.SubTotal + adicional; agendamento.RealizadaVistoria = true; try { await _checklistRepository.AddAsync(checklist); await _unitOfWork.CompleteAsync(); agendamento.ChecklistId = checklist.Id; _agendamentoRepository.Update(agendamento); await _unitOfWork.CompleteAsync(); var veiculo = await _veiculoRepository.Filter(x => x.Id == agendamento.VeiculoId, v => v.Marca, v => v.Modelo, v => v.Categoria); new PdfService(pdfWriter).ContratoPagamentoPdf(agendamento, veiculo.First(), pathPDF); return(new EntityResponse(agendamento)); } catch (Exception e) { return(new EntityResponse($"Um erro ocorreu ao atualizar um agendamento: {e.Message}")); } }