* 250826-e-einvoice: (29 commits) Update VENDOR : remove useless Factur-X norme 3 (May 15th, 2025) E-INVOICE : if upload an XML file than the embedded document will be saved separately, if there is no embedded document a standard document with info from XML will be generated E-INVOICE , when loading a XML , the file is splitted into a PDF and XML XMLInvoiceReader : extract information from XML E-INVOICE : corrige PriceAmount E-INVOICE : show the XML to download Database: upload file function E-INVOICE : export XML if exists from ledger_detail_bottom E-INVOICE : create standard invoice if not convert E-INVOICE: small bugs UBL21 E-INVOICE: negative amount e-invoice : add communication , bank and buyer reference e-invoice : display errors if cannot be created Typo : space quantity PHPUNIT : adapt 12.3 E-INVOICE: check data before generating E-INVOICE: add missing for Belgium : BuyerReference and Due_Date E-INVOICE: add code quantity E-INVOICE : add AdditionalDocument XMLInvoice adapt currency ...
259 lines
10 KiB
PHP
259 lines
10 KiB
PHP
<?php
|
|
|
|
/*
|
|
* * Copyright (C) 2021 Dany De Bontridder <dany@alchimerys.be>
|
|
*
|
|
* 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 2
|
|
* 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, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*
|
|
* Author : Dany De Bontridder danydb@noalyss.eu
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @file
|
|
* @brief
|
|
*/
|
|
use PHPUnit\Framework\TestCase;
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
/**
|
|
* @backupGlobals enabled
|
|
*/
|
|
require DIRTEST.'/global.php';
|
|
|
|
#[\AllowDynamicProperties]
|
|
class Acc_LetterTest extends TestCase
|
|
{
|
|
/**
|
|
* @var Fiche
|
|
*/
|
|
protected $object;
|
|
private $a_column;
|
|
/**
|
|
* Sets up the fixture, for example, opens a network connection.
|
|
* This method is called before a test method is executed.
|
|
*/
|
|
protected function setUp():void
|
|
{
|
|
include 'global.php';
|
|
$this->a_column=array(
|
|
"j_id",
|
|
"j_date",
|
|
"j_date_fmt",
|
|
"jr_pj_number",
|
|
"j_montant",
|
|
"j_debit",
|
|
"jr_comment",
|
|
"jr_internal",
|
|
"jr_id",
|
|
"jr_def_id",
|
|
"letter",
|
|
"letter_diff",
|
|
"currency_amount",
|
|
"currency_id",
|
|
"currency_rate",
|
|
"currency_rate_ref",
|
|
"cr_code_iso"
|
|
);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* the setUpBeforeClass():void template methods is called before the first test of the test case
|
|
* class is run
|
|
*/
|
|
public static function setUpBeforeClass():void
|
|
{
|
|
include 'global.php';
|
|
|
|
}
|
|
|
|
|
|
public static function dataget_Letter()
|
|
{
|
|
return array([22,577],[26,343]);
|
|
}
|
|
/**
|
|
* @brief
|
|
* @testdox testget_letterAccount Lettering_Account::get_letter
|
|
* @covers Lettering_Card::get_letter
|
|
* @dataProvider dataget_Letter
|
|
*/
|
|
#[DataProvider('dataget_Letter')]
|
|
public function testget_letterAccount($p_fiche_id,$p_jrnx_id)
|
|
{
|
|
global $g_connection;
|
|
$letter = new Lettering_Account($g_connection);
|
|
$fiche=new Fiche($g_connection,$p_fiche_id);
|
|
$letter->set_parameter('account', $fiche->get_attribute(ATTR_DEF_ACCOUNT));
|
|
$letter->set_parameter('start', '01.01.2010' );
|
|
$letter->set_parameter('end', '31.12.2019');
|
|
|
|
// lettered operations by card
|
|
$letter->get_letter();
|
|
$this->assertTrue(!empty($letter->content)&& is_array($letter->content)," result is not an array");
|
|
$this->assertTrue(isset($letter->content[0]['currency_id']),"missing column currency_id");
|
|
foreach ($this->a_column as $column) {
|
|
$this->assertTrue(array_key_exists($column,$letter->content[0]),"missing column $column");
|
|
}
|
|
|
|
// all operations by card
|
|
$letter->get_all();
|
|
|
|
$this->assertTrue(!empty($letter->content)&& is_array($letter->content)," result is not an array");
|
|
foreach ($this->a_column as $column) {
|
|
$this->assertTrue(array_key_exists($column,$letter->content[0]),"missing column $column");
|
|
}
|
|
|
|
// unlettered operations by card
|
|
$letter->get_unletter();
|
|
$this->assertTrue(!empty($letter->content)&& is_array($letter->content)," result is not an array");
|
|
foreach ($this->a_column as $column) {
|
|
$this->assertTrue(array_key_exists($column,$letter->content[0]),"missing column $column");
|
|
}
|
|
|
|
// lettered with different amount operations by card
|
|
$restore=$g_connection->get_value("select j_montant from jrnx where j_id=$1",[$p_jrnx_id]);
|
|
$g_connection->exec_sql("update jrnx set j_montant = j_montant -1 where j_id=$1 ",[$p_jrnx_id]);
|
|
$letter->get_letter_diff();
|
|
|
|
$this->assertTrue(!empty($letter->content)&& is_array($letter->content)," result is not an array");
|
|
foreach ($this->a_column as $column) {
|
|
$this->assertTrue(array_key_exists($column,$letter->content[0]),"missing column $column");
|
|
}
|
|
|
|
$g_connection->exec_sql("update jrnx set j_montant =$2 where j_id=$1 ",[$p_jrnx_id,$restore]);
|
|
|
|
}
|
|
/**
|
|
* @brief
|
|
* @testdox testget_letterCard Lettering_Card::get_letter
|
|
* @covers Lettering_Card::get_letter
|
|
* @dataProvider dataget_Letter
|
|
*/
|
|
#[DataProvider('dataget_Letter')]
|
|
public function testget_letterCard($p_fiche_id,$p_jrnx_id)
|
|
{
|
|
global $g_connection;
|
|
$letter = new Lettering_Card($g_connection);
|
|
$fiche=new Fiche($g_connection,$p_fiche_id);
|
|
$letter->set_parameter('quick_code', $fiche->get_attribute(ATTR_DEF_QUICKCODE));
|
|
$letter->set_parameter('start', '01.01.2010' );
|
|
$letter->set_parameter('end', '31.12.2019');
|
|
|
|
// lettered operations by card
|
|
$letter->get_letter();
|
|
$this->assertTrue(!empty($letter->content)&& is_array($letter->content)," result is not an array");
|
|
foreach ($this->a_column as $column) {
|
|
$this->assertTrue(array_key_exists($column,$letter->content[0]),"missing column $column");
|
|
}
|
|
// all operations by card
|
|
$letter->get_all();
|
|
|
|
$this->assertTrue(!empty($letter->content)&& is_array($letter->content)," result is not an array");
|
|
foreach ($this->a_column as $column) {
|
|
$this->assertTrue(array_key_exists($column,$letter->content[0]),"missing column $column");
|
|
}
|
|
// unlettered operations by card
|
|
$letter->get_unletter();
|
|
$this->assertTrue(!empty($letter->content)&& is_array($letter->content)," result is not an array");
|
|
$this->assertTrue(isset($letter->content[0]['currency_id']),"missing column currency_id");
|
|
foreach ($this->a_column as $column) {
|
|
$this->assertTrue(array_key_exists($column,$letter->content[0]),"missing column $column");
|
|
}
|
|
// lettered with different amount operations by card
|
|
$restore=$g_connection->get_value("select j_montant from jrnx where j_id=$1",[$p_jrnx_id]);
|
|
$g_connection->exec_sql("update jrnx set j_montant = j_montant -1 where j_id=$1 ",[$p_jrnx_id]);
|
|
$letter->get_letter_diff();
|
|
|
|
$this->assertTrue(!empty($letter->content)&& is_array($letter->content)," result is not an array");
|
|
foreach ($this->a_column as $column) {
|
|
$this->assertTrue(array_key_exists($column,$letter->content[0]),"missing column $column");
|
|
}
|
|
$g_connection->exec_sql("update jrnx set j_montant =$2 where j_id=$1 ",[$p_jrnx_id,$restore]);
|
|
|
|
}
|
|
public static function dataDateLimit()
|
|
{
|
|
return array(
|
|
[100,'01.01.2018','31.12.2018'],
|
|
[125,'01.01.2019','31.12.2019'],
|
|
[120,'01.01.2019','31.12.2019']
|
|
);
|
|
}
|
|
/**
|
|
* @testdox testDateLimitComputed Check the default date
|
|
* @global type $g_connection
|
|
* @param type $p_id
|
|
* @dataProvider dataDateLimit
|
|
*/
|
|
#[DataProvider('dataDateLimit')]
|
|
public function testDateLimitComputed($p_periode_id,$p_first_day,$p_last_day)
|
|
{
|
|
global $g_connection;
|
|
$user=new Noalyss_user($g_connection);
|
|
$restore=$user->get_periode();
|
|
$user->set_periode($p_periode_id);
|
|
|
|
$lettering=new Lettering($g_connection);
|
|
$lettering->set_parameter('quick_code', 'FOURNI');
|
|
$this->assertEquals($p_first_day,$lettering->get_parameter("start"),"first day incorrect");
|
|
$this->assertEquals($p_last_day,$lettering->get_parameter("end"),"last day incorrect");
|
|
|
|
$lettering=new Lettering_Card($g_connection);
|
|
$lettering->set_parameter('quick_code', 'FOURNI');
|
|
$this->assertEquals($p_first_day,$lettering->get_parameter("start"),"first day incorrect");
|
|
$this->assertEquals($p_last_day,$lettering->get_parameter("end"),"last day incorrect");
|
|
|
|
$lettering=new Lettering_Account($g_connection);
|
|
$lettering->set_parameter('quick_code', 'FOURNI');
|
|
$this->assertEquals($p_first_day,$lettering->get_parameter("start"),"first day incorrect");
|
|
$this->assertEquals($p_last_day,$lettering->get_parameter("end"),"last day incorrect");
|
|
}
|
|
/**
|
|
* @testdox testDateLimitGiven Check the default date
|
|
* @global type $g_connection
|
|
* @param type $p_id
|
|
* @dataProvider dataDateLimit
|
|
*/
|
|
#[DataProvider('dataDateLimit')]
|
|
public function testDateLimitGiven($p_periode_id,$p_first_day,$p_last_day)
|
|
{
|
|
global $g_connection;
|
|
|
|
$lettering=new Lettering($g_connection);
|
|
$lettering->set_parameter('quick_code', 'FOURNI');
|
|
$lettering->set_parameter('start', $p_first_day);
|
|
$lettering->set_parameter('end',$p_last_day);
|
|
$this->assertEquals($p_first_day,$lettering->get_parameter("start"),"first day incorrect");
|
|
$this->assertEquals($p_last_day,$lettering->get_parameter("end"),"last day incorrect");
|
|
|
|
$lettering=new Lettering_Card($g_connection);
|
|
$lettering->set_parameter('quick_code', 'FOURNI');
|
|
$lettering->set_parameter('start', $p_first_day);
|
|
$lettering->set_parameter('end',$p_last_day);
|
|
$this->assertEquals($p_first_day,$lettering->get_parameter("start"),"first day incorrect");
|
|
$this->assertEquals($p_last_day,$lettering->get_parameter("end"),"last day incorrect");
|
|
|
|
$lettering=new Lettering_Account($g_connection);
|
|
$lettering->set_parameter('quick_code', 'FOURNI');
|
|
$lettering->set_parameter('start', $p_first_day);
|
|
$lettering->set_parameter('end',$p_last_day);
|
|
$this->assertEquals($p_first_day,$lettering->get_parameter("start"),"first day incorrect");
|
|
$this->assertEquals($p_last_day,$lettering->get_parameter("end"),"last day incorrect");
|
|
}
|
|
|
|
}
|