2012-09-23 16:25:08 +02:00
< ? php
2023-03-20 02:26:49 +01:00
/* Copyright ( C ) 2012 - 2023 Laurent Destailleur < eldy @ users . sourceforge . net >
2023-05-07 14:31:35 +02:00
* Copyright ( C ) 2023 Alexandre Janniaux < alexandre . janniaux @ gmail . com >
2024-11-14 00:16:43 +01:00
* Copyright ( C ) 2024 Frédéric France < frederic . france @ free . fr >
2012-09-23 16:25:08 +02:00
*
* 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
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2012-09-23 16:25:08 +02:00
* ( 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
* or see https :// www . gnu . org /
2012-09-23 16:25:08 +02:00
*/
/**
2012-09-23 17:11:01 +02:00
* \file test / phpunit / NumberingModulesTest . php
2012-09-23 16:25:08 +02:00
* \ingroup test
* \brief PHPUnit test
* \remarks To run this script as CLI : phpunit filename . php
*/
global $conf , $user , $langs , $db ;
//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
2014-05-01 19:57:53 +02:00
//require_once 'PHPUnit/Autoload.php';
2012-09-23 16:25:08 +02:00
require_once dirname ( __FILE__ ) . '/../../htdocs/master.inc.php' ;
2024-02-16 23:26:32 +01:00
require_once dirname ( __FILE__ ) . '/CommonClassTest.class.php' ;
2012-09-23 16:25:08 +02:00
2021-01-14 15:09:08 +01:00
if ( empty ( $user -> id )) {
2012-09-23 16:25:08 +02:00
print " Load permissions for admin user nb 1 \n " ;
$user -> fetch ( 1 );
2024-11-14 00:16:43 +01:00
$user -> loadRights ();
2012-09-23 16:25:08 +02:00
}
2024-02-19 15:28:21 +01:00
$conf -> global -> MAIN_DISABLE_ALL_MAILS = 1 ;
2012-09-23 16:25:08 +02:00
/**
* Class for PHPUnit tests
*
* @ backupGlobals disabled
* @ backupStaticAttributes enabled
* @ remarks backupGlobals must be disabled to have db , conf , user and lang not erased .
*/
2024-02-16 23:26:32 +01:00
class NumberingModulesTest extends CommonClassTest
2012-09-23 16:25:08 +02:00
{
2021-01-14 15:09:08 +01:00
/**
* testFactureMercure
*
* @ return int
*/
public function testFactureMercure ()
{
global $conf , $user , $langs , $db , $mysoc ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2017-10-04 01:11:19 +02:00
2012-09-23 16:25:08 +02:00
require_once dirname ( __FILE__ ) . '/../../htdocs/compta/facture/class/facture.class.php' ;
require_once dirname ( __FILE__ ) . '/../../htdocs/core/modules/facture/mod_facture_mercure.php' ;
// First we try with a simple mask, with no reset
// and we test counter is still increase second year.
2024-02-19 15:28:21 +01:00
$conf -> global -> FACTURE_ADDON = 'mercure' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}-{0000}' ;
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}-{0000}' ;
$conf -> global -> FACTURE_MERCURE_MASK_DEPOSIT = '{yyyy}-{0000}' ;
$conf -> global -> FACTURE_MERCURE_MASK_REPLACEMENT = '{yyyy}-{0000}' ;
$conf -> global -> INVOICE_CAN_ALWAYS_BE_REMOVED = 0 ;
$localobject = new Facture ( $db );
2013-01-16 15:54:07 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 17:38:22 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1915 ); // we use year 1915 to be sure to not have existing invoice for this year (useful only if numbering is {0000@1}
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
2013-01-16 15:54:07 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2016-01-31 20:38:11 +01:00
$this -> assertEquals ( '1915-0001' , $result , 'Test for {yyyy}-{0000}, 1st invoice' ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$result2 = $localobject -> create ( $user , 1 );
2017-05-21 23:06:45 +02:00
print __METHOD__ . " result2= " . $result . " \n " ;
2024-02-19 15:28:21 +01:00
$result3 = $localobject -> validate ( $user , $result ); // create invoice by forcing ref
2017-05-21 23:06:45 +02:00
print __METHOD__ . " result3= " . $result . " \n " ;
$this -> assertEquals ( 1 , $result3 , 'Test validation of invoice with forced ref is ok' ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$result = $localobject -> is_erasable ();
2013-04-16 15:49:00 +02:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
2017-10-04 01:11:19 +02:00
$this -> assertGreaterThanOrEqual ( 1 , $result , 'Test for is_erasable, 1st invoice' ); // Can be deleted
2023-03-19 20:29:34 +01:00
2024-02-19 15:28:21 +01:00
$localobject2 = new Facture ( $db );
2013-04-16 15:49:00 +02:00
$localobject2 -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject2 -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject2 -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1916 ); // we use following year for second invoice (there is no reset into mask)
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject2 , 'last' );
2013-04-16 15:49:00 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2016-01-31 20:38:11 +01:00
$this -> assertEquals ( '1915-0001' , $result , " Test to get last value with param 'last' " );
2024-02-19 15:28:21 +01:00
$result = $numbering -> getNextValue ( $mysoc , $localobject2 );
2013-01-16 15:54:07 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-01-12 17:14:13 +01:00
$this -> assertEquals ( '1916-0002' , $result ); // counter must be now 2 (not reset)
2024-02-19 15:28:21 +01:00
$result2 = $localobject2 -> create ( $user , 1 );
2017-05-21 23:06:45 +02:00
print __METHOD__ . " result2= " . $result . " \n " ;
2024-02-19 15:28:21 +01:00
$result3 = $localobject2 -> validate ( $user , $result ); // create invoice by forcing ref
2017-05-21 23:06:45 +02:00
print __METHOD__ . " result3= " . $result . " \n " ;
$this -> assertEquals ( 1 , $result3 , 'Test validation of invoice with forced ref is ok' ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$result = $localobject2 -> is_erasable ();
2013-04-16 15:49:00 +02:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
2017-10-04 01:11:19 +02:00
$this -> assertGreaterThanOrEqual ( 1 , $result ); // Can be deleted
2024-02-19 15:28:21 +01:00
$result = $localobject -> is_erasable ();
2013-04-16 15:49:00 +02:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
2017-12-05 19:24:26 +01:00
$this -> assertLessThanOrEqual ( 0 , $result , 'Test for {yyyy}-{0000} that is_erasable is 0 for 1st invoice' ); // 1 can no more be deleted (2 is more recent)
2013-06-06 21:18:50 +02:00
2012-09-23 16:25:08 +02:00
// Now we try with a reset
2024-02-19 15:28:21 +01:00
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}-{0000@1}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}-{0000@1}' ;
2012-09-23 16:25:08 +02:00
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2012-09-23 16:25:08 +02:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1910 ); // we use year 1910 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2013-09-11 14:18:56 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '1910-0001' , $result , 'Test for {yyyy}-{0000@1} 1st invoice' ); // counter must start to 1
2023-03-19 20:29:34 +01:00
2024-02-19 15:28:21 +01:00
$localobject2 = new Facture ( $db );
2013-09-11 14:18:56 +02:00
$localobject2 -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject2 -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject2 -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1910 ); // we use same year for second invoice (and there is a reset required)
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject2 );
2013-09-11 14:18:56 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '1910-0002' , $result , 'Test for {yyyy}-{0000@1} 2nd invoice, same day' ); // counter must be now 2
2023-03-19 20:29:34 +01:00
2024-02-19 15:28:21 +01:00
$localobject3 = new Facture ( $db );
2013-09-11 14:18:56 +02:00
$localobject3 -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject3 -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject3 -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1911 ); // we use next year for third invoice (and there is a reset required)
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject3 );
2012-09-23 16:25:08 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-01-12 17:14:13 +01:00
$this -> assertEquals ( '1911-0001' , $result , 'Test for {yyyy}-{0000@1} 3rd invoice, same day' ); // counter must be now 1
2012-09-23 16:25:08 +02:00
2013-09-11 14:18:56 +02:00
// Same but we add month after year
2024-02-19 15:28:21 +01:00
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}{mm}-{0000@1}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}{mm}-{0000@1}' ;
2023-03-19 20:29:34 +01:00
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2012-09-23 16:25:08 +02:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1920 ); // we use year 1920 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2012-09-23 16:25:08 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2013-09-11 14:18:56 +02:00
$this -> assertEquals ( '192001-0001' , $result , 'Test for {yyyy}{mm}-{0000@1} 1st invoice' ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$result = $localobject -> is_erasable ();
2013-04-16 15:49:00 +02:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
2017-10-04 01:11:19 +02:00
$this -> assertGreaterThanOrEqual ( 1 , $result ); // Can be deleted
2023-03-19 20:29:34 +01:00
2024-02-19 15:28:21 +01:00
$localobject2 = new Facture ( $db );
2013-04-16 15:49:00 +02:00
$localobject2 -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject2 -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject2 -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1921 ); // we use following year for second invoice (and there is a reset required)
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject2 );
$result2 = $localobject2 -> create ( $user , 1 );
$result3 = $localobject2 -> validate ( $user , $result );
2013-04-16 15:49:00 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-01-12 17:14:13 +01:00
$this -> assertEquals ( '192101-0001' , $result ); // counter must be reset to 1
2024-02-19 15:28:21 +01:00
$result = $localobject2 -> is_erasable ();
2021-01-14 15:09:08 +01:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 1 , $result ); // Can be deleted
2024-02-19 15:28:21 +01:00
$result = $localobject -> is_erasable ();
2021-01-14 15:09:08 +01:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 1 , $result ); // Case 1 can be deleted (because there was a reset for case 2)
2013-06-06 21:18:50 +02:00
2013-09-11 14:18:56 +02:00
// Same but we add month before year and use a year on 2 digits
2024-02-19 15:28:21 +01:00
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '[mm}{yy}-{0000@1}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{mm}{yy}-{0000@1}' ;
$localobject = new Facture ( $db );
2013-09-11 14:18:56 +02:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1925 ); // we use year 1925 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2013-09-11 14:18:56 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '0125-0001' , $result , 'Test for {mm}{yy}-{0000@1} 1st invoice' ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$result = $localobject -> is_erasable (); // This call get getNextNumRef with param 'last'
2013-09-11 14:18:56 +02:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
2017-10-04 01:11:19 +02:00
$this -> assertGreaterThanOrEqual ( 1 , $result ); // Can be deleted
2023-03-19 20:29:34 +01:00
2024-02-19 15:28:21 +01:00
$localobject2 = new Facture ( $db );
2013-09-11 14:18:56 +02:00
$localobject2 -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject2 -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject2 -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1925 ); // we use same year 1925 for second invoice (and there is a reset required)
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject2 );
$result2 = $localobject2 -> create ( $user , 1 );
$result3 = $localobject2 -> validate ( $user , $result );
2013-09-11 14:18:56 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-01-12 17:14:13 +01:00
$this -> assertEquals ( '0125-0002' , $result , 'Test for {mm}{yy}-{0000@1} 2nd invoice' ); // counter must be now 2
2024-02-19 15:28:21 +01:00
$result = $localobject2 -> is_erasable ();
2021-01-14 15:09:08 +01:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 1 , $result ); // Can be deleted
2024-02-19 15:28:21 +01:00
$result = $localobject -> is_erasable ();
2021-01-14 15:09:08 +01:00
print __METHOD__ . " is_erasable= " . $result . " \n " ;
$this -> assertLessThanOrEqual ( 0 , $result ); // Case 1 can not be deleted (because there is an invoice 2)
2023-03-19 20:29:34 +01:00
2024-02-19 15:28:21 +01:00
$localobject3 = new Facture ( $db );
2013-09-11 14:18:56 +02:00
$localobject3 -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject3 -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject3 -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1926 ); // we use following year for third invoice (and there is a reset required)
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject3 );
2013-09-11 14:18:56 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( '0126-0001' , $result , 'Test for {mm}{yy}-{0000@1} 3rd invoice' ); // counter must be now 1
2013-09-11 14:18:56 +02:00
2021-01-14 15:09:08 +01:00
// Try an offset when an invoice already exists
2024-02-19 15:28:21 +01:00
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}{mm}-{0000+9990}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}{mm}-{0000+9990}' ;
$result = $numbering -> getNextValue ( $mysoc , $localobject2 );
2012-09-23 16:25:08 +02:00
// Now we try with a different fiscal month (forced by mask)
2024-02-19 15:28:21 +01:00
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}{mm}-{0000@6}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}{mm}-{0000@6}' ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1930 ); // we use year 1930 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject , 'last' );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result for last= " . $result . " \n " ;
$this -> assertEquals ( '' , $result ); // no existing ref into reset range
2024-02-19 15:28:21 +01:00
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '193001-0001' , $result ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$result = $numbering -> getNextValue ( $mysoc , $localobject , 'last' );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result for last= " . $result . " \n " ;
$this -> assertEquals ( '193001-0001' , $result ); // last ref into reset range should be same than last created
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1930 ); // we use same year but fiscal month after
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject , 'last' );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result for last= " . $result . " \n " ;
$this -> assertEquals ( '' , $result ); // last ref into reset range should be ''
2024-02-19 15:28:21 +01:00
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '193012-0001' , $result ); // counter must be reset to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1931 ); // we use same fiscal year but different year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '193101-0002' , $result ); // counter must be 2
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1931 ); // we use different fiscal year but same year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '193112-0001' , $result ); // counter must be reset to 1
// Now we try with a different fiscal month (defined by SOCIETE_FISCAL_MONTH_START)
2024-02-19 15:28:21 +01:00
$conf -> global -> SOCIETE_FISCAL_MONTH_START = 6 ;
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}{mm}-{0000@0}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}{mm}-{0000@0}' ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1940 ); // we use year 1940 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '194001-0001' , $result ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1940 ); // we use same year but fiscal month after
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '194012-0001' , $result ); // counter must be reset to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-20 01:54:29 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1941 ); // we use same fiscal year but different year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '194101-0002' , $result ); // counter must be 2
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1941 ); // we use different discal year but same year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '194112-0001' , $result ); // counter must be reset to 1
// Now we try with a different fiscal month (defined by SOCIETE_FISCAL_MONTH_START) and we always want year of element
2024-02-19 15:28:21 +01:00
$conf -> global -> SOCIETE_FISCAL_MONTH_START = 6 ;
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}{mm}-{0000@=}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}{mm}-{0000@=}' ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1950 ); // we use year 1950 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '195001-0001' , $result ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1950 ); // we use same year but fiscal month after
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '195012-0001' , $result ); // counter must be reset to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1951 ); // we use same fiscal year but different year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '195101-0002' , $result ); // counter must be 2
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1951 ); // we use different discal year but same year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '195112-0001' , $result ); // counter must be reset to 1
// Now we try with a different fiscal month (defined by SOCIETE_FISCAL_MONTH_START) and we always want start year
2024-02-19 15:28:21 +01:00
$conf -> global -> SOCIETE_FISCAL_MONTH_START = 6 ;
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}{mm}-{0000@-}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}{mm}-{0000@-}' ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1960 ); // we use year 1960 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '195901-0001' , $result ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1960 ); // we use same year but fiscal month after
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '196012-0001' , $result ); // counter must be reset to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1961 ); // we use same fiscal year but different year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '196001-0002' , $result ); // counter must be 2
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1961 ); // we use different discal year but same year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '196112-0001' , $result ); // counter must be reset to 1
// Now we try with a different fiscal month (defined by SOCIETE_FISCAL_MONTH_START) and we always want end year
2024-02-19 15:28:21 +01:00
$conf -> global -> SOCIETE_FISCAL_MONTH_START = 6 ;
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}{mm}-{0000@+}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}{mm}-{0000@+}' ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1970 ); // we use year 1970 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '197001-0001' , $result ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1970 ); // we use same year but fiscal month after
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '197112-0001' , $result ); // counter must be reset to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1971 ); // we use same fiscal year but different year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '197101-0002' , $result ); // counter must be 2
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 12 , 1 , 1971 ); // we use different fiscal year but same year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '197212-0001' , $result ); // counter must be reset to 1
// Now we try with a reset every month (@99)
2024-02-19 15:28:21 +01:00
$conf -> global -> SOCIETE_FISCAL_MONTH_START = 6 ;
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{yyyy}{mm}-{0000@99}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{yyyy}{mm}-{0000@99}' ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-20 02:26:49 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1980 ); // we use year 1980 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '198001-0001' , $result ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-20 02:26:49 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1980 ); // we use year 1980 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '198001-0002' , $result ); // counter must start to 2
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-20 02:26:49 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 2 , 1 , 1980 ); // we use year 1980 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '198002-0001' , $result ); // counter must start to 1
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1981 ); // we use year 1981 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '198101-0001' , $result ); // counter must start to 1
// Test with {t} tag
2024-02-19 15:28:21 +01:00
$conf -> global -> SOCIETE_FISCAL_MONTH_START = 1 ;
$conf -> global -> FACTURE_MERCURE_MASK_CREDIT = '{t}{yyyy}{mm}-{0000}' ;
$conf -> global -> FACTURE_MERCURE_MASK_INVOICE = '{t}{yyyy}{mm}-{0000}' ;
2021-01-14 15:09:08 +01:00
2024-02-19 15:28:21 +01:00
$tmpthirdparty = new Societe ( $db );
2021-01-14 15:09:08 +01:00
$tmpthirdparty -> initAsSpecimen ();
$tmpthirdparty -> typent_code = 'TE_ABC' ;
2024-02-19 15:28:21 +01:00
$localobject = new Facture ( $db );
2021-01-14 15:09:08 +01:00
$localobject -> initAsSpecimen ();
2023-03-19 20:29:34 +01:00
$localobject -> fetch_thirdparty ();
2024-02-19 15:28:21 +01:00
$localobject -> date = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1982 ); // we use year 1982 to be sure to not have existing invoice for this year
$numbering = new mod_facture_mercure ();
$result = $numbering -> getNextValue ( $tmpthirdparty , $localobject );
$result2 = $localobject -> create ( $user , 1 );
$result3 = $localobject -> validate ( $user , $result );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( 'A198201-0001' , $result ); // counter must start to 1
return $result ;
}
2023-08-11 12:14:28 +02:00
/**
* testShipmentSafor
*
* @ return int
*/
public function testShipmentSafor ()
{
global $conf , $user , $langs , $db , $mysoc ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2023-08-11 12:14:28 +02:00
require_once dirname ( __FILE__ ) . '/../../htdocs/expedition/class/expedition.class.php' ;
require_once dirname ( __FILE__ ) . '/../../htdocs/core/modules/expedition/mod_expedition_safor.php' ;
2024-02-19 15:28:21 +01:00
$localobject = new Expedition ( $db );
2023-08-11 12:14:28 +02:00
$localobject -> initAsSpecimen ();
$localobject -> fetch_thirdparty ();
2024-01-12 17:14:13 +01:00
$localobject -> date_creation = dol_mktime ( 12 , 0 , 0 , 1 , 1 , 1980 ); // we use year 1915 to be sure to not have existing invoice for this year (useful only if numbering is {0000@1}
2024-02-19 15:28:21 +01:00
$numbering = new mod_expedition_safor ();
$result = $numbering -> getNextValue ( $mysoc , $localobject );
2023-08-11 12:14:28 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2023-08-12 01:08:04 +02:00
$this -> assertEquals ( 'SH8001-0003' , $result ); // counter must start to 1
2023-08-11 12:14:28 +02:00
}
2012-09-23 16:25:08 +02:00
}