예제 #1
0
        public static string RealizarDesembolso(int pCreditoId)
        {
            var cajadiarioid     = VendixGlobal.GetCajaDiarioId();
            var usuarioid        = VendixGlobal.GetUsuarioId();
            int movimientoCajaId = 0;

            using (var scope = new TransactionScope())
            {
                try
                {
                    using (var db = new VENDIXEntities())
                    {
                        var credito = db.Credito.Find(pCreditoId);
                        credito.FechaDesembolso = VendixGlobal.GetFecha();
                        credito.Estado          = "DES";
                        credito.UsuarioModId    = usuarioid;
                        credito.FechaMod        = VendixGlobal.GetFecha();
                        CreditoBL.Actualizar(db, credito);

                        var mov = new MovimientoCaja()
                        {
                            CajaDiarioId    = cajadiarioid,
                            Operacion       = "DES",
                            ImportePago     = credito.MontoDesembolso,
                            ImporteRecibido = credito.MontoDesembolso,
                            MontoVuelto     = 0,
                            PersonaId       = credito.PersonaId,
                            Descripcion     = "DESEMBOLSO CREDITO " + credito.CreditoId.ToString(),
                            IndEntrada      = false,
                            Estado          = true,
                            UsuarioRegId    = usuarioid,
                            FechaReg        = VendixGlobal.GetFecha(),
                            OrdenVentaId    = null,
                            CreditoId       = credito.CreditoId
                        };

                        db.MovimientoCaja.Add(mov);
                        db.SaveChanges();
                        movimientoCajaId = mov.MovimientoCajaId;

                        var oCajaDiario = db.CajaDiario.Find(cajadiarioid);
                        var qry         = db.MovimientoCaja.Where(z => z.CajaDiarioId == oCajaDiario.CajaDiarioId && z.Estado).Select(x => new { x.ImportePago, x.IndEntrada });
                        if (qry.Count(x => x.IndEntrada) > 0)
                        {
                            oCajaDiario.Entradas = qry.Where(z => z.IndEntrada).Sum(x => x.ImportePago);
                        }
                        if (qry.Count(x => x.IndEntrada == false) > 0)
                        {
                            oCajaDiario.Salidas = qry.Where(z => z.IndEntrada == false).Sum(x => x.ImportePago);
                        }
                        oCajaDiario.SaldoFinal = oCajaDiario.SaldoInicial + oCajaDiario.Entradas - oCajaDiario.Salidas;

                        db.SaveChanges();
                    }
                    scope.Complete();
                    return(movimientoCajaId.ToString());
                }
                catch (Exception ex)
                {
                    scope.Dispose();
                    return(ex.Message);
                }
            }
        }
 public override RelacionCobranza CrearObjeto(MovimientoCaja objMovientoCajaDatos, Boolean ConBoveda)
 {
     return new RelacionCobranzaDatos(objMovientoCajaDatos,ConBoveda);
 }
 public RelacionCobranzaDatos(MovimientoCaja objMovientoCajaDatos, Boolean ConBoveda)
     : base(objMovientoCajaDatos, ConBoveda)
 {
 }
예제 #4
0
        public async Task <IActionResult> PutIngresoInsumo([FromRoute] int id, [FromBody] IngresoInsumo ingresoInsumo)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != ingresoInsumo.IdIngresoInsumo)
            {
                return(BadRequest());
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        decimal costo = ingresoInsumo.Items.Sum(x => x.Costo);

                        var ingresoInsumoBD = sn.Get <IngresoInsumo>(id);

                        var caja = await sn.GetAsync <Caja>(ingresoInsumo.Caja.IdCaja);

                        if ((ingresoInsumoBD.Costo + caja.Saldo) >= costo)
                        {
                            caja.Saldo += ingresoInsumoBD.Costo;
                            caja.Saldo -= costo;
                        }
                        else
                        {
                            throw new Exception("La caja no tiene saldo suficiente.");
                        }

                        var items = sn.Query <ItemIngresoInsumo>()
                                    .Where(x => x.IdIngresoInsumo == id)
                                    .ToList();

                        foreach (var item in items)
                        {
                            if (item.Producto.EsInsumo)
                            {
                                InventarioInsumo inventario = await sn.Query <InventarioInsumo>()
                                                              .Where(x => x.IdAlmacen == ingresoInsumo.Almacen.IdAlmacen &&
                                                                     x.IdInsumo == item.Producto.IdProducto)
                                                              .FirstOrDefaultAsync();

                                if (inventario != null && inventario.Stock >= (item.Cantidad * item.Factor))
                                {
                                    inventario.Stock = inventario.Stock - (item.Cantidad * item.Factor);
                                }
                                else
                                {
                                    return(StatusCode(500, "Sin stock para el insumo: " + item.Producto.Nombre));
                                }
                            }
                        }

                        sn.Delete(string.Format("FROM ItemIngresoInsumo WHERE IdIngresoInsumo = {0}", id));

                        foreach (var item in ingresoInsumo.Items)
                        {
                            if (item.Producto.EsInsumo)
                            {
                                InventarioInsumo inventario = await sn.Query <InventarioInsumo>()
                                                              .Where(x => x.IdAlmacen == ingresoInsumo.Almacen.IdAlmacen &&
                                                                     x.IdInsumo == item.Producto.IdProducto)
                                                              .FirstOrDefaultAsync();

                                if (inventario == null)
                                {
                                    sn.Save(new InventarioInsumo
                                    {
                                        IdAlmacen = ingresoInsumo.Almacen.IdAlmacen,
                                        IdInsumo  = item.Producto.IdProducto,
                                        Stock     = (item.Cantidad * item.Factor)
                                    });
                                }
                                else
                                {
                                    inventario.Stock = inventario.Stock + (item.Cantidad * item.Factor);
                                }
                            }

                            item.IdIngresoInsumo = id;

                            sn.Save(item);
                        }

                        MovimientoCaja movimiento = sn.Query <MovimientoCaja>()
                                                    .Where(x => x.IdIngresoInsumo == id).FirstOrDefault();

                        movimiento.Importe = costo * -1;

                        ingresoInsumoBD.Comentario = ingresoInsumo.Comentario;
                        ingresoInsumoBD.Costo      = costo;

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }