public IActionResult Post([FromBody] Asientos asiento) { var asientosFactory = new AsientosFactory(db); asientosFactory.Save(asiento); return(Json(asiento)); }
private IActionResult Post(Salidas salida, AppUser user) { if (salida.Id > 0) { //Actializar encabezado var salidaModificada = db.Salidas.FirstOrDefault(x => x.Id == salida.Id); if (salidaModificada.EstadoId == (int)Estados.Anulado) { return(BadRequest($"No se puede editar una salida en estado anulado")); } salidaModificada.CopyAllFromExcept(salida, x => new { x.Id }); //eliminar registros anteriores var oldComprasDetalle = db.SalidasDetalle.Where(x => x.SalidaId == salida.Id); foreach (var item in oldComprasDetalle) { db.SalidasDetalle.Remove(item); } //agregar nuevos registros var detalle = salida.SalidasDetalle; foreach (var item in detalle) { var salidasDetalle = new SalidasDetalle(); salidasDetalle.CopyAllFromExcept(item, x => new { x.Id }); db.SalidasDetalle.Add(salidasDetalle); } db.SaveChanges(); } else { salida.Numero = getMax(salida.AreaId); //Actualizar existencias foreach (var item in salida.SalidasDetalle) { var inventario = db.Inventario.Find(item.InventarioId); var areaExistencias = inventario.RegisterTransactionOut(db, item, salida.AreaId); if (areaExistencias.Existencias < 0) { return(BadRequest($"No se puede registrar la salida porque el inventario {inventario.Nombre} quedaria con existencia negativa")); } item.Existencias = areaExistencias.Existencias; item.CostoPromedio = areaExistencias.CostoPromedio; item.Costo = areaExistencias.CostoReal; } db.Salidas.Add(salida); db.SaveChanges(); } var app = db.App.FirstOrDefault(); if (app.GererarProcesosContables) { var asientosFactory = new AsientosFactory(db); asientosFactory.CreateFromSalida(salida, app); } return(Json(salida)); }
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)); }