From 9e2a0cb671ffce328d10ee54d60ab0e531ff8b81 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Tue, 9 Sep 2014 09:46:57 +0200
Subject: [PATCH] Fix: debug of accountancy module

---
 htdocs/{ => accountancy}/admin/fiscalyear.php |  24 ++-
 .../admin/fiscalyear_card.php                 |  63 +++----
 .../admin/fiscalyear_info.php                 |  10 +-
 htdocs/accountancy/journal/sellsjournal.php   |  84 +++++-----
 htdocs/core/class/fiscalyear.class.php        |  37 +++--
 htdocs/core/lib/fiscalyear.lib.php            |   6 +-
 htdocs/core/menus/standard/eldy.lib.php       |  19 ++-
 htdocs/core/modules/modAccounting.class.php   | 154 +++++++++---------
 8 files changed, 201 insertions(+), 196 deletions(-)
 rename htdocs/{ => accountancy}/admin/fiscalyear.php (92%)
 rename htdocs/{ => accountancy}/admin/fiscalyear_card.php (93%)
 rename htdocs/{ => accountancy}/admin/fiscalyear_info.php (94%)

diff --git a/htdocs/admin/fiscalyear.php b/htdocs/accountancy/admin/fiscalyear.php
similarity index 92%
rename from htdocs/admin/fiscalyear.php
rename to htdocs/accountancy/admin/fiscalyear.php
index dfb404b0b6b..5907c754644 100644
--- a/htdocs/admin/fiscalyear.php
+++ b/htdocs/accountancy/admin/fiscalyear.php
@@ -16,12 +16,12 @@
  */
 
 /**
- *      \file       htdocs/admin/fiscalyear.php
+ *      \file       htdocs/accountancy/admin/fiscalyear.php
  *		\ingroup    fiscal year
  *		\brief      Setup page to configure fiscal year
  */
 
-require '../main.inc.php';
+require '../../main.inc.php';
 
 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/core/class/fiscalyear.class.php';
@@ -55,6 +55,8 @@ $object = new Fiscalyear($db);
  * View
  */
 
+$max=100;
+
 $form = new Form($db);
 
 llxHeader('',$title);
@@ -68,16 +70,13 @@ $sql.= " FROM ".MAIN_DB_PREFIX."accounting_fiscalyear as f";
 $sql.= " WHERE f.entity = ".$conf->entity;
 
 $result = $db->query($sql);
