Vous êtes sur la page 1sur 28

1.

Entorno
NetBeans IDE 6.9.1 WampServer 2.1.

2. Introduccin
En el siguiente tutorial vamos a desarrollar un carrito de compras o lo que seria un sistema de ventas usando el lenguaje de programacin PHP, como base de datos vamos a usar el MySQL 5.1. y tambien crearemos un reporte en formato excel de las ventas. La base de datos que vamos a crear es una base de datos con fines didcticos, dado que nos faltara crear mas tablas, como la tabla cliente, categora, unidad de medida, etc pero si nos explayamos mucho nos quedara muy largo el tutorial. Ademas en el ejemplo no se explica como disminuir un stock, debido a que eso siempre se les pide a los alumnos universitario que investiguen como hacerlo, pero si quieren una ayudita lo pueden hacer creando Triggers en la base de datos. La aplicacin se desarrollara en un formato web usando el modelo de Programacin en Capas. Para poder ejecutar el MySQL debemos de tener instalador el WampServer 2.1. en nuestra computadora.

3. Desarrollo
La base de datos tendra las siguientes tablas. Venta, Producto y DetalleVenta

A continuacin les paso el script de creacin de la base de datos


--------CREADO POR: HENRY JOE WONG URQUIZA FECHA: 24FEB2011 -----------------------------------------------------TUTORIAL DE COMO HACER UN CARRITO DE COMPRAS USANDO EL MODELO VISTA CONTROLADOR Creando la base de datos

