Esempio n. 1
0
        public IActionResult Descargar([FromBody] Compras compra)
        {
            var user = this.GetAppUser();
            //Actializar encabezado
            var compraModificada = db.Compras.Include(x => x.ComprasDetalle).FirstOrDefault(x => x.Id == compra.Id);

            if (compraModificada == null)
            {
                return(BadRequest($"No se puede encontra la compra con identificador {compra.Id}"));
            }

            if (compraModificada.EstadoId == (int)Estados.Anulado)
            {
                return(BadRequest($"No se puede hacer una descarga de una compra en estado anulado"));
            }

            compraModificada.CopyFrom(compra, x => new
            {
                x.Referencia,
                x.Observacion
            });

            compraModificada.EtapaId = (int)CompraEtapas.Recibida;

            //Actualizar registros
            //var oldComprasDetalle = factoryDetalle.GetAll(x => x.CompraId == compra.Id);
            foreach (var item in compraModificada.ComprasDetalle)
            {
                var itemEnviado = compra.ComprasDetalle.FirstOrDefault(x => x.Id == item.Id);
                if (itemEnviado != null)
                {
                    item.CantidadRecibida = itemEnviado.CantidadRecibida;
                    item.Costo            = itemEnviado.Costo;
                    item.NuevoPrecio      = itemEnviado.NuevoPrecio;
                    item.SubTotal         = itemEnviado.SubTotal;
                    item.DescuentoAverage = itemEnviado.DescuentoAverage;
                    item.DescuentoMonto   = itemEnviado.DescuentoMonto;
                    item.Importe          = itemEnviado.Importe;
                    item.IvaAverage       = itemEnviado.IvaAverage;
                    item.IvaMonto         = itemEnviado.IvaMonto;
                    item.Total            = itemEnviado.Total;
                }
            }

            //Hacer la entrada
            //Craer encabezado
            var entrada = new Entradas();

            entrada.InitFromCompras(db, compra, user);

            foreach (var item in compra.ComprasDetalle)
            {
                var entradasDetalle = new EntradasDetalle();

                entradasDetalle.InitFromComprasDetalle(entrada, item, db);

                entrada.EntradasDetalle.Add(entradasDetalle);

                //Actualizar existencias
                var inventario = db.Inventario.Find(entradasDetalle.InventarioId);
                inventario.RegisterTransactionIn(db, entradasDetalle, user, entrada.AreaId);
            }

            db.Entradas.Add(entrada);
            compra.EntradaId = entrada.Id;
            entrada.CompraId = compra.Id;

            var app = db.App.FirstOrDefault();

            if (app.GererarProcesosContables)
            {
                var asientosFactory = new AsientosFactory(db);
                var result          = asientosFactory.CreateFromEntrada(entrada, app);
                if (!result.IsValid)
                {
                    return(BadRequest(result.Error));
                }
            }

            db.SaveChanges();

            return(Json(compra));
        }