6. Sistema Web para Cafetería con MVC – Confirmar Pedido e Imprimir Recibo

6. Sistema Web para Cafetería con MVC – Confirmar Pedido e Imprimir Recibo

Parte 1 – Confirmar Pedido

La Base de datos – Tabla pedidos_usuarios

  • id_pedido: Es un campo compuesto por el id_usuario – un valor aleatorio que generamos al momento de inciar session, sin embargo la parte aleatoria de este valor cambia cuando confirmamos un pedido.
  • id_usuario: Es el numero de usuario, este valor lo tenemos siempre disponible cuando iniciamos session en la aplicación
  • status: Contendra un valor default «1» siendo este un pedido confirmado, lo cambiamos a «2» cuando el pedido este pagado en caja y luego a «3» cuando el pedido este en proceso, a «4» cuando el pedido este listo y finalmente a «5», en caso de que un pedido se cancele por parte del usuario o del administrador, pasaremos el valor a «0».
  • Creado y actualizado: Son campos que nos servirán para, hacer cálculos y reportes sobre los pedidos.

carrito.php – Añadimos el botón de confirmar orden o pedido

El botón Confirmar orden, se añade como un nuevo renglón, al final de la tabla de carrito.php, así como la llamada al método confirmarPedidoControlador()

El Botón Confirmar Orden produce un atributo GET en la URL, el atributo se llama «action» y contiene el valor «confirmar», dicho atributo lo escucharemos en el método del ControladorPedidos

Método confirmarPedidoControlador() – ControladorPedidos

Lo primero que hacemos en el método es escuchar que exista el parámetro action y que su valor sea igual a confirmar. Obtenemos el id_usuario por medio de la SUPER GLOBAL $_SESSION, y lo enviamos al método confirmarPedidoModelo() del ModeloPedidos, en caso de que todo se ejecute correctamente en el Modelo, nos devuelve un true, y redireccionamos a una nueva sección llamada resumen.

Método confirmarPedidoModelo() – ModeloPedidos

A diferencia de otros métodos que anteriormente habíamos realizado, en este pasaremos por 4 Acciones distintas.
  • Acción 1: Aquí consultamos de la tabla carrito, los registros que coinciden con el id_usuario del cual estamos trabajando.
  • Acción 2: Aquí , obtenemos un valor RANDOM, el cual se genero de forma global cuando iniciamos SESSION (pasamos por login.php), y para cada registro que esta en la tabla carrito (esta tabla es temporal para todos los usuarios, antes de confirmar sus compras), obtenemos la información y la utilizamos para pasarla a una tabla permanente, llamada pedidos_usuarios, noten que tenemos un campo id_pedido, es cual esta descrito al inicio de esta entrada. En este punto tendremos una «COPIA» de carrito en la tabla pedidos_usuarios.
  • Acción 3: Aquí borramos de la tabla carrito todos los registros asociados al id_usuario actual, es decir, vaciamos el carrito.
  • Acción 4: Finalmente el valor RANDOM lo cambiamos por uno nuevo, de manera que en la misma sesión el usuario pueda hacer varios pedidos.

Un ejemplo de como se veŕa la tabla de pedidos_usuarios

Noten que el id_pedido, lleva el 2 que es el id_usario actual, seguido de un numero random

Parte 2 – Imprimir recibo

Para imprimir recibo será necesario crear una vista de BD que nos permita unir la información del producto, con la información de la tabla pedidos_usuarios, que es muy similar a la que utilizamos para ver el carrito.

La vista se llamará vista_productos_pedido

**** Nota: No inclui en la vista la información del usuario, puesto que ya tengo el id_usuario en la tabla de pedidos_usuarios, y ademas la tengo en la SESSION del usuario activo.

Cada rectángulo AZUL muestra el grupo de productos que se solicitan en un mismo pedido, recuadro ROJO

