Discussion:Générateur de facture Sellsy

De INDYWiki
Révision datée du 28 décembre 2023 à 18:45 par Anthony (discussion | contributions) (→‎Amélioration de la présentation des conso sur les factures clients : nouvelle section)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

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' => 	'DATA
'.

'

    '. '
  • Consommations dues à '.$qteForfaitDATA.' forfaits : '.koToGo($qteDATA).' Go
  • '. '

',

           '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' => 	'SMS
'.

'

    '. '
  • Consommations dues à '.$qteForfaitSMS.' forfaits : '.$qteSMS.' SMS
  • '. '

',

           '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' => 	'MMS
'.

'

    '. '
  • Consommations dues à '.$qteForfaitMMS.' forfaits : '.$qteMMS.' MMS
  • '. '

',

           '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' => 	'Appels nationaux
'.

'

    '. '
  • Consommations dues à '.$qteForfaitAppelNat.' forfaits : '.$qteAppelNat.' appels
  • '. '
  • Durée cumulée des appels : '.secondsToHour($DureeAppelNat).'
  • '. '

',

           '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' => 	'Appels internationaux
'.

'

    '. '
  • Consommations dues à '.$qteForfaitAppelInter.' forfaits : '.$qteAppelInter.' appels
  • '. '
  • Durée cumulée des appels : '.secondsToHour($DureeAppelInter).'
  • '. '

',

           'row_unit' => 'unité',
           'row_unitAmount' => $CoutAppelInter,
           'row_qt' => 1, 
           'row_taxid' => 4047830
       ];
       $nouvellesLignes[] = $nouvelleLigne;

}

   return $nouvellesLignes; // Retourne le tableau mis à jour

}