CREATE DATABASE IF NOT EXISTS bdtutorial; USE bdtutorial; --- Creando la tabla `detalleventa` -DROP TABLE IF EXISTS `detalleventa`; CREATE TABLE `detalleventa` ( `codigoVenta` int(11) NOT NULL, `codigoProducto` int(11) NOT NULL, `cantidad` decimal(18,2) NOT NULL, `descuento` decimal(18,2) NOT NULL, PRIMARY KEY (`codigoVenta`,`codigoProducto`), KEY `FK_DetalleVenta_Producto` (`codigoProducto`), CONSTRAINT `FK_DetalleVenta_Producto` FOREIGN KEY (`codigoProducto`) REFERENCES `producto` (`codigoProducto`), CONSTRAINT `FK_DetalleVenta_Venta` FOREIGN KEY (`codigoVenta`) REFERENCES `venta` (`codigoVenta`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; --- Creando la tabla `producto` -DROP TABLE IF EXISTS `producto`; CREATE TABLE `producto` ( `codigoProducto` int(11) NOT NULL, `nombre` varchar(100) NOT NULL, `precio` decimal(18,2) NOT NULL, PRIMARY KEY (`codigoProducto`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; --- Creando la tabla venta -DROP TABLE IF EXISTS `venta`; CREATE TABLE `venta` ( `codigoVenta` int(11) NOT NULL, `cliente` varchar(100) NOT NULL, `fecha` datetime NOT NULL, PRIMARY KEY (`codigoVenta`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

1. Entorno
NetBeans IDE 6.9.1 WampServer 2.1.

2. Introduccin
2.1. Programacin por capas La programacin por capas es un estilo de programacin en el que el objetivo primordial es la separacin de la lgica de negocios de la lgica de diseo. La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algn cambio, slo se ataca al nivel requerido sin tener que revisar entre cdigo mezclado. Un buen ejemplo de este mtodo de programacin sera el modelo de interconexin de sistemas abiertos 2.2. Programacin en tres capas Capa de presentacin: es la que ve el usuario (tambin se la denomina "capa de usuario"), presenta el sistema al usuario, le comunica la informacin y captura la informacin del usuario en un mnimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). Esta capa se comunica nicamente con la capa de negocio. Tambin es conocida como interfaz grfica y debe tener la caracterstica de ser "amigable" (entendible y fcil de usar) para el usuario. Capa de negocio: es donde residen los programas que se ejecutan, se reciben las peticiones del usuario y se envan las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lgica del negocio) porque es aqu donde se establecen todas las reglas que deben cumplirse. Esta capa se comunica con la capa de presentacin, para recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor de base de datos para almacenar o recuperar datos de l. Tambin se consideran aqu los programas de aplicacin. Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos. Est formada por uno o ms gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperacin de informacin desde la capa de negocio.

3. Desarrollo
3.1. Creando el Proyecto Primero debemos de crear un proyecto en Netbeans 6.9.1., para eso abrimos el Netbeans y nos vamos al men de "File-->New Proyect" y escogemos una aplicacin PHP.

A nuestro proyecto lo llamaremos "CarritoCompras"

Y hacemos que se cree una copia de nuestro proyecto en la carpeta "WWW" del WampServer y presionamos el botn "Finish".

Y finalmente creamos una carpeta que se llamara "CapaDatos"

3.2. La clase Conexion Para agregar una clase en PHP debemos hacer clic derecho en la carpeta "CapaDatos" que hemos creado y nos vamos a la opcin "New->PHP Class" y a nuestra clase lo llamamos "Conexion.php"

Su cdigo fuente seria el siguiente:


<?php class Conexion { var $BaseDatos; var $Servidor; var $Usuario; var $Clave; var $Conexion_ID; var $Consulta_ID; var $Errno = 0; var $Error = ""; //Constructor de la clase Conexion function Conexion() { $this->BaseDatos = "bdtutorial"; $this->Servidor = "localhost"; $this->Usuario = "root"; $this->Clave = ""; } //Metodo para conectarnos a la base de datos function conectar() { $this->Conexion_ID = mysql_connect($this->Servidor, $this>Usuario, $this->Clave); if (!$this->Conexion_ID) {

$this->Error = "Ha fallado la conexion."; return 0; } if (!@mysql_select_db($this->BaseDatos, $this->Conexion_ID)) { $this->Error = "Imposible abrir " . $this->BaseDatos; return 0; } return $this->Conexion_ID; } } ?>

3.3. La clase Producto Esta clase se encarga de conectar la clase Producto con MySQL
<?php include_once("Conexion.php"); //Declaracion class Producto { //Variable de la clase private $codigoProducto; private $nombre; private $precio; //Metodo utilizado para obtener el codigo siguiente del producto function codigoSiguiente($cn) { $cod = 0; $sql = "SELECT IFNULL(MAX(codigoProducto),0)+1 as codigo FROM Producto"; try { $result = mysql_query($sql, $cn); $registros = array(); while ($reg = mysql_fetch_array($result)) { $cod = $reg['codigo']; break; } } catch (exception $e) { } return $cod; } //Metodo utilizado para insertar un producto a la base de datos function insertarProducto() { $rpta; try { //Creamos un objeto de la clase conexion $miconexion = new Conexion(); //Obtenemos la conexion $cn = $miconexion->conectar(); //Comenzamos la transaccion mysql_query("BEGIN", $cn); //Obtenemos el codigo del siguiente producto $this->codigoProducto =$this->codigoSiguiente($cn); //Elaboramos la sentencia $sql = "INSERT INTO Producto VALUES($this>codigoProducto,'$this->nombre',$this->precio)"; //Ejecutamos la sentencia $result = mysql_query($sql, $cn);

if (!$result) { //Si no obtiene resultados anulamos la transaccion mysql_query("ROLLBACK", $cn); $rpta = false; } else { //Si obtiene resultados confirmamos la transaccion mysql_query("COMMIT", $cn); $rpta = true; } //Cerramos la conexion mysql_close($cn); } catch (exception $e) { try { mysql_query("ROLLBACK", $cn); } catch (exception $e1) { } try { mysql_close($cn); } catch (exception $e1) { } $rpta = false; } return $rpta; } //Metodo utilizado para actualizar un producto function actualizarProducto() { $rpta; try { //Creamos un objeto de la clase conexion $miconexion = new Conexion(); //Obtenemos la conexion $cn = $miconexion->conectar(); //Comenzamos la transaccion mysql_query("BEGIN", $cn); //Elaboramos la sentencia $sql = "UPDATE Producto SET nombre='$this->nombre', precio=$this->precio WHERE codigoProducto=$this->codigoProducto"; //Ejecutamos la sentencia $result = mysql_query($sql, $cn); $rpta; if (!$result) { //Si no obtiene resultados anulamos la transaccion mysql_query("ROLLBACK", $cn); $rpta = false; } else { //Si obtiene resultados confirmamos la transaccion mysql_query("COMMIT", $cn); $rpta = true; } //Cerramos la conexion mysql_close($cn); } catch (exception $e) { try { mysql_query("ROLLBACK", $cn); } catch (exception $e1) { } try { mysql_close($cn);

} catch (exception $e1) { } $rpta = false; } return $rpta; } //Metodo utilizado para obtener un producto function buscarProducto() { //Le deciamos que la locacion es lenguaje espaol setlocale(LC_CTYPE, 'es'); //La sentencia a ejecutar $sql = "SELECT * FROM Producto WHERE codigoProducto=$this>codigoProducto"; try { //Creamos un objeto de la clase conexion $miconexion = new Conexion(); //Obtenemos la conexion $cn = $miconexion->conectar(); //Ejecutamos la sentencia $rs = mysql_query($sql, $cn); //Creamos un array que almacenara los datos de la sentencia $registros = array(); //Recorremos el resultado de la consulta y lo almacenamos en el array while ($reg = mysql_fetch_array($rs)) { array_push($registros, $reg); } //Liberamos recursos mysql_free_result($rs); mysql_close($cn); } catch (exception $e) { try { mysql_free_result($rs); } catch (exception $e) { } try { mysql_close($cn); } catch (exception $e) { } } return $registros; } //Metodo utilizado para obtener todos los productos function buscarProductoTodos() { //Le deciamos que la locacion es lenguaje espaol setlocale(LC_CTYPE, 'es'); //La sentencia a ejecutar $sql = "SELECT * FROM Producto ORDER BY nombre"; try { //Creamos un objeto de la clase conexion $miconexion = new Conexion(); //Obtenemos la conexion $cn = $miconexion->conectar(); //Ejecutamos la sentencia $rs = mysql_query($sql, $cn); //Creamos un array que almacenara los datos de la sentencia

