示例#1
0
        public CompraResponse Add(CompraRequest request)
        {
            if (ExisteFactura(request.NumeroFactura))
            {
                return(new CompraResponse($"La factura {request.NumeroFactura} ya está registrada"));
            }

            CompraBuilder compraBuilder = new CompraBuilder(request.NumeroFactura);

            foreach (var item in request.Detalles)
            {
                Producto producto = _unitOfWork.ProductoRepository.FindFirstOrDefault(x => x.Codigo == item.CodigoProducto);
                compraBuilder = compraBuilder.AgregarDetalle(producto, item.Cantidad, item.PrecioCompra);
            }

            if (compraBuilder.IsOk().Any())
            {
                return(new CompraResponse(string.Join(',', compraBuilder.IsOk())));
            }

            Compra compra = compraBuilder.Build(request.Pagado, request.Impuesto);

            if (_unitOfWork.Commit() > 0)
            {
                return(new CompraResponse
                       (
                           mensaje: "Compra registrada correctamente",
                           entidad: compra
                       ));
            }

            return(new CompraResponse("No se pudo registrar la compra"));
        }
示例#2
0
        public async Task <IActionResult> Post([FromBody] CompraRequest comprasRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.GetErrorMessages()));
            }

            var db = new ApplicationContext();

            // TODO ver https://www.freecodecamp.org/news/an-awesome-guide-on-how-to-build-restful-apis-with-asp-net-core-87b818123e28/
            // Aprender a usar a injeção de deéndências e o AutoMapper para melhorar o código no geral

            Compra compra = new Compra();

            compra.Nome       = comprasRequest.Nome;
            compra.Concluido  = comprasRequest.Concluido;
            compra.Observacao = comprasRequest.Observacao;

            try
            {
                // testar o add com a cópia de valores
                //db.Entry(compra).CurrentValues.SetValues(comprasRequest);

                await db.Compras.AddAsync(compra);

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }

            // TODO - criar um objeto de resposta
            return(Ok("Objeto criado"));
        }
        public Response HacerCompraService(CompraRequest request)
        {
            TerceroProveedor proveedor = this._unitOfWork.TerceroProvedorRepository.
                                         FindBy(provedor => provedor.Tercero.Nit == request.NitProveedor,
                                                includeProperties: "Tercero").FirstOrDefault();

            if (proveedor == null)
            {
                return(new Response
                {
                    Mensaje = $"El provedor con identificación {request.NitProveedor}" +
                              $" no fue encontrado en el sistema, agréguelo antes"
                });
            }
            TerceroUsuario usuario = this._unitOfWork.TerceroUsuarioRepository.
                                     FindFirstOrDefault(usuario => usuario.Id == request.UsuarioId);


            if (usuario == null)
            {
                return(new Response
                {
                    Mensaje = $"El usuario con id {request.UsuarioId}" +
                              $" no fue encontrado en el sistema, agréguelo antes"
                });
            }
            var errores = PuedeRegistrarDetalles(request.Detalles);

            if (errores.Any())
            {
                return(new Response
                {
                    Mensaje = string.Join(", ", errores)
                });
            }
            Compra compra = new Compra.CompraBuilder(proveedor, usuario).Build();

            request.Detalles.ForEach((detalle) =>
            {
                Producto producto = this._unitOfWork.ProductoRepository.
                                    FindBy(producto => producto.Id == detalle.ProductoId,
                                           includeProperties: "DetallesCompra.Compra").FirstOrDefault();

                CompraDetalle compraDetalle = new CompraDetalle.CompraDetalleBuilder(producto, compra).
                                              SetCantidad(detalle.Cantidad).SetCostoUnitario(detalle.Valor).Build();

                compra.AddDetalle(compraDetalle);
                producto.AddCompraDetalle(compraDetalle);
            });

            this._unitOfWork.CompraRepository.Add(compra);
            this._unitOfWork.TransaccionRepository.Add(new Transaccion(TipoDeTransaccion.Egreso, Concepto.CompraDeMateriasPrimas, compra.Total));
            this._unitOfWork.Commit();
            return(new Response
            {
                Mensaje = "Compra registrada con éxito",
                Data = new CompraRequest().Map(compra)
            });
        }
        public async Task <IActionResult> Realizar([FromBody] CompraRequest compraRequest)
        {
            var result = await _compraService.Efetivar(compraRequest);

            return(new ObjectResult(result)
            {
                StatusCode = StatusCodes.Status200OK
            });
        }
