| Total Complexity | 225 | 
| Total Lines | 1494 | 
| Duplicated Lines | 0 % | 
| Changes | 2 | ||
| Bugs | 0 | Features | 0 | 
Complex classes like pdf_azur_subtotal often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use pdf_azur_subtotal, and based on these observations, apply Extract Interface, too.
| 1 | <?php | ||
| 38 | class pdf_azur_subtotal extends ModelePDFPropales | ||
| 39 | { | ||
| 40 | var $db; | ||
| 41 | var $name; | ||
| 42 | var $description; | ||
| 43 | var $type; | ||
| 44 | |||
| 45 | var $phpmin = array(4,3,0); // Minimum version of PHP required by module | ||
| 46 | var $version = 'dolibarr'; | ||
| 47 | |||
| 48 | var $page_largeur; | ||
| 49 | var $page_hauteur; | ||
| 50 | var $format; | ||
| 51 | var $marge_gauche; | ||
| 52 | var $marge_droite; | ||
| 53 | var $marge_haute; | ||
| 54 | var $marge_basse; | ||
| 55 | |||
| 56 | var $emetteur; // Objet societe qui emet | ||
| 57 | |||
| 58 | |||
| 59 | /** | ||
| 60 | * Constructor | ||
| 61 | * | ||
| 62 | * @param DoliDB $db Database handler | ||
| 63 | */ | ||
| 64 | function __construct($db) | ||
|  | |||
| 65 | 	{ | ||
| 66 | global $conf,$langs,$mysoc; | ||
| 67 | |||
| 68 | 		$langs->load("main"); | ||
| 69 | 		$langs->load("bills"); | ||
| 70 | |||
| 71 | $this->db = $db; | ||
| 72 | $this->name = "azur_subtotal"; | ||
| 73 | // J'ajoute l'annotation "déprécié" mais à garder... des fois qu'un client avec une vieille version utilise les modèles PDF custom | ||
| 74 | $this->description = 'Modèle de proposition commerciale incluant des spécificités du module sous-total. (déprécié)'; | ||
| 75 | |||
| 76 | // Dimension page pour format A4 | ||
| 77 | $this->type = 'pdf'; | ||
| 78 | $formatarray=pdf_getFormat(); | ||
| 79 | $this->page_largeur = $formatarray['width']; | ||
| 80 | $this->page_hauteur = $formatarray['height']; | ||
| 81 | $this->format = array($this->page_largeur,$this->page_hauteur); | ||
| 82 | $this->marge_gauche=isset($conf->global->MAIN_PDF_MARGIN_LEFT)?$conf->global->MAIN_PDF_MARGIN_LEFT:10; | ||
| 83 | $this->marge_droite=isset($conf->global->MAIN_PDF_MARGIN_RIGHT)?$conf->global->MAIN_PDF_MARGIN_RIGHT:10; | ||
| 84 | $this->marge_haute =isset($conf->global->MAIN_PDF_MARGIN_TOP)?$conf->global->MAIN_PDF_MARGIN_TOP:10; | ||
| 85 | $this->marge_basse =isset($conf->global->MAIN_PDF_MARGIN_BOTTOM)?$conf->global->MAIN_PDF_MARGIN_BOTTOM:10; | ||
| 86 | |||
| 87 | $this->option_logo = 1; // Affiche logo | ||
| 88 | $this->option_tva = 1; // Gere option tva FACTURE_TVAOPTION | ||
| 89 | $this->option_modereg = 1; // Affiche mode reglement | ||
| 90 | $this->option_condreg = 1; // Affiche conditions reglement | ||
| 91 | $this->option_codeproduitservice = 1; // Affiche code produit-service | ||
| 92 | $this->option_multilang = 1; // Dispo en plusieurs langues | ||
| 93 | $this->option_escompte = 1; // Affiche si il y a eu escompte | ||
| 94 | $this->option_credit_note = 1; // Support credit notes | ||
| 95 | $this->option_freetext = 1; // Support add of a personalised text | ||
| 96 | $this->option_draft_watermark = 1; //Support add of a watermark on drafts | ||
| 97 | |||
| 98 | $this->franchise=!$mysoc->tva_assuj; | ||
| 99 | |||
| 100 | // Get source company | ||
| 101 | $this->emetteur=$mysoc; | ||
| 102 | if (empty($this->emetteur->country_code)) $this->emetteur->country_code=substr($langs->defaultlang,-2); // By default, if was not defined | ||
| 103 | |||
| 104 | // Define position of columns | ||
| 105 | $this->posxdesc=$this->marge_gauche+1; | ||
| 106 | $this->posxtva=112; | ||
| 107 | $this->posxup=126; | ||
| 108 | $this->posxqty=145; | ||
| 109 | $this->posxdiscount=162; | ||
| 110 | $this->postotalht=174; | ||
| 111 | if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) $this->posxtva=$this->posxup; | ||
| 112 | $this->posxpicture=$this->posxtva - (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH); // width of images | ||
| 113 | if ($this->page_largeur < 210) // To work with US executive format | ||
| 114 | 		{ | ||
| 115 | $this->posxpicture-=20; | ||
| 116 | $this->posxtva-=20; | ||
| 117 | $this->posxup-=20; | ||
| 118 | $this->posxqty-=20; | ||
| 119 | $this->posxdiscount-=20; | ||
| 120 | $this->postotalht-=20; | ||
| 121 | } | ||
| 122 | |||
| 123 | $this->tva=array(); | ||
| 124 | $this->localtax1=array(); | ||
| 125 | $this->localtax2=array(); | ||
| 126 | $this->atleastoneratenotnull=0; | ||
| 127 | $this->atleastonediscount=0; | ||
| 128 | } | ||
| 129 | |||
| 130 | /** | ||
| 131 | * Function to build pdf onto disk | ||
| 132 | * | ||
| 133 | * @param Object $object Object to generate | ||
| 134 | * @param Translate $outputlangs Lang output object | ||
| 135 | * @param string $srctemplatepath Full path of source filename for generator using a template file | ||
| 136 | * @param int $hidedetails Do not show line details | ||
| 137 | * @param int $hidedesc Do not show desc | ||
| 138 | * @param int $hideref Do not show ref | ||
| 139 | * @return int 1=OK, 0=KO | ||
| 140 | */ | ||
| 141 | function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0) | ||
| 748 | } | ||
| 749 | |||
| 750 | /** | ||
| 751 | * Show payments table | ||
| 752 | * | ||
| 753 | * @param PDF $pdf Object PDF | ||
| 754 | * @param Object $object Object proposal | ||
| 755 | * @param int $posy Position y in PDF | ||
| 756 | * @param Translate $outputlangs Object langs for output | ||
| 757 | * @return int <0 if KO, >0 if OK | ||
| 758 | */ | ||
| 759 | function _tableau_versements(&$pdf, $object, $posy, $outputlangs) | ||
| 760 | 	{ | ||
| 761 | |||
| 762 | } | ||
| 763 | |||
| 764 | |||
| 765 | /** | ||
| 766 | * Show miscellaneous information (payment mode, payment term, ...) | ||
| 767 | * | ||
| 768 | * @param PDF $pdf Object PDF | ||
| 769 | * @param Object $object Object to show | ||
| 770 | * @param int $posy Y | ||
| 771 | * @param Translate $outputlangs Langs object | ||
| 772 | * @return void | ||
| 773 | */ | ||
| 774 | function _tableau_info(&$pdf, $object, $posy, $outputlangs) | ||
| 775 | 	{ | ||
| 776 | global $conf; | ||
| 777 | $default_font_size = pdf_getPDFFontSize($outputlangs); | ||
| 778 | |||
| 779 | 		$pdf->SetFont('','', $default_font_size - 1); | ||
| 780 | |||
| 781 | // If France, show VAT mention if not applicable | ||
| 782 | if ($this->emetteur->country_code == 'FR' && $this->franchise == 1) | ||
| 783 | 		{ | ||
| 784 | 			$pdf->SetFont('','B', $default_font_size - 2); | ||
| 785 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 786 | 			$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0); | ||
| 787 | |||
| 788 | $posy=$pdf->GetY()+4; | ||
| 789 | } | ||
| 790 | |||
| 791 | $posxval=52; | ||
| 792 | |||
| 793 | // Show shipping date | ||
| 794 | if (! empty($object->date_livraison)) | ||
| 795 | 		{ | ||
| 796 |             $outputlangs->load("sendings"); | ||
| 797 | 			$pdf->SetFont('','B', $default_font_size - 2); | ||
| 798 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 799 | 			$titre = $outputlangs->transnoentities("DateDeliveryPlanned").':'; | ||
| 800 | $pdf->MultiCell(80, 4, $titre, 0, 'L'); | ||
| 801 | 			$pdf->SetFont('','', $default_font_size - 2); | ||
| 802 | $pdf->SetXY($posxval, $posy); | ||
| 803 | $dlp=dol_print_date($object->date_livraison,"daytext",false,$outputlangs,true); | ||
| 804 | $pdf->MultiCell(80, 4, $dlp, 0, 'L'); | ||
| 805 | |||
| 806 | $posy=$pdf->GetY()+1; | ||
| 807 | } | ||
| 808 | elseif ($object->availability_code || $object->availability) // Show availability conditions | ||
| 809 | 		{ | ||
| 810 | 			$pdf->SetFont('','B', $default_font_size - 2); | ||
| 811 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 812 | 			$titre = $outputlangs->transnoentities("AvailabilityPeriod").':'; | ||
| 813 | $pdf->MultiCell(80, 4, $titre, 0, 'L'); | ||
| 814 | $pdf->SetTextColor(0,0,0); | ||
| 815 | 			$pdf->SetFont('','', $default_font_size - 2); | ||
| 816 | $pdf->SetXY($posxval, $posy); | ||
| 817 | 			$lib_availability=$outputlangs->transnoentities("AvailabilityType".$object->availability_code)!=('AvailabilityType'.$object->availability_code)?$outputlangs->transnoentities("AvailabilityType".$object->availability_code):$outputlangs->convToOutputCharset($object->availability); | ||
| 818 | 			$lib_availability=str_replace('\n',"\n",$lib_availability); | ||
| 819 | $pdf->MultiCell(80, 4, $lib_availability, 0, 'L'); | ||
| 820 | |||
| 821 | $posy=$pdf->GetY()+1; | ||
| 822 | } | ||
| 823 | |||
| 824 | // Show payments conditions | ||
| 825 | if (empty($conf->global->PROPALE_PDF_HIDE_PAYMENTTERMCOND) && ($object->cond_reglement_code || $object->cond_reglement)) | ||
| 826 | 		{ | ||
| 827 | 			$pdf->SetFont('','B', $default_font_size - 2); | ||
| 828 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 829 | 			$titre = $outputlangs->transnoentities("PaymentConditions").':'; | ||
| 830 | $pdf->MultiCell(80, 4, $titre, 0, 'L'); | ||
| 831 | |||
| 832 | 			$pdf->SetFont('','', $default_font_size - 2); | ||
| 833 | $pdf->SetXY($posxval, $posy); | ||
| 834 | 			$lib_condition_paiement=$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code)!=('PaymentCondition'.$object->cond_reglement_code)?$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code):$outputlangs->convToOutputCharset($object->cond_reglement_doc); | ||
| 835 | 			$lib_condition_paiement=str_replace('\n',"\n",$lib_condition_paiement); | ||
| 836 | $pdf->MultiCell(80, 4, $lib_condition_paiement,0,'L'); | ||
| 837 | |||
| 838 | $posy=$pdf->GetY()+3; | ||
| 839 | } | ||
| 840 | |||
| 841 | if (empty($conf->global->PROPALE_PDF_HIDE_PAYMENTTERMCOND)) | ||
| 842 | 		{ | ||
| 843 | // Check a payment mode is defined | ||
| 844 | /* Not required on a proposal | ||
| 845 | if (empty($object->mode_reglement_code) | ||
| 846 | && ! $conf->global->FACTURE_CHQ_NUMBER | ||
| 847 | && ! $conf->global->FACTURE_RIB_NUMBER) | ||
| 848 | 			{ | ||
| 849 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 850 | $pdf->SetTextColor(200,0,0); | ||
| 851 | 				$pdf->SetFont('','B', $default_font_size - 2); | ||
| 852 | 				$pdf->MultiCell(90, 3, $outputlangs->transnoentities("ErrorNoPaiementModeConfigured"),0,'L',0); | ||
| 853 | $pdf->SetTextColor(0,0,0); | ||
| 854 | |||
| 855 | $posy=$pdf->GetY()+1; | ||
| 856 | } | ||
| 857 | */ | ||
| 858 | |||
| 859 | // Show payment mode | ||
| 860 | if ($object->mode_reglement_code | ||
| 861 | && $object->mode_reglement_code != 'CHQ' | ||
| 862 | && $object->mode_reglement_code != 'VIR') | ||
| 863 | 			{ | ||
| 864 | 				$pdf->SetFont('','B', $default_font_size - 2); | ||
| 865 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 866 | 				$titre = $outputlangs->transnoentities("PaymentMode").':'; | ||
| 867 | $pdf->MultiCell(80, 5, $titre, 0, 'L'); | ||
| 868 | 				$pdf->SetFont('','', $default_font_size - 2); | ||
| 869 | $pdf->SetXY($posxval, $posy); | ||
| 870 | 				$lib_mode_reg=$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code)!=('PaymentType'.$object->mode_reglement_code)?$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code):$outputlangs->convToOutputCharset($object->mode_reglement); | ||
| 871 | $pdf->MultiCell(80, 5, $lib_mode_reg,0,'L'); | ||
| 872 | |||
| 873 | $posy=$pdf->GetY()+2; | ||
| 874 | } | ||
| 875 | |||
| 876 | // Show payment mode CHQ | ||
| 877 | if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'CHQ') | ||
| 878 | 			{ | ||
| 879 | // Si mode reglement non force ou si force a CHQ | ||
| 880 | if (! empty($conf->global->FACTURE_CHQ_NUMBER)) | ||
| 881 | 				{ | ||
| 882 | $diffsizetitle=(empty($conf->global->PDF_DIFFSIZE_TITLE)?3:$conf->global->PDF_DIFFSIZE_TITLE); | ||
| 883 | |||
| 884 | if ($conf->global->FACTURE_CHQ_NUMBER > 0) | ||
| 885 | 					{ | ||
| 886 | $account = new Account($this->db); | ||
| 887 | $account->fetch($conf->global->FACTURE_CHQ_NUMBER); | ||
| 888 | |||
| 889 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 890 | 						$pdf->SetFont('','B', $default_font_size - $diffsizetitle); | ||
| 891 | 						$pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$account->proprio),0,'L',0); | ||
| 892 | $posy=$pdf->GetY()+1; | ||
| 893 | |||
| 894 | if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS)) | ||
| 895 | 			            { | ||
| 896 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 897 | 							$pdf->SetFont('','', $default_font_size - $diffsizetitle); | ||
| 898 | $pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($account->owner_address), 0, 'L', 0); | ||
| 899 | $posy=$pdf->GetY()+2; | ||
| 900 | } | ||
| 901 | } | ||
| 902 | if ($conf->global->FACTURE_CHQ_NUMBER == -1) | ||
| 903 | 					{ | ||
| 904 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 905 | 						$pdf->SetFont('','B', $default_font_size - $diffsizetitle); | ||
| 906 | 						$pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$this->emetteur->name),0,'L',0); | ||
| 907 | $posy=$pdf->GetY()+1; | ||
| 908 | |||
| 909 | if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS)) | ||
| 910 | 			            { | ||
| 911 | $pdf->SetXY($this->marge_gauche, $posy); | ||
| 912 | 							$pdf->SetFont('','', $default_font_size - $diffsizetitle); | ||
| 913 | $pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($this->emetteur->getFullAddress()), 0, 'L', 0); | ||
| 914 | $posy=$pdf->GetY()+2; | ||
| 915 | } | ||
| 916 | } | ||
| 917 | } | ||
| 918 | } | ||
| 919 | |||
| 920 | // If payment mode not forced or forced to VIR, show payment with BAN | ||
| 921 | if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') | ||
| 922 | 			{ | ||
| 923 | if (! empty($object->fk_bank) || ! empty($conf->global->FACTURE_RIB_NUMBER)) | ||
| 924 | 				{ | ||
| 925 | $bankid=(empty($object->fk_bank)?$conf->global->FACTURE_RIB_NUMBER:$object->fk_bank); | ||
| 926 | $account = new Account($this->db); | ||
| 927 | $account->fetch($bankid); | ||
| 928 | |||
| 929 | $curx=$this->marge_gauche; | ||
| 930 | $cury=$posy; | ||
| 931 | |||
| 932 | $posy=pdf_bank($pdf,$outputlangs,$curx,$cury,$account,0,$default_font_size); | ||
| 933 | |||
| 934 | $posy+=2; | ||
| 935 | } | ||
| 936 | } | ||
| 937 | } | ||
| 938 | |||
| 939 | return $posy; | ||
| 940 | } | ||
| 941 | |||
| 942 | |||
| 943 | /** | ||
| 944 | * Show total to pay | ||
| 945 | * | ||
| 946 | * @param PDF $pdf Object PDF | ||
| 947 | * @param Facture $object Object invoice | ||
| 948 | * @param int $deja_regle Montant deja regle | ||
| 949 | * @param int $posy Position depart | ||
| 950 | * @param Translate $outputlangs Objet langs | ||
| 951 | * @return int Position pour suite | ||
| 952 | */ | ||
| 953 | function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs) | ||
| 954 | 	{ | ||
| 955 | global $conf,$mysoc; | ||
| 956 | $default_font_size = pdf_getPDFFontSize($outputlangs); | ||
| 957 | |||
| 958 | $tab2_top = $posy; | ||
| 959 | $tab2_hl = 4; | ||
| 960 | 		$pdf->SetFont('','', $default_font_size - 1); | ||
| 961 | |||
| 962 | // Tableau total | ||
| 963 | $col1x = 120; $col2x = 170; | ||
| 964 | if ($this->page_largeur < 210) // To work with US executive format | ||
| 965 | 		{ | ||
| 966 | $col2x-=20; | ||
| 967 | } | ||
| 968 | $largcol2 = ($this->page_largeur - $this->marge_droite - $col2x); | ||
| 969 | |||
| 970 | $useborder=0; | ||
| 971 | $index = 0; | ||
| 972 | |||
| 973 | // Total HT | ||
| 974 | $pdf->SetFillColor(255,255,255); | ||
| 975 | $pdf->SetXY($col1x, $tab2_top + 0); | ||
| 976 | 		$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1); | ||
| 977 | |||
| 978 | $pdf->SetXY($col2x, $tab2_top + 0); | ||
| 979 | $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ht + (! empty($object->remise)?$object->remise:0), 0, $outputlangs), 0, 'R', 1); | ||
| 980 | |||
| 981 | // Show VAT by rates and total | ||
| 982 | $pdf->SetFillColor(248,248,248); | ||
| 983 | |||
| 984 | $this->atleastoneratenotnull=0; | ||
| 985 | if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) | ||
| 986 | 		{ | ||
| 987 | $tvaisnull=((! empty($this->tva) && count($this->tva) == 1 && isset($this->tva['0.000']) && is_float($this->tva['0.000'])) ? true : false); | ||
| 988 | if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_ISNULL) && $tvaisnull) | ||
| 989 | 			{ | ||
| 990 | // Nothing to do | ||
| 991 | } | ||
| 992 | else | ||
| 993 | 			{ | ||
| 994 | //Local tax 1 before VAT | ||
| 995 | //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') | ||
| 996 | 				//{ | ||
| 997 | foreach( $this->localtax1 as $localtax_type => $localtax_rate ) | ||
| 998 | 					{ | ||
| 999 | 						if (in_array((string) $localtax_type, array('1','3','5'))) continue; | ||
| 1000 | |||
| 1001 | foreach( $localtax_rate as $tvakey => $tvaval ) | ||
| 1002 | 						{ | ||
| 1003 | if ($tvakey!=0) // On affiche pas taux 0 | ||
| 1004 | 							{ | ||
| 1005 | //$this->atleastoneratenotnull++; | ||
| 1006 | |||
| 1007 | $index++; | ||
| 1008 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1009 | |||
| 1010 | $tvacompl=''; | ||
| 1011 | 								if (preg_match('/\*/',$tvakey)) | ||
| 1012 | 								{ | ||
| 1013 | 									$tvakey=str_replace('*','',$tvakey); | ||
| 1014 | 									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; | ||
| 1015 | } | ||
| 1016 | 								$totalvat = $outputlangs->transcountrynoentities("TotalLT1",$mysoc->country_code).' '; | ||
| 1017 | $totalvat.=vatrate(abs($tvakey),1).$tvacompl; | ||
| 1018 | $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); | ||
| 1019 | |||
| 1020 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1021 | $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); | ||
| 1022 | } | ||
| 1023 | } | ||
| 1024 | } | ||
| 1025 | //} | ||
| 1026 | //Local tax 2 before VAT | ||
| 1027 | //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') | ||
| 1028 | 				//{ | ||
| 1029 | foreach( $this->localtax2 as $localtax_type => $localtax_rate ) | ||
| 1030 | 					{ | ||
| 1031 | 						if (in_array((string) $localtax_type, array('1','3','5'))) continue; | ||
| 1032 | |||
| 1033 | foreach( $localtax_rate as $tvakey => $tvaval ) | ||
| 1034 | 						{ | ||
| 1035 | if ($tvakey!=0) // On affiche pas taux 0 | ||
| 1036 | 							{ | ||
| 1037 | //$this->atleastoneratenotnull++; | ||
| 1038 | |||
| 1039 | |||
| 1040 | |||
| 1041 | $index++; | ||
| 1042 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1043 | |||
| 1044 | $tvacompl=''; | ||
| 1045 | 								if (preg_match('/\*/',$tvakey)) | ||
| 1046 | 								{ | ||
| 1047 | 									$tvakey=str_replace('*','',$tvakey); | ||
| 1048 | 									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; | ||
| 1049 | } | ||
| 1050 | 								$totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' '; | ||
| 1051 | $totalvat.=vatrate(abs($tvakey),1).$tvacompl; | ||
| 1052 | $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); | ||
| 1053 | |||
| 1054 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1055 | $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); | ||
| 1056 | |||
| 1057 | } | ||
| 1058 | } | ||
| 1059 | } | ||
| 1060 | //} | ||
| 1061 | // VAT | ||
| 1062 | foreach($this->tva as $tvakey => $tvaval) | ||
| 1063 | 				{ | ||
| 1064 | if ($tvakey > 0) // On affiche pas taux 0 | ||
| 1065 | 					{ | ||
| 1066 | $this->atleastoneratenotnull++; | ||
| 1067 | |||
| 1068 | $index++; | ||
| 1069 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1070 | |||
| 1071 | $tvacompl=''; | ||
| 1072 | 						if (preg_match('/\*/',$tvakey)) | ||
| 1073 | 						{ | ||
| 1074 | 							$tvakey=str_replace('*','',$tvakey); | ||
| 1075 | 							$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; | ||
| 1076 | } | ||
| 1077 | 						$totalvat =$outputlangs->transnoentities("TotalVAT").' '; | ||
| 1078 | $totalvat.=vatrate($tvakey,1).$tvacompl; | ||
| 1079 | $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); | ||
| 1080 | |||
| 1081 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1082 | $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); | ||
| 1083 | } | ||
| 1084 | } | ||
| 1085 | |||
| 1086 | //Local tax 1 after VAT | ||
| 1087 | //if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on') | ||
| 1088 | 				//{ | ||
| 1089 | foreach( $this->localtax1 as $localtax_type => $localtax_rate ) | ||
| 1090 | 					{ | ||
| 1091 | 						if (in_array((string) $localtax_type, array('2','4','6'))) continue; | ||
| 1092 | |||
| 1093 | foreach( $localtax_rate as $tvakey => $tvaval ) | ||
| 1094 | 						{ | ||
| 1095 | if ($tvakey != 0) // On affiche pas taux 0 | ||
| 1096 | 							{ | ||
| 1097 | //$this->atleastoneratenotnull++; | ||
| 1098 | |||
| 1099 | $index++; | ||
| 1100 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1101 | |||
| 1102 | $tvacompl=''; | ||
| 1103 | 								if (preg_match('/\*/',$tvakey)) | ||
| 1104 | 								{ | ||
| 1105 | 									$tvakey=str_replace('*','',$tvakey); | ||
| 1106 | 									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; | ||
| 1107 | } | ||
| 1108 | 								$totalvat = $outputlangs->transcountrynoentities("TotalLT1",$mysoc->country_code).' '; | ||
| 1109 | |||
| 1110 | $totalvat.=vatrate(abs($tvakey),1).$tvacompl; | ||
| 1111 | $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); | ||
| 1112 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1113 | $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); | ||
| 1114 | } | ||
| 1115 | } | ||
| 1116 | } | ||
| 1117 | //} | ||
| 1118 | //Local tax 2 after VAT | ||
| 1119 | //if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on') | ||
| 1120 | 				//{ | ||
| 1121 | foreach( $this->localtax2 as $localtax_type => $localtax_rate ) | ||
| 1122 | 					{ | ||
| 1123 | 						if (in_array((string) $localtax_type, array('2','4','6'))) continue; | ||
| 1124 | |||
| 1125 | foreach( $localtax_rate as $tvakey => $tvaval ) | ||
| 1126 | 						{ | ||
| 1127 | // retrieve global local tax | ||
| 1128 | if ($tvakey != 0) // On affiche pas taux 0 | ||
| 1129 | 							{ | ||
| 1130 | //$this->atleastoneratenotnull++; | ||
| 1131 | |||
| 1132 | $index++; | ||
| 1133 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1134 | |||
| 1135 | $tvacompl=''; | ||
| 1136 | 								if (preg_match('/\*/',$tvakey)) | ||
| 1137 | 								{ | ||
| 1138 | 									$tvakey=str_replace('*','',$tvakey); | ||
| 1139 | 									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; | ||
| 1140 | } | ||
| 1141 | 								$totalvat = $outputlangs->transcountrynoentities("TotalLT2",$mysoc->country_code).' '; | ||
| 1142 | |||
| 1143 | $totalvat.=vatrate(abs($tvakey),1).$tvacompl; | ||
| 1144 | $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); | ||
| 1145 | |||
| 1146 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1147 | $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1); | ||
| 1148 | } | ||
| 1149 | } | ||
| 1150 | } | ||
| 1151 | //} | ||
| 1152 | |||
| 1153 | // Total TTC | ||
| 1154 | $index++; | ||
| 1155 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1156 | $pdf->SetTextColor(0,0,60); | ||
| 1157 | $pdf->SetFillColor(224,224,224); | ||
| 1158 | 				$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalTTC"), $useborder, 'L', 1); | ||
| 1159 | |||
| 1160 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1161 | $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ttc, 0, $outputlangs), $useborder, 'R', 1); | ||
| 1162 | } | ||
| 1163 | } | ||
| 1164 | |||
| 1165 | $pdf->SetTextColor(0,0,0); | ||
| 1166 | |||
| 1167 | /* | ||
| 1168 | $resteapayer = $object->total_ttc - $deja_regle; | ||
| 1169 | if (! empty($object->paye)) $resteapayer=0; | ||
| 1170 | */ | ||
| 1171 | |||
| 1172 | if ($deja_regle > 0) | ||
| 1173 | 		{ | ||
| 1174 | $index++; | ||
| 1175 | |||
| 1176 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1177 | 			$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("AlreadyPaid"), 0, 'L', 0); | ||
| 1178 | |||
| 1179 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1180 | $pdf->MultiCell($largcol2, $tab2_hl, price($deja_regle, 0, $outputlangs), 0, 'R', 0); | ||
| 1181 | |||
| 1182 | /* | ||
| 1183 | if ($object->close_code == 'discount_vat') | ||
| 1184 | 			{ | ||
| 1185 | $index++; | ||
| 1186 | $pdf->SetFillColor(255,255,255); | ||
| 1187 | |||
| 1188 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1189 | 				$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("EscompteOffered"), $useborder, 'L', 1); | ||
| 1190 | |||
| 1191 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1192 | $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ttc - $deja_regle, 0, $outputlangs), $useborder, 'R', 1); | ||
| 1193 | |||
| 1194 | $resteapayer=0; | ||
| 1195 | } | ||
| 1196 | */ | ||
| 1197 | |||
| 1198 | $index++; | ||
| 1199 | $pdf->SetTextColor(0,0,60); | ||
| 1200 | $pdf->SetFillColor(224,224,224); | ||
| 1201 | $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); | ||
| 1202 | 			$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RemainderToPay"), $useborder, 'L', 1); | ||
| 1203 | |||
| 1204 | $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); | ||
| 1205 | $pdf->MultiCell($largcol2, $tab2_hl, price($resteapayer, 0, $outputlangs), $useborder, 'R', 1); | ||
| 1206 | |||
| 1207 | 			$pdf->SetFont('','', $default_font_size - 1); | ||
| 1208 | $pdf->SetTextColor(0,0,0); | ||
| 1209 | } | ||
| 1210 | |||
| 1211 | $index++; | ||
| 1212 | return ($tab2_top + ($tab2_hl * $index)); | ||
| 1213 | } | ||
| 1214 | |||
| 1215 | /** | ||
| 1216 | * Show table for lines | ||
| 1217 | * | ||
| 1218 | * @param PDF $pdf Object PDF | ||
| 1219 | * @param string $tab_top Top position of table | ||
| 1220 | * @param string $tab_height Height of table (rectangle) | ||
| 1221 | * @param int $nexY Y (not used) | ||
| 1222 | * @param Translate $outputlangs Langs object | ||
| 1223 | * @param int $hidetop 1=Hide top bar of array and title, 0=Hide nothing, -1=Hide only title | ||
| 1224 | * @param int $hidebottom Hide bottom bar of array | ||
| 1225 | * @return void | ||
| 1226 | */ | ||
| 1227 | function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop=0, $hidebottom=0) | ||
| 1316 | } | ||
| 1317 | } | ||
| 1318 | |||
| 1319 | /** | ||
| 1320 | * Show top header of page. | ||
| 1321 | * | ||
| 1322 | * @param PDF $pdf Object PDF | ||
| 1323 | * @param Object $object Object to show | ||
| 1324 | * @param int $showaddress 0=no, 1=yes | ||
| 1325 | * @param Translate $outputlangs Object lang for output | ||
| 1326 | * @return void | ||
| 1327 | */ | ||
| 1328 | function _pagehead(&$pdf, $object, $showaddress, $outputlangs) | ||
| 1516 | } | ||
| 1517 | |||
| 1518 | /** | ||
| 1519 | * Show footer of page. Need this->emetteur object | ||
| 1520 | * | ||
| 1521 | * @param PDF $pdf PDF | ||
| 1522 | * @param Object $object Object to show | ||
| 1523 | * @param Translate $outputlangs Object lang for output | ||
| 1524 | * @param int $hidefreetext 1=Hide free text | ||
| 1525 | * @return int Return height of bottom margin including footer text | ||
| 1526 | */ | ||
| 1527 | function _pagefoot(&$pdf,$object,$outputlangs,$hidefreetext=0) | ||
| 1536 | 
Adding explicit visibility (
private,protected, orpublic) is generally recommend to communicate to other developers how, and from where this method is intended to be used.