$registros = array(); //Recorremos el resultado de la consulta y lo almacenamos en el array while ($reg = mysql_fetch_array($rs)) { array_push($registros, $reg); } //Liberamos recursos mysql_free_result($rs); mysql_close($cn); } catch (exception $e) { try { mysql_free_result($rs); } catch (exception $e) { } try { mysql_close($cn); } catch (exception $e) { } } return $registros; } //Get y Set de la clase function getCodigoProducto() { return $this->codigoProducto; } function getNombre() { return $this->nombre; } function getPrecio() { return $this->precio; } function setCodigoProducto($codigoProducto) { $this->codigoProducto = $codigoProducto; } function setNombre($nombre) { $this->nombre = $nombre; } function setPrecio($precio) { $this->precio = $precio; } } ?>

3.4. Clase DetalleVenta El cdigo fuente de la clase seria el siguiente


<?php include_once("Conexion.php"); class DetalleVenta { private $codigoVenta; private $codigoProducto;

private $cantidad; private $descuento; //Metodo utilizado para insertar un detalle de venta a la base de datos //como variable pide la conexion que va a usar function insertarDetalleVenta($cn) { $rpta; try { //Elaboramos la sentencia $sql = "INSERT INTO DetalleVenta VALUES($this>codigoVenta, $this->codigoProducto,$this->cantidad,$this>descuento)"; //Ejecutamos la sentencia $result = mysql_query($sql, $cn); if (!$result) { $rpta = false; } else { $rpta = true; } } catch (exception $e) { $rpta = false; } return $rpta; } function getCodigoVenta() { return $this->codigoVenta; } function getCodigoProducto() { return $this->codigoProducto; } function getCantidad() { return $this->cantidad; } function getDescuento() { return $this->descuento; } function setCodigoVenta($codigoVenta) { $this->codigoVenta= $codigoVenta; } function setCodigoProducto($codigoProducto) { $this->codigoProducto = $codigoProducto; } function setCantidad($cantidad) { $this->cantidad = $cantidad; } function setDescuento($descuento) { $this->descuento = $descuento; } } ?>

3.5. Clase Venta

El cdigo fuente de la clase Venta seria el siguiente


<?php include_once("Conexion.php"); include_once("DetalleVenta.php"); class Venta { private $codigoVenta; private $cliente; private $fecha; private $detalleVenta; //Metodo utilizado para obtener el codigo siguiente del producto function codigoSiguiente($cn) { $cod = 0; $sql = "SELECT IFNULL(MAX(codigoVenta),0)+1 as codigo FROM Venta"; try { $result = mysql_query($sql, $cn); $registros = array(); while ($reg = mysql_fetch_array($result)) { $cod = $reg['codigo']; break; } } catch (exception $e) { } return $cod; } //Metodo utilizado para insertar una venta a la base de datos function insertarVenta() { $rpta; try { //Creamos un objeto de la clase conexion $miconexion = new Conexion(); //Obtenemos la conexion $cn = $miconexion->conectar(); //Comenzamos la transaccion mysql_query("BEGIN", $cn); //Obtenemos el codigo del siguiente producto $this->codigoVenta=$this->codigoSiguiente($cn); //Elaboramos la sentencia $sql = "INSERT INTO Venta VALUES($this>codigoVenta,'$this->cliente',CURDATE())"; //Ejecutamos la sentencia $result = mysql_query($sql, $cn); if (!$result) { //Si no obtiene resultados anulamos la transaccion mysql_query("ROLLBACK", $cn); $rpta = false; } else { //Recorremos el detalle y lo insertamos foreach($this->detalleVenta as $k => $v){ $detalle=new DetalleVenta(); $detalle->setCodigoVenta($this->codigoVenta); $detalle->setCodigoProducto($v['codigo']); $detalle->setCantidad($v['cantidad']); $detalle->setDescuento($v['descuento']); $rpta=$detalle->insertarDetalleVenta($cn); if(!$rpta){ break;

} } if($rpta){ //Confirmamos la transaccion si se registra todos los detalles mysql_query("COMMIT", $cn); }else{ //Negamos al transaccion si no se registra algun detalle mysql_query("ROLLBACK", $cn); } } //Cerramos la conexion mysql_close($cn); } catch (exception $e) { try { mysql_query("ROLLBACK", $cn); } catch (exception $e1) { } try { mysql_close($cn); } catch (exception $e1) { } $rpta = false; } return $rpta; } //Metodo utilizado para obtener un producto function buscarVenta() { //Le deciamos que la locacion es lenguaje espaol setlocale(LC_CTYPE, 'es'); //La sentencia a ejecutar $sql="SELECT "; $sql.="v.codigoVenta AS CodigoVenta, "; $sql.="v.cliente AS Cliente, "; $sql.="v.fecha AS Fecha, "; $sql.="d.codigoProducto AS CodigoProducto, "; $sql.="p.nombre AS Nombre, "; $sql.="p.precio AS Precio, "; $sql.="d.cantidad AS Cantidad, "; $sql.="d.descuento AS Descuento, "; $sql.="p.precio*d.cantidad AS Parcial, "; $sql.="((p.precio*d.cantidad)-d.descuento) AS SubTotal, "; $sql.="( "; $sql.="SELECT "; $sql.="SUM((dT.cantidad * pT.precio)-dT.descuento) AS TotalPagar "; $sql.="FROM "; $sql.="DetalleVenta AS dT INNER JOIN "; $sql.="Producto AS pT ON dT.codigoProducto = pT.codigoProducto "; $sql.="WHERE "; $sql.="dT.codigoVenta=v.codigoVenta "; $sql.=") AS TotalPagar "; $sql.="FROM "; $sql.="Venta AS v INNER JOIN "; $sql.="DetalleVenta AS d ON v.codigoVenta = d.codigoVenta INNER JOIN ";

$sql.="Producto AS p ON d.codigoProducto = p.codigoProducto "; $sql.="ORDER BY "; $sql.="CodigoVenta, Nombre"; try { //Creamos un objeto de la clase conexion $miconexion = new Conexion(); //Obtenemos la conexion $cn = $miconexion->conectar(); //Ejecutamos la sentencia $rs = mysql_query($sql, $cn); //Creamos un array que almacenara los datos de la sentencia $registros = array(); //Recorremos el resultado de la consulta y lo almacenamos en el array while ($reg = mysql_fetch_array($rs)) { array_push($registros, $reg); } //Liberamos recursos mysql_free_result($rs); mysql_close($cn); } catch (exception $e) { try { mysql_free_result($rs); } catch (exception $e) { } try { mysql_close($cn); } catch (exception $e) { } } return $registros; } function getCodigoVenta() { return $this->codigoVenta; } function getCliente() { return $this->cliente; } function getFecha() { return $this->fecha; } function getDetalleVenta() { return $this->detalleVenta; } function setCodigoVenta($codigoVenta) { $this->codigoProducto = $codigoVenta; } function setCliente($cliente) { $this->cliente = $cliente; } function setFecha($fecha) {

$this->fecha = $fecha; } function setDetalleVenta($detalleVenta) { $this->detalleVenta = $detalleVenta; } } ?>

