Programación Por Capaz

24
Ing. Maribel Molina Barriga – Gestión y administración Web 1 PROGRAMACIÓN POR CAPAS OBJETIVOS Conocer la programación por capas Diseñar un proyecto web con programación por capas MARCO TEÓRICO La programación por capas La programación por capas es una arquitectura cliente-servidor en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño; un ejemplo básico de esto consiste en separar la capa de datos de la capa de presentación al usuario. La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, sólo se ataca al nivel requerido sin tener que revisar entre código mezclado. Un buen ejemplo de este método de programación sería el modelo de interconexión de sistemas abiertos. Además, permite distribuir el trabajo de creación de una aplicación por niveles; de este modo, cada grupo de trabajo está totalmente abstraído del resto de niveles, de forma que basta con conocer la API que existe entre niveles. Práctica 06 Acceso a Datos

description

Conocer la Programación por Capas.Diseñar un Proyecto Web con Programación por Capas.

Transcript of Programación Por Capaz

Ing. Maribel Molina Barriga – Gestión y administración Web

1

PROGRAMACIÓN

POR CAPAS

OBJETIVOS

Conocer la programación por capas

Diseñar un proyecto web con programación por capas

MARCO TEÓRICO

La programación por capas

La programación por capas es una arquitectura cliente-servidor en el que el objetivo primordial es

la separación de la lógica de negocios de la lógica de diseño; un ejemplo básico de esto consiste en

separar la capa de datos de la capa de presentación al usuario.

La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en

caso de que sobrevenga algún cambio, sólo se ataca al nivel requerido sin tener que revisar entre

código mezclado. Un buen ejemplo de este método de programación sería el modelo de

interconexión de sistemas abiertos.

Además, permite distribuir el trabajo de creación de una aplicación por niveles; de este modo,

cada grupo de trabajo está totalmente abstraído del resto de niveles, de forma que basta con

conocer la API que existe entre niveles.

Práctica

06

Acceso a Datos

Ing. Maribel Molina Barriga – Gestión y administración Web

2

En el diseño de sistemas informáticos actual se suelen usar las arquitecturas multinivel o

Programación por capas. En dichas arquitecturas a cada nivel se le confía una misión simple, lo que

permite el diseño de arquitecturas escalables (que pueden ampliarse con facilidad en caso de que

las necesidades aumenten).

El diseño más utilizado actualmente es el diseño en tres niveles (o en tres capas).

CAPAS Y NIVELES

1. Capa de presentación: es la que ve el usuario (también se la denomina "capa de usuario"),

presenta el sistema al usuario, le comunica la información y captura la información del usuario

en un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de

formato). También es conocida como interfaz gráfica y debe tener la característica de ser

"amigable" (entendible y fácil de usar) para el usuario. Esta capa se comunica únicamente con

la capa de negocio.

2. Capa de negocio: es donde residen los programas que se ejecutan, se reciben las peticiones del

usuario y se envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de

lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse.

Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los

resultados, y con la capa de datos, para solicitar al gestor de base de datos almacenar o

recuperar datos de él. También se consideran aquí los programas de aplicación.

3. Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos. Está

formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de

datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de

negocio.

Todas estas capas pueden residir en un único ordenador, si bien lo más usual es que haya una

multitud de ordenadores en donde reside la capa de presentación (son los clientes de la

arquitectura cliente/servidor). Las capas de negocio y de datos pueden residir en el mismo

ordenador, y si el crecimiento de las necesidades lo aconseja se pueden separar en dos o más

ordenadores. Así, si el tamaño o complejidad de la base de datos aumenta, se puede separar en

varios ordenadores los cuales recibirán las peticiones del ordenador en que resida la capa de

negocio.

Si, por el contrario, fuese la complejidad en la capa de negocio lo que obligase a la separación, esta

capa de negocio podría residir en uno o más ordenadores que realizarían solicitudes a una única

base de datos. En sistemas muy complejos se llega a tener una serie de ordenadores sobre los

cuales corre la capa de negocio, y otra serie de ordenadores sobre los cuales corre la base de

datos.

En una arquitectura de tres niveles, los términos "capas" y "niveles" no significan lo mismo ni son

similares.

El término "capa" hace referencia a la forma como una solución es segmentada desde el punto de

vista lógico:

Ing. Maribel Molina Barriga – Gestión y administración Web

3

Presentación.

Lógica de Negocio.

Datos.

En cambio, el término "nivel" corresponde a la forma en que las capas lógicas se encuentran

distribuidas de forma física. Por ejemplo:

Una solución de tres capas (presentación, lógica del negocio, datos) que residen en un solo

ordenador (Presentación+lógica+datos). Se dice que la arquitectura de la solución es de

tres capas y un nivel.

Una solución de tres capas (presentación, lógica del negocio, datos) que residen en dos

ordenadores (presentación+lógica por un lado; lógica+datos por el otro lado). Se dice que

la arquitectura de la solución es de tres capas y dos niveles.

ACTIVIDADES Venta de productos por Internet El siguiente sistema permite la elaboración de un Carrito de Compras, utilizando programación por capas; pero antes debemos de crear lo siguiente: 1. Crear un proyecto en xampp, un sitio llamado “compras” 2. Dentro de Compras crear una carpeta llamada “CapaDatos” 3. Dentro de Compras crear una carpeta llamada “Include” 4. Dentro de Compras crear una carpeta llamada “CapaNegocios” 5. Subir el proyecto a su dominio gratuito

Capa de Datos: 1. La base de datos tendría las siguientes tablas. Venta, Producto y DetalleVenta. Esto tendría

que crearlo en localhost/Phpmyadmin

Ing. Maribel Molina Barriga – Gestión y administración Web

4

A continuación les paso el script de creación de la base de datos

-- 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;

2. Dentro de la carpeta CapaDatos, colocaré el siguiente código:

Conexión.php DetalleVenta.php Producto.php Venta.php

A continuación el código siguiente

Ing. Maribel Molina Barriga – Gestión y administración Web

5

A. La clase Conexión, se codifica el código: Conexión.php

<?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; } } ?>

B. Esta clase se encarga de conectar la clase Producto con MySQL: Producto.php <?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'];

Ing. Maribel Molina Barriga – Gestión y administración Web

6

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);

Ing. Maribel Molina Barriga – Gestión y administración Web

7

//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 español 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) {

Ing. Maribel Molina Barriga – Gestión y administración Web

8

} 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 español 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) {

Ing. Maribel Molina Barriga – Gestión y administración Web

9

$this->codigoProducto = $codigoProducto; } function setNombre($nombre) { $this->nombre = $nombre; } function setPrecio($precio) { $this->precio = $precio; } } ?>

C. La clase DetalleVenta DetalleVenta.php <?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() {

Ing. Maribel Molina Barriga – Gestión y administración Web

10

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; } } ?>

D. La clase Venta

Venta.php

<?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

Ing. Maribel Molina Barriga – Gestión y administración Web

11

$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 español 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, ";

Ing. Maribel Molina Barriga – Gestión y administración Web

12

$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; }

Ing. Maribel Molina Barriga – Gestión y administración Web

13

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; } } ?>

Capa de Negocios: Es la capa en la cual se implementa la lógica del negocio de la empresa como obtener descuentos, aumentos, etc. Dentro de la carpeta CapaNegocios se codificará: Prod_RegistrarProducto.php Prod_ModificarProducto.php Vent_RegistrarVenta.php

A. Prod_RegistrarProducto

Este archivo en PHP es el encargado de recibir los datos de la capa de presentación del

proyecto y llamar a la capa de datos, específicamente a la clase "Producto", para poder

registrar un producto a la base de datos. Su código 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

