예제 #1
0
        /// <summary>
        /// Persiste una venta llamando al metodo PersistirVenta de DAL
        /// </summary>
        /// <param name="unaOrdendeVenta">Orden de venta</param>
        /// <returns>True si se persistio , caso contrario arroja una excepcion.</returns>
        public static bool GuardaOrdenVenta(OrdenDeVenta unaOrdenDeVenta)
        {
            Tarjeta unaTarjeta = new Tarjeta();

            if (unaOrdenDeVenta.MetodoDePago.GetType() == unaTarjeta.GetType())
            {
                unaTarjeta = (Tarjeta)unaOrdenDeVenta.MetodoDePago;
                if (TarjetaBLL.ValidarTarjeta(unaTarjeta))
                {
                    if (OrdenDeVentaDAL.PersistirVenta(unaOrdenDeVenta))
                    {
                        return(true);
                    }
                }
            }
            else
            {
                if (OrdenDeVentaDAL.PersistirVenta(unaOrdenDeVenta))
                {
                    return(true);
                }
            }

            throw new Excepcion_VentaNoGuardada();
        }
        //SqlTransaction transaction;

        /// <summary>
        /// Guarda una orden de venta en la base de datos.
        /// </summary>
        /// <param name="unaOrdenDeVenta">Objeto OrdenDeVenta</param>
        /// <returns>True si se persistio la venta. Si no lanza excepcion</returns>
        public static bool PersistirVenta(OrdenDeVenta unaOrdenDeVenta)
        {
            Conexion          objConexion   = new Conexion();
            Tarjeta           unaTarjeta    = new Tarjeta();
            List <SqlCommand> listaComandos = new List <SqlCommand>();

            if (unaOrdenDeVenta.MetodoDePago.GetType() == unaTarjeta.GetType()) // verifico si el metodo de pago es tarjeta, para llamar al procedimiento almacenado de venta con tarjeta
            {
                //creo todos los parametros que necesita el procedimiento almacenado
                SqlParameter[] parametros =
                {
                    new SqlParameter("@tipoMetodoDePago", SqlDbType.VarChar, 50),
                    new SqlParameter("@idPersona",        SqlDbType.Int),
                    new SqlParameter("@idCliente",        SqlDbType.Int),
                    new SqlParameter("@cvc",              SqlDbType.VarChar, 50),
                    new SqlParameter("@fechaVencimiento", SqlDbType.VarChar, 50),
                    new SqlParameter("@nombreTarjeta",    SqlDbType.VarChar, 50),
                    new SqlParameter("@nroTarjeta",       SqlDbType.VarChar, 16),
                };

                //Asigno los valores
                parametros[0].Value = "Tarjeta";
                parametros[1].Value = unaOrdenDeVenta.UsuarioCreador.ID;
                parametros[2].Value = unaOrdenDeVenta.Cliente.ID;
                parametros[3].Value = ((Tarjeta)unaOrdenDeVenta.MetodoDePago).CVC;
                parametros[4].Value = ((Tarjeta)unaOrdenDeVenta.MetodoDePago).FechaVencimiento;
                parametros[5].Value = ((Tarjeta)unaOrdenDeVenta.MetodoDePago).NombreTarjeta;
                parametros[6].Value = ((Tarjeta)unaOrdenDeVenta.MetodoDePago).NumeroTarjeta;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "EXEC sp_almacenar_venta_tarjeta    @tipoMetodoDePago  ,@idPersona  ,@idCliente  ,@cvc  ,@fechaVencimiento  ,@nombreTarjeta  ,@nroTarjeta";
                sqlCommand.Parameters.AddRange(parametros);
                listaComandos.Add(sqlCommand);
            }
            else // si el metodo de pago es efectivo, llama al procedimiento almacenado de venta con efectivo
            {
                //creo todos los parametros que necesita el procedimiento almacenado
                SqlParameter[] parametros =
                {
                    new SqlParameter("@tipoMetodoDePago", SqlDbType.VarChar, 50),
                    new SqlParameter("@idPersona",        SqlDbType.Int),
                    new SqlParameter("@idCliente",        SqlDbType.Int),
                };
                //Asigno los valores
                parametros[0].Value = "Efectivo";
                parametros[1].Value = unaOrdenDeVenta.UsuarioCreador.ID;
                parametros[2].Value = unaOrdenDeVenta.Cliente.ID;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "EXEC sp_almacenar_venta_efectivo   @tipoMetodoDePago  ,@idPersona  ,@idCliente";
                sqlCommand.Parameters.AddRange(parametros);
                listaComandos.Add(sqlCommand);
            }

            listaComandos.AddRange(DetalleOrdenDAL.GuardarDetalles(unaOrdenDeVenta.Detalles));
            if (!(objConexion.EjecutarTransaccion(listaComandos)))
            {
                return(false);
            }
            return(true);
        }