4. Resumen
Al final deberamos tener la siguiente estructura

1. Entorno
NetBeans IDE 6.9.1 WampServer 2.1.

2. Introduccin
Ya vimos que en la Parte II del tutorial creamos la Capa de Dato de nuestro sistema, la cual es la encargada de comunicarse con la base de datos. Ahora nos tocara desarrollar la Capa de Negocios que es la capa en la cual se implementa la lgica del negocio de la empresa como obtener descuentos, aumentos, etc.

3. Desarrollo
3.1. Creando la carpeta Debemos de crear la carpeta que recibir el nombre de "CapaNegocios"

3.2. Creando el archivo Prod_RegistrarProducto Este archivo en PHP va a ser el encargado de recibir los datos de la capa de presentacin del proyecto y llamar a la capa de datos, especficamente a la clase "Producto", para poder registrar un producto a la base de datos. Su cdigo fuente es el siguiente.
<?php

include_once '../CapaDatos/Producto.php'; //Crea un objeto producto $pro=new Producto(); //Establece el nombre del producto y lo convierte a mayusculas $pro->setNombre(strtoupper($_REQUEST['txtNombre'])); //Establece el precio $pro->setPrecio($_REQUEST['txtPrecio']); //Llama al metodo insertar producto de producto $rpta=$pro->insertarProducto(); //Si la respuesta es verdadera es porque se registro el producto if($rpta){ //Redireccionamos a un archivo que se llama mensaje para mostrar el resultado //del registro header("Location: ../mensaje.php?mensaje=Se registro el producto de manera correcta"); }else{ header("Location: ../mensaje.php?mensaje=No se pudo registrar el producto"); } ?>

