diff --git a/models/tirage_multimachines.php b/models/tirage_multimachines.php index 50efc50..e5f5465 100755 --- a/models/tirage_multimachines.php +++ b/models/tirage_multimachines.php @@ -145,16 +145,19 @@ function getMachinePrices($db, $machine_name) { function calculateBrochurePriceOptimized($brochure, $prix_papier_a3, $prix_papier_a4, $machine_prices, $machine_type_detected, $machine_name, $fill_rate = 0.5) { $nb_exemplaires = intval($brochure['nb_exemplaires']); $nb_feuilles = intval($brochure['nb_feuilles']); - $nb_f_total = $nb_exemplaires * $nb_feuilles; + $nb_unites = $nb_exemplaires * $nb_feuilles; $taille = $brochure['taille']; $rv = isset($brochure['rv']) && $brochure['rv'] == 'oui'; $couleur = isset($brochure['couleur']) && $brochure['couleur'] == 'oui'; $feuilles_payees = isset($brochure['feuilles_payees']) && $brochure['feuilles_payees'] == 'oui'; + // Calcul du nombre réel de feuilles consommées + $nb_feuilles_physiques = $rv ? (int)ceil($nb_unites / 2) : $nb_unites; + // Calcul rapide - $nb_p = $rv ? $nb_f_total * 2 : $nb_f_total; + $nb_p = $rv ? $nb_unites * 2 : $nb_unites; $prix_papier = ($taille == 'A4') ? $prix_papier_a4 : $prix_papier_a3; - $prix_papier_total = $feuilles_payees ? 0 : ($nb_f_total * $prix_papier); + $prix_papier_total = $feuilles_payees ? 0 : ($nb_feuilles_physiques * $prix_papier); // Calcul coût par page optimisé avec taux de remplissage try { @@ -583,8 +586,9 @@ function Action($conf = null) { // Calculer le prix comme le JavaScript $nbPages = $nb_exemplaires * $nb_feuilles; + $nbFeuillesPhysiques = $rv ? (int)ceil($nbPages / 2) : $nbPages; $prixPapier = $array['prix_data']['papier'][$taille] ?? 0; - $coutPapier = $feuilles_payees ? 0 : ($nbPages * $prixPapier); + $coutPapier = $feuilles_payees ? 0 : ($nbFeuillesPhysiques * $prixPapier); // Calculer le coût par page selon le type de machine et les couleurs (avec taux de remplissage) $cost_per_page = calculatePageCost($machine['machine'], $machine_type_detected, $machine_prices, $couleur, $rv, $fill_rate); @@ -593,15 +597,14 @@ function Action($conf = null) { if ($taille === 'A4') $cost_per_page = $cost_per_page / 2; // Calculer le coût d'encre - $nbPagesEncre = $nbPages; // Pages pour l'encre - if ($rv) $nbPagesEncre = $nbPages * 2; // Recto-verso = 2 fois plus de pages pour l'encre + $nbPagesEncre = $rv ? $nbPages * 2 : $nbPages; // Recto-verso = 2 faces imprimées par feuille $prixEncre = $nbPagesEncre * $cost_per_page; $prixBrochure = $coutPapier + $prixEncre; $prix_total += $prixBrochure; if (isset($_GET['debug'])) { - $array['debug']['photocopieur_' . $index] .= " - Calcul détaillé: " . $nbPages . " pages, papier=" . $prixPapier . "€, encre=" . $prixEncre . "€, coutPapier=" . $coutPapier . "€, total=" . $prixBrochure . "€"; + $array['debug']['photocopieur_' . $index] .= " - Calcul détaillé: " . $nbPages . " pages, feuilles physiques=" . $nbFeuillesPhysiques . ", papier=" . $prixPapier . "€, encre=" . $prixEncre . "€, coutPapier=" . $coutPapier . "€, total=" . $prixBrochure . "€"; } } else { if (isset($_GET['debug'])) { diff --git a/view/tirage_multimachines.html.php b/view/tirage_multimachines.html.php index 0809ff7..6ecacc5 100755 --- a/view/tirage_multimachines.html.php +++ b/view/tirage_multimachines.html.php @@ -503,6 +503,7 @@ $total_encre = 0; $total_pages = 0; $total_pages_encre = 0; + $total_feuilles_physiques = 0; $prix_papier = 0; $prix_encre = 0; @@ -517,10 +518,12 @@ $couleur = isset($brochure['couleur']) && $brochure['couleur'] == 'oui'; $feuilles_payees = isset($brochure['feuilles_payees']) && $brochure['feuilles_payees'] == 'oui'; - // Prix du papier - $prix_papier = $prix_data['papier'][$taille] ?? 0; - $cout_papier = $feuilles_payees ? 0 : ($nb_pages * $prix_papier); - $total_papier += $cout_papier; + // Prix du papier + $prix_papier = $prix_data['papier'][$taille] ?? 0; + $nb_feuilles_physiques = $rv ? (int)ceil($nb_pages / 2) : $nb_pages; + $cout_papier = $feuilles_payees ? 0 : ($nb_feuilles_physiques * $prix_papier); + $total_papier += $cout_papier; + $total_feuilles_physiques += $nb_feuilles_physiques; // Prix d'encre selon le type de machine $prix_encre_brochure = 0; @@ -600,10 +603,7 @@ } // Calculer le coût d'encre - $nb_pages_encre = $nb_pages; - if ($rv) { - $nb_pages_encre = $nb_pages * 2; - } + $nb_pages_encre = $rv ? $nb_pages * 2 : $nb_pages; $cout_encre = $nb_pages_encre * $prix_encre_brochure; $total_encre += $cout_encre; $total_pages += $nb_pages; @@ -616,7 +616,7 @@ } } ?> -
  • : × =
  • +
  • : × =
  • : × =
  • :
  • @@ -1524,9 +1524,12 @@ function updateTotalFeuillesForMachine(machineIndex) { var exemplaires = parseInt(exemplairesInput.value) || 0; var feuilles = parseInt(feuillesInput.value) || 0; var total = exemplaires * feuilles; + var rvCheckbox = brochure.querySelector('input[name*="[rv]"]'); + var isRv = rvCheckbox && rvCheckbox.checked; + var feuillesPhysiques = isRv ? Math.ceil(total / 2) : total; - if (total > 0) { - totalSpan.textContent = total + (total > 1 ? ' feuilles' : ' feuille'); + if (feuillesPhysiques > 0) { + totalSpan.textContent = feuillesPhysiques + (feuillesPhysiques > 1 ? ' feuilles' : ' feuille'); totalSpan.style.color = '#007bff'; } else { totalSpan.textContent = '0 feuille'; @@ -1702,7 +1705,7 @@ function calculateMachinePrice(machineIndex) { // Calcul pour photocopieur var brochures = machineElement.querySelectorAll('.brochure-item'); var totalExemplaires = 0; - var totalFeuilles = 0; + var totalFeuillesPhysiques = 0; brochures.forEach(function(brochure) { var nbExemplaires = parseFloat(brochure.querySelector('input[name*="[nb_exemplaires]"]').value) || 0; @@ -1768,17 +1771,18 @@ function calculateMachinePrice(machineIndex) { // Calculer le coût var nbPages = nbExemplaires * nbFeuilles; - var coutPapier = feuilles_payees ? 0 : (nbPages * prixPapier); // Papier = nombre de feuilles (0 si déjà payées) - var coutEncre = nbPages * prixEncre; // Encre de base - if (rv) coutEncre = coutEncre * 2; // Recto-verso = 2 fois plus d'encre + var nbFeuillesReelles = rv ? Math.ceil(nbPages / 2) : nbPages; + var nbFaces = rv ? nbPages * 2 : nbPages; + var coutPapier = feuilles_payees ? 0 : (nbFeuillesReelles * prixPapier); // Papier = feuilles physiques (0 si déjà payées) + var coutEncre = nbFaces * prixEncre; // Encre calculée sur le nombre de faces var coutBrochure = coutPapier + coutEncre; - console.log(`Brochure ${taille}: exemplaires=${nbExemplaires}, feuilles=${nbFeuilles}, rv=${rv}, nbPages=${nbPages}, prixPapier=${prixPapier}, prixEncre=${prixEncre}, coutBrochure=${coutBrochure}`); + console.log(`Brochure ${taille}: exemplaires=${nbExemplaires}, feuilles=${nbFeuilles}, rv=${rv}, nbPages=${nbPages}, feuillesPhysiques=${nbFeuillesReelles}, faces=${nbFaces}, prixPapier=${prixPapier}, prixEncre=${prixEncre}, coutBrochure=${coutBrochure}`); price += coutBrochure; totalExemplaires += nbExemplaires; - totalFeuilles += nbExemplaires * nbFeuilles; + totalFeuillesPhysiques += nbFeuillesReelles; }); // Détail du calcul pour photocopieur @@ -1860,8 +1864,8 @@ function calculateMachinePrice(machineIndex) { if (taille === 'A4') prixEncre = prixEncre / 2; var nbPages = nbExemplaires * nbFeuilles; - var nbPagesEncre = nbPages; // Pages pour l'encre - if (rv) nbPagesEncre = nbPages * 2; // Recto-verso = 2 fois plus de pages pour l'encre + var nbFeuillesReelles = rv ? Math.ceil(nbPages / 2) : nbPages; + var nbPagesEncre = rv ? nbPages * 2 : nbPages; // Faces imprimées var coutEncreBrochure = nbPagesEncre * prixEncre; @@ -1872,7 +1876,7 @@ function calculateMachinePrice(machineIndex) { coutEncreTotal += coutEncreBrochure; // Calculer le coût papier pour cette brochure - var coutPapierBrochure = feuilles_payees ? 0 : (nbPages * prixPapier); + var coutPapierBrochure = feuilles_payees ? 0 : (nbFeuillesReelles * prixPapier); coutPapierTotal += coutPapierBrochure; if (detailEncreBrochure) { @@ -1888,9 +1892,9 @@ function calculateMachinePrice(machineIndex) { detailCalcul = `
    Détail du calcul :
    - • ${totalExemplaires} exemplaires × ${totalFeuilles} feuilles = ${totalPages} pages
    - • Papier : ${totalPages} feuilles × ${prixPapierMoyen.toFixed(3)}€ = ${coutPapierTotal.toFixed(2)}€
    - • Encre : ${totalPagesEncre} pages × ${prixEncreMoyen.toFixed(4)}€ = ${coutEncreTotal.toFixed(2)}€${detailEncre}
    + • ${totalExemplaires} exemplaires ⇒ ${totalFeuillesPhysiques} feuilles physiques (${totalPages} feuilles théoriques)
    + • Papier : ${totalFeuillesPhysiques} feuilles × ${prixPapierMoyen.toFixed(3)}€ = ${coutPapierTotal.toFixed(2)}€
    + • Encre : ${totalPagesEncre} faces × ${prixEncreMoyen.toFixed(4)}€ = ${coutEncreTotal.toFixed(2)}€${detailEncre}
    Total : ${price.toFixed(2)}€
    `;