New: [ task #286 ] Enhance rounding function of prices to allow round of

sum instead of sum of rounding
This commit is contained in:
Laurent Destailleur
2013-07-04 00:11:40 +02:00
parent 33ed654745
commit eef039e02f
3 changed files with 170 additions and 43 deletions

View File

@@ -1,5 +1,5 @@
<?php
/* Copyright (C) 2012 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2012-2013 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
@@ -157,9 +157,9 @@ class FactureTestRounding extends PHPUnit_Framework_TestCase
/**
* testFactureRoundingCreate2
*
*
* @return int
*
*
* @depends testFactureRoundingCreate1
* Test according to page http://wiki.dolibarr.org/index.php/Draft:VAT_calculation_and_rounding#Standard_usage
*/
@@ -194,5 +194,133 @@ class FactureTestRounding extends PHPUnit_Framework_TestCase
//$this->assertEquals($newlocalobject->total_ttc, 2.73);
return $result;
}
/**
* testFactureAddLine1
*
* @return void
*/
public function testFactureAddLine1()
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
// With option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND = 0
$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND=0;
$localobject1a=new Facture($this->savdb);
$localobject1a->initAsSpecimen('nolines');
$facid=$localobject1a->create($user);
$localobject1a->addline($facid, 'Line 1', 6.36, 15, 21); // This include update_price
print __METHOD__." id=".$facid." total_ttc=".$localobject1a->total_ttc."\n";
$this->assertEquals( 95.40, $localobject1a->total_ht);
$this->assertEquals( 20.03, $localobject1a->total_tva);
$this->assertEquals(115.43, $localobject1a->total_ttc);
// With option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND = 1
$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND=1;
$localobject1b=new Facture($this->savdb);
$localobject1b->initAsSpecimen('nolines');
$facid=$localobject1b->create($user);
$localobject1b->addline($facid, 'Line 1', 6.36, 15, 21); // This include update_price
print __METHOD__." id=".$facid." total_ttc=".$localobject1b->total_ttc."\n";
$this->assertEquals( 95.40, $localobject1b->total_ht, 'testFactureAddLine1 total_ht');
$this->assertEquals( 20.03, $localobject1b->total_tva, 'testFactureAddLine1 total_tva');
$this->assertEquals(115.43, $localobject1b->total_ttc, 'testFactureAddLine1 total_ttc');
}
/**
* testFactureAddLine2
*
* @return void
*
* @depends testFactureAddLine1
* The depends says test is run only if previous is ok
*/
public function testFactureAddLine2()
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
// With option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND = 0
$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND=0;
$localobject2=new Facture($this->savdb);
$localobject2->initAsSpecimen('nolines');
$facid=$localobject2->create($user);
$localobject2->addline($facid, 'Line 1', 6.36, 5, 21);
$localobject2->addline($facid, 'Line 2', 6.36, 5, 21);
$localobject2->addline($facid, 'Line 3', 6.36, 5, 21);
print __METHOD__." id=".$facid." total_ttc=".$localobject2->total_ttc."\n";
$this->assertEquals( 95.40, $localobject2->total_ht);
$this->assertEquals( 20.04, $localobject2->total_tva);
$this->assertEquals(115.44, $localobject2->total_ttc);
// With option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND = 1
$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND=1;
$localobject2=new Facture($this->savdb);
$localobject2->initAsSpecimen('nolines');
$facid=$localobject2->create($user);
$localobject2->addline($facid, 'Line 1', 6.36, 5, 21);
$localobject2->addline($facid, 'Line 2', 6.36, 5, 21);
$localobject2->addline($facid, 'Line 3', 6.36, 5, 21);
print __METHOD__." id=".$facid." total_ttc=".$localobject2->total_ttc."\n";
$this->assertEquals( 95.40, $localobject2->total_ht);
$this->assertEquals( 20.03, $localobject2->total_tva);
$this->assertEquals(115.43, $localobject2->total_ttc);
}
/**
* testFactureAddLine3
*
* @return void
*
* @depends testFactureAddLine2
* The depends says test is run only if previous is ok
*/
public function testFactureAddLine3()
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
// With option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND = 0
$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND=0;
$localobject3=new Facture($this->savdb);
$localobject3->initAsSpecimen('nolines');
$facid=$localobject3->create($user);
$localobject3->addline($facid, 'Line 1', 6.36, 3, 21);
$localobject3->addline($facid, 'Line 2', 6.36, 3, 21);
$localobject3->addline($facid, 'Line 3', 6.36, 3, 21);
$localobject3->addline($facid, 'Line 4', 6.36, 3, 21);
$localobject3->addline($facid, 'Line 5', 6.36, 3, 21);
print __METHOD__." id=".$facid." total_ttc=".$localobject3->total_ttc."\n";
$this->assertEquals( 95.40, $localobject3->total_ht);
$this->assertEquals( 20.05, $localobject3->total_tva);
$this->assertEquals(115.45, $localobject3->total_ttc);
// With option MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND = 1
$conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND=1;
$localobject3=new Facture($this->savdb);
$localobject3->initAsSpecimen('nolines');
$facid=$localobject3->create($user);
$localobject3->addline($facid, 'Line 1', 6.36, 3, 21);
$localobject3->addline($facid, 'Line 2', 6.36, 3, 21);
$localobject3->addline($facid, 'Line 3', 6.36, 3, 21);
$localobject3->addline($facid, 'Line 4', 6.36, 3, 21);
$localobject3->addline($facid, 'Line 5', 6.36, 3, 21);
print __METHOD__." id=".$facid." total_ttc=".$localobject3->total_ttc."\n";
$this->assertEquals( 95.40, $localobject3->total_ht);
$this->assertEquals( 20.03, $localobject3->total_tva);
$this->assertEquals(115.43, $localobject3->total_ttc);
}
}
?>