示例#5
0
        public ActionResult add(CompraRequest request)
        {
            try
            {
                using (var transaccion = _context.Database.BeginTransaction())
                {
                    try
                    {
                        var compra = new Compras();
                        compra.Total    = request.detalleRequests.Sum(item => item.Cantidad * item.PrecioUnitario);
                        compra.Fecha    = DateTime.Now;
                        compra.IdEstado = request.IdEstado;
                        _context.Compras.Add(compra);
                        _context.SaveChanges();

                        foreach (var compradetalle in request.detalleRequests)
                        {
                            var producto = _context.Producto.FindAsync(compradetalle.IdProducto);

                            if (producto.Result.IdProducto > 0)
                            {
                                var detalle = new Modelo.DetalleCompra();
                                detalle.Cantidad       = compradetalle.Cantidad;
                                detalle.IdProducto     = compradetalle.IdProducto;
                                detalle.CostoUnitario  = producto.Result.Costo;
                                detalle.PrecioUnitario = compradetalle.PrecioUnitario;
                                detalle.IdCompra       = compradetalle.IdCompra;



                                Modelo.Producto product = new Modelo.Producto
                                {
                                    Existencia = producto.Result.Existencia + detalle.Cantidad,
                                };

                                // actualizarProducto(producto.Result.IdProducto, product);

                                _context.DetalleCompra.Add(detalle);
                                _context.SaveChanges();
                            }
                        }
                        transaccion.Commit();
                    }
                    catch (Exception ex)
                    {
                        transaccion.Rollback();
                    }
                }
            }
            catch (Exception ex)
            {
                return(null);
            }

            return(Ok());
        }
        public ActionResult <Response> HacerCompra(CompraRequest request)
        {
            Response response = new CompraService(_unitOfWork).HacerCompraService(request);

            if (response.Data == null)
            {
                return(BadRequest(response.Mensaje));
            }
            return(Ok(response));
        }
        public async Task <IActionResult> RecibirPedido([FromBody] CompraRequest request)
        {
            if (string.IsNullOrEmpty(request.NombreProveedor))
            {
                return(BadRequest("Debe enviar el nombre de Articulo"));
            }
            await topicHelper.SendMessage(request);

            return(Ok("Datos Enviados correctamente"));
        }
示例#8
0
        private bool ValidaCompraUpdate(CompraRequest compraRequest)
        {
            var CompraExistente = _comprasRepository.Get(compraRequest.Cod_compra);

            if (_baseValida.ValidaCampoNull(compraRequest.titulo, compraRequest.descricao) ||
                CompraExistente == null)
            {
                return(true);
            }
            return(false);
        }
        public async Task SendMessage(CompraRequest payload)
        {
            //serializarlo a JSON
            string  data    = JsonConvert.SerializeObject(payload);
            Message message = new Message(Encoding.UTF8.GetBytes(data));

            try
            {
                await topicClient.SendAsync(message);
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message);
            }
        }
        /// <summary>
        /// A partir de la petición de compra, se devuelve la respuesta
        /// actualizando la cantidad tontal de entradas y calculando el precio de
        /// las entradas compradas
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public CompraResponse GetResponse(CompraRequest request)
        {
            Festival festivalCompra;

            if (FestivalesVacio())
            {
                CargarFestivales();
            }
            festivalCompra = GetFestivalPorNombre(request.Festival);
            foreach (var festival in festivales)
            {
                if (festival.Nombre == festivalCompra.Nombre)
                {
                    festival.Cantidad = (festivalCompra.Cantidad - request.Entradas);
                }
            }
            response.CosteTotal = (festivalCompra.Precio * request.Entradas);
            return(response);
        }
示例#11
0
        public ActionResult <CompraRequest> Put([FromBody] CompraRequest compraRequest)
        {
            var NewCompra = _comprasRepository.Get(compraRequest.Cod_compra);

            try
            {
                if (!ValidaCompraUpdate(compraRequest))
                {
                    NewCompra.titulo    = compraRequest.titulo.Trim(' ');
                    NewCompra.descricao = compraRequest.descricao.Trim(' ');

                    var Compra = _comprasRepository.Update(NewCompra);
                    return(new OkObjectResult(compraRequest));
                }
                else
                {
                    return(new BadRequestObjectResult("Erro Update"));
                }
            }
            catch (Exception e)
            {
                return(new BadRequestObjectResult(e));
            }
        }
示例#12
0
 public CompraResponse Post([FromBody] CompraRequest request)
 {
     return(fr.GetResponse(request));
 }
示例#13
0
        public ActionResult <CompraResponse> Nueva(CompraRequest request)
        {
            var response = _service.Add(request);

            return(response);
        }
 public async Task <object> Efetivar(CompraRequest compraRequest)
 {
     return(await _fornecedorRepository.ObterInformacoes(compraRequest.Endereco.Estado));
 }