-
-$max=10;
-
 if ($result)
 {
 	$var=false;
     $num = $db->num_rows($result);
 
     $i = 0;
-	
+
 	// Load attribute_label
 	print '<table class="noborder" width="100%">';
 	print '<tr class="liste_titre">';
@@ -85,13 +84,13 @@ if ($result)
 	print '<td>'.$langs->trans("Label").'</td>';
 	print '<td>'.$langs->trans("DateStart").'</td>';
 	print '<td>'.$langs->trans("DateEnd").'</td>';
-	print '<td>'.$langs->trans("Statut").'</td>';
+	print '<td align="right">'.$langs->trans("Statut").'</td>';
 	print '</tr>';
-	
+
 	if ($num)
     {
 	    $fiscalyearstatic=new Fiscalyear($db);
-    
+
 		while ($i < $num && $i < $max)
         {
             $obj = $db->fetch_object($result);
@@ -102,7 +101,7 @@ if ($result)
             print '<td align="left">'.$obj->label.'</td>';
             print '<td align="left">'.dol_print_date($db->jdate($obj->date_start),'day').'</td>';
 			print '<td align="left">'.dol_print_date($db->jdate($obj->date_end),'day').'</td>';
-            print '<td>'.$fiscalyearstatic->LibStatut($obj->statut,5).'</td>';
+            print '<td align="right">'.$fiscalyearstatic->LibStatut($obj->statut,5).'</td>';
             print '</tr>';
             $var=!$var;
             $i++;
@@ -113,10 +112,9 @@ if ($result)
     {
         print '<tr '.$bc[$var].'><td colspan="5">'.$langs->trans("None").'</td></tr>';
     }
-	
+
 	print '</table>';
-	print '</form>';
-} 
+}
 else
 {
 	dol_print_error($db);
diff --git a/htdocs/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php
similarity index 93%
rename from htdocs/admin/fiscalyear_card.php
rename to htdocs/accountancy/admin/fiscalyear_card.php
index b30cf2a69fc..423ac88b490 100644
--- a/htdocs/admin/fiscalyear_card.php
+++ b/htdocs/accountancy/admin/fiscalyear_card.php
@@ -16,11 +16,11 @@
  */
 
 /**
- *  \file       	htdocs/admin/fiscalyear_card.php
+ *  \file       	htdocs/accountancy/admin/fiscalyear_card.php
  *  \brief      	Page to show a fiscal year
  */
 
-require '../main.inc.php';
+require '../../main.inc.php';
 
 require_once DOL_DOCUMENT_ROOT.'/core/lib/fiscalyear.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/core/class/fiscalyear.class.php';
@@ -51,6 +51,7 @@ $object = new Fiscalyear($db);
 $date_start=dol_mktime(0,0,0,GETPOST('fiscalyearmonth','int'),GETPOST('fiscalyearday','int'),GETPOST('fiscalyearyear','int'));
 $date_end=dol_mktime(0,0,0,GETPOST('fiscalyearendmonth','int'),GETPOST('fiscalyearendday','int'),GETPOST('fiscalyearendyear','int'));
 
+
 /*
  * Actions
  */
@@ -74,9 +75,7 @@ else if ($action == 'add')
     if (! GETPOST('cancel','alpha'))
     {
         $error=0;
-		
-		$db->begin();
-		
+
 		$object->date_start		= $date_start;
 	    $object->date_end		= $date_end;
 		$object->label			= GETPOST('label','alpha');
@@ -96,21 +95,27 @@ else if ($action == 'add')
 
         if (! $error)
         {
-            $id = $object->create($user);
+			$db->begin();
+
+        	$id = $object->create($user);
 
             if ($id > 0)
             {
+            	$db->commit();
+
                 header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
                 exit;
             }
             else
-            {
-	            setEventMessage($object->error, 'errors');
+           {
+            	$db->rollback();
+
+            	setEventMessage($object->error, 'errors');
                 $action='create';
             }
         }
         else
-        {
+       {
             $action='create';
         }
     }
@@ -127,7 +132,7 @@ else if ($action == 'update')
     if (! GETPOST('cancel','alpha'))
     {
         $result = $object->fetch($id);
-		
+
 		$object->date_start	= empty($_POST["fiscalyear"])?'':$date_start;
 		$object->date_end	= empty($_POST["fiscalyearend"])?'':$date_end;
 		$object->label		= GETPOST('label','alpha');
@@ -175,7 +180,7 @@ if ($action == 'create')
 
 	// Label
     print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input name="label" size="32" value="' . GETPOST("label") . '"></td></tr>';
-	
+
 	// Date start
     print '<tr><td class="fieldrequired">'.$langs->trans("DateStart").'</td><td>';
     print $form->select_date(($date_start?$date_start:''),'fiscalyear');
@@ -185,7 +190,7 @@ if ($action == 'create')
     print '<tr><td class="fieldrequired">'.$langs->trans("DateEnd").'</td><td>';
     print $form->select_date(($date_end?$date_end:-1),'fiscalyearend');
     print '</td></tr>';
-	
+
 	// Statut
     print '<tr>';
     print '<td class="fieldrequired">'.$langs->trans("Statut").'</td>';
@@ -207,11 +212,11 @@ else if ($id)
     {
         $head = fiscalyear_prepare_head($object);
 
-        dol_fiche_head($head, 'card', $langs->trans("FiscalYearCard"), 0, 'cron');
-
         if ($action == 'edit')
         {
-			print '<form name="update" action="' . $_SERVER["PHP_SELF"] . '" method="POST">' . "\n";
+        	dol_fiche_head($head, 'card', $langs->trans("FiscalYearCard"), 0, 'cron');
+
+        	print '<form name="update" action="' . $_SERVER["PHP_SELF"] . '" method="POST">' . "\n";
             print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
             print '<input type="hidden" name="action" value="update">';
             print '<input type="hidden" name="id" value="'.$id.'">';
@@ -223,12 +228,12 @@ else if ($id)
             print '<td width="20%">'.$langs->trans("Ref").'</td><td>';
             print $object->ref;
             print '</td></tr>';
-			
+
             // Label
             print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td>';
             print '<input name="label" class="flat" size="32" value="'.$object->label.'">';
             print '</td></tr>';
-			
+
 			// Date start
             print '<tr><td class="fieldrequired">'.$langs->trans("DateStart").'</td><td>';
             print $form->select_date($object->date_start?$object->date_start:-1,'fiscalyear');
@@ -238,7 +243,7 @@ else if ($id)
             print '<tr><td class="fieldrequired">'.$langs->trans("DateEnd").'</td><td>';
             print $form->select_date($object->date_end?$object->date_end:-1,'fiscalyearend');
             print '</td></tr>';
-			
+
 			// Statut
 			print '<tr><td>'.$langs->trans("Statut").'</td><td>';
 			print $form->selectarray('statut',$statut2label,$object->statut);
@@ -252,7 +257,7 @@ else if ($id)
 
             print '</form>';
 
-            print '</div>';
+            dol_fiche_end();
         }
         else
         {
@@ -264,18 +269,20 @@ else if ($id)
                 print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("DeleteFiscalYear"),$langs->trans("ConfirmDeleteFiscalYear"),"confirm_delete");
 
             }
-			
-			print '<table class="border" width="100%">';
+
+        	dol_fiche_head($head, 'card', $langs->trans("FiscalYearCard"), 0, 'cron');
+
+        	print '<table class="border" width="100%">';
 
             $linkback = '<a href="'.DOL_URL_ROOT.'/admin/fiscalyear.php">'.$langs->trans("BackToList").'</a>';
-			
+
             // Ref
             print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td width="50%">';
             print $object->ref;
 			print '</td><td width="25%">';
 			print $linkback;
             print '</td></tr>';
-			
+
 			// Label
             print '<tr><td valign="top">';
             print $form->editfieldkey("Label",'label',$object->label,$object,$conf->global->MAIN_EDIT_ALSO_INLINE,'alpha:32');
@@ -289,7 +296,7 @@ else if ($id)
             print '</td><td colspan="2">';
             print $form->editfieldval("Date",'date_start',$object->date_start,$object,$conf->global->MAIN_EDIT_ALSO_INLINE,'datepicker');
             print '</td></tr>';
-			
+
 			// Date end
             print '<tr><td>';
             print $form->editfieldkey("Date",'date_end',$object->date_end,$object,$conf->global->MAIN_EDIT_ALSO_INLINE,'datepicker');
@@ -300,9 +307,9 @@ else if ($id)
             // Statut
             print '<tr><td>'.$langs->trans("Status").'</td><td colspan="2">'.$object->getLibStatut(4).'</td></tr>';
 
-            print "</table><br>";
+            print "</table>";
 
-            print '</div>';
+            dol_fiche_end();
 
             /*
              * Barre d'actions
@@ -311,9 +318,9 @@ else if ($id)
             print '<div class="tabsAction">';
 
             print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&id='.$id.'">'.$langs->trans('Modify').'</a>';
-            
+
 			print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?action=delete&id='.$id.'">'.$langs->trans('Delete').'</a>';
-            
+
             print '</div>';
         }
     }
diff --git a/htdocs/admin/fiscalyear_info.php b/htdocs/accountancy/admin/fiscalyear_info.php
similarity index 94%
rename from htdocs/admin/fiscalyear_info.php
rename to htdocs/accountancy/admin/fiscalyear_info.php
index c59d75c8376..b6fa546edff 100644
--- a/htdocs/admin/fiscalyear_info.php
+++ b/htdocs/accountancy/admin/fiscalyear_info.php
@@ -16,11 +16,11 @@
  */
 
 /**
- *  \file       	htdocs/admin/fiscalyear_card.php
+ *  \file       	htdocs/accountancy/admin/fiscalyear_card.php
  *  \brief      	Page to show info of a fiscal year
  */
 
-require '../main.inc.php';
+require '../../main.inc.php';
 
 require_once DOL_DOCUMENT_ROOT.'/core/lib/fiscalyear.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
@@ -43,15 +43,15 @@ if ($id)
 	$object = new Fiscalyear($db);
 	$object->fetch($id);
 	$object->info($id);
-	
+
 	$head = fiscalyear_prepare_head($object);
-	
+
 	dol_fiche_head($head, 'info', $langs->trans("FiscalYearCard"), 0, 'cron');
 
     print '<table width="100%"><tr><td>';
     dol_print_object_info($object);
     print '</td></tr></table>';
-      
+
     print '</div>';
 }
 
diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php
index f1f61b0062a..587a0d387a4 100644
--- a/htdocs/accountancy/journal/sellsjournal.php
+++ b/htdocs/accountancy/journal/sellsjournal.php
@@ -29,12 +29,12 @@
  */
 
 require '../../main.inc.php';
-	
+
 // Class
 require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
-require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php');
+require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
 require_once DOL_DOCUMENT_ROOT.'/societe/class/client.class.php';
 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php';
 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
@@ -118,16 +118,16 @@ if ($result) {
 	$tabtva = array ();
 	$tabttc = array ();
 	$tabcompany = array ();
-	
+
 	$num = $db->num_rows($result);
 	$i = 0;
-	
+
 	while ( $i < $num ) {
 		$obj = $db->fetch_object($result);
 		// les variables
 		$cptcli = (! empty($conf->global->COMPTA_ACCOUNT_CUSTOMER)) ? $conf->global->COMPTA_ACCOUNT_CUSTOMER : $langs->trans("CodeNotDef");
 		$compta_soc = (! empty($obj->code_compta)) ? $obj->code_compta : $cptcli;
-		
+
 		$compta_prod = $obj->compte;
 		if (empty($compta_prod)) {
 			if ($obj->product_type == 0)
@@ -137,7 +137,7 @@ if ($result) {
 		}
 		$cpttva = (! empty($conf->global->COMPTA_VAT_ACCOUNT)) ? $conf->global->COMPTA_VAT_ACCOUNT : $langs->trans("CodeNotDef");
 		$compta_tva = (! empty($obj->account_tva) ? $obj->account_tva : $cpttva);
-		
+
 		// Invoice lines
 		$tabfac[$obj->rowid]["date"] = $obj->df;
 		$tabfac[$obj->rowid]["ref"] = $obj->facnumber;
@@ -156,9 +156,9 @@ if ($result) {
 		$tabcompany[$obj->rowid] = array (
 				'id' => $obj->socid,
 				'name' => $obj->name,
-				'code_client' => $obj->code_compta 
+				'code_client' => $obj->code_compta
 		);
-		
+
 		$i ++;
 	}
 } else {
@@ -172,7 +172,7 @@ if ($result) {
 // Bookkeeping Write
 if ($action == 'writebookkeeping') {
 	$now = dol_now();
-	
+
 	foreach ( $tabfac as $key => $val ) {
 		foreach ( $tabttc[$key] as $k => $mt ) {
 			$bookkeeping = new BookKeeping($db);
@@ -190,10 +190,10 @@ if ($action == 'writebookkeeping') {
 			$bookkeeping->debit = ($mt >= 0) ? $mt : 0;
 			$bookkeeping->credit = ($mt < 0) ? $mt : 0;
 			$bookkeeping->code_journal = $conf->global->ACCOUNTING_SELL_JOURNAL;
-			
+
 			$bookkeeping->create();
 		}
-		
+
 		// Product / Service
 		foreach ( $tabht[$key] as $k => $mt ) {
 			if ($mt) {
@@ -215,12 +215,12 @@ if ($action == 'writebookkeeping') {
 					$bookkeeping->debit = ($mt < 0) ? $mt : 0;
 					$bookkeeping->credit = ($mt >= 0) ? $mt : 0;
 					$bookkeeping->code_journal = $conf->global->ACCOUNTING_SELL_JOURNAL;
-					
+
 					$bookkeeping->create();
 				}
 			}
 		}
-		
+
 		// VAT
 		// var_dump($tabtva);
 		foreach ( $tabtva[$key] as $k => $mt ) {
@@ -241,7 +241,7 @@ if ($action == 'writebookkeeping') {
 				$bookkeeping->debit = ($mt < 0) ? $mt : 0;
 				$bookkeeping->credit = ($mt >= 0) ? $mt : 0;
 				$bookkeeping->code_journal = $conf->global->ACCOUNTING_SELL_JOURNAL;
-				
+
 				$bookkeeping->create();
 			}
 		}
@@ -250,21 +250,21 @@ if ($action == 'writebookkeeping') {
 // export csv
 if ($action == 'export_csv') {
 	$sep = $conf->global->ACCOUNTING_SEPARATORCSV;
-	
+
 	header('Content-Type: text/csv');
 	header('Content-Disposition: attachment;filename=journal_ventes.csv');
-	
+
 	$companystatic = new Client($db);
-	
+
 	if ($conf->global->ACCOUNTING_MODELCSV == 1) 	// Modèle Export Cegid Expert
 	{
 		foreach ( $tabfac as $key => $val ) {
 			$companystatic->id = $tabcompany[$key]['id'];
 			$companystatic->name = $tabcompany[$key]['name'];
 			$companystatic->client = $tabcompany[$key]['code_client'];
-			
+
 			$date = dol_print_date($db->jdate($val["date"]), '%d%m%Y');
-			
+
 			print $date . $sep;
 			print $conf->global->ACCOUNTING_SELL_JOURNAL . $sep;
 			print length_accountg($conf->global->COMPTA_ACCOUNT_CUSTOMER) . $sep;
@@ -276,7 +276,7 @@ if ($action == 'export_csv') {
 			}
 			print $val["ref"];
 			print "\n";
-			
+
 			// Product / Service
 			foreach ( $tabht[$key] as $k => $mt ) {
 				if ($mt) {
@@ -312,7 +312,7 @@ if ($action == 'export_csv') {
 			$companystatic->id = $tabcompany[$key]['id'];
 			$companystatic->name = $tabcompany[$key]['name'];
 			$companystatic->client = $tabcompany[$key]['code_client'];
-			
+
 			$date = dol_print_date($db->jdate($val["date"]), 'day');
 			print '"' . $date . '"' . $sep;
 			print '"' . $val["ref"] . '"' . $sep;
@@ -323,7 +323,7 @@ if ($action == 'export_csv') {
 				print '"' . ($mt < 0 ? price(- $mt) : '') . '"';
 			}
 			print "\n";
-			
+
 			// Product / Service
 			foreach ( $tabht[$key] as $k => $mt ) {
 				if ($mt) {
@@ -336,7 +336,7 @@ if ($action == 'export_csv') {
 					print "\n";
 				}
 			}
-			
+
 			// VAT
 			// var_dump($tabtva);
 			foreach ( $tabtva[$key] as $k => $mt ) {
@@ -353,11 +353,11 @@ if ($action == 'export_csv') {
 		}
 	}
 } else {
-	
+
 	$form = new Form($db);
-	
+
 	llxHeader('', $langs->trans("SellsJournal"));
-	
+
 	$nom = $langs->trans("SellsJournal");
 	$nomlink = '';
 	$periodlink = '';
@@ -370,11 +370,11 @@ if ($action == 'export_csv') {
 		$description .= $langs->trans("DepositsAreIncluded");
 	$period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1);
 	report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => ''));
-	
+
 	print '<input type="button" class="button" style="float: right;" value="Export CSV" onclick="launch_export();" />';
-	
+
 	print '<input type="button" class="button" value="' . $langs->trans("WriteBookKeeping") . '" onclick="writebookkeeping();" />';
-	
+
 	print '
 	<script type="text/javascript">
 		function launch_export() {
@@ -388,12 +388,12 @@ if ($action == 'export_csv') {
 		    $("div.fiche div.tabBar form input[name=\"action\"]").val("");
 		}
 	</script>';
-	
+
 	/*
 	 * Show result array
 	 */
 	print '<br><br>';
-	
+
 	$i = 0;
 	print "<table class=\"noborder\" width=\"100%\">";
 	print "<tr class=\"liste_titre\">";
@@ -404,23 +404,23 @@ if ($action == 'export_csv') {
 	print "<td align='right'>" . $langs->trans("Debit") . "</td>";
 	print "<td align='right'>" . $langs->trans("Credit") . "</td>";
 	print "</tr>\n";
-	
+
 	$var = true;
 	$r = '';
-	
+
 	$invoicestatic = new Facture($db);
 	$companystatic = new Client($db);
-	
+
 	foreach ( $tabfac as $key => $val ) {
 		$invoicestatic->id = $key;
 		$invoicestatic->ref = $val["ref"];
 		$invoicestatic->type = $val["type"];
 		$invoicestatic->description = html_entity_decode(dol_trunc($val["description"], 32));
-		
+
 		$date = dol_print_date($db->jdate($val["date"]), 'day');
-		
+
 		print "<tr " . $bc[$var] . ">";
-		
+
 		// Third party
 		// print "<td>".$conf->global->COMPTA_JOURNAL_SELL."</td>";
 		print "<td>" . $date . "</td>";
@@ -436,7 +436,7 @@ if ($action == 'export_csv') {
 			print "<td align='right'>" . ($mt < 0 ? price(- $mt) : '') . "</td>";
 		}
 		print "</tr>";
-		
+
 		// Product / Service
 		foreach ( $tabht[$key] as $k => $mt ) {
 			if ($mt) {
@@ -451,7 +451,7 @@ if ($action == 'export_csv') {
 				print "</tr>";
 			}
 		}
-		
+
 		// VAT
 		// var_dump($tabtva);
 		foreach ( $tabtva[$key] as $k => $mt ) {
@@ -467,12 +467,12 @@ if ($action == 'export_csv') {
 				print "</tr>";
 			}
 		}
-		
+
 		$var = ! $var;
 	}
-	
+
 	print "</table>";
-	
+
 	// End of page
 	llxFooter();
 }
diff --git a/htdocs/core/class/fiscalyear.class.php b/htdocs/core/class/fiscalyear.class.php
index 39e72ff7416..1abde51c263 100644
--- a/htdocs/core/class/fiscalyear.class.php
+++ b/htdocs/core/class/fiscalyear.class.php
@@ -54,7 +54,7 @@ class Fiscalyear
 	function __construct($db)
 	{
 		$this->db = $db;
-		
+
 		$this->statuts_short = array(0 => 'Opened', 1 => 'Closed');
         $this->statuts = array(0 => 'Opened', 1 => 'Closed');
 
@@ -70,9 +70,9 @@ class Fiscalyear
 	function create($user)
 	{
 		global $conf;
-		
+
 		$error = 0;
-		
+
 		$now=dol_now();
 
 		$this->db->begin();
@@ -88,7 +88,7 @@ class Fiscalyear
 		$sql.= ") VALUES (";
 		$sql.= " '".$this->label."'";
 		$sql.= ", '".$this->db->idate($this->date_start)."'";
-		$sql.= ", '".$this->db->idate($this->date_end)."'";
+		$sql.= ", ".($this->date_end ? "'".$this->db->idate($this->date_end)."'":"null");
 		$sql.= ", ".$this->statut;
 		$sql.= ", ".$conf->entity;
 		$sql.= ", '".$this->db->idate($now)."'";
@@ -109,19 +109,19 @@ class Fiscalyear
 			}
 			else
 			{
-				$this->error=$this->db->error();
+				$this->error=$this->db->lasterror();
 				$this->db->rollback();
 				return $result;
 			}
 		}
 		else
 		{
-			$this->error=$this->db->error()." sql=".$sql;
+			$this->error=$this->db->lasterror()." sql=".$sql;
 			$this->db->rollback();
 			return -1;
 		}
 	}
-	
+
 	/**
 	 *	Update record
 	 *
@@ -138,15 +138,15 @@ class Fiscalyear
             $this->error='ErrorBadParameter';
             return -1;
         }
-        
+
 		$this->db->begin();
 
-		$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_fiscalyear ";
+		$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_fiscalyear";
 		$sql .= " SET label = '".$this->label."'";
 		$sql .= ", date_start = '".$this->db->idate($this->date_start)."'";
-		$sql .= ", date_end = '".$this->db->idate($this->date_end)."'";
+		$sql .= ", date_end = ".($this->date_end ? "'".$this->db->idate($this->date_end)."'" : "null");
 		$sql .= ", statut = '".$this->statut."'";
-		$sql .= ", datec = " . ($this->datec != '' ? $this->db->idate($this->datec) : 'null');
+		$sql .= ", datec = " . ($this->datec != '' ? "'".$this->db->idate($this->datec)."'" : 'null');
 		$sql .= ", fk_user_modif = " . $user->id;
 		$sql .= " WHERE rowid = ".$this->id;
 
@@ -160,11 +160,12 @@ class Fiscalyear
 		else
 		{
 			$this->error=$this->db->lasterror();
+			dol_syslog($this->error, LOG_ERR);
 			$this->db->rollback();
 			return -1;
 		}
 	}
-	
+
 	/**
 	* Load an object from database
 	*
@@ -194,11 +195,11 @@ class Fiscalyear
 		}
 		else
 		{
-			$this->error=$this->db->error();
+			$this->error=$this->db->lasterror();
 			return -1;
 		}
 	}
-	
+
    /**
 	*	Delete record
 	*
@@ -220,12 +221,12 @@ class Fiscalyear
 		}
 		else
 		{
-			$this->error=$this->db->error();
+			$this->error=$this->db->lasterror();
 			$this->db->rollback();
 			return -1;
 		}
 	}
-	
+
 	/**
 	 * Give a label from a status
 	 *
@@ -238,7 +239,7 @@ class Fiscalyear
 	}
 
 	/**
-	 *  Give a label from a status 
+	 *  Give a label from a status
 	 *
 	 *  @param	int		$statut     Id status
 	 *  @param  int		$mode       0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto
@@ -277,7 +278,7 @@ class Fiscalyear
 			if ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut8');
 		}
 	}
-	
+
 	/**
 	 * Information on record
 	 *
diff --git a/htdocs/core/lib/fiscalyear.lib.php b/htdocs/core/lib/fiscalyear.lib.php
index 1db099b24bf..5d27760b41f 100644
--- a/htdocs/core/lib/fiscalyear.lib.php
+++ b/htdocs/core/lib/fiscalyear.lib.php
@@ -34,7 +34,7 @@ function fiscalyear_prepare_head($object)
 	$h = 0;
 	$head = array();
 
-	$head[$h][0] = DOL_URL_ROOT . '/admin/fiscalyear_card.php?id=' . $object->id;
+	$head[$h][0] = DOL_URL_ROOT . '/accountancy/admin/fiscalyear_card.php?id=' . $object->id;
 	$head[$h][1] = $langs->trans("Card");
 	$head[$h][2] = 'card';
 	$h++;
@@ -44,8 +44,8 @@ function fiscalyear_prepare_head($object)
     // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__');   to add new tab
     // $this->tabs = array('entity:-tabname);   												to remove a tab
 	complete_head_from_modules($conf,$langs,$object,$head,$h,'fiscalyear');
-	
-	$head[$h][0] = DOL_URL_ROOT . '/admin/fiscalyear_info.php?id=' . $object->id;
+
+	$head[$h][0] = DOL_URL_ROOT . '/accountancy/admin/fiscalyear_info.php?id=' . $object->id;
 	$head[$h][1] = $langs->trans("Info");
 	$head[$h][2] = 'info';
 	$h++;
diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php
index 2ca71223ff2..d8de29fd227 100644
--- a/htdocs/core/menus/standard/eldy.lib.php
+++ b/htdocs/core/menus/standard/eldy.lib.php
@@ -501,7 +501,6 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 					$newmenu->add("/admin/modules.php?mainmenu=home", $langs->trans("Modules").$warnpicto,1);
 					$newmenu->add("/admin/menus.php?mainmenu=home", $langs->trans("Menus"),1);
 					$newmenu->add("/admin/ihm.php?mainmenu=home", $langs->trans("GUISetup"),1);
-					$newmenu->add("/admin/fiscalyear.php?mainmenu=home", $langs->trans("Fiscalyear"),1);
 					if (! in_array($langs->defaultlang,array('en_US','en_GB','en_NZ','en_AU','fr_FR','fr_BE','es_ES','ca_ES')))
 					{
 						if (empty($leftmenu) || $leftmenu=="setup") $newmenu->add("/admin/translation.php", $langs->trans("Translation"),1);
@@ -863,18 +862,20 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 			if (! empty($conf->accounting->enabled))
 			{
 				$langs->load("accountancy");
-				
+
 				$newmenu->add("/accountancy/customer/index.php?leftmenu=ventil_customer",$langs->trans("CustomersVentilation"),0,$user->rights->accounting->ventilation->read, '', $mainmenu, 'ventil_customer');
 				if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/customer/list.php",$langs->trans("ToDispatch"),1,$user->rights->accounting->ventilation->read);
 				if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/customer/lines.php",$langs->trans("Dispatched"),1,$user->rights->accounting->ventilation->read);
-				
+
 				$newmenu->add("/accountancy/supplier/index.php?leftmenu=ventil_supplier",$langs->trans("SuppliersVentilation"),0,$user->rights->accounting->ventilation->read, '', $mainmenu, 'ventil_supplier');
 				if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/supplier/list.php",$langs->trans("ToDispatch"),1,$user->rights->accounting->ventilation->read);
 				if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/supplier/lines.php",$langs->trans("Dispatched"),1,$user->rights->accounting->ventilation->read);
-				
+
 				$newmenu->add("/accountancy/bookkeeping/list.php?leftmenu=bookkeeping",$langs->trans("Bookkeeping"),0,$user->rights->accounting->mouvements->lire, '', $mainmenu, 'bookeeping');
 				if (empty($leftmenu) || $leftmenu=="bookeeping") $newmenu->add("/accountancy/bookkeeping/listbyyear.php",$langs->trans("ByYear"),1,$user->rights->accounting->mouvements->lire);
 				if (empty($leftmenu) || $leftmenu=="bookeeping") $newmenu->add("/accountancy/bookkeeping/balancebymonth.php.php",$langs->trans("AccountBalanceByMonth"),1,$user->rights->accounting->mouvements->lire);
+
+				$newmenu->add("/accountancy/admin/fiscalyear.php?mainmenu=accountancy", $langs->trans("Fiscalyear"),0,$user->rights->accounting->close, '', $mainmenu, 'fiscalyear');
 			}
 
 			// Rapports
@@ -911,7 +912,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 					//journaux
 					if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/journal/sellsjournal.php?leftmenu=ca",$langs->trans("SellsJournal"),1,$user->rights->compta->resultat->lire);
 					if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/journal/purchasesjournal.php?leftmenu=ca",$langs->trans("PurchasesJournal"),1,$user->rights->compta->resultat->lire);
-				}	
+				}
 			}
 		}
 
@@ -1254,12 +1255,12 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 			else dol_print_error($db);
 			$db->free($resql);
 		}
-		
+
 		// Accountancy journals
 		if (! empty($conf->accounting->enabled) && !empty($user->rights->accounting->mouvements->lire) &&  $mainmenu == 'accountancy')
 		{
 			$newmenu->add('/accountancy/journal/index.php',$langs->trans("Journaux"),0,$user->rights->banque->lire);
-		
+
 			$sql = "SELECT rowid, label, accountancy_journal";
 			$sql.= " FROM ".MAIN_DB_PREFIX."bank_account";
 			$sql.= " WHERE entity = ".$conf->entity;
@@ -1273,7 +1274,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 				$i = 0;
 
 				if ($numr > 0)
-				
+
 				while ($i < $numr)
 				{
 					$objp = $db->fetch_object($resql);
@@ -1283,7 +1284,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 			}
 			else dol_print_error($db);
 			$db->free($resql);
-			
+
 			// Add other journal
 			$newmenu->add("/accountancy/journal/sellsjournal.php",$langs->trans("SellsJournal"),1,$user->rights->accounting->comptarapport->lire);
 			$newmenu->add("/accountancy/journal/purchasesjournal.php",$langs->trans("PurchasesJournal"),1,$user->rights->accounting->comptarapport->lire);
diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php
index 308c765f5da..8035a60284d 100644
--- a/htdocs/core/modules/modAccounting.class.php
+++ b/htdocs/core/modules/modAccounting.class.php
@@ -1,7 +1,7 @@
 <?php
 /* Copyright (C) 2013-2014 Olivier Geffroy		<jeff@jeffinfo.com>
  * Copyright (C) 2013-2014 Alexandre Spangaro	<alexandre.spangaro@gmail.com>
- * Copyright (C) 2014      Ari Elbaz (elarifr)	<github@accedinfo.com> 
+ * Copyright (C) 2014      Ari Elbaz (elarifr)	<github@accedinfo.com>
  * Copyright (C) 2014 	   Florian Henry        <florian.henry@open-concept.pro>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -19,7 +19,7 @@
  */
 
 /**
- * \file		accountingex/core/modules/modAccountingExpert.class.php
+ * \file		accountingex/core/modules/modAccounting.class.php
  * \ingroup		Accounting Expert
  * \brief		Module to activate Accounting Expert module
  */
@@ -42,164 +42,154 @@ class modAccounting extends DolibarrModules
 
         $this->db = $db;
 		$this->numero = 50400;
-		
+
 		$this->family = "financial";
 		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
 		$this->name = preg_replace('/^mod/i', '', get_class($this));
-		$this->description = "Advanced manage of accounting";
-		
+		$this->description = "Advanced accounting management";
+
 		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
 		$this->version = 'development';
-		
+
 		$this->const_name = 'MAIN_MODULE_' . strtoupper($this->name);
 		$this->special = 0;
 		$this->picto = 'accounting';
-		
+
 		// Defined if the directory /mymodule/inc/triggers/ contains triggers or not
 		// $this->triggers = 1;
-		
+
 		// Data directories to create when module is enabled
-		$this->dirs = array (
-				'/accountingex/temp' 
-		);
-		
+		$this->dirs = array('/accounting/temp');
+
 		// Config pages
 		$this->config_page_url = array('index.php@accountancy');
-		
+
 		// Dependencies
-		$this->depends = array ("modFacture","modBanque","modTax"); // List of modules id that must be enabled if this module is enabled
-		$this->requiredby = array (); // List of modules id to disable if this one is disabled
-		$this->conflictwith = array ("modComptabilite"); // List of modules are in conflict with this module
-		$this->phpmin = array (
-				5,
-				2 
-		); // Minimum version of PHP required by module
-		$this->need_dolibarr_version = array (
-				3,
-				6
-		); // Minimum version of Dolibarr required by module
-		$this->langfiles = array (
-				"accountancy" 
-		);
-		
+		$this->depends = array("modFacture","modBanque","modTax"); // List of modules id that must be enabled if this module is enabled
+		$this->requiredby = array(); // List of modules id to disable if this one is disabled
+		$this->conflictwith = array("modComptabilite"); // List of modules are in conflict with this module
+		$this->phpmin = array(5, 2); // Minimum version of PHP required by module
+		$this->need_dolibarr_version = array(3, 6); // Minimum version of Dolibarr required by module
+		$this->langfiles = array("accountancy");
+
 		// Constants
-		$this->const = array ();
-		$this->const[1] = array (
+		$this->const = array();
+		$this->const[1] = array(
 				"MAIN_COMPANY_CODE_ALWAYS_REQUIRED",
 				"chaine",
 				"1",
 				"With this constants on, third party code is always required whatever is numbering module behaviour"
 		);
-		$this->const[2] = array (
+		$this->const[2] = array(
 				"MAIN_BANK_ACCOUNTANCY_CODE_ALWAYS_REQUIRED",
 				"chaine",
 				"1",
 				"With this constants on, bank account number is always required"
 		);
-		$this->const[1] = array (
+		$this->const[1] = array(
 				"ACCOUNTING_SEPARATORCSV",
 				"string",
-				"," 
+				","
 		);
-		$this->const[2] = array (
+		$this->const[2] = array(
 				"ACCOUNTING_ACCOUNT_SUSPENSE",
 				"chaine",
-				"471" 
+				"471"
 		);
-		$this->const[3] = array (
+		$this->const[3] = array(
 				"ACCOUNTING_SELL_JOURNAL",
 				"chaine",
-				"VTE" 
+				"VTE"
 		);
-		$this->const[4] = array (
+		$this->const[4] = array(
 				"ACCOUNTING_PURCHASE_JOURNAL",
 				"chaine",
-				"ACH" 
+				"ACH"
 		);
-		$this->const[5] = array (
+		$this->const[5] = array(
 				"ACCOUNTING_SOCIAL_JOURNAL",
 				"chaine",
-				"SOC" 
+				"SOC"
 		);
-		$this->const[6] = array (
+		$this->const[6] = array(
 				"ACCOUNTING_CASH_JOURNAL",
 				"chaine",
-				"CAI" 
+				"CAI"
 		);
-		$this->const[7] = array (
+		$this->const[7] = array(
 				"ACCOUNTING_MISCELLANEOUS_JOURNAL",
 				"chaine",
-				"OD" 
+				"OD"
 		);
-		$this->const[8] = array (
+		$this->const[8] = array(
 				"ACCOUNTING_BANK_JOURNAL",
 				"chaine",
-				"BQ" 
+				"BQ"
 		); // Deprecated Move into llx_bank_account
-		$this->const[9] = array (
+		$this->const[9] = array(
 				"ACCOUNTING_ACCOUNT_TRANSFER_CASH",
 				"chaine",
-				"58" 
+				"58"
 		);
-		$this->const[10] = array (
+		$this->const[10] = array(
 				"CHARTOFACCOUNTS",
 				"chaine",
-				"2" 
+				"2"
 		);
-		$this->const[11] = array (
+		$this->const[11] = array(
 				"ACCOUNTING_MODELCSV",
 				"chaine",
-				"0" 
+				"0"
 		);
-		$this->const[12] = array (
+		$this->const[12] = array(
 				"ACCOUNTING_LENGTH_GACCOUNT",
 				"chaine",
-				"" 
+				""
 		);
-		$this->const[13] = array (
+		$this->const[13] = array(
 				"ACCOUNTING_LENGTH_AACCOUNT",
 				"chaine",
-				"" 
+				""
 		);
-		$this->const[14] = array (
+		$this->const[14] = array(
 				"ACCOUNTING_LIMIT_LIST_VENTILATION",
 				"chaine",
-				"50" 
+				"50"
 		);
-		$this->const[15] = array (
+		$this->const[15] = array(
 				"ACCOUNTING_LIST_SORT_VENTILATION_TODO",
 				"yesno",
-				"1" 
+				"1"
 		);
-		$this->const[16] = array (
+		$this->const[16] = array(
 				"ACCOUNTING_LIST_SORT_VENTILATION_DONE",
 				"yesno",
-				"1" 
+				"1"
 		);
-		
+
 		// Tabs
 		$this->tabs = array();
-		
+
 		// Css
-		$this->module_parts = array ();
-		
+		$this->module_parts = array();
+
 		// Boxes
-		$this->boxes = array ();
-		
+		$this->boxes = array();
+
 		// Permissions
 		$this->rights_class = 'accounting';
-		
-		$this->rights = array (); // Permission array used by this module
+
+		$this->rights = array(); // Permission array used by this module
 		$r = 0;
-		
-		$this->rights[$r][0] = 50401;
+
+		$this->rights[$r][0] = 50401;		// TODO Goal of this permission compared to others ???
 		$this->rights[$r][1] = 'Access_accountancy';
 		$this->rights[$r][2] = 'r';
 		$this->rights[$r][3] = 0;
 		$this->rights[$r][4] = 'access';
 		$this->rights[$r][5] = '';
 		$r++;
-		
+
 		$this->rights[$r][0] = 50402;
 		$this->rights[$r][1] = 'Read ventilation';
 		$this->rights[$r][2] = 'r';
@@ -207,7 +197,7 @@ class modAccounting extends DolibarrModules
 		$this->rights[$r][4] = 'ventilation';
 		$this->rights[$r][5] = 'read';
 		$r++;
-		
+
 		$this->rights[$r][0] = 50403;
 		$this->rights[$r][1] = 'Dispatched ventilation';
 		$this->rights[$r][2] = 'r';
@@ -239,12 +229,20 @@ class modAccounting extends DolibarrModules
 		$this->rights[$r][4] = 'comptarapport';
 		$this->rights[$r][5] = 'lire';
 		$r++;
-		
+
+		$this->rights[$r][0] = 50430;
+		$this->rights[$r][1] = 'Define and close a fiscal year';
+		$this->rights[$r][2] = 'r';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'fiscalyear';
+		$this->rights[$r][5] = '';
+		$r++;
+
 		// Main menu entries
-		$this->menus = array ();
+		$this->menus = array();
 		$r = 0;
 	}
-	
+
     /**
 	 *		Function called when module is enabled.
 	 *		The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
-- 
GitLab