feat(v2.0.4): Corrections diverses et tri des tableaux devis
- Correction affichage email contact dans SAP (models/msap.php) - Ajout fonctionnalité tri des tableaux devis (jsap.js, jdevis.js) - Améliorations diverses vues devis et SAP - Mise à jour contrôleurs et modèles export 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1368,5 +1368,280 @@ switch ($Route->_action) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "search_devis":
|
||||
eLog("=== search_devis case appelé ===");
|
||||
$rawData = file_get_contents("php://input");
|
||||
eLog("Raw data: " . $rawData);
|
||||
$data = json_decode($rawData);
|
||||
eLog("Data decoded: " . print_r($data, true));
|
||||
eLog("isset term: " . (isset($data->term) ? 'YES' : 'NO'));
|
||||
|
||||
if (isset($data->term)) {
|
||||
$term = nettoie_input($data->term);
|
||||
$context = nettoie_input($data->context);
|
||||
|
||||
if (strlen($term) < 3) {
|
||||
echo json_encode(array("success" => false, "message" => "Le terme de recherche doit contenir au moins 3 caractères"));
|
||||
break;
|
||||
}
|
||||
|
||||
$termSafe = '%' . $term . '%';
|
||||
|
||||
$whereParams = [];
|
||||
switch ($fk_role) {
|
||||
case 1:
|
||||
$whereRole = 'd.fk_user = :fkUser OR d.fk_statut_devis >= 2';
|
||||
$whereParams[':fkUser'] = $fk_user;
|
||||
break;
|
||||
case 2:
|
||||
try {
|
||||
$db = Database::getInstance();
|
||||
$sql = 'SELECT rowid FROM users WHERE fk_parent = :fkParent';
|
||||
$aRR = $db->fetchAll($sql, [':fkParent' => $fk_user]);
|
||||
|
||||
$rrIds = array_column($aRR, 'rowid');
|
||||
if (!empty($rrIds)) {
|
||||
$placeholders = [];
|
||||
foreach ($rrIds as $index => $id) {
|
||||
$placeholder = ':rr' . $index;
|
||||
$placeholders[] = $placeholder;
|
||||
$whereParams[$placeholder] = $id;
|
||||
}
|
||||
$whereRole = 'd.fk_user = :fkUser OR (d.fk_statut_devis >= 3 AND d.fk_user IN (' . implode(',', $placeholders) . '))';
|
||||
$whereParams[':fkUser'] = $fk_user;
|
||||
} else {
|
||||
$whereRole = 'd.fk_user = :fkUser';
|
||||
$whereParams[':fkUser'] = $fk_user;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
error_log("Erreur récupération RR : " . $e->getMessage());
|
||||
$whereRole = 'd.fk_user = :fkUser';
|
||||
$whereParams[':fkUser'] = $fk_user;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$whereRole = 'd.fk_user = :fkUser';
|
||||
$whereParams[':fkUser'] = $fk_user;
|
||||
break;
|
||||
}
|
||||
|
||||
if ($context === "archives") {
|
||||
$whereStatut = ' AND d.fk_statut_devis = 20';
|
||||
} else {
|
||||
$whereStatut = ' AND d.fk_statut_devis != 20';
|
||||
}
|
||||
|
||||
$whereParams[':term1'] = $termSafe;
|
||||
$whereParams[':term2'] = $termSafe;
|
||||
$whereParams[':term3'] = $termSafe;
|
||||
$whereParams[':term4'] = $termSafe;
|
||||
$whereParams[':term5'] = $termSafe;
|
||||
$whereParams[':term6'] = $termSafe;
|
||||
$whereParams[':term7'] = $termSafe;
|
||||
$whereParams[':term8'] = $termSafe;
|
||||
$whereParams[':term9'] = $termSafe;
|
||||
$whereParams[':term10'] = $termSafe;
|
||||
$whereParams[':term11'] = $termSafe;
|
||||
$whereParams[':term12'] = $termSafe;
|
||||
$whereParams[':term13'] = $termSafe;
|
||||
$whereParams[':term14'] = $termSafe;
|
||||
$whereParams[':term15'] = $termSafe;
|
||||
$whereParams[':term16'] = $termSafe;
|
||||
$whereParams[':term17'] = $termSafe;
|
||||
|
||||
try {
|
||||
$db = Database::getInstance();
|
||||
$sql = 'SELECT DISTINCT d.rowid, d.dossier, d.date_demande, d.date_remise, d.num_opportunite, d.fk_client, d.montant_total_ht_remise, d.marge_totale, d.commentaire, d.chk_speciaux, c.libelle, c.ville, c.cp, d.fk_statut_devis, ';
|
||||
$sql .= 'd.lib_new_client, d.type_new_client, d.adresse1_new_client, d.adresse2_new_client, d.adresse3_new_client, d.cp_new_client, d.ville_new_client, d.comment_devis, d.comment_geste_comm, ';
|
||||
$sql .= 'd.contact_new_nom, d.contact_new_prenom, d.new_telephone, d.new_mobile, d.new_email, d.contact_new_fonction, LEFT(u.prenom,1) AS prenom, u.libelle as nom, ';
|
||||
$sql .= 'xs.libelle as lib_statut, d.chk_new_statut, m.libelle as lib_marche, d.chk_validat, d.fk_user_validat, d.date_validat ';
|
||||
$sql .= 'FROM devis d ';
|
||||
$sql .= 'LEFT JOIN clients c ON c.rowid=d.fk_client ';
|
||||
$sql .= 'LEFT JOIN x_statuts_devis xs ON xs.rowid=d.fk_statut_devis ';
|
||||
$sql .= 'LEFT JOIN marches m ON m.rowid=d.fk_marche ';
|
||||
$sql .= 'LEFT JOIN users u ON u.rowid=d.fk_user ';
|
||||
$sql .= 'LEFT JOIN clients_contacts ct ON ct.fk_client=d.fk_client ';
|
||||
$sql .= 'WHERE (' . $whereRole . ')' . $whereStatut . ' AND (';
|
||||
$sql .= 'd.rowid LIKE :term1 OR ';
|
||||
$sql .= 'c.libelle LIKE :term2 OR ';
|
||||
$sql .= 'c.adresse1 LIKE :term3 OR ';
|
||||
$sql .= 'c.adresse2 LIKE :term4 OR ';
|
||||
$sql .= 'c.adresse3 LIKE :term5 OR ';
|
||||
$sql .= 'c.cp LIKE :term6 OR ';
|
||||
$sql .= 'c.ville LIKE :term7 OR ';
|
||||
$sql .= 'm.libelle LIKE :term8 OR ';
|
||||
$sql .= 'd.num_opportunite LIKE :term9 OR ';
|
||||
$sql .= 'd.lib_new_client LIKE :term10 OR ';
|
||||
$sql .= 'd.cp_new_client LIKE :term11 OR ';
|
||||
$sql .= 'd.ville_new_client LIKE :term12 OR ';
|
||||
$sql .= 'ct.nom LIKE :term13 OR ';
|
||||
$sql .= 'ct.prenom LIKE :term14 OR ';
|
||||
$sql .= 'ct.fonction LIKE :term15 OR ';
|
||||
$sql .= 'ct.email LIKE :term16 OR ';
|
||||
$sql .= 'd.commentaire LIKE :term17) ';
|
||||
$sql .= 'ORDER BY d.dossier, d.date_remise DESC';
|
||||
|
||||
eLog("=== SEARCH DEVIS DEBUG ===");
|
||||
eLog("Terme recherché: " . $term);
|
||||
eLog("Context: " . $context);
|
||||
eLog("SQL: " . $sql);
|
||||
eLog("Params: " . print_r($whereParams, true));
|
||||
|
||||
$pdo = $db->getPDO();
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute($whereParams);
|
||||
$devis = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
eLog("Nombre de devis trouvés: " . count($devis));
|
||||
|
||||
$nb_devis = array();
|
||||
foreach ($devis as $dev) {
|
||||
if (!isset($nb_devis[$dev["fk_statut_devis"]])) {
|
||||
$nb_devis[$dev["fk_statut_devis"]] = 1;
|
||||
} else {
|
||||
$nb_devis[$dev["fk_statut_devis"]]++;
|
||||
}
|
||||
}
|
||||
|
||||
$dossiers = array();
|
||||
foreach ($devis as $dev) {
|
||||
if (!in_array($dev["dossier"], array_column($dossiers, 'dossier'))) {
|
||||
$dossiers[] = array("dossier" => $dev["dossier"]);
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode(array(
|
||||
"success" => true,
|
||||
"devis" => $devis,
|
||||
"nb_devis" => $nb_devis,
|
||||
"dossiers" => $dossiers
|
||||
));
|
||||
} catch (Exception $e) {
|
||||
error_log("Erreur recherche devis : " . $e->getMessage());
|
||||
echo json_encode(array("success" => false, "message" => "Erreur lors de la recherche : " . $e->getMessage()));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "search_devis_sap":
|
||||
eLog("=== search_devis_sap case appelé ===");
|
||||
$rawData = file_get_contents("php://input");
|
||||
eLog("Raw data: " . $rawData);
|
||||
$data = json_decode($rawData);
|
||||
eLog("Data decoded: " . print_r($data, true));
|
||||
eLog("isset term: " . (isset($data->term) ? 'YES' : 'NO'));
|
||||
|
||||
if (isset($data->term)) {
|
||||
$term = nettoie_input($data->term);
|
||||
$context = nettoie_input($data->context);
|
||||
|
||||
if (strlen($term) < 3) {
|
||||
echo json_encode(array("success" => false, "message" => "Le terme de recherche doit contenir au moins 3 caractères"));
|
||||
break;
|
||||
}
|
||||
|
||||
$termSafe = '%' . $term . '%';
|
||||
|
||||
$whereParams = [];
|
||||
$whereRole = '1=1';
|
||||
|
||||
if ($context === "archives") {
|
||||
$whereStatut = ' AND d.fk_statut_devis = 20';
|
||||
} else {
|
||||
$whereStatut = ' AND d.fk_statut_devis != 20';
|
||||
}
|
||||
|
||||
$whereParams[':term1'] = $termSafe;
|
||||
$whereParams[':term2'] = $termSafe;
|
||||
$whereParams[':term3'] = $termSafe;
|
||||
$whereParams[':term4'] = $termSafe;
|
||||
$whereParams[':term5'] = $termSafe;
|
||||
$whereParams[':term6'] = $termSafe;
|
||||
$whereParams[':term7'] = $termSafe;
|
||||
$whereParams[':term8'] = $termSafe;
|
||||
$whereParams[':term9'] = $termSafe;
|
||||
$whereParams[':term10'] = $termSafe;
|
||||
$whereParams[':term11'] = $termSafe;
|
||||
$whereParams[':term12'] = $termSafe;
|
||||
$whereParams[':term13'] = $termSafe;
|
||||
$whereParams[':term14'] = $termSafe;
|
||||
$whereParams[':term15'] = $termSafe;
|
||||
$whereParams[':term16'] = $termSafe;
|
||||
$whereParams[':term17'] = $termSafe;
|
||||
|
||||
try {
|
||||
$db = Database::getInstance();
|
||||
$sql = 'SELECT DISTINCT d.rowid, d.dossier, d.date_demande, d.date_remise, d.num_opportunite, d.fk_client, d.montant_total_ht_remise, d.marge_totale, d.commentaire, d.chk_speciaux, c.libelle, c.ville, c.cp, d.fk_statut_devis, ';
|
||||
$sql .= 'd.lib_new_client, d.type_new_client, d.adresse1_new_client, d.adresse2_new_client, d.adresse3_new_client, d.cp_new_client, d.ville_new_client, d.comment_devis, d.comment_geste_comm, ';
|
||||
$sql .= 'd.contact_new_nom, d.contact_new_prenom, d.new_telephone, d.new_mobile, d.new_email, d.contact_new_fonction, LEFT(u.prenom,1) AS prenom, u.libelle as nom, ';
|
||||
$sql .= 'xs.libelle as lib_statut, d.chk_new_statut, m.libelle as lib_marche, d.chk_validat, d.fk_user_validat, d.date_validat, c.code ';
|
||||
$sql .= 'FROM devis d ';
|
||||
$sql .= 'LEFT JOIN clients c ON c.rowid=d.fk_client ';
|
||||
$sql .= 'LEFT JOIN x_statuts_devis xs ON xs.rowid=d.fk_statut_devis ';
|
||||
$sql .= 'LEFT JOIN marches m ON m.rowid=d.fk_marche ';
|
||||
$sql .= 'LEFT JOIN users u ON u.rowid=d.fk_user ';
|
||||
$sql .= 'LEFT JOIN clients_contacts ct ON ct.fk_client=d.fk_client ';
|
||||
$sql .= 'WHERE (' . $whereRole . ')' . $whereStatut . ' AND (';
|
||||
$sql .= 'd.rowid LIKE :term1 OR ';
|
||||
$sql .= 'c.libelle LIKE :term2 OR ';
|
||||
$sql .= 'c.adresse1 LIKE :term3 OR ';
|
||||
$sql .= 'c.adresse2 LIKE :term4 OR ';
|
||||
$sql .= 'c.adresse3 LIKE :term5 OR ';
|
||||
$sql .= 'c.cp LIKE :term6 OR ';
|
||||
$sql .= 'c.ville LIKE :term7 OR ';
|
||||
$sql .= 'c.code LIKE :term8 OR ';
|
||||
$sql .= 'm.libelle LIKE :term9 OR ';
|
||||
$sql .= 'd.num_opportunite LIKE :term10 OR ';
|
||||
$sql .= 'd.lib_new_client LIKE :term11 OR ';
|
||||
$sql .= 'd.cp_new_client LIKE :term12 OR ';
|
||||
$sql .= 'd.ville_new_client LIKE :term13 OR ';
|
||||
$sql .= 'ct.nom LIKE :term14 OR ';
|
||||
$sql .= 'ct.prenom LIKE :term15 OR ';
|
||||
$sql .= 'ct.fonction LIKE :term16 OR ';
|
||||
$sql .= 'ct.email LIKE :term17) ';
|
||||
$sql .= 'ORDER BY d.dossier, d.date_remise DESC';
|
||||
|
||||
eLog("=== SEARCH DEVIS SAP DEBUG ===");
|
||||
eLog("Terme recherché: " . $term);
|
||||
eLog("Context: " . $context);
|
||||
eLog("SQL: " . $sql);
|
||||
eLog("Params: " . print_r($whereParams, true));
|
||||
|
||||
$pdo = $db->getPDO();
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute($whereParams);
|
||||
$devis = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
eLog("Nombre de devis trouvés: " . count($devis));
|
||||
|
||||
$nb_devis = array();
|
||||
foreach ($devis as $dev) {
|
||||
if (!isset($nb_devis[$dev["fk_statut_devis"]])) {
|
||||
$nb_devis[$dev["fk_statut_devis"]] = 1;
|
||||
} else {
|
||||
$nb_devis[$dev["fk_statut_devis"]]++;
|
||||
}
|
||||
}
|
||||
|
||||
$dossiers = array();
|
||||
foreach ($devis as $dev) {
|
||||
if (!in_array($dev["dossier"], array_column($dossiers, 'dossier'))) {
|
||||
$dossiers[] = array("dossier" => $dev["dossier"]);
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode(array(
|
||||
"success" => true,
|
||||
"devis" => $devis,
|
||||
"nb_devis" => $nb_devis,
|
||||
"dossiers" => $dossiers
|
||||
));
|
||||
} catch (Exception $e) {
|
||||
error_log("Erreur recherche devis SAP : " . $e->getMessage());
|
||||
echo json_encode(array("success" => false, "message" => "Erreur lors de la recherche : " . $e->getMessage()));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
exit();
|
||||
|
||||
Reference in New Issue
Block a user