mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-02-20 13:46:52 +01:00
Move functions into file dedicated to country FI
This commit is contained in:
parent
729ef985e3
commit
2a4342a515
|
|
@ -14136,7 +14136,7 @@ function buildParamDate($prefix, $timestamp = null, $hourTime = '', $gm = 'auto'
|
|||
*/
|
||||
function recordNotFound($message = '', $printheader = 1, $printfooter = 1, $showonlymessage = 0, $params = null)
|
||||
{
|
||||
global $conf, $db, $user, $langs, $hookmanager;
|
||||
global $conf, $db, $langs, $hookmanager;
|
||||
global $action, $object;
|
||||
|
||||
if (!is_object($langs)) {
|
||||
|
|
|
|||
113
htdocs/core/lib/functions_fi.lib.php
Normal file
113
htdocs/core/lib/functions_fi.lib.php
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
<?php
|
||||
/* Copyright (C) 2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
* or see https://www.gnu.org/
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/lib/functions_fi.lib.php
|
||||
* \brief A set of finish functions for Dolibarr
|
||||
* This file contains rare functions.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Calculate Creditor Reference RF / FI Bank payment reference number
|
||||
*
|
||||
* @param string $invoice_number Invoice number to generate payment reference
|
||||
* @param int $statut Invoice status, if draft (0), no reference generating
|
||||
* @param string $use_rf false/(0) generate FI Bank payment reference
|
||||
* true/(1) Generate European Reference number based on the global
|
||||
* Structured Creditor Reference standard (SEPA RF creditor reference)
|
||||
* @return string String Payment reference number or RF creditor reference
|
||||
*/
|
||||
function dolFICalculatePaymentReference($invoice_number, $statut, $use_rf)
|
||||
{
|
||||
if ($statut >= 1) {
|
||||
$invoice_number = preg_replace('/[^0-9]/', '', $invoice_number); // Keep only numbers
|
||||
$invoice_number = ltrim($invoice_number, '0'); //Remove any leading zero or zeros
|
||||
$invoice_number = strrev($invoice_number); // Reverse the reference number
|
||||
$coefficients = array(7, 3, 1, 7, 3); // Define the coefficient numbers
|
||||
$sum = 0;
|
||||
$stlen_invoice_number = (int) strlen($invoice_number);
|
||||
for ($i = 0; $i < $stlen_invoice_number; $i++) { // Calculate the sum using coefficients
|
||||
$sum += (int) $invoice_number[$i] * $coefficients[$i % 5];
|
||||
}
|
||||
$check_digit = (10 - ($sum % 10)) % 10; // Calculate the check digit
|
||||
$bank_reference_fi = strrev($invoice_number) . $check_digit; // Concatenate the Reversed reference number and the check digit
|
||||
if ($use_rf) { // SEPA RF creditor reference
|
||||
$reference_with_suffix = $bank_reference_fi . "271500"; // Append "271500" to the end of the payment reference number
|
||||
$remainder = (int) bcmod($reference_with_suffix, '97'); // Calculate the remainder when dividing by 97
|
||||
$check_digit = 98 - $remainder; // Subtract the remainder from 98
|
||||
if ($check_digit < 10) { // If below 10 -> add leading zero
|
||||
$check_digit = '0' . $check_digit;
|
||||
}
|
||||
$bank_reference = "RF" . $check_digit . $bank_reference_fi; // Add "RF" and the check digit in front of the payment reference number
|
||||
} else { // FI payment reference number
|
||||
$bank_reference = $bank_reference_fi;
|
||||
}
|
||||
} else {
|
||||
$bank_reference = '';
|
||||
}
|
||||
return wordwrap($bank_reference, 4, ' ', true); // Split the string into chunks of 4 characters to improve readability
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate payment Barcode data with FI/RF bank payment reference number
|
||||
*
|
||||
* @param string $recipient_account Account number for pank payment
|
||||
* @param string $amount Amount of invoice payment
|
||||
* @param string $bank_reference FI Payment reference number or RF creditor reference
|
||||
* @param string $due_date Payments due to date
|
||||
* @return string String String for FI/RF Payment barcode
|
||||
*/
|
||||
function dolFIGenerateInvoiceBarcodeData($recipient_account, $amount, $bank_reference, $due_date)
|
||||
{
|
||||
$barcodeData = '0';
|
||||
if (!empty($bank_reference)) {
|
||||
if (substr($bank_reference, 0, 2) === "RF") {
|
||||
$recipient_account = preg_replace('/[^0-9]/', '', $recipient_account); // Remove non-numeric characters from account number
|
||||
$recipient_account = str_pad($recipient_account, 16, '0', STR_PAD_LEFT); // Add leading zeros if necessary
|
||||
$referencetobarcode = preg_replace('/[^0-9]/', '', $bank_reference); // Remove non-numeric characters (spaces)
|
||||
$referencetobarcode = substr($referencetobarcode, 0, 2) . str_pad(substr($referencetobarcode, 2), 21, '0', STR_PAD_LEFT);
|
||||
$euros = floor(floatval($amount)); // Separate euros and cents
|
||||
$cents = round((floatval($amount) - $euros) * 100);
|
||||
$due_date = date('ymd', (int) $due_date); // Format the due date to YYMMDD
|
||||
$barcodeData = '5'; // Version number // Construct the string
|
||||
$barcodeData .= $recipient_account; // Recipient's account number (IBAN)
|
||||
$barcodeData .= sprintf('%06d', (int) $euros); // Euros
|
||||
$barcodeData .= sprintf('%02d', (int) $cents); // Cents
|
||||
$barcodeData .= $referencetobarcode; // Reference number
|
||||
$barcodeData .= (int) $due_date; // Due date YYMMDD
|
||||
} elseif (substr($bank_reference, 0, 2) !== "RF") {
|
||||
$recipient_account = preg_replace('/[^0-9]/', '', $recipient_account); // Remove non-numeric characters from account number
|
||||
$recipient_account = str_pad($recipient_account, 16, '0', STR_PAD_LEFT); // Add leading zeros if necessary
|
||||
$referencetobarcode = preg_replace('/[^0-9]/', '', $bank_reference); // Remove non-numeric characters (spaces)
|
||||
$euros = floor(floatval($amount)); // Separate euros and cents
|
||||
$cents = round((floatval($amount) - $euros) * 100);
|
||||
$due_date = date('ymd', (int) $due_date); // Format the due date to YYMMDD
|
||||
$barcodeData = '4'; // Version number // Construct the string
|
||||
$barcodeData .= $recipient_account; // Recipient's account number (IBAN)
|
||||
$barcodeData .= sprintf('%06d', (int) $euros); // Euros
|
||||
$barcodeData .= sprintf('%02d', (int) $cents); // Cents
|
||||
$barcodeData .= '000'; // Reserved
|
||||
$barcodeData .= str_pad($referencetobarcode, 20, '0', STR_PAD_LEFT); // Reference number
|
||||
$barcodeData .= (int) $due_date; // Due date YYMMDD
|
||||
}
|
||||
} else {
|
||||
$barcodeData = '';
|
||||
}
|
||||
return $barcodeData;
|
||||
}
|
||||
|
|
@ -1333,91 +1333,3 @@ function getPurchaseInvoiceUnpaidOpenTable($maxCount = 500, $socid = 0)
|
|||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate Creditor Reference RF / FI Bank payment reference number
|
||||
*
|
||||
* @param string $invoice_number Invoice number to generate payment reference
|
||||
* @param int $statut Invoice status, if draft (0), no reference generating
|
||||
* @param string $use_rf false/(0) generate FI Bank payment reference
|
||||
* true/(1) Generate European Reference number based on the global
|
||||
* Structured Creditor Reference standard (SEPA RF creditor reference)
|
||||
* @return string String Payment reference number or RF creditor reference
|
||||
*/
|
||||
function calculate_payment_reference($invoice_number, $statut, $use_rf)
|
||||
{
|
||||
if ($statut >= 1) {
|
||||
$invoice_number = preg_replace('/[^0-9]/', '', $invoice_number); // Keep only numbers
|
||||
$invoice_number = ltrim($invoice_number, '0'); //Remove any leading zero or zeros
|
||||
$invoice_number = strrev($invoice_number); // Reverse the reference number
|
||||
$coefficients = array(7, 3, 1, 7, 3); // Define the coefficient numbers
|
||||
$sum = 0;
|
||||
$stlen_invoice_number = (int) strlen($invoice_number);
|
||||
for ($i = 0; $i < $stlen_invoice_number; $i++) { // Calculate the sum using coefficients
|
||||
$sum += (int) $invoice_number[$i] * $coefficients[$i % 5];
|
||||
}
|
||||
$check_digit = (10 - ($sum % 10)) % 10; // Calculate the check digit
|
||||
$bank_reference_fi = strrev($invoice_number) . $check_digit; // Concatenate the Reversed reference number and the check digit
|
||||
if ($use_rf) { // SEPA RF creditor reference
|
||||
$reference_with_suffix = $bank_reference_fi . "271500"; // Append "271500" to the end of the payment reference number
|
||||
$remainder = (int) bcmod($reference_with_suffix, '97'); // Calculate the remainder when dividing by 97
|
||||
$check_digit = 98 - $remainder; // Subtract the remainder from 98
|
||||
if ($check_digit < 10) { // If below 10 -> add leading zero
|
||||
$check_digit = '0' . $check_digit;
|
||||
}
|
||||
$bank_reference = "RF" . $check_digit . $bank_reference_fi; // Add "RF" and the check digit in front of the payment reference number
|
||||
} else { // FI payment reference number
|
||||
$bank_reference = $bank_reference_fi;
|
||||
}
|
||||
} else {
|
||||
$bank_reference = '';
|
||||
}
|
||||
return wordwrap($bank_reference, 4, ' ', true); // Split the string into chunks of 4 characters to improve readability
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate payment Barcode data with FI/RF bank payment reference number
|
||||
* @param string $recipient_account Account number for pank payment
|
||||
* @param string $amount Amount of invoice payment
|
||||
* @param string $bank_reference FI Payment reference number or RF creditor reference
|
||||
* @param string $due_date Payments due to date
|
||||
* @return string String String for FI/RF Payment barcode
|
||||
*/
|
||||
function generateInvoiceBarcodeData($recipient_account, $amount, $bank_reference, $due_date)
|
||||
{
|
||||
$barcodeData = '0';
|
||||
if (!empty($bank_reference)) {
|
||||
if (substr($bank_reference, 0, 2) === "RF") {
|
||||
$recipient_account = preg_replace('/[^0-9]/', '', $recipient_account); // Remove non-numeric characters from account number
|
||||
$recipient_account = str_pad($recipient_account, 16, '0', STR_PAD_LEFT); // Add leading zeros if necessary
|
||||
$referencetobarcode = preg_replace('/[^0-9]/', '', $bank_reference); // Remove non-numeric characters (spaces)
|
||||
$referencetobarcode = substr($referencetobarcode, 0, 2) . str_pad(substr($referencetobarcode, 2), 21, '0', STR_PAD_LEFT);
|
||||
$euros = floor(floatval($amount)); // Separate euros and cents
|
||||
$cents = round((floatval($amount) - $euros) * 100);
|
||||
$due_date = date('ymd', (int) $due_date); // Format the due date to YYMMDD
|
||||
$barcodeData = '5'; // Version number // Construct the string
|
||||
$barcodeData .= $recipient_account; // Recipient's account number (IBAN)
|
||||
$barcodeData .= sprintf('%06d', (int) $euros); // Euros
|
||||
$barcodeData .= sprintf('%02d', (int) $cents); // Cents
|
||||
$barcodeData .= $referencetobarcode; // Reference number
|
||||
$barcodeData .= (int) $due_date; // Due date YYMMDD
|
||||
} elseif (substr($bank_reference, 0, 2) !== "RF") {
|
||||
$recipient_account = preg_replace('/[^0-9]/', '', $recipient_account); // Remove non-numeric characters from account number
|
||||
$recipient_account = str_pad($recipient_account, 16, '0', STR_PAD_LEFT); // Add leading zeros if necessary
|
||||
$referencetobarcode = preg_replace('/[^0-9]/', '', $bank_reference); // Remove non-numeric characters (spaces)
|
||||
$euros = floor(floatval($amount)); // Separate euros and cents
|
||||
$cents = round((floatval($amount) - $euros) * 100);
|
||||
$due_date = date('ymd', (int) $due_date); // Format the due date to YYMMDD
|
||||
$barcodeData = '4'; // Version number // Construct the string
|
||||
$barcodeData .= $recipient_account; // Recipient's account number (IBAN)
|
||||
$barcodeData .= sprintf('%06d', (int) $euros); // Euros
|
||||
$barcodeData .= sprintf('%02d', (int) $cents); // Cents
|
||||
$barcodeData .= '000'; // Reserved
|
||||
$barcodeData .= str_pad($referencetobarcode, 20, '0', STR_PAD_LEFT); // Reference number
|
||||
$barcodeData .= (int) $due_date; // Due date YYMMDD
|
||||
}
|
||||
} else {
|
||||
$barcodeData = '';
|
||||
}
|
||||
return $barcodeData;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user