/** * Show bank informations for PDF generation * * @param PDF $pdf Object PDF * @param Translate $outputlangs Object lang * @param int $curx X * @param int $cury Y * @param Account $account Bank account object * @param int $onlynumber Output only number (bank+desk+key+number according to country, but without name of bank and domiciliation) * @param int $default_font_size Default font size * @return float The Y PDF position */ function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10) { global $mysoc, $conf; $diffsizetitle = empty($conf->global->PDF_DIFFSIZE_TITLE) ? 3 : $conf->global->PDF_DIFFSIZE_TITLE; $diffsizecontent = empty($conf->global->PDF_DIFFSIZE_CONTENT) ? 4 : $conf->global->PDF_DIFFSIZE_CONTENT; $pdf->SetXY($curx, $cury); if (empty($onlynumber)) { $pdf->SetFont('', 'B', $default_font_size - $diffsizetitle); $pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByTransferOnThisBankAccount') . ':', 0, 'L', 0); $cury += 4; } $outputlangs->load("banks"); // Use correct name of bank id according to country $bickey = "BICNumber"; if ($account->getCountryCode() == 'IN') { $bickey = "SWIFT"; } // Get format of bank account according to its country $usedetailedbban = $account->useDetailedBBAN(); //$onlynumber=0; $usedetailedbban=1; // For tests if ($usedetailedbban) { $savcurx = $curx; if (empty($onlynumber)) { $pdf->SetFont('', '', $default_font_size - $diffsizecontent); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("Bank") . ': ' . $outputlangs->convToOutputCharset($account->bank), 0, 'L', 0); $cury += 3; } if (empty($conf->global->PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN)) { // Note: // bank = code_banque (FR), sort code (GB, IR. Example: 12-34-56) // desk = code guichet (FR), used only when $usedetailedbban = 1 // number = account number // key = check control key used only when $usedetailedbban = 1 if (empty($onlynumber)) { $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6); } if ($usedetailedbban == 1) { $fieldstoshow = array('bank', 'desk', 'number', 'key'); if ($conf->global->BANK_SHOW_ORDER_OPTION == 1) { $fieldstoshow = array('bank', 'desk', 'key', 'number'); } } else { if ($usedetailedbban == 2) { $fieldstoshow = array('bank', 'number'); } else { dol_print_error('', 'Value returned by function useDetailedBBAN not managed'); } } foreach ($fieldstoshow as $val) { if ($val == 'bank') { // Bank code $tmplength = 18; $pdf->SetXY($curx, $cury + 4); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->code_banque), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankCode"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 7); } } if ($val == 'desk') { // Desk $tmplength = 18; $pdf->SetXY($curx, $cury + 4); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->code_guichet), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("DeskCode"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 7); } } if ($val == 'number') { // Number $tmplength = 24; $pdf->SetXY($curx, $cury + 4); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->number), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankAccountNumber"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 7); } } if ($val == 'key') { // Key $tmplength = 13; $pdf->SetXY($curx, $cury + 4); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->cle_rib), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankAccountNumberKey"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 7); } } } $curx = $savcurx; $cury += 8; } } else { $pdf->SetFont('', 'B', $default_font_size - $diffsizecontent); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("Bank") . ': ' . $outputlangs->convToOutputCharset($account->bank), 0, 'L', 0); $cury += 3; $pdf->SetFont('', 'B', $default_font_size - $diffsizecontent); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("BankAccountNumber") . ': ' . $outputlangs->convToOutputCharset($account->number), 0, 'L', 0); $cury += 3; if ($diffsizecontent <= 2) { $cury += 1; } } $pdf->SetFont('', '', $default_font_size - $diffsizecontent); if (empty($onlynumber) && !empty($account->domiciliation)) { $pdf->SetXY($curx, $cury); $val = $outputlangs->transnoentities("Residence") . ': ' . $outputlangs->convToOutputCharset($account->domiciliation); $pdf->MultiCell(100, 3, $val, 0, 'L', 0); //$nboflines=dol_nboflines_bis($val,120); //$cury+=($nboflines*3)+2; $tmpy = $pdf->getStringHeight(100, $val); $cury += $tmpy; } if (!empty($account->proprio)) { $pdf->SetXY($curx, $cury); $val = $outputlangs->transnoentities("BankAccountOwner") . ': ' . $outputlangs->convToOutputCharset($account->proprio); $pdf->MultiCell(100, 3, $val, 0, 'L', 0); $tmpy = $pdf->getStringHeight(100, $val); $cury += $tmpy; } else { if (!$usedetailedbban) { $cury += 1; } } // Use correct name of bank id according to country $ibankey = "IBANNumber"; if ($account->getCountryCode() == 'IN') { $ibankey = "IFSC"; } if (!empty($account->iban)) { //Remove whitespaces to ensure we are dealing with the format we expect $ibanDisplay_temp = str_replace(' ', '', $outputlangs->convToOutputCharset($account->iban)); $ibanDisplay = ""; $nbIbanDisplay_temp = dol_strlen($ibanDisplay_temp); for ($i = 0; $i < $nbIbanDisplay_temp; $i++) { $ibanDisplay .= $ibanDisplay_temp[$i]; if ($i % 4 == 3 && $i > 0) { $ibanDisplay .= " "; } } $pdf->SetFont('', 'B', $default_font_size - 3); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey) . ': ' . $ibanDisplay, 0, 'L', 0); $cury += 3; } if (!empty($account->bic)) { $pdf->SetFont('', 'B', $default_font_size - 3); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey) . ': ' . $outputlangs->convToOutputCharset($account->bic), 0, 'L', 0); } return $pdf->getY(); }
/** * Check account number informations for a bank account * * @param Account $account A bank account * @return boolean True if informations are valid, false otherwise */ function checkBanForAccount($account) { $country_code = $account->getCountryCode(); // For compatibility between // account of type CompanyBankAccount class (we use number, cle_rib) // account of type Account class (we use num_compte, cle) if (empty($account->number)) { $account->number = $account->num_compte; } if (empty($account->cle)) { $account->cle = $account->cle_rib; } dol_syslog("bank.lib::checkBanForAccount account->code_banque=" . $account->code_banque . " account->code_guichet=" . $account->code_guichet . " account->number=" . $account->number . " account->cle=" . $account->cle . " account->iban=" . $account->iban . " country_code=" . $country_code, LOG_DEBUG); if ($country_code == 'FR') { // France rules $coef = array(62, 34, 3); // Concatenation des differents codes. $rib = strtolower(trim($account->code_banque) . trim($account->code_guichet) . trim($account->number) . trim($account->cle)); // On remplace les eventuelles lettres par des chiffres. //$rib = strtr($rib, "abcdefghijklmnopqrstuvwxyz","12345678912345678912345678"); //Ne marche pas $rib = strtr($rib, "abcdefghijklmnopqrstuvwxyz", "12345678912345678923456789"); // Separation du rib en 3 groupes de 7 + 1 groupe de 2. // Multiplication de chaque groupe par les coef du tableau for ($i = 0, $s = 0; $i < 3; $i++) { $code = substr($rib, 7 * $i, 7); $s += (0 + $code) * $coef[$i]; } // Soustraction du modulo 97 de $s a 97 pour obtenir la cle $cle_rib = 97 - $s % 97; if ($cle_rib == $account->cle) { return true; } return false; } if ($country_code == 'BE') { // Belgium rules } if ($country_code == 'ES') { // Spanish rules $CCC = strtolower(trim($account->number)); $rib = strtolower(trim($account->code_banque) . trim($account->code_guichet)); $cle_rib = strtolower(checkES($rib, $CCC)); if ($cle_rib == strtolower($account->cle)) { return true; } return false; } if ($country_code == 'AU') { // Australian if (strlen($account->code_banque) > 7) { return false; } else { if (strlen($account->code_banque) < 6) { return false; } else { return true; } } } // No particular rule // If account is CompanyBankAccount class, we use number // If account is Account class, we use num_compte if (empty($account->number)) { return false; } return true; }
/** * Show bank informations for PDF generation * * @param PDF &$pdf Object PDF * @param Translate $outputlangs Object lang * @param int $curx X * @param int $cury Y * @param Account $account Bank account object * @param int $onlynumber Output only number * @param int $default_font_size Default font size * @return void */ function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10) { global $mysoc, $conf; $pdf->SetXY($curx, $cury); if (empty($onlynumber)) { $pdf->SetFont('', 'B', $default_font_size - 3); $pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByTransferOnThisBankAccount') . ':', 0, 'L', 0); $cury += 4; } $outputlangs->load("banks"); // Get format of bank account according to its country $usedetailedbban = $account->useDetailedBBAN(); //$onlynumber=0; $usedetailedbban=0; // For tests if ($usedetailedbban) { $savcurx = $curx; if (empty($onlynumber)) { $pdf->SetFont('', '', $default_font_size - 4); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("Bank") . ': ' . $outputlangs->convToOutputCharset($account->bank), 0, 'L', 0); $cury += 3; } if (empty($onlynumber)) { $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 8); } if ($usedetailedbban == 1) { $fieldstoshow = array('bank', 'desk', 'number', 'key'); if ($conf->global->BANK_SHOW_ORDER_OPTION == 1) { $fieldstoshow = array('bank', 'desk', 'key', 'number'); } } else { if ($usedetailedbban == 2) { $fieldstoshow = array('bank', 'number'); } else { dol_print_error('', 'Value returned by function useDetailedBBAN not managed'); } } foreach ($fieldstoshow as $val) { if ($val == 'bank') { // Bank code $tmplength = 18; $pdf->SetXY($curx, $cury + 5); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->code_banque), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankCode"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 8); } } if ($val == 'desk') { // Desk $tmplength = 18; $pdf->SetXY($curx, $cury + 5); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->code_guichet), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("DeskCode"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 8); } } if ($val == 'number') { // Number $tmplength = 24; $pdf->SetXY($curx, $cury + 5); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->number), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankAccountNumber"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 8); } } if ($val == 'key') { // Key $tmplength = 13; $pdf->SetXY($curx, $cury + 5); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->cle_rib), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankAccountNumberKey"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 8); } } } $curx = $savcurx; $cury += 10; } else { $pdf->SetFont('', 'B', 6); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("Bank") . ': ' . $outputlangs->convToOutputCharset($account->bank), 0, 'L', 0); $cury += 3; $pdf->SetFont('', 'B', 6); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("BankAccountNumber") . ': ' . $outputlangs->convToOutputCharset($account->number), 0, 'L', 0); $cury += 3; } // Use correct name of bank id according to country $ibankey = "IBANNumber"; $bickey = "BICNumber"; if ($account->getCountryCode() == 'IN') { $ibankey = "IFSC"; } if ($account->getCountryCode() == 'IN') { $bickey = "SWIFT"; } $pdf->SetFont('', '', 6); if (empty($onlynumber) && !empty($account->domiciliation)) { $pdf->SetXY($curx, $cury); $val = $outputlangs->transnoentities("Residence") . ': ' . $outputlangs->convToOutputCharset($account->domiciliation); $pdf->MultiCell(100, 3, $val, 0, 'L', 0); $nboflines = dol_nboflines_bis($val, 120); //print $nboflines;exit; $cury += $nboflines * 2 + 2; } else { if (!$usedetailedbban) { $cury += 1; } } $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey) . ': ' . $outputlangs->convToOutputCharset($account->iban), 0, 'L', 0); $pdf->SetXY($curx, $cury + 3); $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey) . ': ' . $outputlangs->convToOutputCharset($account->bic), 0, 'L', 0); return $pdf->getY(); }
} print '<td>'.$langs->trans("BankAccountNumber").'</td>'; print '<td><input size="18" type="text" class="flat" name="number" value="'.$account->number.'"></td>'; print '</tr>'; if ($account->useDetailedBBAN() == 1) { print '<td>'.$langs->trans("BankAccountNumberKey").'</td>'; print '<td><input size="3" type="text" class="flat" name="cle_rib" value="'.$account->cle_rib.'"></td>'; print '</tr>'; } $ibankey="IBANNumber"; $bickey="BICNumber"; if ($account->getCountryCode() == 'IN') $ibankey="IFSC"; if ($account->getCountryCode() == 'IN') $bickey="SWIFT"; // IBAN print '<tr><td valign="top">'.$langs->trans($ibankey).'</td>'; print '<td colspan="3"><input size="26" type="text" class="flat" name="iban_prefix" value="'.$account->iban_prefix.'"></td></tr>'; print '<tr><td valign="top">'.$langs->trans($bickey).'</td>'; print '<td colspan="3"><input size="12" maxlength="11" type="text" class="flat" name="bic" value="'.$account->bic.'"></td></tr>'; print '<tr><td valign="top">'.$langs->trans("BankAccountDomiciliation").'</td><td colspan="3">'; print "<textarea class=\"flat\" name=\"domiciliation\" rows=\"2\" cols=\"40\">"; print $account->domiciliation; print "</textarea></td></tr>"; print '<tr><td valign="top">'.$langs->trans("BankAccountCountry").'</td><td colspan="3">';
print '<td colspan="3">'; $selectedcode = $account->account_currency_code; if (!$selectedcode) { $selectedcode = $conf->currency; } print $langs->trans("Currency" . $selectedcode); print '</td></tr>'; // Status print '<tr><td valign="top">' . $langs->trans("Status") . '</td>'; print '<td colspan="3">' . $account->getLibStatut(4); print '</td></tr>'; if ($account->type == 0 || $account->type == 1) { print '<tr><td valign="top">' . $langs->trans("BankAccountCountry") . '</td><td colspan="3">'; $img = picto_from_langcode($account->country_code); print $img ? $img . ' ' : ''; print getCountry($account->getCountryCode(), 0, $db); print "</td></tr>\n"; // If bank account print '<tr><td valign="top">' . $langs->trans("BankName") . '</td>'; print '<td colspan="3"><input size="30" type="text" class="flat" name="bank" value="' . $account->bank . '"></td>'; print '</tr>'; // Show fields of bank account $fieldlists = 'BankCode DeskCode AccountNumber BankAccountNumberKey'; if (!empty($conf->global->BANK_SHOW_ORDER_OPTION)) { if (is_numeric($conf->global->BANK_SHOW_ORDER_OPTION)) { if ($conf->global->BANK_SHOW_ORDER_OPTION == '1') { $fieldlists = 'BankCode DeskCode BankAccountNumberKey AccountNumber'; } } else { $fieldlists = $conf->global->BANK_SHOW_ORDER_OPTION; }
if ($account->useDetailedBBAN() == 2) { print '<tr><td>' . $langs->trans("BankCode") . '</td>'; print '<td><input size="8" type="text" class="flat" name="code_banque" value="' . $account->code_banque . '"></td>'; print '</tr>'; } print '<td>' . $langs->trans("BankAccountNumber") . '</td>'; print '<td><input size="18" type="text" class="flat" name="number" value="' . $account->number . '"></td>'; print '</tr>'; if ($account->useDetailedBBAN() == 1) { print '<td>' . $langs->trans("BankAccountNumberKey") . '</td>'; print '<td><input size="3" type="text" class="flat" name="cle_rib" value="' . $account->cle_rib . '"></td>'; print '</tr>'; } $ibankey = "IBANNumber"; $bickey = "BICNumber"; if ($account->getCountryCode() == 'IN') { $ibankey = "IFSC"; } if ($account->getCountryCode() == 'IN') { $bickey = "SWIFT"; } // IBAN print '<tr><td valign="top">' . $langs->trans($ibankey) . '</td>'; print '<td colspan="3"><input size="26" type="text" class="flat" name="iban_prefix" value="' . $account->iban_prefix . '"></td></tr>'; print '<tr><td valign="top">' . $langs->trans($bickey) . '</td>'; print '<td colspan="3"><input size="12" maxlength="11" type="text" class="flat" name="bic" value="' . $account->bic . '"></td></tr>'; print '<tr><td valign="top">' . $langs->trans("BankAccountDomiciliation") . '</td><td colspan="3">'; print "<textarea class=\"flat\" name=\"domiciliation\" rows=\"2\" cols=\"40\">"; print $account->domiciliation; print "</textarea></td></tr>"; print '<tr><td valign="top">' . $langs->trans("BankAccountCountry") . '</td><td colspan="3">';