Пример #1
0
        public IActionResult Post([FromBody] Asientos asiento)
        {
            var asientosFactory = new AsientosFactory(db);

            asientosFactory.Save(asiento);

            return(Json(asiento));
        }
Пример #2
0
        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));
        }
Пример #3
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));
        }