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)); }