Browse Source

refacto assign propal, order, invoice to commercial

Mathieu Moulin 6 months ago
parent
commit
75f67046c5
1 changed files with 222 additions and 134 deletions
  1. 222 134
      src/manual/customer.inc.php

+ 222 - 134
src/manual/customer.inc.php

@@ -49,6 +49,18 @@ while($row = $q->fetch_assoc()) {
         $contact[$row['element']] = $row['rowid'];
 }
 
+function element_contact($type, $rowid, $userid)
+{
+    global $contact;
+    $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
+        (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
+        VALUES
+        (NOW(), 4, '.$rowid.', '.$contact[$type].', '.$userid.')';
+    pre_sql($sql);
+    if (isset($_GET['go']))
+        DB::d_update($sql);
+}
+
 // Affectation commercial à Propale
 if (isset($_GET['propal_assoc'])) {
     $sql = 'SELECT p.rowid p_rowid, p.ref p_ref, p.fk_user_author p_fk_user_author, p.fk_user_modif p_fk_user_modif, p.fk_user_valid p_fk_user_valid,
@@ -109,13 +121,7 @@ if (isset($_GET['propal_assoc'])) {
         if (count($u2) == 1) {
             foreach($u2 as $userid) {
                 $ok++;
-                $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                VALUES
-                (NOW(), 4, '.$row['p_rowid'].', '.$contact['propal'].', '.$userid.')';
-                pre_sql($sql);
-                if (isset($_GET['go']))
-                    DB::d_update($sql);
+                element_contact('propal', $row['p_rowid'], $userid);
             }
         }
         // Sinon, on regarde les "vrais" commerciaux
@@ -127,26 +133,14 @@ if (isset($_GET['propal_assoc'])) {
             if (count($u2) == 1) {
                 foreach($u2 as $userid) {
                     $ok++;
-                    $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                    (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                    VALUES
-                    (NOW(), 4, '.$row['p_rowid'].', '.$contact['propal'].', '.$userid.')';
-                    pre_sql($sql);
-                    if (isset($_GET['go']))
-                        DB::d_update($sql);
+                    element_contact('propal', $row['p_rowid'], $userid);
                 }
             }
             // Pas de commercial spécifique => on prend le premier patron
             elseif (count($u2) == 0) {
                 if (isset($_GET['force_boss_assign'])) {
                     foreach($u2_save as $userid) {
-                        $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                        (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                        VALUES
-                        (NOW(), 4, '.$row['p_rowid'].', '.$contact['propal'].', '.$userid.')';
-                        pre_sql($sql);
-                        if (isset($_GET['go']))
-                            DB::d_update($sql);
+                        element_contact('propal', $row['p_rowid'], $userid);
                         // On prend le permier
                         break;
                     }
@@ -163,13 +157,7 @@ if (isset($_GET['propal_assoc'])) {
                 // Si on a un seul commercial associé au tiers et qu'il est dans la liste des potentiels, on l'assigne
                 if (count($fk_users)==1 && in_array($fk_users[0], $u2_save)) {
                     $userid = $fk_users[0];
-                    $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                    (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                    VALUES
-                    (NOW(), 4, '.$row['p_rowid'].', '.$contact['propal'].', '.$userid.')';
-                    pre_sql($sql);
-                    if (isset($_GET['go']))
-                        DB::d_update($sql);
+                    element_contact('propal', $row['p_rowid'], $userid);
                 }
                 // Afficher choix pour spécification à la main
                 else {
@@ -181,12 +169,8 @@ if (isset($_GET['propal_assoc'])) {
         }
         // Spécification à la main
         elseif(!empty($_GET['map'][$row['p_rowid']])) {
-            $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-            (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-            VALUES
-            (NOW(), 4, '.$row['p_rowid'].', '.$contact['propal'].', '.$_GET['map'][$row['p_rowid']].')';
-            pre_sql($sql);
-            DB::d_update($sql);
+            $userid = $_GET['map'][$row['p_rowid']];
+            element_contact('propal', $row['p_rowid'], $userid);
         }
     }
 
@@ -251,6 +235,7 @@ if (isset($_GET['order_assoc'])) {
         $list[$row['o_rowid']] = array_merge($list[$row['o_rowid']], $row);
     }
 
+    // Propal associée
     $sql = 'SELECT o.rowid o_rowid,
         p.rowid p_rowid, p.ref p_ref, p.fk_user_author p_fk_user_author, p.fk_user_modif p_fk_user_modif, p.fk_user_valid p_fk_user_valid,
         GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") p_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) p_actioncom_fk_user_nb,
@@ -286,6 +271,7 @@ if (isset($_GET['order_assoc'])) {
         $list[$row['o_rowid']] = array_merge($list[$row['o_rowid']], $row);
     }
 
+    // Propal associée 2
     $sql = 'SELECT o.rowid o_rowid,
         p.rowid p_rowid, p.ref p_ref, p.fk_user_author p_fk_user_author, p.fk_user_modif p_fk_user_modif, p.fk_user_valid p_fk_user_valid,
         GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") p_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) p_actioncom_fk_user_nb,
@@ -359,24 +345,12 @@ if (isset($_GET['order_assoc'])) {
         // Si un seul commercial affecté proprement sur le devis, on l'assigne
         if (!empty($row['ep_fk_user']) && count($ep_fk_users=explode(',', $row['ep_fk_user']))==1) {
             $userid = $row['ep_fk_user'];
-            $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-            (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-            VALUES
-            (NOW(), 4, '.$row['o_rowid'].', '.$contact['commande'].', '.$userid.')';
-            pre_sql($sql);
-            if (isset($_GET['go']))
-                DB::d_update($sql);
+            element_contact('commande', $row['o_rowid'], $userid);
         }
         // Si un seul commercial qui a travaillé sur le devis, on l'assigne
         elseif (count($u2) == 1) {
             foreach($u2 as $userid) {
-                $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                VALUES
-                (NOW(), 4, '.$row['o_rowid'].', '.$contact['commande'].', '.$userid.')';
-                pre_sql($sql);
-                if (isset($_GET['go']))
-                    DB::d_update($sql);
+                element_contact('commande', $row['o_rowid'], $userid);
             }
         }
         // Sinon, si un seul "vrai" commercial sur le devis, on l'assigne
@@ -387,26 +361,14 @@ if (isset($_GET['order_assoc'])) {
             // Un seul commercial spécifique
             if (count($u2) == 1) {
                 foreach($u2 as $userid) {
-                    $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                    (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                    VALUES
-                    (NOW(), 4, '.$row['o_rowid'].', '.$contact['commande'].', '.$userid.')';
-                    pre_sql($sql);
-                    if (isset($_GET['go']))
-                        DB::d_update($sql);
+                    element_contact('commande', $row['o_rowid'], $userid);
                 }
             }
             // Pas de commercial spécifique => on prend le premier patron
             elseif (count($u2) == 0) {
                 if (isset($_GET['force_boss_assign'])) {
                     foreach($u2_save as $userid) {
-                        $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                        (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                        VALUES
-                        (NOW(), 4, '.$row['o_rowid'].', '.$contact['commande'].', '.$userid.')';
-                        pre_sql($sql);
-                        if (isset($_GET['go']))
-                            DB::d_update($sql);
+                        element_contact('commande', $row['o_rowid'], $userid);
                         // On prend le permier
                         break;
                     }
@@ -423,30 +385,20 @@ if (isset($_GET['order_assoc'])) {
                 // Si on a un seul commercial associé au tiers et qu'il est dans la liste des potentiels, on l'assigne
                 if (count($fk_users)==1 && in_array($fk_users[0], $u2_save)) {
                     $userid = $fk_users[0];
-                    $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                    (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                    VALUES
-                    (NOW(), 4, '.$row['o_rowid'].', '.$contact['commande'].', '.$userid.')';
-                    pre_sql($sql);
-                    if (isset($_GET['go']))
-                        DB::d_update($sql);
+                    element_contact('commande', $row['o_rowid'], $userid);
                 }
                 // Afficher choix pour spécification à la main
                 else {
                     foreach($u2_save as $userid) {
-                        echo '<p>Associer =&gt; <a href="?t=customer&propal_assoc&map['.$row['p_rowid'].']='.$userid.'">#'.$userid.' - '.$users[$userid]['firstname'].'</a></p>';
+                        echo '<p>Associer =&gt; <a href="?t=customer&propal_assoc&map['.$row['o_rowid'].']='.$userid.'">#'.$userid.' - '.$users[$userid]['firstname'].'</a></p>';
                     }
                 }
             }
         }
         // Spécification à la main
         elseif(!empty($_GET['map'][$row['o_rowid']])) {
-            $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-            (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-            VALUES
-            (NOW(), 4, '.$row['o_rowid'].', '.$contact['commande'].', '.$_GET['map'][$row['o_rowid']].')';
-            pre_sql($sql);
-            DB::d_update($sql);
+            $iserid = $_GET['map'][$row['o_rowid']];
+            element_contact('commande', $row['o_rowid'], $userid);
         }
     }
 
@@ -456,40 +408,128 @@ if (isset($_GET['order_assoc'])) {
 
 // Affectation commercial à Facture
 if (isset($_GET['invoice_assoc'])) {
+    // Infos de base
     $sql = 'SELECT o.rowid o_rowid, o.ref o_ref, o.fk_user_author o_fk_user_author, o.fk_user_modif o_fk_user_modif, o.fk_user_valid o_fk_user_valid,
         s.rowid, s.nom, s.email, GROUP_CONCAT(DISTINCT su.fk_user SEPARATOR ",") fk_users, s.fk_user_creat, s.fk_user_modif,
-        p.rowid p_rowid, p.ref p_ref, p.fk_user_author p_fk_user_author, p.fk_user_modif p_fk_user_modif, p.fk_user_valid p_fk_user_valid,
-        GROUP_CONCAT(DISTINCT ao.fk_user_action SEPARATOR ",") o_actioncom_fk_user, COUNT(DISTINCT ao.fk_user_action) o_actioncom_fk_user_nb, GROUP_CONCAT(DISTINCT ps_oh.id_employee SEPARATOR ",") o_history_ids_employee,
-        GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") p_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) p_actioncom_fk_user_nb
+        GROUP_CONCAT(DISTINCT ao.fk_user_action SEPARATOR ",") o_actioncom_fk_user, COUNT(DISTINCT ao.fk_user_action) o_actioncom_fk_user_nb
 
     FROM `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'facture` o
-    INNER JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'societe` s
-        ON s.rowid=o.fk_soc
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` e
         ON e.element_id=o.rowid AND e.fk_c_type_contact IN ('.implode(',', array_keys($contacts['facture'])).')
 
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'societe` s
+        ON s.rowid=o.fk_soc
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'societe_commerciaux` su
         ON su.fk_soc=s.rowid
 
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'actioncomm` ao
         ON ao.fk_soc=s.rowid AND ao.elementtype="facture" AND ao.fk_element=o.rowid
+    
+    WHERE 1
+        AND e.fk_socpeople IS NULL
 
-    LEFT JOIN `'.DB_BASE.'`._objects_d o_d
-        ON o_d.oid=o.rowid AND o_d.tid=14
-    LEFT JOIN `'.DB_BASE.'`._objects_p o_p
-        ON o_p.id=o_d.id
-    LEFT JOIN `'.DB_P_BASE.'`.ps_order_history ps_oh
-        ON ps_oh.id_order=o_p.oid AND ps_oh.id_employee IN ('.$sql_p_fk_users.')
+    GROUP BY o.rowid
+    ORDER BY o.rowid DESC'
+    .($limit ?' LIMIT '.$limit :'');
+    pre_sql($sql);
+    $q = DB::o_select($sql);
+    var_dump($q);
+    while($row=$q->fetch_assoc()) { 
+        $list[$row['o_rowid']] = $row;
+    }
+
+    // Propale associée
+    $sql = 'SELECT o.rowid o_rowid,
+        p.rowid p_rowid, p.ref p_ref, p.fk_user_author p_fk_user_author, p.fk_user_modif p_fk_user_modif, p.fk_user_valid p_fk_user_valid,
+        GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") p_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) p_actioncom_fk_user_nb,
+        GROUP_CONCAT(DISTINCT ep.fk_socpeople) ep_fk_user
+
+    FROM `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'facture` o
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` e
+        ON e.element_id=o.rowid AND e.fk_c_type_contact IN ('.implode(',', array_keys($contacts['facture'])).')
+    
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_element` ee
+        ON (ee.sourcetype="propal" AND ee.fk_target=o.rowid AND ee.targettype="facture")
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'propal` p
+        ON p.rowid=ee.fk_source
+    
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` ep
+        ON ep.element_id=p.rowid AND ep.fk_c_type_contact IN ('.implode(',', array_keys($contacts['propal'])).')
+
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'actioncomm` ap
+        ON ap.fk_soc=o.fk_soc AND ap.elementtype="propal" AND ap.fk_element=p.rowid
+    
+    WHERE 1
+        AND e.fk_socpeople IS NULL
+
+    GROUP BY o.rowid
+    ORDER BY o.rowid DESC'
+    .($limit ?' LIMIT '.$limit :'');
+    pre_sql($sql);
+    $q = DB::o_select($sql);
+    var_dump($q);
+    while($row=$q->fetch_assoc()) {
+        if (empty($row['p_rowid']))
+            continue;
+        $list[$row['o_rowid']] = array_merge($list[$row['o_rowid']], $row);
+    }
+
+    // Propale associée 2
+    $sql = 'SELECT o.rowid o_rowid,
+        p.rowid p_rowid, p.ref p_ref, p.fk_user_author p_fk_user_author, p.fk_user_modif p_fk_user_modif, p.fk_user_valid p_fk_user_valid,
+        GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") p_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) p_actioncom_fk_user_nb,
+        GROUP_CONCAT(DISTINCT ep.fk_socpeople) ep_fk_user
+
+    FROM `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'facture` o
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` e
+        ON e.element_id=o.rowid AND e.fk_c_type_contact IN ('.implode(',', array_keys($contacts['facture'])).')
+    
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_element` ee
+        ON (ee.targettype="propal" AND ee.fk_source=o.rowid AND ee.sourcetype="facture")
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'propal` p
+        ON p.rowid=ee.fk_target
+    
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` ep
+        ON ep.element_id=p.rowid AND ep.fk_c_type_contact IN ('.implode(',', array_keys($contacts['propal'])).')
+
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'actioncomm` ap
+        ON ap.fk_soc=o.fk_soc AND ap.elementtype="propal" AND ap.fk_element=p.rowid
+    
+    WHERE 1
+        AND e.fk_socpeople IS NULL
+
+    GROUP BY o.rowid
+    ORDER BY o.rowid DESC'
+    .($limit ?' LIMIT '.$limit :'');
+    pre_sql($sql);
+    $q = DB::o_select($sql);
+    var_dump($q);
+    while($row=$q->fetch_assoc()) {
+        if (empty($row['p_rowid']))
+            continue;
+        $list[$row['o_rowid']] = array_merge($list[$row['o_rowid']], $row);
+    }
+
+    // Commande associée
+    $sql = 'SELECT o.rowid o_rowid,
+        p.rowid c_rowid, p.ref c_ref, p.fk_user_author c_fk_user_author, p.fk_user_modif c_fk_user_modif, p.fk_user_valid c_fk_user_valid,
+        GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") c_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) c_actioncom_fk_user_nb,
+        GROUP_CONCAT(DISTINCT ep.fk_socpeople) ec_fk_user
 
+    FROM `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'facture` o
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` e
+        ON e.element_id=o.rowid AND e.fk_c_type_contact IN ('.implode(',', array_keys($contacts['facture'])).')
+    
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_element` ee
-        ON (ee.sourcetype="facture" AND ee.fk_source=o.rowid)
-            OR (ee.targettype="facture" AND ee.fk_target=o.rowid)
+        ON (ee.sourcetype="commande" AND ee.fk_target=o.rowid AND ee.targettype="commande")
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'commande` p
-        ON (ee.targettype="commande" AND p.rowid=ee.fk_target)
-            OR (ee.sourcetype="commande" AND p.rowid=ee.fk_source)
+        ON p.rowid=ee.fk_source
+    
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` ep
+        ON ep.element_id=p.rowid AND ep.fk_c_type_contact IN ('.implode(',', array_keys($contacts['commande'])).')
 
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'actioncomm` ap
-        ON ap.fk_soc=s.rowid AND ap.elementtype="commande" AND ap.fk_element=p.rowid
+        ON ap.fk_soc=o.fk_soc AND ap.elementtype="commande" AND ap.fk_element=p.rowid
     
     WHERE 1
         AND e.fk_socpeople IS NULL
@@ -497,23 +537,61 @@ if (isset($_GET['invoice_assoc'])) {
     GROUP BY o.rowid
     ORDER BY o.rowid DESC'
     .($limit ?' LIMIT '.$limit :'');
+    pre_sql($sql);
     $q = DB::o_select($sql);
+    var_dump($q);
+    while($row=$q->fetch_assoc()) {
+        if (empty($row['c_rowid']))
+            continue;
+        $list[$row['o_rowid']] = array_merge($list[$row['o_rowid']], $row);
+    }
+
+    // Commande associée 2
+    $sql = 'SELECT o.rowid o_rowid,
+        p.rowid c_rowid, p.ref c_ref, p.fk_user_author c_fk_user_author, p.fk_user_modif c_fk_user_modif, p.fk_user_valid c_fk_user_valid,
+        GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") c_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) c_actioncom_fk_user_nb,
+        GROUP_CONCAT(DISTINCT ep.fk_socpeople) ec_fk_user
 
+    FROM `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'facture` o
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` e
+        ON e.element_id=o.rowid AND e.fk_c_type_contact IN ('.implode(',', array_keys($contacts['facture'])).')
+    
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_element` ee
+        ON (ee.targettype="commande" AND ee.fk_source=o.rowid AND ee.sourcetype="commande")
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'commande` p
+        ON p.rowid=ee.fk_target
+    
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` ep
+        ON ep.element_id=p.rowid AND ep.fk_c_type_contact IN ('.implode(',', array_keys($contacts['commande'])).')
+
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'actioncomm` ap
+        ON ap.fk_soc=o.fk_soc AND ap.elementtype="commande" AND ap.fk_element=p.rowid
+    
+    WHERE 1
+        AND e.fk_socpeople IS NULL
+
+    GROUP BY o.rowid
+    ORDER BY o.rowid DESC'
+    .($limit ?' LIMIT '.$limit :'');
     pre_sql($sql);
+    $q = DB::o_select($sql);
     var_dump($q);
+    while($row=$q->fetch_assoc()) {
+        if (empty($row['c_rowid']))
+            continue;
+        $list[$row['o_rowid']] = array_merge($list[$row['o_rowid']], $row);
+    }
 
-    echo '<p>TOTAL : '.mysqli_num_rows($q).'</p>';
-    $nbmax = 5000;
+    // 
+
+    echo '<p>TOTAL : '.count($list).'</p>';
 
     $ok = 0;
     $nb = 0;
-    while($row=$q->fetch_assoc()) {
-        $nb++;
-        if ($nb>$nbmax)
-            break;
+    foreach($list as $row) {
         pre_dump($row);
         $u = [];
-        foreach(['p_fk_user_author', 'p_fk_user_modif', 'p_fk_user_valid', 'o_fk_user_author', 'o_fk_user_modif', 'o_fk_user_valid'] as $k) if ($row[$k]>0)
+        foreach(['p_fk_user_author', 'p_fk_user_modif', 'p_fk_user_valid', 'o_fk_user_author', 'o_fk_user_modif', 'o_fk_user_valid'] as $k) if (isset($row[$k]) && $row[$k]>0)
             $u[] = $row[$k];
         foreach(['p_actioncom_fk_user', 'o_actioncom_fk_user'] as $k) {
             if (!empty($row[$k])) {
@@ -537,16 +615,26 @@ if (isset($_GET['invoice_assoc'])) {
         }
         $u2_save = $u2;
         pre_dump($u2);
-        // Si un seul commercial sur le devis, on l'assigne
-        if (count($u2) == 1) {
+        // Si un seul commercial affecté proprement sur le devis, on l'assigne
+        if (!empty($row['ep_fk_user']) && count($ep_fk_users=explode(',', $row['ep_fk_user']))==1) {
+            $userid = $row['ep_fk_user'];
+            element_contact('facture', $row['o_rowid'], $userid);
+        }
+        // Si un seul commercial affecté proprement sur la commande, on l'assigne
+        elseif (!empty($row['ec_fk_user']) && count($ec_fk_users=explode(',', $row['ec_fk_user']))==1) {
+            $userid = $row['ec_fk_user'];
+            element_contact('facture', $row['o_rowid'], $userid);
+        }
+        // Si un seul commercial qui a travaillé sur le devis, on l'assigne
+        elseif (count($u2) == 1) {
+            foreach($u2 as $userid) {
+                element_contact('facture', $row['o_rowid'], $userid);
+            }
+        }
+        // Si un seul commercial qui a travaillé sur la commane, on l'assigne
+        elseif (count($u2) == 1) {
             foreach($u2 as $userid) {
-                $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                VALUES
-                (NOW(), 4, '.$row['o_rowid'].', '.$contact['facture'].', '.$userid.')';
-                pre_sql($sql);
-                if (isset($_GET['go']))
-                    DB::d_update($sql);
+                element_contact('facture', $row['o_rowid'], $userid);
             }
         }
         // Sinon, si un seul "vrai" commercial sur le devis, on l'assigne
@@ -557,44 +645,44 @@ if (isset($_GET['invoice_assoc'])) {
             // Un seul commercial spécifique
             if (count($u2) == 1) {
                 foreach($u2 as $userid) {
-                    $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                    (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                    VALUES
-                    (NOW(), 4, '.$row['o_rowid'].', '.$contact['facture'].', '.$userid.')';
-                    pre_sql($sql);
-                    if (isset($_GET['go']))
-                        DB::d_update($sql);
+                    element_contact('facture', $row['o_rowid'], $userid);
                 }
             }
             // Pas de commercial spécifique => on prend le premier patron
             elseif (count($u2) == 0) {
-                foreach($u2_save as $userid) {
-                    $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-                    (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-                    VALUES
-                    (NOW(), 4, '.$row['o_rowid'].', '.$contact['facture'].', '.$userid.')';
-                    pre_sql($sql);
-                    if (isset($_GET['go']))
-                        DB::d_update($sql);
-                    // On prend le permier
-                    break;
+                if (isset($_GET['force_boss_assign'])) {
+                    foreach($u2_save as $userid) {
+                        element_contact('facture', $row['o_rowid'], $userid);
+                        // On prend le permier
+                        break;
+                    }
                 }
             }
-            // Afficher choix pour spécification à la main
             else {
-                foreach($u2_save as $userid) {
-                    echo '<p>Associer =&gt; <a href="?t=customer&invoice_assoc&map['.$row['o_rowid'].']='.$userid.'">#'.$userid.' - '.$users[$userid]['firstname'].'</a></p>';
+                // On regarde les commerciaux associés au client
+                if (!empty($row['fk_users'])) {
+                    $fk_users = explode(',', $row['fk_users']);
+                }
+                else {
+                    $fk_users = [];
+                }
+                // Si on a un seul commercial associé au tiers et qu'il est dans la liste des potentiels, on l'assigne
+                if (count($fk_users)==1 && in_array($fk_users[0], $u2_save)) {
+                    $userid = $fk_users[0];
+                    element_contact('facture', $row['o_rowid'], $userid);
+                }
+                // Afficher choix pour spécification à la main
+                else {
+                    foreach($u2_save as $userid) {
+                        echo '<p>Associer =&gt; <a href="?t=customer&invoice_assoc&map['.$row['o_rowid'].']='.$userid.'">#'.$userid.' - '.$users[$userid]['firstname'].'</a></p>';
+                    }
                 }
             }
         }
         // Spécification à la main
         elseif(!empty($_GET['map'][$row['o_rowid']])) {
-            $sql = 'INSERT INTO `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact`
-            (datecreate, statut, element_id, fk_c_type_contact, fk_socpeople)
-            VALUES
-            (NOW(), 4, '.$row['o_rowid'].', '.$contact['commande'].', '.$_GET['map'][$row['o_rowid']].')';
-            pre_sql($sql);
-            DB::d_update($sql);
+            $userid = $_GET['map'][$row['o_rowid']];
+            element_contact('facture', $row['o_rowid'], $userid);
         }
     }