feat(v2.0.3): Marchés hybrides et améliorations multiples
Fonctionnalités principales : 1. Marchés hybrides - Onglet Mercurial - Ajout onglet Mercurial avec style distinct (vert, gras, blanc) - Affichage des produits mercuriaux pour marchés hybrides - Filtrage automatique des produits "Hors Marché 999" - Documentation Phase 2 avec CAS 1 et CAS 2 de marchés hybrides - Règles métier pour validation différenciée (devis 100% mercurial vs mixte) 2. Corrections bugs - Fix flag chkChange sur onglet "Sélection Produits" (callback asynchrone) - Plus d'alerte intempestive après sauvegarde des produits 3. Outils de déploiement - Nouveau script deploy-file.sh pour déploiement unitaire (DEV/PROD) - Amélioration deploy-cleo.sh 4. Gestion multi-contacts (v2.0.3) - Contrôleur AJAX cjxcontacts.php - Script migration clients_contacts - Documentation complète 5. Documentation - Mise à jour TODO.md avec Phase 2 marchés hybrides - Mise à jour README.md v2.0.3 - Ajout RULES.md - Ajout migration_clients_contacts.sql 6. Nettoyage - Suppression fichiers obsolètes (conf_new.php, conf_old.php, uof_linet_20250911.sql) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -140,10 +140,7 @@ switch ($Route->_action) {
|
||||
try {
|
||||
$db = Database::getInstance();
|
||||
$sql = 'SELECT c.* FROM clients c WHERE c.code = :code';
|
||||
$stmt = $db->prepare($sql);
|
||||
$stmt->bindParam(':code', $code, PDO::PARAM_STR);
|
||||
$stmt->execute();
|
||||
$record = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
$record = $db->fetchAll($sql, [':code' => $code]);
|
||||
} catch (Exception $e) {
|
||||
error_log("Erreur recherche client : " . $e->getMessage());
|
||||
$record = [];
|
||||
@@ -155,8 +152,7 @@ switch ($Route->_action) {
|
||||
$db = Database::getInstance();
|
||||
$sql = 'INSERT INTO clients SET code = :code, libelle = :libelle, siret = :siret, adresse1 = :adresse1, adresse2 = :adresse2, adresse3 = :adresse3, cp = :cp, ville = :ville, ';
|
||||
$sql .= 'type_client = :type_client, contact_nom = :contact_nom, contact_prenom = :contact_prenom, contact_fonction = :contact_fonction, telephone = :telephone, mobile = :mobile, email = :email, chk_import = 1';
|
||||
$stmt = $db->prepare($sql);
|
||||
$stmt->execute([
|
||||
$stmt = $db->query($sql, [
|
||||
':code' => $code,
|
||||
':libelle' => $libelle,
|
||||
':siret' => $siret,
|
||||
@@ -198,8 +194,7 @@ switch ($Route->_action) {
|
||||
$sql = 'UPDATE clients SET libelle = :libelle, siret = :siret, adresse1 = :adresse1, adresse2 = :adresse2, adresse3 = :adresse3, cp = :cp, ville = :ville, ';
|
||||
$sql .= 'type_client = :type_client, contact_nom = :contact_nom, contact_prenom = :contact_prenom, contact_fonction = :contact_fonction, telephone = :telephone, mobile = :mobile, email = :email, chk_import = 1 ';
|
||||
$sql .= 'WHERE code = :code';
|
||||
$stmt = $db->prepare($sql);
|
||||
$stmt->execute([
|
||||
$stmt = $db->query($sql, [
|
||||
':libelle' => $libelle,
|
||||
':siret' => $siret,
|
||||
':adresse1' => $adresse1,
|
||||
@@ -378,12 +373,18 @@ switch ($Route->_action) {
|
||||
$libelle = str_replace('"', '', trim($data[1])); // on remplace les doubles guillemets par rien
|
||||
// on réencode en ISO 8859-1 pour éviter les problèmes d'accent
|
||||
if ($codOrigin == "UTF-8") {
|
||||
$libelle = utf8_decode($libelle);
|
||||
}
|
||||
if ($codOrigin != "ISO-8859-1") {
|
||||
// Convertir en ISO 8859-1
|
||||
$libelle = iconv($codOrigin, "ISO-8859-15//IGNORE", $libelle);
|
||||
// Utiliser mb_convert_encoding au lieu de utf8_decode (déprécié en PHP 8.3)
|
||||
$libelle = mb_convert_encoding($libelle, "ISO-8859-1", "UTF-8");
|
||||
} elseif ($codOrigin == "Windows-1252" || $codOrigin == "CP1252") {
|
||||
// Windows-1252 est très proche de ISO-8859-1
|
||||
// On traite le texte tel quel car les caractères de base sont compatibles
|
||||
// Seulement quelques caractères spéciaux diffèrent (€, œ, etc.)
|
||||
$libelle = $libelle; // Pas de conversion, on garde tel quel
|
||||
} elseif ($codOrigin == "ISO-8859-15") {
|
||||
// ISO-8859-15 est compatible avec ISO-8859-1 sauf pour le symbole €
|
||||
$libelle = str_replace('€', 'EUR', $libelle);
|
||||
}
|
||||
// Pour ISO-8859-1, on ne fait rien, c'est déjà le bon format
|
||||
|
||||
$groupe = str_replace(" ", " ", trim($data[2])); // on remplace les doubles espaces par un simple espace
|
||||
$liste = trim($data[3]);
|
||||
@@ -532,7 +533,10 @@ switch ($Route->_action) {
|
||||
$ret = array('ret' => "ko", 'msg' => "Aucun fichier à importer");
|
||||
} else {
|
||||
if ($erreur == "") {
|
||||
$ret = array('ret' => "ok", 'msg' => "L'importation est terminée et s'est bien déroulée");
|
||||
$nbLignes = isset($row) ? $row - 1 : 0; // On enlève la ligne d'en-tête
|
||||
$nbMarches = isset($idMarches) ? count($idMarches) : 0;
|
||||
$msgMarches = $nbMarches > 1 ? " pour " . $nbMarches . " marchés" : ($nbMarches == 1 ? " pour 1 marché" : "");
|
||||
$ret = array('ret' => "ok", 'msg' => "Import terminé : " . $nbLignes . " produits traités" . $msgMarches);
|
||||
} else {
|
||||
$ret = array('ret' => "ko", 'msg' => $erreur);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user