public Response Crear(TerceroProveedorRequest request)
        {
            TerceroProveedor provedor = this._unitOfWork.TerceroProvedorRepository.
                                        FindBy(provedor => provedor.Tercero.Nit == request.NitTercero,
                                               includeProperties: "Tercero").FirstOrDefault();

            if (provedor != null)
            {
                return(new Response
                {
                    Mensaje = $"No se pudo registrar el proveedor porque ya está en el sistema"
                });
            }

            Tercero tercero = this._unitOfWork.TerceroRepository.
                              FindFirstOrDefault(tercero => tercero.Nit == request.NitTercero);

            if (tercero == null)
            {
                tercero = request.Tercero.UnMap();
            }

            provedor = new TerceroProveedor(tercero);
            this._unitOfWork.TerceroProvedorRepository.Add(provedor);
            this._unitOfWork.Commit();
            return(new Response
            {
                Mensaje = "Proveedor registrado con éxito",
                Data = new TerceroProveedorRequest().Map(provedor)
            });
        }
        public ActionResult PostProvedor(TerceroProveedorRequest request)
        {
            var response = new TerceroProveedorCrearService(this._unitOfWork)
                           .Crear(request);

            if (response.Data == null)
            {
                return(NotFound(response.Mensaje));
            }
            return(Ok(response));
        }
        public void SetUp()
        {
            var optionsInMemory = new DbContextOptionsBuilder <DulcesYmasContext>().
                                  UseInMemoryDatabase("ComprarBD").Options;

            _context    = new DulcesYmasContext(optionsInMemory);
            _unitOfWork = new UnitOfWork(_context);

            #region CrearCategorias
            new ProductoCategoriaCrearService(this._unitOfWork).Crear(new ProductoCategoriaRequest.
                                                                      ProductoCategoriaRequestBuilder("Comestibles").SetId(1).Build());
            #endregion

            #region CrearSubCategorias
            new ProductoCategoriaAgregarSubCategoriaService(this._unitOfWork).Agregar(new ProductoSubCategoriaRequest.
                                                                                      ProductoSubCategoriaRequestBuilder("Materia prima").SetId(1).SetIdCategoria(1).Build());
            #endregion

            #region CrearMateriasPrimas

            new ProductoCrearService(_unitOfWork).Crear(new ProductoRequest.ProductoRequestBuilder(1, "Batata").
                                                        SetCantidad(0).SetCostoUnitario(700).SetUnidadDeMedida(UnidadDeMedida.Kilos).SetTipo(Tipo.MateriaPrima).
                                                        SetPorcentajeDeUtilidad(0).SetEspecificacion(Especificacion.MateriaPrima).
                                                        SetSubCategoria(1).Build());

            new ProductoCrearService(_unitOfWork).Crear(new ProductoRequest.ProductoRequestBuilder(2, "Ñame").
                                                        SetCantidad(15).SetCostoUnitario(500).SetUnidadDeMedida(UnidadDeMedida.Kilos).SetTipo(Tipo.MateriaPrima).
                                                        SetPorcentajeDeUtilidad(0).SetEspecificacion(Especificacion.MateriaPrima).
                                                        SetSubCategoria(1).Build());

            new ProductoCrearService(_unitOfWork).Crear(new ProductoRequest.ProductoRequestBuilder(3, "Leche").
                                                        SetCantidad(95).SetCostoUnitario(1700).SetUnidadDeMedida(UnidadDeMedida.Litros).SetTipo(Tipo.MateriaPrima).
                                                        SetPorcentajeDeUtilidad(0).SetEspecificacion(Especificacion.MateriaPrima).
                                                        SetSubCategoria(1).Build());

            new ProductoCrearService(_unitOfWork).Crear(new ProductoRequest.ProductoRequestBuilder(4, "Azúcar").
                                                        SetCantidad(30).SetCostoUnitario(1300).SetUnidadDeMedida(UnidadDeMedida.Kilos).SetTipo(Tipo.MateriaPrima).
                                                        SetPorcentajeDeUtilidad(0).SetEspecificacion(Especificacion.MateriaPrima).
                                                        SetSubCategoria(1).Build());

            #endregion

            #region CompraDetallesCorrectos
            this.compraDetallesCorrectos = new List <CompraDetalleRequest>
            {
                new CompraDetalleRequest.CompraDetalleRequestBuilder(4)
                .SetCantidad(15).SetValor(1500).Build(),

                new CompraDetalleRequest.CompraDetalleRequestBuilder(1)
                .SetCantidad(30).SetValor(600).Build(),

                new CompraDetalleRequest.CompraDetalleRequestBuilder(3)
                .SetCantidad(45).SetValor(1400).Build(),
            };
            #endregion CompraDetallesCorrectos

            #region CompraDetallesInCorrectos
            this.compraDetallesInCorrectos = new List <CompraDetalleRequest>
            {
                new CompraDetalleRequest.CompraDetalleRequestBuilder(4)
                .SetCantidad(15).SetValor(1500).Build(),

                new CompraDetalleRequest.CompraDetalleRequestBuilder(7)
                .SetCantidad(-30).SetValor(-600).Build(),

                new CompraDetalleRequest.CompraDetalleRequestBuilder(3)
                .SetCantidad(45).SetValor(1400).Build(),
            };
            #endregion CompraDetallesInCorrectos

            #region Terceros
            terceroDuvan = new TerceroRequest("1065840833", "Duvan");
            terceroMaria = new TerceroRequest("10103116", "Maria");

            RoleRequest roleAdministrador = new RoleRequest();
            roleAdministrador.Nombre = "administrador";
            new RoleCrearService(this._unitOfWork).Crear(roleAdministrador);

            usuarioDuvan = new TerceroUsuarioRequest.TerceroUsuarioRequestBuilder(terceroDuvan).SetId(1).
                           SetUsuario("duvaninho").SetPassword("12345").SetRole(roleAdministrador).Build();

            provedorMaria = new TerceroProveedorRequest(terceroMaria);

            new TerceroCrearService(_unitOfWork).CrearTercero(terceroMaria);
            new TerceroCrearService(_unitOfWork).CrearTercero(terceroDuvan);

            new TerceroProveedorCrearService(_unitOfWork).Crear(provedorMaria);
            new TerceroUsuarioCrearService(_unitOfWork).Crear(usuarioDuvan);
            #endregion
        }