Skip to content

Commit

Permalink
Merge pull request #56 from Brunobento1990/develop
Browse files Browse the repository at this point in the history
feature criar pedido pelo admin
  • Loading branch information
Brunobento1990 authored Dec 28, 2024
2 parents c91ca84 + a4c841e commit 385a12d
Show file tree
Hide file tree
Showing 9 changed files with 129 additions and 3 deletions.
4 changes: 1 addition & 3 deletions OpenAdm.Api/Controllers/PedidoController.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
using Azure;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using OpenAdm.Api.Attributes;
using OpenAdm.Application.Dtos.Response;
using OpenAdm.Application.Interfaces;
using OpenAdm.Application.Models.Categorias;
using OpenAdm.Application.Models.Pedidos;
using OpenAdm.Domain.Interfaces;
using OpenAdm.Infra.Paginacao;
Expand Down
29 changes: 29 additions & 0 deletions OpenAdm.Api/Controllers/Pedidos/CreatePedidoAdmController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Microsoft.AspNetCore.Mvc;
using OpenAdm.Api.Attributes;
using OpenAdm.Application.Dtos.Pedidos;
using OpenAdm.Application.Interfaces.Pedidos;

namespace OpenAdm.Api.Controllers.Pedidos;

[ApiController]
[Route("pedidos-adm")]
[Autentica]
[AutenticaParceiro]
[IsFuncionario]
public class CreatePedidoAdmController : ControllerBase
{
private readonly ICreatePedidoAdmService _createPedidoAdmService;

public CreatePedidoAdmController(ICreatePedidoAdmService createPedidoAdmService)
{
_createPedidoAdmService = createPedidoAdmService;
}

[HttpPost("create")]
public async Task<IActionResult> CreatePedido(PedidoAdmCreateDto pedidoAdmCreateDto)
{
var result = await _createPedidoAdmService.CreateAsync(pedidoAdmCreateDto);

return Ok(new { result });
}
}
10 changes: 10 additions & 0 deletions OpenAdm.Application/Dtos/Pedidos/PedidoAdmCreateDto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using OpenAdm.Domain.Model.Pedidos;

namespace OpenAdm.Application.Dtos.Pedidos;

public class PedidoAdmCreateDto
{
public Guid UsuarioId { get; set; }
public IList<ItemPedidoModel> Itens { get; set; } = [];
}

1 change: 1 addition & 0 deletions OpenAdm.Application/Interfaces/IUsuarioService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public interface IUsuarioService
{
Task<UsuarioViewModel> GetUsuarioByIdAsync();
Task<UsuarioViewModel> GetUsuarioByIdAdmAsync(Guid id);
Task<UsuarioViewModel> GetUsuarioByIdValidacaoAsync(Guid id);
Task<IList<UsuarioViewModel>> GetAllUsuariosAsync();
Task<ResponseLoginUsuarioViewModel> CreateUsuarioAsync(CreateUsuarioDto createUsuarioDto);
Task<ResponseLoginUsuarioViewModel> UpdateUsuarioAsync(UpdateUsuarioDto updateUsuarioDto);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using OpenAdm.Application.Dtos.Pedidos;

namespace OpenAdm.Application.Interfaces.Pedidos;

public interface ICreatePedidoAdmService
{
Task<bool> CreateAsync(PedidoAdmCreateDto pedidoAdmCreateDto);
}
2 changes: 2 additions & 0 deletions OpenAdm.Application/Models/Usuarios/UsuarioViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class UsuarioViewModel : BaseModel
public int? PedidosEntregue { get; set; }
public int? PedidosCancelados { get; set; }
public decimal? TotalPedido { get; set; }
public bool IsAtacado { get; set; }

public UsuarioViewModel ToModel(Usuario entity, int? quantidadeDePedido = null)
{
Expand All @@ -29,6 +30,7 @@ public UsuarioViewModel ToModel(Usuario entity, int? quantidadeDePedido = null)
Nome = entity.Nome;
Cnpj = entity.Cnpj;
Cpf = entity.Cpf;
IsAtacado = entity.IsAtacado;

return this;
}
Expand Down
67 changes: 67 additions & 0 deletions OpenAdm.Application/Services/Pedidos/CreatePedidoAdmService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
using OpenAdm.Application.Dtos.Pedidos;
using OpenAdm.Application.Interfaces;
using OpenAdm.Application.Interfaces.Pedidos;
using OpenAdm.Domain.Entities;
using OpenAdm.Domain.Enuns;
using OpenAdm.Domain.Exceptions;
using OpenAdm.Domain.Interfaces;

namespace OpenAdm.Application.Services.Pedidos;

public class CreatePedidoAdmService : ICreatePedidoAdmService
{
private readonly IPedidoRepository _pedidoRepository;
private readonly IProcessarPedidoService _processarPedidoService;
private readonly IItemTabelaDePrecoRepository _itemTabelaDePrecoRepository;
private readonly IFaturaService _faturaService;
private readonly IUsuarioService _usuarioService;

public CreatePedidoAdmService(
IPedidoRepository pedidoRepository,
IProcessarPedidoService processarPedidoService,
IItemTabelaDePrecoRepository itemTabelaDePrecoRepository,
IFaturaService faturaService,
IUsuarioService usuarioService)
{
_pedidoRepository = pedidoRepository;
_processarPedidoService = processarPedidoService;
_itemTabelaDePrecoRepository = itemTabelaDePrecoRepository;
_faturaService = faturaService;
_usuarioService = usuarioService;
}

public async Task<bool> CreateAsync(PedidoAdmCreateDto pedidoAdmCreateDto)
{
if (pedidoAdmCreateDto.Itens.Count == 0)
{
throw new ExceptionApi("Informe os itens do pedido!");
}
var usuario = await _usuarioService.GetUsuarioByIdValidacaoAsync(id: pedidoAdmCreateDto.UsuarioId);
var date = DateTime.Now;
var pedido = new Pedido(Guid.NewGuid(), date, date, 0, StatusPedido.Aberto, usuario.Id);

var produtosIds = pedidoAdmCreateDto.Itens.Select(x => x.ProdutoId).ToList();
var itensTabelaDePreco = await _itemTabelaDePrecoRepository.GetItensTabelaDePrecoByIdProdutosAsync(produtosIds);

pedido.ProcessarItensPedido(pedidoAdmCreateDto.Itens);

await _pedidoRepository.AddAsync(pedido);
await _processarPedidoService.ProcessarCreateAsync(pedido.Id);


await _faturaService.CriarContasAReceberAsync(new()
{
DataDoPrimeiroVencimento = DateTime.Now.AddMonths(1),
Desconto = null,
MeioDePagamento = null,
Observacao = $"Pedido: {pedido.Numero}",
PedidoId = pedido.Id,
QuantidadeDeParcelas = 1,
Total = pedido.ValorTotal,
UsuarioId = pedido.UsuarioId,
Tipo = TipoFaturaEnum.A_Receber
});

return true;
}
}
10 changes: 10 additions & 0 deletions OpenAdm.Application/Services/UsuarioService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,14 @@ public async Task<bool> TemTelefoneCadastradoAsync()
var usuario = await _usuarioAutenticado.GetUsuarioAutenticadoAsync();
return !string.IsNullOrWhiteSpace(usuario.Telefone);
}

public async Task<UsuarioViewModel> GetUsuarioByIdValidacaoAsync(Guid id)
{
var usuario = await _usuarioRepository.GetUsuarioByIdAsync(id)
?? throw new ExceptionApi("Não foi possível localizar o cadastro do usuario");

var usuarioViewModel = new UsuarioViewModel().ToModel(usuario, 0);

return usuarioViewModel;
}
}
1 change: 1 addition & 0 deletions OpenAdm.IoC/DependencyInjectyApplication.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public static class DependencyInjectyApplication
public static void InjectServices(this IServiceCollection services)
{
services.AddScoped<PagamentoPix>();
services.AddScoped<ICreatePedidoAdmService, CreatePedidoAdmService>();
services.AddScoped<ITransacaoFinanceiraService, TransacaoFinanceiraService>();
services.AddScoped<IPagamentoFactory, PagamentoFactory>();
services.AddScoped<IEnderecoEntregaPedidoService, EnderecoEntregaPedidoService>();
Expand Down

0 comments on commit 385a12d

Please sign in to comment.