/** * Edition du haut de la facture * * @param int $cle_facture clé de la facture * @param int $montant_facture montant de la facture * @param bool $relance si c'est une relance * * @return void */ function editHautFacture($cle_facture, $montant_facture, $relance = false) { $this->loadAllElements(); //Création de la page de la facture $this->pdf->AddPage(); $colonne1 = 10; $colonne2 = 120; $this->pdf->setFont($this->fontb, '', 12); $this->pdf->WriteHTML("<h4>Facture du patient</h4>"); $this->pdf->setFont($this->font, '', 6); $this->pdf->Text($colonne1, 17, "Cette page est pour vos archives"); $this->pdf->Text($colonne1, 21, "Veuillez envoyer le justificatif de remboursement"); $this->pdf->Text($colonne1, 24, "annexé à votre caisse maladie ou à l'assurance"); $this->pdf->setFont($this->font, '', 8); $auteur = array("50" => "Auteur facture", $this->auteur["nom"], $this->auteur["adresse1"], $this->auteur["adresse2"], $this->auteur["cp"] . " " . $this->auteur["ville"], "80" => "Four. de prestations", $this->fourn_presta["nom_dr"], $this->fourn_presta["fct"], $this->fourn_presta["adresse1"], $this->fourn_presta["adresse2"], $this->fourn_presta["0"]->cp . " " . $this->fourn_presta["0"]->ville); $tab[$colonne1] = $auteur; $patient_adrr = $this->traitements($this->patient->adresse); //Destinataire de la facture $patient = array("50" => "Destinataire", $this->destinataire["nom"], $this->destinataire["adresse1"], $this->destinataire["adresse2"], $this->destinataire["cp"], "80" => "Patient", "n° AVS: " . $this->patient->avs, $this->patient->_view, $patient_adrr["group1"], $patient_adrr["group2"], $this->patient->cp . " " . $this->patient->ville); $tab[$colonne2] = $patient; $this->pdf->SetTextColor(80, 80, 80); if ($relance) { $this->pdf->setFont($this->font, '', 25); $this->pdf->Text(100, 20, "RELANCE"); } /* elseif ($this->facture->_reglements_total_patient) { $this->pdf->setFont($this->font, '', 25); $this->pdf->Text(100,20, "DUPLICATA"); } if ($this->facture->type_facture == "accident") { $this->pdf->setFont($this->font, '', 15); $this->pdf->Text(80,40, "Accident"); } if ($this->facture->cession_creance) { $this->pdf->setFont($this->font, '', 15); $this->pdf->Text(80,30, "Cession de créance"); } */ $this->pdf->SetTextColor(0, 0, 0); $this->pdf->setFont($this->font, '', 8); // Ecriture de C, D, E, F $x = $y = 0; foreach ($tab as $k => $v) { foreach ($v as $key => $value) { if ($value) { if ($key == "50" || $key == "80") { $y = $key; $x = 0; } $this->editCell($k, $y + $x, 30, $value); $x = $key == "50" || $key == "80" ? $x + 5 : $x + 3; } } } // G : Données de la facture $this->pdf->SetDrawColor(0); $this->pdf->Line($colonne1, 122, $colonne1 + 40, 122); $this->editCell($colonne1, 120, 25, "Données de la facture", "L"); $this->editCell($colonne1, $this->pdf->GetY() + 5, 22, "Date facture:", "R"); $this->pdf->Cell(25, "", CMbDT::format($this->facture->cloture, "%d %B %Y"), null, null, "L"); if ($relance) { $this->editCell($colonne1, $this->pdf->GetY() + 3, 22, "Date relance:", "R"); $this->pdf->Cell(25, "", CMbDT::format($this->relance->date, "%d %B %Y"), null, null, "L"); } $this->editCell($colonne1, $this->pdf->GetY() + 3, 22, "N° facture:", "R"); $num_fact = $this->facture->_id; if (CAppUI::conf("dPfacturation Other use_field_definitive") && !$this->facture->definitive) { $num_fact = "PROVISOIRE"; } $this->pdf->Cell(25, "", $num_fact, null, null, "L"); $use_date_consult = CAppUI::conf("dPfacturation CEditPdf use_date_consult_traitement", CGroups::loadCurrent()); if ($this->facture->_class == "CFactureCabinet" && count($this->facture->_ref_consults) == 1 && $use_date_consult) { $this->editCell($colonne1, $this->pdf->GetY() + 3, 22, "Consultation du:", "R"); $this->pdf->Cell(25, "", CMbDT::format($this->facture->_ref_first_consult->_date, "%d %B %Y"), null, null, "L"); } else { $this->editCell($colonne1, $this->pdf->GetY() + 3, 22, "Traitement du:", "R"); $this->pdf->Cell(25, "", CMbDT::format($this->facture->_ref_first_consult->_date, "%d %B %Y"), null, null, "L"); $this->editCell($colonne1, $this->pdf->GetY() + 3, 22, "au:", "R"); $this->pdf->Cell(25, "", CMbDT::format($this->facture->cloture, "%d %B %Y"), null, null, "L"); } $montant_facture = sprintf('%0.2f', $montant_facture); if ($montant_facture < 0) { $montant_facture = sprintf('%0.2f', 0); } // H : Tarif $title_montant = ""; if ($this->nb_factures > 1) { $this->num_fact++; $title_montant = "n° " . $this->num_fact; } $montant_total = 0; $tarif = array("Tarif" => "CHF"); $acompte = $this->type_pdf == "BVR_TS" ? $this->facture->_montant_avec_remise - $montant_facture : "0.00"; foreach ($this->pre_tab as $cles => $valeur) { $tarif[$cles] = $valeur; $montant_total += $valeur; } if ($relance) { $tarif["Relance:"] = sprintf('%0.2f', $this->relance->_montant); } $tarif["Remise:"] = sprintf('%0.2f', -$this->facture->remise); $tarif["Montant total:"] = sprintf('%0.2f', $montant_total); $tarif["Acompte:"] = sprintf('%0.2f', $acompte); $tarif["Montant dû {$title_montant}:"] = $montant_facture; $this->acompte += $montant_facture; $this->pdf->Line($colonne2, 122, $colonne2 + 50, 122); $x = 0; foreach ($tarif as $key => $value) { $this->editCell($colonne2, 120 + $x, 25, $key, "R"); $this->pdf->Cell(22, "", $value, null, null, "R"); if ($key == "Tarif" || $key == "Remise:") { $x += 5; if ($key == "Remise:") { $this->pdf->Line($colonne2, 117 + $x, $colonne2 + 50, 117 + $x); $this->pdf->setFont($this->fontb, '', 8); } } else { $x += 3; } } }
function printEtiquettes($printer_id = null, $stream = 1) { // Affectation de la police par défault si aucune n'est choisie if ($this->font == "") { $this->font = "dejavusansmono"; } // Calcul des dimensions de l'étiquette $largeur_etiq = ($this->largeur_page - 2 * $this->marge_horiz) / $this->nb_colonnes; $hauteur_etiq = ($this->hauteur_page - 2 * $this->marge_vert) / $this->nb_lignes; // Création du PDF $pdf = new CMbPdf('P', 'cm', array($this->largeur_page, $this->hauteur_page)); $pdf->setFont($this->font, '', $this->hauteur_ligne); $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); $pdf->SetMargins($this->marge_horiz, $this->marge_vert, $this->marge_horiz); $pdf->SetAutoPageBreak(0, $this->marge_vert); $pdf->AddPage(); $distinct_texts = 1; $textes = array(); $pays = CAppUI::conf("ref_pays"); // La fonction nl2br ne fait qu'ajouter la balise <br />, elle ne supprime pas le \n. // Il faut donc le faire manuellement. $textes[1] = preg_replace("/[\t\r\n\f]/", '', utf8_encode(nl2br($this->texte))); if ($this->texte_2) { $distinct_texts++; $textes[] = preg_replace("/[\t\r\n\f]/", '', utf8_encode(nl2br($this->texte_2))); } if ($this->texte_3) { $distinct_texts++; $textes[] = preg_replace("/[\t\r\n\f]/", '', utf8_encode(nl2br($this->texte_3))); } if ($this->texte_4) { $distinct_texts++; $textes[] = preg_replace("/[\t\r\n\f]/", '', utf8_encode(nl2br($this->texte_4))); } $nb_etiqs = $this->nb_lignes * $this->nb_colonnes; $increment = floor($nb_etiqs / $distinct_texts); $current_text = 1; // Création de la grille d'étiquettes et écriture du contenu. for ($i = 0; $i < $nb_etiqs; $i++) { if ($i != 0 && $i % $increment == 0 && isset($textes[$current_text + 1])) { $current_text++; } if (round($pdf->GetX()) >= round($this->largeur_page - 2 * $this->marge_horiz)) { $pdf->SetX(0); $pdf->SetLeftMargin($this->marge_horiz); $pdf->SetY($pdf->GetY() + $hauteur_etiq); } if ($this->show_border) { $pdf->Rect($pdf->GetX(), $pdf->GetY(), $largeur_etiq, $hauteur_etiq, 'D'); } $x = $pdf->GetX(); $y = $pdf->GetY(); $pdf->SetLeftMargin($x); // On affecte la marge droite de manière à ce que la méthode Write fasse un retour chariot // lorsque le contenu écrit va dépasser la largeur de l'étiquette $pdf->SetRightMargin($this->largeur_page - $x - $largeur_etiq); $fragments = explode("@", $textes[$current_text]); $was_barcode = 0; CMbArray::removeValue("", $fragments); // Evaluation de la hauteur du contenu de la cellule // si un alignement spécifique est demandé. if ($this->text_align != "top") { $pdf_ex = new CMbPdf('p', 'cm', array($largeur_etiq, $hauteur_etiq)); $pdf_ex->setFont($this->font, '', $this->hauteur_ligne); $pdf_ex->SetMargins(0, 0, 0); $pdf_ex->setPrintHeader(false); $pdf_ex->setPrintFooter(false); $pdf_ex->SetAutoPageBreak(false); $pdf_ex->AddPage(); foreach ($fragments as $fragment) { if (preg_match("/BARCODE_(.*)/", $fragment, $matches) == 1) { switch ($pays) { case "2": $save_x = $pdf_ex->getX(); $pdf_ex->setY($pdf_ex->getY() + 0.4); $pdf_ex->setX($save_x); $barcode = $matches[1]; $pdf_ex->setFont("C39HrP24DhTt", '', 30); $pdf_ex->WriteHTML($barcode, false); $pdf_ex->setFont($this->font, '', $this->hauteur_ligne); break; default: $barcode_x = $pdf_ex->getX() + 0.15; $barcode_y = $pdf_ex->getY(); $barcode = $matches[1]; $barcode_width = strlen($barcode) * 0.4 + 0.4; $pdf_ex->writeBarcode($barcode_x, $barcode_y, $barcode_width, 0.8, "C128B", 1, null, null, $barcode, 25); $pdf_ex->setX($barcode_x + $barcode_width); } $was_barcode = 1; } else { if ($was_barcode) { $sub_fragments = explode("<br />", $fragment, 2); $pdf_ex->WriteHTML($sub_fragments[0], false); if (isset($sub_fragments[1])) { $actual_y = $pdf_ex->getY(); $pdf_ex->setY($actual_y + 0.8); $pdf_ex->WriteHTML($sub_fragments[1], false); } } else { $pdf_ex->WriteHTML($fragment, false); } $was_barcode = 0; } } $pdf_y = $pdf->getY(); $pdf_ex_y = $pdf_ex->getY(); switch ($this->text_align) { case "middle": $pdf->setY($pdf_y - 0.2 + ($hauteur_etiq - $pdf_ex_y) / 2); break; case "bottom": $pdf->setY($pdf_y - 0.4 + $hauteur_etiq - $pdf_ex_y); } } foreach ($fragments as $fragment) { if (preg_match("/BARCODE_(.*)/", $fragment, $matches) == 1) { switch ($pays) { case "2": // La position x est à remettre car perdue lors de la méthode setY $save_x = $pdf->getX(); $pdf->setY($pdf->getY() + 0.4); $pdf->setX($save_x); $barcode = $matches[1]; $pdf->setFont("C39HrP24DhTt", '', 30); $pdf->WriteHTML("*{$barcode}*", false); $pdf->setFont($this->font, '', $this->hauteur_ligne); break; default: $barcode_x = $pdf->getX() + 0.15; $barcode_y = $pdf->getY(); $barcode = $matches[1]; $barcode_width = strlen($barcode) * 0.4 + 0.4; $pdf->writeBarcode($barcode_x, $barcode_y, $barcode_width, 0.8, "C128B", 1, null, null, $barcode); $pdf->setX($barcode_x + $barcode_width); } $was_barcode = 1; } else { if ($was_barcode) { $sub_fragments = explode("<br />", $fragment, 2); $pdf->WriteHTML($sub_fragments[0], false); if (isset($sub_fragments[1])) { $actual_y = $pdf->getY(); $pdf->setY($actual_y + 0.8); $pdf->WriteHTML($sub_fragments[1], false); } } else { $pdf->WriteHTML($fragment, false); } $was_barcode = 0; } } $x = $x + $largeur_etiq; $pdf->SetY($y); $pdf->SetX($x); } if ($printer_id) { $file = new CFile(); $file->_file_path = tempnam("/tmp", "etiq"); file_put_contents($file->_file_path, $pdf->Output($this->nom . '.pdf', "S")); $printer = new CPrinter(); $printer->load($printer_id); $printer->loadRefSource()->sendDocument($file); unlink($file->_file_path); } else { if ($stream) { $pdf->Output($this->nom . '.pdf', "I"); } else { return $pdf->OutPut($this->nom . '.pdf', "S"); } } }