예제 #1
0
        public static bool EnviarOrdenVentaCredito(int pOrdenVentaId)
        {
            var     orden        = Obtener(pOrdenVentaId);
            var     glosa        = string.Empty;
            decimal inicial      = orden.TotalNeto * (decimal)0.15;
            decimal montocredito = orden.TotalNeto - inicial;
            int     productoId   = 1;
            var     gastosadm    = GastosAdmBL.CalcularGastosAdm(montocredito);
            var     lstdes       =
                OrdenVentaDetBL.Listar(x => x.Estado && x.OrdenVentaId == orden.OrdenVentaId).Select(x => x.Descripcion)
                .ToList();

            for (int i = 0; i < lstdes.Count; i++)
            {
                glosa += lstdes[i];
                if (i != lstdes.Count - 1)
                {
                    glosa += ", " + Environment.NewLine;
                }
            }
            var oCredito = new Credito
            {
                OficinaId        = VendixGlobal.GetOficinaId(),
                PersonaId        = orden.PersonaId,
                Descripcion      = glosa,
                MontoProducto    = orden.TotalNeto,
                MontoInicial     = inicial,
                MontoCredito     = montocredito,
                ProductoId       = productoId,
                MontoGastosAdm   = gastosadm,
                Estado           = "CRE",
                FormaPago        = "D",
                NumeroCuotas     = 26,
                InteresMensual   = 7,
                FechaPrimerPago  = DateTime.Now,
                FechaVencimiento = DateTime.Now,
                FechaReg         = DateTime.Now,
                UsuarioRegId     = VendixGlobal.GetUsuarioId(),
                OrdenVentaId     = pOrdenVentaId
            };

            using (var scope = new TransactionScope())
            {
                try
                {
                    CreditoBL.Crear(oCredito);
                    orden.Estado    = "ENV";
                    orden.TipoVenta = "CRE";
                    Actualizar(orden);

                    scope.Complete();
                }
                catch (Exception ex)
                {
                    scope.Dispose();
                    throw new Exception(ex.InnerException.Message);
                }
            }
            return(true);
        }
예제 #2
0
        public static int RealizarPedido(int pClienteId, List <Pedido> pPedidos)
        {
            using (var scope = new TransactionScope())
            {
                try
                {
                    var cabecera = new OrdenVenta
                    {
                        OficinaId      = VendixGlobal.GetOficinaId(),
                        Subtotal       = 0,
                        TotalNeto      = 0,
                        TotalImpuesto  = 0,
                        TotalDescuento = 0,
                        Estado         = "ENV",
                        UsuarioRegId   = VendixGlobal.GetUsuarioId(),
                        FechaReg       = VendixGlobal.GetFecha(),
                        PersonaId      = pClienteId,
                        TipoVenta      = "CON"
                    };
                    Guardar(cabecera);

                    var           detalle = new List <OrdenVentaDet>();
                    OrdenVentaDet item;
                    decimal       tNeto      = 0;
                    decimal       tDescuento = 0;

                    foreach (var i in pPedidos)
                    {
                        item = new OrdenVentaDet();
                        var art    = ArticuloBL.Obtener(x => x.ArticuloId == i.ArticuloId, "ListaPrecio");
                        var precio = art.ListaPrecio.First().Monto.Value;

                        item.OrdenVentaId = cabecera.OrdenVentaId;
                        item.ArticuloId   = art.ArticuloId;
                        item.Cantidad     = i.Cantidad;
                        item.Descripcion  = art.Denominacion;
                        item.ValorVenta   = precio;
                        item.Descuento    = i.Descuento;
                        item.Subtotal     = i.Cantidad * (precio - i.Descuento);
                        item.Estado       = true;

                        var lstSerie = SerieArticuloBL
                                       .Listar(x => x.ArticuloId == i.ArticuloId && x.EstadoId == Constante.SerieArticulo.EN_ALMACEN, x => x.OrderBy(y => y.SerieArticuloId))
                                       .Take(i.Cantidad);
                        foreach (var l in lstSerie)
                        {
                            item.OrdenVentaDetSerie.Add(new OrdenVentaDetSerie {
                                SerieArticuloId = l.SerieArticuloId
                            });
                            //SerieArticuloBL.ActualizarParcial(
                            //    new SerieArticulo { SerieArticuloId = l.SerieArticuloId, EstadoId = Constante.SerieArticulo.PREVENTA },
                            //    x => x.EstadoId);
                        }

                        detalle.Add(item);

                        tNeto      += item.Subtotal;
                        tDescuento += item.Descuento;
                    }
                    OrdenVentaDetBL.Guardar(detalle);

                    cabecera.TotalNeto      = tNeto;
                    cabecera.TotalDescuento = tDescuento;
                    cabecera.Subtotal       = Math.Round(tNeto / (1 + Constante.IGV), 2);
                    cabecera.TotalImpuesto  = Math.Round(tNeto - cabecera.Subtotal, 2);
                    ActualizarParcial(cabecera, x => x.TotalNeto, x => x.TotalDescuento,
                                      x => x.Subtotal, x => x.TotalImpuesto);


                    int?retid;
                    using (var db = new VENDIXEntities())
                    {
                        retid = db.usp_PagarCuentaxCobrar(cabecera.OrdenVentaId, 0, VendixGlobal.GetCajaDiarioId(),
                                                          VendixGlobal.GetUsuarioId()).ToList()[0];
                    }

                    scope.Complete();
                    return(cabecera.OrdenVentaId);
                }
                catch (Exception ex)
                {
                    scope.Dispose();
                    throw new Exception(ex.InnerException.Message);
                }
            }
        }