3.3. Creando el archivo Prod_ModificarProducto Este archivo en PHP va a ser el encargado de llamar al mtodo "actualizarProducto" de la clase "Producto".
<?php include_once '../CapaDatos/Producto.php'; //Crea un objeto producto $pro=new Producto(); //Establece el codigo del producto $pro->setCodigoProducto($_REQUEST['txtCodigo']); //Establece el nombre del producto $pro->setNombre(strtoupper($_REQUEST['txtNombre'])); //Establece el precio del producto $pro->setPrecio($_REQUEST['txtPrecio']); //Llama al metodo actualizarProducto $rpta=$pro->actualizarProducto(); //Si rpta es verdadero es porque se actualizo el Producto if($rpta){ header("Location: ../mensaje.php?mensaje=Se modifico el producto de manera correcta"); }else{ header("Location: ../mensaje.php?mensaje=No se pudo modificar el producto"); } ?>

3.4. Creando el archivo Vent_RegistrarVenta Quizs este archivo es el mas importante, ya que es el encargado de registrar la venta a la base de datos. Lo que hace es obtener todos los items que estn almacenados en nuestro carrito de compras, especficamente en la sesin de la aplicacin y llama a la clase "Venta" para poder registrar la venta a la base de datos. Su cdigo fuente debera ser el siguiente.
<?php

