Discussion:Générateur de facture Sellsy
Amélioration de la présentation des conso sur les factures clients
- regroupement des consommations des différentes offres sur une seule ligne
- Ajout de la fonction fusionnerLignesMobileData dans functions.php
- Appel de la fonction dans generate-document.php ligne 244
function fusionnerLignesMobileData($tableau) { $nouvellesLignes = []; // Initialiser un tableau pour stocker les nouvelles lignes $qteForfaitDATA = 0; $qteDATA = 0; $qteForfaitSMS = 0; $qteSMS = 0; $qteForfaitMMS = 0; $qteMMS = 0; $qteForfaitAppelNat = 0; $qteAppelNat = 0; $DureeAppelNat=0; $qteForfaitAppelInter = 0; $qteAppelInter = 0; $DureeAppelInter=0; $CoutAppelInter=0; // Pattern de détection $patternDATA = '/Volume \(en Ko\) : (\d+) Ko/'; $patternSMS = '/Nbr\. de messages : (\d+)/'; $patternMMS = '/Nbr\. de messages : (\d+)/'; $patternNbAppelNat = '/Nbr\. d\'appel([^0-9]+)(\d+)/'; // Parcourir chaque ligne du tableau d'origine foreach ($tableau as $ligne) { $shouldAdd = false; // Variable de drapeau if (isset($ligne['Category']) && $ligne['Category'] == 'MOBILE' && isset($ligne['row_type1'])) { if ($ligne['row_type1'] == 'Mobile data') { $qteForfaitDATA += $ligne['row_qt']; if (preg_match($patternDATA, $ligne['row_notes'], $matches)) { $qteDATA += $matches[1]; } } elseif ($ligne['row_type1'] == 'Mobile SMS') { $qteForfaitSMS += $ligne['row_qt']; if (preg_match($patternSMS, $ligne['row_notes'], $matches)) { $qteSMS += $matches[1]; } } elseif ($ligne['row_type1'] == 'Mobile national') { $qteForfaitAppelNat += $ligne['row_qt']; if (preg_match($patternNbAppelNat, $ligne['row_notes'], $matches)) { $qteAppelNat += $matches[2]; } $DureeAppelNat += dureeEnSecondes($ligne['row_notes']); } elseif ($ligne['row_type1'] == 'Mobile international') { $qteForfaitAppelInter += $ligne['row_qt']; if (preg_match($patternNbAppelNat, $ligne['row_notes'], $matches)) { $qteAppelInter += $matches[2]; } $DureeAppelInter += dureeEnSecondes($ligne['row_notes']); $CoutAppelInter+=$ligne['row_unitAmount']; } elseif ($ligne['row_type1'] == 'Mobile MMS') { $qteForfaitMMS += $ligne['row_qt']; if (preg_match($patternMMS, $ligne['row_notes'], $matches)) { $qteMMS += $matches[1]; } } else { // La première condition est remplie, mais pas les conditions internes $shouldAdd = true; } } else { $shouldAdd = true; } if ($shouldAdd) { $nouvellesLignes[] = $ligne; } } // Ajouter la nouvelle ligne fusionnée si on a de la conso 4G if ($qteDATA > 0) { $nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile Data', 'row_type' => 'item', 'row_linkedid' => '15120385', 'row_name' => 'OP_data_M1G_TOR', 'row_notes' => '<strong>DATA</strong><br>'. '<ul>'. '<li>Consommations dues à '.$qteForfaitDATA.' forfaits : '.koToGo($qteDATA).' Go</li>'. '</ul>', 'row_unit' => 'unité', 'row_unitAmount' => '0.00', 'row_qt' => '0', 'row_taxid' => 4047830 ]; $nouvellesLignes[] = $nouvelleLigne; } // Ajouter la nouvelle ligne fusionnée si on a de la conso SMS if ($qteSMS > 0) { $nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile SMS', 'row_type' => 'item', 'row_linkedid' => '15120385', 'row_name' => 'OP_data_M1G_TOR', 'row_notes' => '<strong>SMS</strong><br>'. '<ul>'. '<li>Consommations dues à '.$qteForfaitSMS.' forfaits : '.$qteSMS.' SMS</li>'. '</ul>', 'row_unit' => 'unité', 'row_unitAmount' => '0.00', 'row_qt' => '0', 'row_taxid' => 4047830 ]; $nouvellesLignes[] = $nouvelleLigne; } // Ajouter la nouvelle ligne fusionnée si on a de la conso SMS if ($qteMMS > 0) { $nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile MMS', 'row_type' => 'item', 'row_linkedid' => '15120385', 'row_name' => 'OP_data_M1G_TOR', 'row_notes' => '<strong>MMS</strong><br>'. '<ul>'. '<li>Consommations dues à '.$qteForfaitMMS.' forfaits : '.$qteMMS.' MMS</li>'. '</ul>', 'row_unit' => 'unité', 'row_unitAmount' => '0.00', 'row_qt' => '0', 'row_taxid' => 4047830 ]; $nouvellesLignes[] = $nouvelleLigne; } // Ajouter la nouvelle ligne fusionnée si on a de la conso Appels nationaux if ($qteAppelNat > 0) { $nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile national', 'row_type' => 'item', 'row_linkedid' => '15120385', 'row_name' => 'OP_data_M1G_TOR', 'row_notes' => '<strong>Appels nationaux</strong><br>'. '<ul>'. '<li>Consommations dues à '.$qteForfaitAppelNat.' forfaits : '.$qteAppelNat.' appels</li>'. '<li>Durée cumulée des appels : '.secondsToHour($DureeAppelNat).'</li>'. '</ul>', 'row_unit' => 'unité', 'row_unitAmount' => '0.00', 'row_qt' => '0', 'row_taxid' => 4047830 ]; $nouvellesLignes[] = $nouvelleLigne; } // Ajouter la nouvelle ligne fusionnée si on a de la conso Appels nationaux if ($qteAppelInter > 0) { $nouvelleLigne = [ 'Category' => 'MOBILE', 'row_type1' => 'Mobile international', 'row_type' => 'item', 'row_linkedid' => '15120385', 'row_name' => 'OP_data_M1G_TOR', 'row_notes' => '<strong>Appels internationaux</strong><br>'. '<ul>'. '<li>Consommations dues à '.$qteForfaitAppelInter.' forfaits : '.$qteAppelInter.' appels</li>'. '<li>Durée cumulée des appels : '.secondsToHour($DureeAppelInter).'</li>'. '</ul>', 'row_unit' => 'unité', 'row_unitAmount' => $CoutAppelInter, 'row_qt' => 1, 'row_taxid' => 4047830 ]; $nouvellesLignes[] = $nouvelleLigne; } return $nouvellesLignes; // Retourne le tableau mis à jour }