Ing. Maribel Molina Barriga – Gestión y administración Web

14

//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"); } ?>

B. Prod_ModificarProducto.php

Este archivo en PHP va a ser el encargado de llamar al método "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"); } ?>

C. Vent_RegistrarVenta.php Este archivo es el más importante, ya que es el encargado de registrar la venta a la base de datos. Lo

que hace es obtener todos los ítems o productos que están almacenados en nuestro carrito de compras,

específicamente en la sesión de la aplicación y llama a la clase "Venta" para poder registrar la venta a la

base de datos. Su código fuente debería 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'); }

Ing. Maribel Molina Barriga – Gestión y administración Web

15

?>

Capa de Presentación:

En esta parte mostraremos los formularios con la cual es usuario interactuara con el sistema. Y

veremos cómo crear un reporte en Excel con PHP.

1. Dentro de la carpeta Include se codificará, En esta carpeta pondremos los archivos que serán

comunes para todas las páginas en PHP. Como por ejemplo el menú de opciones del sistema. Y

en esa carpeta crearemos un archivo que se llamara:

Cabezera.php

<h1>Carrito de Compras<br> </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>

2. Tenemos otros archivos los cuales están dentro de la carpeta de sitio compras, que está en

htdocs de xampp:

index.php

registrarProducto.php

modificarProducto.php

anadirCarrito.php

registrarVenta.php

verVenta.php

reporteVentas.php

A. Archivo index.php En este archivo mostraremos todos los productos que tenemos en el sistema. Y tendrá el siguiente código: <?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">

Ing. Maribel Molina Barriga – Gestión y administración Web

16

<title>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>Código</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]['codigoProducto']; $dirAnadir="anadirCarrito.php?codigoProducto=".$lista[$i]['codigoProducto']; ?> <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;?>">Añadir</a> </td> </tr> <?php } } ?> </table> </div>

</body> </html>

B. 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 código html es el siguiente:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Carrito de compras con PHP</title> </head> <body>

Ing. Maribel Molina Barriga – Gestión y administración Web

17

<?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>

C. Archivo modificarProducto.php Este archivo recibe el código del producto por medio del archivo "index.php". Muestra la

información del producto que deseamos modificar y nos permite editar su información.

<?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>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">

Ing. Maribel Molina Barriga – Gestión y administración Web

18

<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>

D. Archivo anadirCarrito.php Este formulario recibe el código del producto que deseamos añadir al carrito de compras

desde la pagina "index.php". Muestra toda la información del producto y nos pide la

cantidad que deseamos añadir al carrito. Su código 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>Carrito de compras con PHP</title> </head> <body> <?php include_once 'Include/Cabezera.php'; ?>

Ing. Maribel Molina Barriga – Gestión y administración Web

19

<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="Añadir" name="btnAnadir" /></td> </tr> </table> </div> </form> </body> </html>

E. 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 están en sesión y mostrarlos en una tabla, para

que así 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');

Ing. Maribel Molina Barriga – Gestión y administración Web

20

//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>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

Ing. Maribel Molina Barriga – Gestión y administración Web

21

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>

F. Archivo verVenta.php Este archivo nos permite ver todas las ventas en formato HTML. Su código sería el

siguiente:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Carrito de compras con PHP</title> </head> <body> <?php include_once 'Include/Cabezera.php'; ?> <div> <table border="1"> <tr style="background-color: chocolate"> <td>Código</td> <td>Cliente</td> <td>Producto</td> <td>Precio</td> <td>Cantidad</td> <td>Parcial</td>

Ing. Maribel Molina Barriga – Gestión y administración Web

22

<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>

G. Archivo reporteVentas.php Este archivo PHP nos permite crear un reporte en Excel. Su código 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>

Ing. Maribel Molina Barriga – Gestión y administración Web

23

<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>

Ing. Maribel Molina Barriga – Gestión y administración Web

24