//Obtenemos la sesion session_start(); session_register('itemsEnCesta'); include_once '../CapaDatos/Venta.php'; //Creamos una clase venta $ven=new Venta(); //Establecemos el nombre del cliente $ven->setCliente(strtoupper($_REQUEST['txtCliente'])); //Obtenemos el objeto que esta en la sesion $itemsEnCesta=$_SESSION['itemsEnCesta']; //Establece el detalle con la informacion de la sesion $ven->setDetalleVenta($itemsEnCesta); //Llamamos al metodo insertar ventar $rpta=$ven->insertarVenta(); //Si rpta es verdadero es proque se inserto if($rpta){ //Eliminamos la sesion session_destroy(); //Redireccionamos a un archivo para que nos muestre el mensaje header("Location: ../mensaje.php?mensaje=Se registro la venta de manera correcta"); }else{ header("Location: ../mensaje.php?mensaje=No se pudo registrar la venta"); } ?>

4. Resumen
Al final deberamos tener la siguiente estructura

1. Entorno
NetBeans IDE 6.9.1 WampServer 2.1.

2. Introduccin
En esta parte mostraremos los formularios con la cual es usuario interactuara con el sistema. Y veremos cmo crear un reporte en Excel con PHP

3. Desarrollo
3.1. Crear Carpeta Vamos a crear una carpeta que se llamara "Include", en esta carpeta pondremos los archivos que sern comunes para todas las paginas en PHP. Como por ejemplo el men de opciones del sistema. Y en esa carpeta crearemos un archivo que se llamara "Cabezera.php"

Y el archivo tendr el siguiente cdigo fuente:


<h1>Programando con Caf - Carrito Compras con PHP<br>Ing. Henry Joe Wong Urquiza</h1> <div> <a href="index.php">Inicio</a> | <a href="registrarProducto.php">Registrar Producto</a> | <a href="registrarVenta.php">Registrar Venta</a> | <a href="verVenta.php">Consultar Ventas</a> | <a href="reporteVentas.php">Reporte Producto</a> </div> <br>