Con esta información, ya podremos trabajar en la sección RESUMEN que comentamos en la Parte 1 de esta entrada. Aquí les dejo la imagen nuevamente de como llegaremos a la sección de RESUMEN

resumen.php

Corrección, Método pendiente.

En resumen.php invocamos al método getUltimoPedidoUser() de ControladorPedidos. El cual se encarga de mostrar el Resumen del pedido confirmado del usuario.

Método getUltimoPedidoUser()

Cuando Abrimos la secciona resumen.php este método consulta por id_usuario de la tabla pedidos_usuarios, que a su vez invoca al método getPedidoUsuario() del ModeloPedidos

Método getPedidoUsuario()

Obtenemos de la tabla el ultimo pedido de un usuario, por medio de los modificadores de consulta, ORDER BY creado, donde creado tienen la fecha en que el pedido se crea, y ademas los ordenamos de forma descendente con DESC y LIMIT 1 nos devuelve el ultimo registro creado de un usuario, con el id_pedido que obtenemos, utilizamos la VIEW vista_productos_pedido y así podemos mostrar en resumen.php, el ultimo pedido del usuario, en la SESSION activa.

De aquí en adelante ya todo se queda como lo teníamos.

Imagen 1 de resumen.php
Imagen 2 de resumen.php
Imagen 3 de resumen.php

Al dar click en el botón Imprimir Orden, llamaremos a un nuevo archivo (imprimir_pedido.php), el cual esta colocado junto a index.php y login.php, es decir en la RAIZ de nuestro proyecto.

imprimir_pedido.php

Este archivo requiere de la librería TCPDF, la cual pueden consultar en su Pagina Oficial y descargar desde su repositorio de GIT . También les dejo la copia que estoy utilizando en el siguiente enlace, TCPDF que yo utilizo.

TCPDF

Una vez que descargan y descomprimen el TCPDF.zip, deben colocarlo en la también en la raíz de su proyecto, como muestro a continuación:

imprimir_pedido.php – Imagen 1

Como este archivo esta en la raíz de nuestro proyecto, tendremos que pedirle que incluya nuestra conexión, tal cual lo tengo en la linea 2.

imprimir_pedido.php – Imagen 2

La variable $content va a esta acumulando un STRING bastante grande con toda la información que compone nuestro reporte, en este punto tenemos un encabezado con el numero de pedido.

imprimir_pedido.php – Imagen 3

En esta parte estamos poniendo el titulo del reporte y llenando el contenido del reporte, que en nuestro caso sera el detalle de cada producto que compramos, lo que está en el rectángulo rojo en la siguiente imagen

imprimir_pedido.php – Imagen 4

En esta parte estamos incluyendo el TOTAL del pedido, numero de artículos comprados y numero de piezas. Lo que está en el rectángulo rojo de la siguiente imagen.

imprimir_pedido.php – Imagen 5

Finalmente añadimos un pie de pagina a nuestro reporte (recuadro rojo de la siguiente imagen) y le damos un titulo, que en este caso utilizaremos el id_pedido y le colocaremos la extensión .pdf
Cuando seleccionamos descargar el archivo, podremos ver el nombre que tendrá nuestro archivo pdf, como lo muestro en la siguiente imagen.

En este punto prácticamente ya podemos estar imprimiendo nuestros pedidos para cada usuario.

En las siguientes entradas , estaré trabajando con los siguientes detalles:

  • Sección Mis Pedidos
    • Sección para ver detalle de pedidos activos
    • Sección interna para ver detalle de pedidos históricos
  • Sección Administración de pedidos
    • Sección para mostrar a los clientes el STATUS de sus pedidos
    • Sección para editar el STATUS de de los pedidos
  • Sección con distintos tipos de reportes impresos.
  • Entre otras cosas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Entrada anterior 5. Sistema Web para Cafetería con MVC – Carrito (modificar cantidades de productos y eliminar productos)
Entrada siguiente 1. TAW – Instalación de Laravel (Actualizado a PHP 7.4 y Laravel 7)