Modelado básico:
Ejemplo resultado de consulta:
Dado el modelo ER anterior, para obtener el resultado mostrado en la imagen solo basta crear una DAO y una simple función
que reciba el ID de la reparación para obtener los datos referentes a esa reparación.
<?php
namespace Acme\Dao;
require_once 'class.ReparationDao.php';
class ReparationDaoImpl implements ReparationDao {
public function get_by_id(int $id) {
$sql = "SELECT
c.id_cliente,
c.nombres + ' ' + c.apellidos,
a.nombre,
r.fecha,
r.estado
FROM Cliente c
INNER JOIN Reparacion r ON (c.id_cliente = r.id_cliente)
INNER JOIN Orden_Reparacion ore ON (r.id_reparacion = ore.id_reparacion)
INNER JOIN Articulo a ON (ore.id_articulo = a.id_articulo)
WHERE r.id_reparacion = ?";
$stmt = $connection->prepare(sql);
$stmt->bind_param("d", $id);
$stmt->execute();
$stmt->bind_result($clientId, $client, $article, $date, $state);
$result = array();
while($stmt->fetch()) {
$result['clientId'] = $clientId;
$result['client'] = $client;
$result['article'] = $article;
$result['date'] = $date;
$result['state'] = $state;
}
$stmt->close();
return $result;
}
// otros métodos
}
?>
Finalmente solo creamos un handler para buscar las reparaciones.
<?php
// ReparationHandler.php
require_once 'ruta/hacia/class.ReparationDaoImpl.php';
use Acme\Dao\ReparationDaoImpl as ReparationDao;
$reparation = new ReparationDao();
$reparationId = $_GET['idreparation'];
return json_encode($reparation->get_by_id($reparationId));
Y en tu vista:
<form id="searchReparationForm">
<input type="text" pattern="[0-9]" placeholder="ID de la reparación" required >
<button type="submit">Buscar reparación</button>
</form>
<table id="tbl-reparation">
<thead>
<tr>
<th>Id cliente</th>
<th>Cliente</th>
<th>Artículo</th>
<th>Fecha</th>
<th>Estado</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<script src="js/buscar_reparacion.js"></script>
Donde jalas el siguiente código JS para buscar una reparación mediante AJAX.
var searchForm = document.querySelector('#searchReparationForm');
searchForm.addEventListener('submit', function(e) {
e.preventDefault();
var reparationId = parseInt(searchForm.querySelector('input').value);
var ajax = new XMLHttpRequest();
ajax.open('GET', '/ruta/hacia/ReparationHandler.php?idreparacion=' + reparationId);
ajax.onload = function() {
if(ajax.status === 200) {
$tbody = document.querySelector('#tbl-reparation > tbody');
var reparationData = JSON.parse(ajax.response);
var tr = document.createElement('tr');
for(var key in reparationData) {
var td = document.createElement('td');
td.innerHTML = reparationData[key];
tr.appendChild(td);
}
tbody.appendChild(tr);
} else {
// mostrar error
}
}
ajax.send();
});
Podrías mejorar todo esto por ejemplo, añadiendo a la tabla reparacion
la foreign key de la tabla Tecnicos
. Además podrías hacer una pequeña aplicación para los técnicos, donde actualicen el estado (marcando con un check por ejemplo) de X reparación realizada. Cuando se envíe el formulario, se podría enviar un email al cliente informando que su reparación está lista.
Esa es la idea. Solo debes adaptarlo a prestashop y si creando un servicio REST para que las aplicaciones móviles puedan comunicarse con la aplicación php.