| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/ventaEnCapturaAgrega.php"; |
| 4 | |
| 5 | class Bd |
| 6 | { |
| 7 | |
| 8 | private static ?PDO $pdo = null; |
| 9 | |
| 10 | public static function conexion(): PDO |
| 11 | { |
| 12 | if (self::$pdo === null) { |
| 13 | self::$pdo = new PDO( |
| 14 | // cadena de conexión |
| 15 | "sqlite:" . __DIR__ . "/srvcompras.db", |
| 16 | // usuario |
| 17 | null, |
| 18 | // contraseña |
| 19 | null, |
| 20 | // Opciones: pdos no persistentes y lanza excepciones. |
| 21 | [PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] |
| 22 | ); |
| 23 | |
| 24 | self::$pdo->exec( |
| 25 | 'CREATE TABLE IF NOT EXISTS VENTA ( |
| 26 | VNT_ID INTEGER, |
| 27 | VNT_EN_CAPTURA INTEGER NOT NULL, |
| 28 | CONSTRAINT PK_VNT PRIMARY KEY(VNT_ID) |
| 29 | )' |
| 30 | ); |
| 31 | self::$pdo->exec( |
| 32 | 'CREATE TABLE IF NOT EXISTS PRODUCTO ( |
| 33 | PRD_ID INTEGER, |
| 34 | PRD_NOMBRE TEXT NOT NULL, |
| 35 | PRD_EXISTENCIAS REAL NOT NULL, |
| 36 | PRD_PRECIO REAL NOT NULL, |
| 37 | CONSTRAINT PK_PRD PRIMARY KEY(PRD_ID), |
| 38 | CONSTRAINT UQ_PRD_NOM UNIQUE(PRD_NOMBRE), |
| 39 | CONSTRAINT CHK_PRD_NOM CHECK(LENGTH(PRD_NOMBRE) > 0) |
| 40 | )' |
| 41 | ); |
| 42 | self::$pdo->exec( |
| 43 | 'CREATE TABLE IF NOT EXISTS DET_VENTA ( |
| 44 | DTV_VNT_ID INTEGER NOT NULL, |
| 45 | DTV_PRD_ID INTEGER NOT NULL, |
| 46 | DTV_CANTIDAD REAL NOT NULL, |
| 47 | DTV_PRECIO REAL NOT NULL, |
| 48 | CONSTRAINT PK_DTV PRIMARY KEY (DTV_VNT_ID, DTV_PRD_ID), |
| 49 | CONSTRAINT FK_DTV_VNT FOREIGN KEY (DTV_VNT_ID) REFERENCES VENTA(VNT_ID), |
| 50 | CONSTRAINT FK_DTV_PRD FOREIGN KEY (DTV_PRD_ID) REFERENCES PRODUCTO(PRD_ID) |
| 51 | )' |
| 52 | ); |
| 53 | |
| 54 | $cantidadDeProductos = |
| 55 | self::$pdo->query("SELECT COUNT(PRD_ID) FROM PRODUCTO")->fetchColumn(0); |
| 56 | |
| 57 | if ($cantidadDeProductos === 0) { |
| 58 | self::$pdo->exec( |
| 59 | "INSERT INTO PRODUCTO |
| 60 | (PRD_NOMBRE, PRD_EXISTENCIAS, PRD_PRECIO) |
| 61 | VALUES |
| 62 | ('Sandwich', 50, 15), |
| 63 | ('Hot dog', 40, 30), |
| 64 | ('Hamburguesa', 30, 40)" |
| 65 | ); |
| 66 | } |
| 67 | |
| 68 | $cantidadDeVentas = |
| 69 | self::$pdo->query("SELECT COUNT(VNT_ID) FROM VENTA")->fetchColumn(0); |
| 70 | |
| 71 | if ($cantidadDeVentas === 0) { |
| 72 | ventaEnCapturaAgrega(self::$pdo); |
| 73 | } |
| 74 | } |
| 75 | |
| 76 | return self::$pdo; |
| 77 | } |
| 78 | } |
| 79 |
| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/../libservidorphp/manejaErrores.php"; |
| 4 | require_once __DIR__ . "/../libservidorphp/recibeEnteroObligatorio.php"; |
| 5 | require_once __DIR__ . "/../libservidorphp/recibeFlotanteObligatorio.php"; |
| 6 | require_once __DIR__ . "/../libservidorphp/validaEntidadObligatoria.php"; |
| 7 | require_once __DIR__ . "/../libservidorphp/devuelveCreated.php"; |
| 8 | require_once __DIR__ . "/Bd.php"; |
| 9 | require_once __DIR__ . "/productoBusca.php"; |
| 10 | require_once __DIR__ . "/ventaEnCapturaBusca.php"; |
| 11 | |
| 12 | |
| 13 | $prodId = recibeEnteroObligatorio("id"); |
| 14 | $cantidad = recibeFlotanteObligatorio("cantidad"); |
| 15 | |
| 16 | $bd = Bd::conexion(); |
| 17 | |
| 18 | $producto = productoBusca($bd, $prodId); |
| 19 | $producto = validaEntidadObligatoria("Producto", $producto); |
| 20 | |
| 21 | $venta = ventaEnCapturaBusca($bd); |
| 22 | $venta = validaEntidadObligatoria("Venta en captura", $venta); |
| 23 | |
| 24 | $stmt = $bd->prepare( |
| 25 | "INSERT INTO DET_VENTA ( |
| 26 | DTV_VNT_ID, DTV_PRD_ID, DTV_CANTIDAD, DTV_PRECIO |
| 27 | ) values ( |
| 28 | :DTV_VNT_ID, :DTV_PRD_ID, :DTV_CANTIDAD, :DTV_PRECIO |
| 29 | )" |
| 30 | ); |
| 31 | $stmt->execute([ |
| 32 | ":DTV_VNT_ID" => $venta["VNT_ID"], |
| 33 | ":DTV_PRD_ID" => $prodId, |
| 34 | ":DTV_CANTIDAD" => $cantidad, |
| 35 | ":DTV_PRECIO" => $producto["PRD_PRECIO"], |
| 36 | ]); |
| 37 | |
| 38 | $encodeProdId = urlencode($prodId); |
| 39 | devuelveCreated("/api/vista-modifica.php?id=$encodeProdId", [ |
| 40 | "prodId" => ["value" => $prodId], |
| 41 | "prodNombre" => ["value" => $producto["PRD_NOMBRE"]], |
| 42 | "precio" => ["value" => "$" . number_format($producto["PRD_PRECIO"], 2)], |
| 43 | "cantidad" => ["valueAsNumber" => $cantidad], |
| 44 | ]); |
| 45 |
| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/../libservidorphp/manejaErrores.php"; |
| 4 | require_once __DIR__ . "/../libservidorphp/recibeEnteroObligatorio.php"; |
| 5 | require_once __DIR__ . "/../libservidorphp/devuelveNoContent.php"; |
| 6 | require_once __DIR__ . "/Bd.php"; |
| 7 | require_once __DIR__ . "/ventaEnCapturaBusca.php"; |
| 8 | |
| 9 | $prodId = recibeEnteroObligatorio("prodId"); |
| 10 | |
| 11 | $bd = Bd::conexion(); |
| 12 | |
| 13 | $venta = ventaEnCapturaBusca($bd); |
| 14 | if ($venta !== false) { |
| 15 | $stmt = $bd->prepare( |
| 16 | "DELETE FROM |
| 17 | DET_VENTA |
| 18 | WHERE DTV_VNT_ID = :DTV_VNT_ID AND DTV_PRD_ID = :DTV_PRD_ID" |
| 19 | ); |
| 20 | $stmt->execute([":DTV_VNT_ID" => $venta["VNT_ID"], ":DTV_PRD_ID" => $prodId]); |
| 21 | } |
| 22 | devuelveNoContent(); |
| 23 |
| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/../libservidorphp/manejaErrores.php"; |
| 4 | require_once __DIR__ . "/../libservidorphp/recibeEnteroObligatorio.php"; |
| 5 | require_once __DIR__ . "/../libservidorphp/recibeFlotanteObligatorio.php"; |
| 6 | require_once __DIR__ . "/../libservidorphp/validaEntidadObligatoria.php"; |
| 7 | require_once __DIR__ . "/../libservidorphp/devuelveJson.php"; |
| 8 | require_once __DIR__ . "/Bd.php"; |
| 9 | require_once __DIR__ . "/productoBusca.php"; |
| 10 | require_once __DIR__ . "/ventaEnCapturaBusca.php"; |
| 11 | |
| 12 | $prodId = recibeEnteroObligatorio("prodId"); |
| 13 | $cantidad = recibeFlotanteObligatorio("cantidad"); |
| 14 | |
| 15 | $bd = Bd::conexion(); |
| 16 | |
| 17 | $producto = productoBusca($bd, $prodId); |
| 18 | $producto = validaEntidadObligatoria("Producto", $producto); |
| 19 | |
| 20 | $venta = ventaEnCapturaBusca($bd); |
| 21 | $venta = validaEntidadObligatoria("Venta en captura", $venta); |
| 22 | |
| 23 | $stmt = $bd->prepare( |
| 24 | "UPDATE DET_VENTA |
| 25 | SET |
| 26 | DTV_CANTIDAD = :DTV_CANTIDAD, |
| 27 | DTV_PRECIO = :DTV_PRECIO |
| 28 | WHERE |
| 29 | DTV_VNT_ID = :DTV_VNT_ID |
| 30 | AND DTV_PRD_ID = :DTV_PRD_ID" |
| 31 | ); |
| 32 | $stmt->execute([ |
| 33 | ":DTV_CANTIDAD" => $cantidad, |
| 34 | ":DTV_PRECIO" => $producto["PRD_PRECIO"], |
| 35 | ":DTV_VNT_ID" => $venta["VNT_ID"], |
| 36 | ":DTV_PRD_ID" => $prodId |
| 37 | ]); |
| 38 | |
| 39 | devuelveJson([ |
| 40 | "prodId" => ["value" => $prodId], |
| 41 | "prodNombre" => ["value" => $producto["PRD_NOMBRE"]], |
| 42 | "precio" => ["value" => "$" . number_format($producto["PRD_PRECIO"], 2)], |
| 43 | "cantidad" => ["valueAsNumber" => $cantidad], |
| 44 | ]); |
| 45 |
| 1 | <?php |
| 2 | |
| 3 | function detVentaConsulta(\PDO $bd, int $ventaId) |
| 4 | { |
| 5 | $stmt = $bd->prepare( |
| 6 | "SELECT |
| 7 | DV.DTV_PRD_ID, |
| 8 | P.PRD_NOMBRE, |
| 9 | P.PRD_EXISTENCIAS, |
| 10 | P.PRD_PRECIO, |
| 11 | DV.DTV_CANTIDAD, |
| 12 | DV.DTV_PRECIO |
| 13 | FROM DET_VENTA DV, PRODUCTO P |
| 14 | WHERE |
| 15 | DV.DTV_PRD_ID = P.PRD_ID |
| 16 | AND DV.DTV_VNT_ID = :DTV_VNT_ID |
| 17 | ORDER BY P.PRD_NOMBRE" |
| 18 | ); |
| 19 | $stmt->execute([":DTV_VNT_ID" => $ventaId]); |
| 20 | $lista = $stmt->fetchAll(PDO::FETCH_ASSOC); |
| 21 | return $lista; |
| 22 | } |
| 23 |
| 1 | <?php |
| 2 | |
| 3 | function productoBusca(\PDO $bd, int $prodId) |
| 4 | { |
| 5 | $stmt = $bd->prepare("SELECT * FROM PRODUCTO WHERE PRD_ID = :PRD_ID"); |
| 6 | $stmt->execute([":PRD_ID" => $prodId]); |
| 7 | $modelo = $stmt->fetch(PDO::FETCH_ASSOC); |
| 8 | return $modelo; |
| 9 | } |
| 10 |
| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/../libservidorphp/manejaErrores.php"; |
| 4 | require_once __DIR__ . "/../libservidorphp/devuelveCreated.php"; |
| 5 | require_once __DIR__ . "/../libservidorphp/validaEntidadObligatoria.php"; |
| 6 | require_once __DIR__ . "/Bd.php"; |
| 7 | require_once __DIR__ . "/ventaEnCapturaBusca.php"; |
| 8 | require_once __DIR__ . "/detVentaConsulta.php"; |
| 9 | require_once __DIR__ . "/ventaEnCapturaAgrega.php"; |
| 10 | |
| 11 | $bd = Bd::conexion(); |
| 12 | $bd->beginTransaction(); |
| 13 | |
| 14 | $venta = ventaEnCapturaBusca($bd); |
| 15 | $venta = validaEntidadObligatoria("Venta en captura", $venta); |
| 16 | |
| 17 | $detalles = detVentaConsulta($bd, $venta["VNT_ID"]); |
| 18 | |
| 19 | // Actualiza las existencias de los productos vendidos. |
| 20 | $update = $bd->prepare( |
| 21 | "UPDATE PRODUCTO |
| 22 | SET PRD_EXISTENCIAS = :PRD_EXISTENCIAS |
| 23 | WHERE PRD_ID = :PRD_ID" |
| 24 | ); |
| 25 | foreach ($detalles as $detVenta) { |
| 26 | $update->execute([ |
| 27 | ":PRD_ID" => $detVenta["DTV_PRD_ID"], |
| 28 | ":PRD_EXISTENCIAS" => |
| 29 | $detVenta["PRD_EXISTENCIAS"] - $detVenta["DTV_CANTIDAD"] |
| 30 | ]); |
| 31 | } |
| 32 | |
| 33 | $update = $bd->prepare( |
| 34 | "UPDATE VENTA |
| 35 | SET VNT_EN_CAPTURA = 0 |
| 36 | WHERE VNT_ID = :VNT_ID" |
| 37 | ); |
| 38 | $update->execute([":VNT_ID" => $venta["VNT_ID"]]); |
| 39 | |
| 40 | ventaEnCapturaAgrega($bd); |
| 41 | $folio = $bd->lastInsertId(); |
| 42 | |
| 43 | $bd->commit(); |
| 44 | |
| 45 | devuelveCreated("/srv/venta-en-captura.php", [ |
| 46 | "folio" => ["value" => $folio], |
| 47 | "detalles" => ["innerHTML" => ""] |
| 48 | ]); |
| 49 |
| 1 | <?php |
| 2 | |
| 3 | function ventaEnCapturaAgrega(\PDO $bd) |
| 4 | { |
| 5 | $bd->exec("INSERT INTO VENTA (VNT_EN_CAPTURA) VALUES (1)"); |
| 6 | } |
| 7 |
| 1 | <?php |
| 2 | |
| 3 | function ventaEnCapturaBusca(\PDO $bd) |
| 4 | { |
| 5 | $stmt = $bd->query("SELECT * FROM VENTA WHERE VNT_EN_CAPTURA = 1"); |
| 6 | $venta = $stmt->fetch(PDO::FETCH_ASSOC); |
| 7 | return $venta; |
| 8 | } |
| 9 |
| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/../libservidorphp/manejaErrores.php"; |
| 4 | require_once __DIR__ . "/../libservidorphp/recibeEnteroObligatorio.php"; |
| 5 | require_once __DIR__ . "/../libservidorphp/validaEntidadObligatoria.php"; |
| 6 | require_once __DIR__ . "/../libservidorphp/devuelveJson.php"; |
| 7 | require_once __DIR__ . "/Bd.php"; |
| 8 | require_once __DIR__ . "/productoBusca.php"; |
| 9 | |
| 10 | $id = recibeEnteroObligatorio("id"); |
| 11 | |
| 12 | $producto = productoBusca(Bd::conexion(), $id); |
| 13 | $producto = validaEntidadObligatoria("Producto", $producto); |
| 14 | |
| 15 | devuelveJson([ |
| 16 | "id" => ["value" => $id], |
| 17 | "producto" => ["value" => $producto["PRD_NOMBRE"]], |
| 18 | "precio" => ["value" => "$" . number_format($producto["PRD_PRECIO"], 2)], |
| 19 | ]); |
| 20 |
| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/../libservidorphp/manejaErrores.php"; |
| 4 | require_once __DIR__ . "/../libservidorphp/devuelveJson.php"; |
| 5 | require_once __DIR__ . "/../libservidorphp/validaEntidadObligatoria.php"; |
| 6 | require_once __DIR__ . "/Bd.php"; |
| 7 | require_once __DIR__ . "/ventaEnCapturaBusca.php"; |
| 8 | require_once __DIR__ . "/detVentaConsulta.php"; |
| 9 | require_once __DIR__ . "/Bd.php"; |
| 10 | |
| 11 | $bd = Bd::conexion(); |
| 12 | |
| 13 | $venta = ventaEnCapturaBusca($bd); |
| 14 | $venta = validaEntidadObligatoria("Venta en captura", $venta); |
| 15 | |
| 16 | $detalles = detVentaConsulta($bd, $venta["VNT_ID"]); |
| 17 | |
| 18 | $renderDetalles = ""; |
| 19 | foreach ($detalles as $detVenta) { |
| 20 | $prodId = $detVenta["DTV_PRD_ID"]; |
| 21 | $query = htmlentities(http_build_query(["prodId" => $prodId])); |
| 22 | $urlModifica = "modifica.html?$query"; |
| 23 | $prodNombre = htmlentities($detVenta["PRD_NOMBRE"]); |
| 24 | $precio = htmlentities("$" . number_format($detVenta["PRD_PRECIO"], 2)); |
| 25 | $cantidad = htmlentities(number_format($detVenta["DTV_CANTIDAD"], 2)); |
| 26 | $renderDetalles .= |
| 27 | "<dt>$prodNombre</dt> |
| 28 | <dd> |
| 29 | <a href= '$urlModifica'>Modificar o eliminar</a> |
| 30 | </dd> |
| 31 | <dd> |
| 32 | <dl> |
| 33 | <dt>Cantidad</dt> |
| 34 | <dd>$cantidad</dd> |
| 35 | <dt>Precio</dt> |
| 36 | <dd>$precio</dd> |
| 37 | </dl> |
| 38 | </dd>"; |
| 39 | } |
| 40 | |
| 41 | devuelveJson([ |
| 42 | "folio" => ["value" => $venta["VNT_ID"]], |
| 43 | "detalles" => ["innerHTML" => $renderDetalles] |
| 44 | ]); |
| 45 |
| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/../libservidorphp/manejaErrores.php"; |
| 4 | require_once __DIR__ . "/../libservidorphp/devuelveJson.php"; |
| 5 | require_once __DIR__ . "/Bd.php"; |
| 6 | |
| 7 | $bd = Bd::conexion(); |
| 8 | $stmt = $bd->query("SELECT * FROM PRODUCTO ORDER BY PRD_NOMBRE"); |
| 9 | $lista = $stmt->fetchAll(PDO::FETCH_ASSOC); |
| 10 | |
| 11 | $render = ""; |
| 12 | foreach ($lista as $modelo) { |
| 13 | $id = $modelo["PRD_ID"]; |
| 14 | $query = htmlentities(http_build_query(["id" => $id])); |
| 15 | $urlAgrega = "agrega.html?$query"; |
| 16 | $nombre = htmlentities($modelo["PRD_NOMBRE"]); |
| 17 | $precio = htmlentities("$" . number_format($modelo["PRD_PRECIO"], 2)); |
| 18 | $existencias = htmlentities(number_format($modelo["PRD_EXISTENCIAS"], 2)); |
| 19 | $render .= |
| 20 | "<dt>$nombre</dt> |
| 21 | <dd> |
| 22 | <a href='$urlAgrega'>Agregar al carrito</a> |
| 23 | </dd> |
| 24 | <dd> |
| 25 | <dl> |
| 26 | <dt>Existencias</dt> |
| 27 | <dd>$existencias</dd> |
| 28 | <dt>Precio</dt> |
| 29 | <dd>$precio</dd> |
| 30 | </dl> |
| 31 | </dd>"; |
| 32 | } |
| 33 | devuelveJson(["lista" => ["innerHTML" => $render]]); |
| 34 |
| 1 | <?php |
| 2 | |
| 3 | require_once __DIR__ . "/../libservidorphp/manejaErrores.php"; |
| 4 | require_once __DIR__ . "/../libservidorphp/recibeEnteroObligatorio.php"; |
| 5 | require_once __DIR__ . "/../libservidorphp/validaEntidadObligatoria.php"; |
| 6 | require_once __DIR__ . "/../libservidorphp/devuelveJson.php"; |
| 7 | require_once __DIR__ . "/Bd.php"; |
| 8 | require_once __DIR__ . "/productoBusca.php"; |
| 9 | require_once __DIR__ . "/ventaEnCapturaBusca.php"; |
| 10 | |
| 11 | $prodId = recibeEnteroObligatorio("prodId"); |
| 12 | |
| 13 | $bd = Bd::conexion(); |
| 14 | |
| 15 | $venta = ventaEnCapturaBusca($bd); |
| 16 | $venta = validaEntidadObligatoria("Venta en captura", $venta); |
| 17 | |
| 18 | $producto = productoBusca($bd, $prodId); |
| 19 | $producto = validaEntidadObligatoria("Producto", $producto); |
| 20 | |
| 21 | $stmt = $bd->prepare( |
| 22 | "SELECT * |
| 23 | FROM DET_VENTA |
| 24 | WHERE DTV_VNT_ID = :DTV_VNT_ID AND DTV_PRD_ID = :DTV_PRD_ID" |
| 25 | ); |
| 26 | $stmt->execute([":DTV_VNT_ID" => $venta["VNT_ID"], ":DTV_PRD_ID" => $prodId]); |
| 27 | $detVenta = $stmt->fetch(PDO::FETCH_ASSOC); |
| 28 | $detVenta = validaEntidadObligatoria("Detalle de venta", $detVenta); |
| 29 | |
| 30 | devuelveJson([ |
| 31 | "prodId" => ["value" => $prodId], |
| 32 | "prodNombre" => ["value" => $producto["PRD_NOMBRE"]], |
| 33 | "precio" => ["value" => "$" . number_format($detVenta["DTV_PRECIO"], 2)], |
| 34 | "cantidad" => ["valueAsNumber" => $detVenta["DTV_CANTIDAD"]], |
| 35 | ]); |
| 36 |