3.2. Archivo index.php En este archivo mostraremos todos los productos que tenemos en el sistema. Y tendr el siguiente cdigo
<?php include_once 'CapaDatos/Producto.php'; $pro = new Producto(); $lista = $pro->buscarProductoTodos(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Programando con Caf - Carrito de compras con PHP</title> </head> <body> <?php include_once 'Include/Cabezera.php'; ?> <div> <table border="1"> <tr style="background-color: chocolate"> <td colspan="4" >Listado Producto</td> </tr> <tr style="background-color: chocolate"> <td>Cdigo</td> <td>Nombre</td> <td>Precio</td> <td>Proceso</td> </tr> <?php if(count($lista)>0){ for($i=0;$i<(count($lista));$i++) { $dirModifica="modificarProducto.php?codigoProducto=".$lista[$i]['codig oProducto']; $dirAnadir="anadirCarrito.php?codigoProducto=".$lista[$i]['codigoProdu cto'];

?> <tr> <td><?php echo ($lista[$i]['codigoProducto']);?></td> <td><?php echo ($lista[$i]['nombre']);?></td> <td><?php echo ($lista[$i]['precio']);?></td> <td><a href="<?php echo $dirModifica;?>">Modificar</a> | <a href="<?php echo $dirAnadir;?>">Aadir</a> </td> </tr> <?php } } ?> </table> </div> </body> </html>

3.3. Archivo registrarProducto.php Este archivo PHP es el encargado de mostrar al usuario el formulario para registrar los productos a la base de datos. Su cdigo html es el siguiente
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Programando con Caf - Carrito de compras con PHP</title> </head> <body> <?php include_once 'Include/Cabezera.php'; ?> <form method="post" action="CapaNegocios/Prod_RegistrarProducto.php"> <div> <table border="1"> <tr> <td>Nombre</td> <td><input type="text" name="txtNombre" value="" /></td> </tr> <tr> <td>Precio</td> <td><input type="text" name="txtPrecio" value="0" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Registrar" name="btnRegistrar" /></td> </tr> </table> </div> </form> </body> </html>

3.4. Archivo modificarProducto.php Este archivo recibe el cdigo del producto por medio del archivo "index.php". Muestra la informacin del producto que deseamos modificar y nos permite editar su informacin
<?php include_once 'CapaDatos/Producto.php'; $pro = new Producto(); $pro->setCodigoProducto($_REQUEST['codigoProducto']); $lista = $pro->buscarProducto(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Programando con Caf - Carrito de compras con PHP</title> </head> <body> <?php include_once 'Include/Cabezera.php'; ?> <form method="post" action="CapaNegocios/Prod_ModificarProducto.php"> <div> <table border="1"> <tr> <td>Codigo</td> <td><input type="text" name="txtCodigo" value="<?php echo ($lista[0]['codigoProducto']);?>" readonly /></td> </tr> <tr> <td>Nombre</td> <td><input type="text" name="txtNombre" value="<?php echo($lista[0]['nombre']);?>" /></td> </tr> <tr> <td>Precio</td> <td><input type="text" name="txtPrecio" value="<?php echo($lista[0]['precio']);?>" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Actualizar" name="btnActualizar" /></td> </tr> </table> </div> </form> </body> </html>

3.5. Archivo anadirCarrito.php Este formulario recibe el cdigo del producto que deseamos aadir al carrito de compras desde la pagina "index.php". Muestra toda la informacin del producto y nos pide la

cantidad que deseamos aadir al carrito. Su codigo fuente es el siguiente

<?php include_once 'CapaDatos/Producto.php'; $pro = new Producto(); $pro->setCodigoProducto($_REQUEST['codigoProducto']); $lista = $pro->buscarProducto(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Programando con Caf - Carrito de compras con PHP</title> </head> <body> <?php include_once 'Include/Cabezera.php'; ?> <form action="registrarVenta.php" method="post"> <div> <table border="1"> <tr> <td>Codigo</td> <td><input type="text" name="txtCodigo" value="<?php echo ($lista[0]['codigoProducto']);?>" readonly /></td> </tr> <tr> <td>Nombre</td> <td><input type="text" name="txtNombre" value="<?php echo($lista[0]['nombre']);?>" readonly /></td> </tr> <tr> <td>Precio</td> <td><input type="text" name="txtPrecio" value="<?php echo($lista[0]['precio']);?>" readonly /></td> </tr> <tr> <td>Cantidad Pedir</td> <td><input type="text" name="txtCantidad" value="0" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Aadir" name="btnAnadir" /></td> </tr> </table> </div> </form> </body> </html>

3.6. Archivo registrarVenta.php Este archivo es el encargado de mostrar al usuario el formulario para concluir la venta.

Lo que hace es traer todos los productos que estn en sesin y mostrarlos en una tabla, para que asi veamos todos los productos que tenemos en el carrito de compras y poder decirle que lo registra a la base de datos
<?php session_start(); session_register('itemsEnCesta'); //Estableciendo los datos al carrito $codigo = $_REQUEST['txtCodigo']; $nombre = $_REQUEST['txtNombre']; $cantidad = $_REQUEST['txtCantidad']; $pu = $_REQUEST['txtPrecio']; $parcial = ($cantidad * $pu); $descuento = 0; if ($parcial > 50) { $descuento = ($parcial * 0.05); } $itemsEnCesta = $_SESSION['itemsEnCesta']; if ($codigo) { if (!isset($itemsEnCesta)) { $itemsEnCesta[$codigo] = array("codigo" => $codigo, "nombre" => $nombre, "cantidad" => $cantidad, "pu" => $pu, "parcial" => $parcial, "descuento" => $descuento, "subtotal" => ($parcial - $descuento)); } else { $itemsEnCesta[$codigo] = array("codigo" => $codigo, "nombre" => $nombre, "cantidad" => $cantidad, "pu" => $pu, "parcial" => $parcial, "descuento" => $descuento, "subtotal" => ($parcial - $descuento)); } } $_SESSION['itemsEnCesta'] = $itemsEnCesta; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Programando con Caf - Carrito de compras con PHP</title> </head> <body> <?php include_once 'Include/Cabezera.php'; ?> <div> <form action="CapaNegocios/Vent_RegistrarVenta.php" method="post"> <table border="1"> <tr style="background-color: chocolate"> <td colspan="6" >Carrito de Compras</td> </tr> <tr style="background-color: chocolate"> <td>Cliente</td> <td colspan="5" ><input type="text" name="txtCliente" value="" /></td>

</tr> <tr style="background-color: chocolate"> <td>Nombre</td> <td>Cantidad</td> <td>Precio</td> <td>Parcial</td> <td>Descuento</td> <td>Sub.Total</td> </tr> <?php if (isset($itemsEnCesta)) { foreach ($itemsEnCesta as $k => $v) { ?> <tr> <td><?php echo ($v['nombre']); ?></td> <td><?php echo number_format(($v['cantidad']), 2); ?></td> <td><?php echo number_format(($v['pu']), 2); ?></td> <td><?php echo number_format(($v['parcial']), 2); ?></td> <td><?php echo number_format(($v['descuento']), 2); ?></td> <td><?php echo number_format(($v['subtotal']), 2); ?></td> </tr> <?php } } ?> <tr style="background-color: chocolate"> <td colspan="6" ><input type="submit" value="Registrar Venta" name="btnRegistrarVenta" /></td> </tr> </table> </form> </div> </body> </html>

3.6. Archivo verVenta.php Este archivo nos permite ver todas las ventas en formato HTML. Su cdigo seria el siguiente
<?php include_once 'CapaDatos/Venta.php'; $ven = new Venta(); $lista = $ven->buscarVenta(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Programando con Caf - Carrito de compras con PHP</title> </head>

<body> <?php include_once 'Include/Cabezera.php'; ?> <div> <table border="1"> <tr style="background-color: chocolate"> <td>Cdigo</td> <td>Cliente</td> <td>Producto</td> <td>Precio</td> <td>Cantidad</td> <td>Parcial</td> <td>Descuento</td> <td>Sub. Total</td> <td>Total</td> </tr> <?php if(count($lista)>0){ for($i=0;$i<(count($lista));$i++) { ?> <tr> <td><?php echo ($lista[$i]['CodigoVenta']);?></td> <td><?php echo ($lista[$i]['Cliente']);?></td> <td><?php echo ($lista[$i]['Nombre']);?></td> <td><?php echo number_format(($lista[$i]['Precio']),2);?></td> <td><?php echo number_format(($lista[$i]['Cantidad']),2);?></td> <td><?php echo number_format(($lista[$i]['Parcial']),2);?></td> <td><?php echo number_format(($lista[$i]['Descuento']),2);?></td> <td><?php echo number_format(($lista[$i]['SubTotal']),2);?></td> <td><?php echo number_format(($lista[$i]['TotalPagar']),2);?></td> </tr> <?php } } ?> </table> </div> </body> </html>

3.7. Archivo reporteVentas.php Este archivo PHP nos permite crear un reporte en Excel. Su cdigo fuente es el siguiente
<?php header('Content-type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename=reporteVentas.xls'); header('Pragma: no-cache'); header('Expires: 0'); include_once 'CapaDatos/Venta.php'; $ven = new Venta(); $lista = $ven->buscarVenta();

?> <table border="1"> <tr > <td style="background-color: chocolate">Cod</td> <td style="background-color: chocolate">Cliente</td> <td style="background-color: chocolate">Producto</td> <td style="background-color: chocolate">Precio</td> <td style="background-color: chocolate">Cantidad</td> <td style="background-color: chocolate">Parcial</td> <td style="background-color: chocolate">Descuento</td> <td style="background-color: chocolate">Sub. Total</td> <td style="background-color: chocolate">Total</td> </tr> <?php if (count($lista) > 0) { for ($i = 0; $i < (count($lista)); $i++) { ?> <tr> <td><?php echo ($lista[$i]['CodigoVenta']); ?></td> <td><?php echo ($lista[$i]['Cliente']); ?></td> <td><?php echo ($lista[$i]['Nombre']); ?></td> <td><?php echo number_format(($lista[$i]['Precio']), 2); ?></td> <td><?php echo number_format(($lista[$i]['Cantidad']), 2); ?></td> <td><?php echo number_format(($lista[$i]['Parcial']), 2); ?></td> <td><?php echo number_format(($lista[$i]['Descuento']), 2); ?></td> <td><?php echo number_format(($lista[$i]['SubTotal']), 2); ?></td> <td><?php echo number_format(($lista[$i]['TotalPagar']), 2); ?></td> </tr> <?php } } ?> </table>

Vous aimerez peut-être aussi