Browse Source

Finish to move accountancy journals list to page like dictionnary

Alexandre SPANGARO 8 years ago
parent
commit
6afd0d642a

+ 0 - 296
htdocs/accountancy/admin/journals_card.php

@@ -1,296 +0,0 @@
-<?php
-/* Copyright (C) 2017		Alexandre Spangaro	<aspangaro@zendsi.com>
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
-
-/**
- * \file        htdocs/accountancy/admin/journals_card.php
- * \ingroup     Advanced accountancy
- * \brief       Page to show an accounting journal
- */
-require '../../main.inc.php';
-
-require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
-require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php';
-
-$langs->load("admin");
-$langs->load("compta");
-$langs->load("accountancy");
-
-// Security check
-if ($user->societe_id > 0)
-	accessforbidden();
-if (empty($user->rights->accounting->fiscalyear))
-	accessforbidden();
-
-$error = 0;
-
-$action = GETPOST('action', 'alpha');
-$confirm = GETPOST('confirm', 'alpha');
-$id = GETPOST('id', 'int');
-
-// List of status
-static $tmptype2label = array (
-		'0' => 'AccountingJournalTypeVariousOperation',
-		'1' => 'AccountingJournalTypeSale',
-		'2' => 'AccountingJournalTypePurchase',
-		'3' => 'AccountingJournalTypeBank',
-		'9' => 'AccountingJournalTypeHasNew'
-);
-$type2label = array (
-		'' 
-);
-foreach ( $tmptype2label as $key => $val )
-	$type2label[$key] = $langs->trans($val);
-
-$object = new AccountingJournal($db);
-
-/*
- * Actions
- */
-
-if ($action == 'confirm_delete' && $confirm == "yes") {
-	$result = $object->delete($id);
-	if ($result >= 0) {
-		header("Location: journals_list.php");
-		exit();
-	} else {
-		setEventMessages($object->error, $object->errors, 'errors');
-	}
-} 
-
-else if ($action == 'add') {
-	if (! GETPOST('cancel', 'alpha')) {
-		$error = 0;
-
-		$object->code = GETPOST('code', 'alpha');
-		$object->label = GETPOST('label', 'alpha');
-		$object->nature = GETPOST('nature', 'int');
-
-		if (empty($object->code)) {
-			setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Code")), null, 'errors');
-			$error ++;
-		}
-		if (empty($object->label)) {
-			setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Label")), null, 'errors');
-			$error ++;
-		}
-
-		if (! $error) {
-			$db->begin();
-
-			$id = $object->create($user);
-
-			if ($id > 0) {
-				$db->commit();
-
-				header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
-				exit();
-			} else {
-				$db->rollback();
-
-				setEventMessages($object->error, $object->errors, 'errors');
-				$action = 'create';
-			}
-		} else {
-			$action = 'create';
-		}
-	} else {
-		header("Location: journals_list.php");
-		exit();
-	}
-} 
-
-// Update record
-else if ($action == 'update') {
-	if (! GETPOST('cancel', 'alpha')) {
-		$result = $object->fetch($id);
-
-		$object->code = GETPOST('code', 'alpha');
-		$object->label = GETPOST('label', 'alpha');
-		$object->nature = GETPOST('nature', 'int');
-
-		if (empty($object->code)) {
-			setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Code")), null, 'errors');
-			$error ++;
-		}
-		if (empty($object->label)) {
-			setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Label")), null, 'errors');
-			$error ++;
-		}
-
-		$result = $object->update($user);
-		
-		if ($result > 0) {
-			header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
-			exit();
-		} else {
-			setEventMessages($object->error, $object->errors, 'errors');
-		}
-	} else {
-		header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
-		exit();
-	}
-}
-
-
-
-/*
- * View
- */
-
-$title = $langs->trans("Journal") . " - " . $langs->trans("Card");
-$helpurl = "";
-llxHeader("",$title,$helpurl);
-
-$form = new Form($db);
-
-if ($action == 'create') 
-{
-	print load_fiche_titre($langs->trans("NewAccountingJournal"));
-
-	print '<form action="' . $_SERVER["PHP_SELF"] . '" method="POST">';
-	print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
-	print '<input type="hidden" name="action" value="add">';
-
-	dol_fiche_head();
-
-	print '<table class="border" width="100%">';
-
-	// Code
-	print '<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans("Code") . '</td><td><input name="code" size="10" value="' . GETPOST("code") . '"></td></tr>';
-
-
-	// Label
-	print '<tr><td class="fieldrequired">' . $langs->trans("Label") . '</td><td><input name="label" size="32" value="' . GETPOST("label") . '"></td></tr>';
-
-	// Nature
-	print '<tr>';
-	print '<td class="fieldrequired">' . $langs->trans("Type") . '</td>';
-	print '<td class="valeur">';
-	print $form->selectarray('nature', $type2label, GETPOST('nature'));
-	print '</td></tr>';
-	
-	print '</table>';
-
-	dol_fiche_end();
-
-	print '<div class="center">';
-	print '<input class="button" type="submit" value="' . $langs->trans("Save") . '">';
-	print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
-	print '<input class="button" type="submit" name="cancel" value="' . $langs->trans("Cancel") . '">';
-	print '</div>';
-
-	print '</form>';
-} else if ($id) {
-	$result = $object->fetch($id);
-	if ($result > 0) {
-		$head = accounting_journal_prepare_head($object);
-
-		if ($action == 'edit') {
-			dol_fiche_head($head, 'card', $langs->trans("AccountingJournal"), 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 . '">';
-
-			print '<table class="border" width="100%">';
-
-			// Code
-			print "<tr>";
-			print '<td class="titlefieldcreate fieldrequired">' . $langs->trans("Code") . '</td><td>';
-			print '<input name="code" class="flat" size="8" value="' . $object->code . '">';
-			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>';
-
-			// Nature
-			print '<tr><td>' . $langs->trans("Type") . '</td><td>';
-			print $form->selectarray('nature', $type2label, $object->nature);
-			print '</td></tr>';
-
-			print '</table>';
-
-			dol_fiche_end();
-
-			print '<div class="center">';
-			print '<input type="submit" class="button" value="' . $langs->trans("Save") . '">';
-			print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
-			print '<input type="submit" name="cancel" class="button" value="' . $langs->trans("Cancel") . '">';
-			print '</div>';
-
-			print '</form>';
-
-			dol_fiche_end();
-		} else {
-			/*
-			 * Confirm delete
-			 */
-			if ($action == 'delete') {
-				print $form->formconfirm($_SERVER["PHP_SELF"] . "?id=" . $id, $langs->trans("DeleteFiscalYear"), $langs->trans("ConfirmDeleteFiscalYear"), "confirm_delete");
-			}
-
-			dol_fiche_head($head, 'card', $langs->trans("AccountingJournal"), 0, 'cron');
-
-			print '<table class="border" width="100%">';
-
-			$linkback = '<a href="' . DOL_URL_ROOT . '/accountancy/admin/journals_list.php">' . $langs->trans("BackToList") . '</a>';
-
-			// Ref
-			print '<tr><td class="titlefield">' . $langs->trans("Code") . '</td><td width="50%">';
-			print $object->code;
-			print '</td><td>';
-			print $linkback;
-			print '</td></tr>';
-
-			// Label
-			print '<tr><td class="tdtop">';
-			print $form->editfieldkey("Label", 'label', $object->label, $object, $conf->global->MAIN_EDIT_ALSO_INLINE, 'alpha:32');
-			print '</td><td colspan="2">';
-			print $form->editfieldval("Label", 'label', $object->label, $object, $conf->global->MAIN_EDIT_ALSO_INLINE, 'alpha:32');
-			print "</td></tr>";
-
-			// Nature
-			print '<tr><td>' . $langs->trans("Type") . '</td><td colspan="2">' . $object->getLibType(0) . '</td></tr>';
-
-			print "</table>";
-
-			dol_fiche_end();
-
-			if (! empty($user->rights->accounting->chartofaccount))
-			{
-    			/*
-    			 * Barre d'actions
-    			 */
-    			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>';
-			}
-		}
-	} else {
-		dol_print_error($db);
-	}
-}
-
-llxFooter();
-$db->close();

+ 697 - 107
htdocs/accountancy/admin/journals_list.php

@@ -22,147 +22,737 @@
  * \brief		Setup page to configure journals
  */
 require '../../main.inc.php';
-require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
-require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
-require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php';
-
-$action = GETPOST('action');
-
-// Load variable for pagination
-$limit = GETPOST("limit")?GETPOST("limit","int"):$conf->liste_limit;
-$sortfield = GETPOST('sortfield','alpha');
-$sortorder = GETPOST('sortorder','alpha');
-$page = GETPOST('page','int');
-if ($page == -1) { $page = 0; }
-$offset = $limit * $page;
-$pageprev = $page - 1;
-$pagenext = $page + 1;
-if (! $sortfield) $sortfield="j.rowid"; // Set here default search field
-if (! $sortorder) $sortorder="ASC";
+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
 
 $langs->load("admin");
 $langs->load("compta");
 $langs->load("accountancy");
 
-// Security check
-if ($user->societe_id > 0)
+$action=GETPOST('action','alpha')?GETPOST('action','alpha'):'view';
+$confirm=GETPOST('confirm','alpha');
+$id=GETPOST('id','int');
+$rowid=GETPOST('rowid','alpha');
+
+// Security access
+if (! empty($user->rights->accountancy->chartofaccount))
+{
 	accessforbidden();
-if (! $user->rights->accounting->fiscalyear)              // If we can read accounting records, we shoul be able to see fiscal year.
-    accessforbidden();
-	
+}
+
+$acts[0] = "activate";
+$acts[1] = "disable";
+$actl[0] = img_picto($langs->trans("Disabled"),'switch_off');
+$actl[1] = img_picto($langs->trans("Activated"),'switch_on');
+
+$listoffset=GETPOST('listoffset');
+$listlimit=GETPOST('listlimit')>0?GETPOST('listlimit'):1000;
+$active = 1;
+
+$sortfield = GETPOST("sortfield",'alpha');
+$sortorder = GETPOST("sortorder",'alpha');
+$page = GETPOST("page",'int');
+if ($page == -1) { $page = 0 ; }
+$offset = $listlimit * $page ;
+$pageprev = $page - 1;
+$pagenext = $page + 1;
+
 $error = 0;
 
-// List of status
-/*
-static $tmptype2label = array (
-		'0' => 'AccountingJournalTypeVariousOperation',
-		'1' => 'AccountingJournalTypeSale',
-		'2' => 'AccountingJournalTypePurchase',
-		'3' => 'AccountingJournalTypeBank',
-		'9' => 'AccountingJournalTypeHasNew'
-);
-$type2label = array (
-		'' 
-);
-foreach ( $tmptype2label as $key => $val )
-	$type2label[$key] = $langs->trans($val);
-*/
+// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
+$hookmanager->initHooks(array('admin'));
+
+// This page is a generic page to edit dictionaries
+// Put here declaration of dictionaries properties
+
+// Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this.
+$taborder=array(35);
+
+// Name of SQL tables of dictionaries
+$tabname=array();
+$tabname[35]= MAIN_DB_PREFIX."accounting_journal";
 
-$errors = array ();
+// Dictionary labels
+$tablib=array();
+$tablib[35]= "DictionaryAccountancyJournal";
 
-$object = new AccountingJournal($db);
+// Requests to extract data
+$tabsql=array();
+$tabsql[35]= "SELECT a.rowid as rowid, a.code as code, a.label, a.nature, a.active FROM ".MAIN_DB_PREFIX."accounting_journal as a";
 
+// Criteria to sort dictionaries
+$tabsqlsort=array();
+$tabsqlsort[35]="code ASC";
+
+// Nom des champs en resultat de select pour affichage du dictionnaire
+$tabfield=array();
+$tabfield[35]= "code,label,nature";
+
+// Nom des champs d'edition pour modification d'un enregistrement
+$tabfieldvalue=array();
+$tabfieldvalue[35]= "code,label,nature";
+
+// Nom des champs dans la table pour insertion d'un enregistrement
+$tabfieldinsert=array();
+$tabfieldinsert[35]= "code,label,nature";
+
+// Nom du rowid si le champ n'est pas de type autoincrement
+// Example: "" if id field is "rowid" and has autoincrement on
+//          "nameoffield" if id field is not "rowid" or has not autoincrement on
+$tabrowid=array();
+$tabrowid[35]= "";
+
+// Condition to show dictionary in setup page
+$tabcond=array();
+$tabcond[35]= ! empty($conf->accounting->enabled);
+
+// List of help for fields
+$tabhelp=array();
+$tabhelp[35] = array('code'=>$langs->trans("EnterAnyCode"));
+
+// List of check for fields (NOT USED YET)
+$tabfieldcheck=array();
+$tabfieldcheck[35] = array();
+
+// Complete all arrays with entries found into modules
+complete_dictionary_with_modules($taborder,$tabname,$tablib,$tabsql,$tabsqlsort,$tabfield,$tabfieldvalue,$tabfieldinsert,$tabrowid,$tabcond,$tabhelp,$tabfieldcheck);
+
+
+// Define elementList and sourceList (used for dictionary type of contacts "llx_c_type_contact")
+$elementList = array();
+	$sourceList = array(
+			'1' => $langs->trans('AccountingJournalType0'),
+			'2' => $langs->trans('AccountingJournalType1'),
+			'3' => $langs->trans('AccountingJournalType2'),
+			'4' => $langs->trans('AccountingJournalType3'),
+			'9' => $langs->trans('AccountingJournalType9')
+	);
 
 /*
  * Actions
  */
 
+if (GETPOST('button_removefilter') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter_x'))
+{
+    $search_country_id = '';    
+}
+
+// Actions add or modify an entry into a dictionary
+if (GETPOST('actionadd') || GETPOST('actionmodify'))
+{
+    $listfield=explode(',', str_replace(' ', '',$tabfield[$id]));
+    $listfieldinsert=explode(',',$tabfieldinsert[$id]);
+    $listfieldmodify=explode(',',$tabfieldinsert[$id]);
+    $listfieldvalue=explode(',',$tabfieldvalue[$id]);
+
+    // Check that all fields are filled
+    $ok=1;
+    foreach ($listfield as $f => $value)
+    {
+		if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label'))  $fieldnamekey='Label';
+        if ($fieldnamekey == 'code') $fieldnamekey = 'Code';
+		if ($fieldnamekey == 'nature') $fieldnamekey = 'Nature';
+    }
+    // Other checks
+    if (isset($_POST["code"]))
+    {
+    	if ($_POST["code"]=='0')
+    	{
+        	$ok=0;
+    		setEventMessages($langs->transnoentities('ErrorCodeCantContainZero'), null, 'errors');
+        }
+        /*if (!is_numeric($_POST['code']))	// disabled, code may not be in numeric base
+    	{
+	    	$ok = 0;
+	    	$msg .= $langs->transnoentities('ErrorFieldFormat', $langs->transnoentities('Code')).'<br />';
+	    }*/
+    }
+
+	// Clean some parameters
+    if ($_POST["accountancy_code"] <= 0) $_POST["accountancy_code"]='';	// If empty, we force to null
+	if ($_POST["accountancy_code_sell"] <= 0) $_POST["accountancy_code_sell"]='';	// If empty, we force to null
+	if ($_POST["accountancy_code_buy"] <= 0) $_POST["accountancy_code_buy"]='';	// If empty, we force to null
+
+    // Si verif ok et action add, on ajoute la ligne
+    if ($ok && GETPOST('actionadd'))
+    {
+        if ($tabrowid[$id])
+        {
+            // Recupere id libre pour insertion
+            $newid=0;
+            $sql = "SELECT max(".$tabrowid[$id].") newid from ".$tabname[$id];
+            $result = $db->query($sql);
+            if ($result)
+            {
+                $obj = $db->fetch_object($result);
+                $newid=($obj->newid + 1);
+
+            } else {
+                dol_print_error($db);
+            }
+        }
+
+        // Add new entry
+        $sql = "INSERT INTO ".$tabname[$id]." (";
+        // List of fields
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
+        	$sql.= $tabrowid[$id].",";
+        $sql.= $tabfieldinsert[$id];
+        $sql.=",active)";
+        $sql.= " VALUES(";
+
+        // List of values
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
+        	$sql.= $newid.",";
+        $i=0;
+        foreach ($listfieldinsert as $f => $value)
+        {
+            if ($value == 'price' || preg_match('/^amount/i',$value) || $value == 'taux') {
+            	$_POST[$listfieldvalue[$i]] = price2num($_POST[$listfieldvalue[$i]],'MU');
+            }
+            else if ($value == 'entity') {
+            	$_POST[$listfieldvalue[$i]] = $conf->entity;
+            }
+            if ($i) $sql.=",";
+            if ($_POST[$listfieldvalue[$i]] == '' && ! ($listfieldvalue[$i] == 'code' && $id == 10)) $sql.="null";  // For vat, we want/accept code = ''
+            else $sql.="'".$db->escape($_POST[$listfieldvalue[$i]])."'";
+            $i++;
+        }
+        $sql.=",1)";
+
+        dol_syslog("actionadd", LOG_DEBUG);
+        $result = $db->query($sql);
+        if ($result)	// Add is ok
+        {
+            setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs');
+        	$_POST=array('id'=>$id);	// Clean $_POST array, we keep only
+        }
+        else
+        {
+            if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
+                setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors');
+            }
+            else {
+                dol_print_error($db);
+            }
+        }
+    }
+
+    // Si verif ok et action modify, on modifie la ligne
+    if ($ok && GETPOST('actionmodify'))
+    {
+        if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+        else { $rowidcol="rowid"; }
 
+        // Modify entry
+        $sql = "UPDATE ".$tabname[$id]." SET ";
+        // Modifie valeur des champs
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldmodify))
+        {
+            $sql.= $tabrowid[$id]."=";
+            $sql.= "'".$db->escape($rowid)."', ";
+        }
+        $i = 0;
+        foreach ($listfieldmodify as $field)
+        {
+            if ($field == 'price' || preg_match('/^amount/i',$field) || $field == 'taux') {
+            	$_POST[$listfieldvalue[$i]] = price2num($_POST[$listfieldvalue[$i]],'MU');
+            }
+            else if ($field == 'entity') {
+            	$_POST[$listfieldvalue[$i]] = $conf->entity;
+            }
+            if ($i) $sql.=",";
+            $sql.= $field."=";
+            if ($_POST[$listfieldvalue[$i]] == '' && ! ($listfieldvalue[$i] == 'code' && $id == 10)) $sql.="null";  // For vat, we want/accept code = ''
+            else $sql.="'".$db->escape($_POST[$listfieldvalue[$i]])."'";
+            $i++;
+        }
+        $sql.= " WHERE ".$rowidcol." = '".$rowid."'";
+
+        dol_syslog("actionmodify", LOG_DEBUG);
+        //print $sql;
+        $resql = $db->query($sql);
+        if (! $resql)
+        {
+            setEventMessages($db->error(), null, 'errors');
+        }
+    }
+    //$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
+}
+
+if (GETPOST('actioncancel'))
+{
+    //$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
+}
+
+if ($action == 'confirm_delete' && $confirm == 'yes')       // delete
+{
+    if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+    else { $rowidcol="rowid"; }
+
+    $sql = "DELETE from ".$tabname[$id]." WHERE ".$rowidcol."='".$rowid."'";
+
+    dol_syslog("delete", LOG_DEBUG);
+    $result = $db->query($sql);
+    if (! $result)
+    {
+        if ($db->errno() == 'DB_ERROR_CHILD_EXISTS')
+        {
+            setEventMessages($langs->transnoentities("ErrorRecordIsUsedByChild"), null, 'errors');
+        }
+        else
+        {
+            dol_print_error($db);
+        }
+    }
+}
+
+// activate
+if ($action == $acts[0])
+{
+    if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+    else { $rowidcol="rowid"; }
+
+    if ($rowid) {
+        $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE ".$rowidcol."='".$rowid."'";
+    }
+    elseif ($_GET["code"]) {
+        $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE code='".$_GET["code"]."'";
+    }
+
+    $result = $db->query($sql);
+    if (!$result)
+    {
+        dol_print_error($db);
+    }
+}
+
+// disable
+if ($action == $acts[1])
+{
+    if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
+    else { $rowidcol="rowid"; }
+
+    if ($rowid) {
+        $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE ".$rowidcol."='".$rowid."'";
+    }
+    elseif ($_GET["code"]) {
+        $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE code='".$_GET["code"]."'";
+    }
+
+    $result = $db->query($sql);
+    if (!$result)
+    {
+        dol_print_error($db);
+    }
+}
 
 /*
  * View
  */
-$title = $langs->trans('AccountingJournals');
-$helpurl = "";
-llxHeader('', $title, $helpurl);
 
-$max = 100;
 $form = new Form($db);
+$formadmin=new FormAdmin($db);
 
-$linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php">' . $langs->trans("BackToModuleList") . '</a>';
-print load_fiche_titre($langs->trans('ConfigAccountingExpert'), $linkback, 'title_setup');
-
-$head = admin_accounting_prepare_head(null);
+llxHeader();
 
-dol_fiche_head($head, 'journal', $langs->trans("Configuration"), -1, 'cron');
-
-$sql = "SELECT j.rowid, j.code, j.label, j.nature, j.active";
-$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_journal as j";
-// $sql .= " WHERE j.entity = " . $conf->entity;
-$sql.=$db->order($sortfield,$sortorder);
-
-// Count total nb of records
-$nbtotalofrecords = '';
-if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
+$titre=$langs->trans("DictionarySetup");
+$linkback='';
+if ($id)
 {
-	$result = $db->query($sql);
-	$nbtotalofrecords = $db->num_rows($result);
+    $titre.=' - '.$langs->trans($tablib[$id]);
+    $titlepicto='title_accountancy';
 }
 
-$sql.= $db->plimit($limit+1, $offset);
-
-$result = $db->query($sql);
-if ($result) {
-	$num = $db->num_rows($result);
-
-	$i = 0;
-
-	// $title = $langs->trans('AccountingJournals');
-	// print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $params, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit, 1);
-
-	// Load attribute_label
-	print '<table class="noborder" width="100%">';
-	print '<tr class="liste_titre">';
-	// print '<td>' . $langs->trans("Ref") . '</td>';
-	print '<td>' . $langs->trans("Code") . '</td>';
-	print '<td>' . $langs->trans("Label") . '</td>';
-	print '<td>' . $langs->trans("Nature") . '</td>';
-	print '</tr>';
-
-	if ($num) {
-		$accountingjournalstatic = new AccountingJournal($db);
-
-		while ( $i < $num && $i < $max ) {
-			$obj = $db->fetch_object($result);
-			$accountingjournalstatic->id = $obj->rowid;
-			print '<tr class="oddeven">';
-			print '<td><a href="journals_card.php?id=' . $obj->rowid . '">' . img_object($langs->trans("ShowJournal"), "technic") . ' ' . $obj->code . '</a></td>';
-			print '<td align="left">' . $obj->label . '</td>';
-			print '<td>' . $accountingjournalstatic->LibType($obj->nature, 0) . '</td>';
-			print '</tr>';
-			$i ++;
-		}
-	} else {
-		print '<tr class="oddeven"><td colspan="3" class="opacitymedium">' . $langs->trans("None") . '</td></tr>';
-	}
-	print '</table>';
-} else {
-	dol_print_error($db);
+print load_fiche_titre($titre,$linkback,$titlepicto);
+
+if (empty($id))
+{
+    print $langs->trans("DictionaryDesc");
+    print " ".$langs->trans("OnlyActiveElementsAreShown")."<br>\n";
 }
+print "<br>\n";
 
-dol_fiche_end();
 
-// Buttons
-print '<div class="tabsAction">';
-if (! empty($user->rights->accounting->chartofaccount))
+// Confirmation de la suppression de la ligne
+if ($action == 'delete')
 {
-    print '<a class="butAction" href="journals_card.php?action=create">' . $langs->trans("NewAccountingJournal") . '</a>';
+    print $form->formconfirm($_SERVER["PHP_SELF"].'?'.($page?'page='.$page.'&':'').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.$rowid.'&code='.$_GET["code"].'&id='.$id, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_delete','',0,1);
 }
-else
+//var_dump($elementList);
+
+/*
+ * Show a dictionary
+ */
+if ($id)
 {
-    print '<a class="butActionRefused" href="#">' . $langs->trans("NewAccountingJournal") . '</a>';
+    // Complete requete recherche valeurs avec critere de tri
+    $sql=$tabsql[$id];
+
+    if ($search_country_id > 0)
+    {
+        if (preg_match('/ WHERE /',$sql)) $sql.= " AND ";
+        else $sql.=" WHERE ";
+        $sql.= " c.rowid = ".$search_country_id;
+    }
+    
+    if ($sortfield)
+    {
+        // If sort order is "country", we use country_code instead
+    	if ($sortfield == 'country') $sortfield='country_code';
+        $sql.= " ORDER BY ".$sortfield;
+        if ($sortorder)
+        {
+            $sql.=" ".strtoupper($sortorder);
+        }
+        $sql.=", ";
+        // Clear the required sort criteria for the tabsqlsort to be able to force it with selected value
+        $tabsqlsort[$id]=preg_replace('/([a-z]+\.)?'.$sortfield.' '.$sortorder.',/i','',$tabsqlsort[$id]);
+        $tabsqlsort[$id]=preg_replace('/([a-z]+\.)?'.$sortfield.',/i','',$tabsqlsort[$id]);
+    }
+    else {
+        $sql.=" ORDER BY ";
+    }
+    $sql.=$tabsqlsort[$id];
+    $sql.=$db->plimit($listlimit+1,$offset);
+    //print $sql;
+
+    $fieldlist=explode(',',$tabfield[$id]);
+
+    print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
+    print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+    print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from','alpha')).'">';
+    
+    print '<table class="noborder" width="100%">';
+
+    // Form to add a new line
+    if ($tabname[$id])
+    {
+        $alabelisused=0;
+        $var=false;
+
+        $fieldlist=explode(',',$tabfield[$id]);
+
+        // Line for title
+        print '<tr class="liste_titre">';
+        foreach ($fieldlist as $field => $value)
+        {
+            // Determine le nom du champ par rapport aux noms possibles
+            // dans les dictionnaires de donnees
+            $valuetoshow=ucfirst($fieldlist[$field]);   // Par defaut
+            $valuetoshow=$langs->trans($valuetoshow);   // try to translate
+            $align="left";
+            if ($fieldlist[$field]=='code')            { $valuetoshow=$langs->trans("Code"); }
+            if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label')
+            {
+            	$valuetoshow=$langs->trans("Label");
+            }
+            if ($fieldlist[$field]=='nature')          { $valuetoshow=$langs->trans("Nature"); }
+				
+            if ($valuetoshow != '')
+            {
+                print '<td align="'.$align.'">';
+            	if (! empty($tabhelp[$id][$value]) && preg_match('/^http(s*):/i',$tabhelp[$id][$value])) print '<a href="'.$tabhelp[$id][$value].'" target="_blank">'.$valuetoshow.' '.img_help(1,$valuetoshow).'</a>';
+            	else if (! empty($tabhelp[$id][$value])) print $form->textwithpicto($valuetoshow,$tabhelp[$id][$value]);
+            	else print $valuetoshow;
+                print '</td>';
+             }
+             if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label') $alabelisused=1;
+        }
+
+        if ($id == 4) print '<td></td>';
+        print '<td>';
+        print '<input type="hidden" name="id" value="'.$id.'">';
+        print '</td>';
+        print '<td style="min-width: 26px;"></td>';
+        print '<td style="min-width: 26px;"></td>';
+        print '<td style="min-width: 26px;"></td>';
+        print '</tr>';
+
+        // Line to enter new values
+        print "<tr ".$bcnd[$var].">";
+
+        $obj = new stdClass();
+        // If data was already input, we define them in obj to populate input fields.
+        if (GETPOST('actionadd'))
+        {
+            foreach ($fieldlist as $key=>$val)
+            {
+                if (GETPOST($val) != '')
+                	$obj->$val=GETPOST($val);
+            }
+        }
+
+        $tmpaction = 'create';
+        $parameters=array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
+        $reshook=$hookmanager->executeHooks('createDictionaryFieldlist',$parameters, $obj, $tmpaction);    // Note that $action and $object may have been modified by some hooks
+        $error=$hookmanager->error; $errors=$hookmanager->errors;
+
+        if (empty($reshook))
+        {
+       		fieldList($fieldlist,$obj,$tabname[$id],'add');
+        }
+
+        print '<td colspan="4" align="right">';
+       	print '<input type="submit" class="button" name="actionadd" value="'.$langs->trans("Add").'">';
+        print '</td>';
+        print "</tr>";
+
+        $colspan=count($fieldlist)+3;
+
+        if (! empty($alabelisused))  // If there is one label among fields, we show legend of *
+        {
+        	print '<tr><td colspan="'.$colspan.'">* '.$langs->trans("LabelUsedByDefault").'.</td></tr>';
+        }
+        print '<tr><td colspan="'.$colspan.'">&nbsp;</td></tr>';	// Keep &nbsp; to have a line with enough height
+    }
+
+
+
+    // List of available record in database
+    dol_syslog("htdocs/admin/dict", LOG_DEBUG);
+    $resql=$db->query($sql);
+    if ($resql)
+    {
+        $num = $db->num_rows($resql);
+        $i = 0;
+        $var=true;
+
+        $param = '&id='.$id;
+        if ($search_country_id > 0) $param.= '&search_country_id='.$search_country_id;
+        $paramwithsearch = $param;
+        if ($sortorder) $paramwithsearch.= '&sortorder='.$sortorder;
+        if ($sortfield) $paramwithsearch.= '&sortfield='.$sortfield;
+        if (GETPOST('from')) $paramwithsearch.= '&from='.GETPOST('from','alpha');
+        
+        // There is several pages
+        if ($num > $listlimit)
+        {
+            print '<tr class="none"><td align="right" colspan="'.(3+count($fieldlist)).'">';
+            print_fleche_navigation($page, $_SERVER["PHP_SELF"], $paramwithsearch, ($num > $listlimit), '<li class="pagination"><span>'.$langs->trans("Page").' '.($page+1).'</span></li>');
+            print '</td></tr>';
+        }
+
+        // Title of lines
+        print '<tr class="liste_titre liste_titre_add">';
+        foreach ($fieldlist as $field => $value)
+        {
+            // Determine le nom du champ par rapport aux noms possibles
+            // dans les dictionnaires de donnees
+            $showfield=1;							  	// By defaut
+            $align="left";
+            $sortable=1;
+            $valuetoshow='';
+            /*
+            $tmparray=getLabelOfField($fieldlist[$field]);
+            $showfield=$tmp['showfield'];
+            $valuetoshow=$tmp['valuetoshow'];
+            $align=$tmp['align'];
+            $sortable=$tmp['sortable'];
+			*/
+            $valuetoshow=ucfirst($fieldlist[$field]);   // By defaut
+            $valuetoshow=$langs->trans($valuetoshow);   // try to translate
+            if ($fieldlist[$field]=='code')            { $valuetoshow=$langs->trans("Code"); }
+            if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label') { $valuetoshow=$langs->trans("Label"); }
+            if ($fieldlist[$field]=='nature')          { $valuetoshow=$langs->trans("Nature"); }
+
+            // Affiche nom du champ
+            if ($showfield)
+            {
+                print getTitleFieldOfList($valuetoshow, 0, $_SERVER["PHP_SELF"], ($sortable?$fieldlist[$field]:''), ($page?'page='.$page.'&':''), $param, "align=".$align, $sortfield, $sortorder);
+            }
+        }
+		print getTitleFieldOfList($langs->trans("Status"), 0, $_SERVER["PHP_SELF"], "active", ($page?'page='.$page.'&':''), $param, 'align="center"', $sortfield, $sortorder);
+        print getTitleFieldOfList('');
+        print getTitleFieldOfList('');
+        print getTitleFieldOfList('');
+        print '</tr>';
+
+        // Title line with search boxes
+        print '<tr class="liste_titre_filter">';
+        print '<td class="liste_titre"></td>';
+        print '<td class="liste_titre"></td>';
+        print '<td class="liste_titre"></td>';
+        print '<td class="liste_titre" align="center">';
+    	if ($filterfound)
+    	{
+        	$searchpitco=$form->showFilterAndCheckAddButtons(0);
+        	print $searchpitco;
+    	}
+    	print '</td>';
+    	print '</tr>';
+            
+        if ($num)
+        {
+            // Lines with values
+            while ($i < $num)
+            {
+                $obj = $db->fetch_object($resql);
+                //print_r($obj);
+                print '<tr class="oddeven" id="rowid-'.$obj->rowid.'">';
+                if ($action == 'edit' && ($rowid == (! empty($obj->rowid)?$obj->rowid:$obj->code)))
+                {
+                    $tmpaction='edit';
+                    $parameters=array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
+                    $reshook=$hookmanager->executeHooks('editDictionaryFieldlist',$parameters,$obj, $tmpaction);    // Note that $action and $object may have been modified by some hooks
+                    $error=$hookmanager->error; $errors=$hookmanager->errors;
+
+                    // Show fields
+                    if (empty($reshook)) fieldList($fieldlist,$obj,$tabname[$id],'edit');
+
+                    print '<td></td>';
+                    print '<td></td>';
+                    print '<td align="center">';
+                    print '<input type="hidden" name="page" value="'.$page.'">';
+                    print '<input type="hidden" name="rowid" value="'.$rowid.'">';
+                    print '<input type="submit" class="button" name="actionmodify" value="'.$langs->trans("Modify").'">';
+                    print '<div name="'.(! empty($obj->rowid)?$obj->rowid:$obj->code).'"></div>';
+                    print '<input type="submit" class="button" name="actioncancel" value="'.$langs->trans("Cancel").'">';
+                    print '</td>';
+                }
+                else
+                {
+	              	$tmpaction = 'view';
+                    $parameters=array('var'=>$var, 'fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
+                    $reshook=$hookmanager->executeHooks('viewDictionaryFieldlist',$parameters,$obj, $tmpaction);    // Note that $action and $object may have been modified by some hooks
+
+                    $error=$hookmanager->error; $errors=$hookmanager->errors;
+
+                    if (empty($reshook))
+                    {
+                        foreach ($fieldlist as $field => $value)
+                        {
+                            
+                            $showfield=1;
+                        	$align="left";
+                            $valuetoshow=$obj->{$fieldlist[$field]};
+                            if ($valuetoshow=='all') {
+                                $valuetoshow=$langs->trans('All');
+                            }
+                            else if ($fieldlist[$field]=='nature' && $tabname[$id]==MAIN_DB_PREFIX.'accounting_journal') {
+                                $langs->load("accountancy");
+                                $key=$langs->trans("AccountingJournalType".strtoupper($obj->nature));
+                                $valuetoshow=($obj->nature && $key != "AccountingJournalType".strtoupper($obj->nature)?$key:$obj->{$fieldlist[$field]});
+                            }
+
+                            $class='tddict';
+							// Show value for field
+							if ($showfield) print '<!-- '.$fieldlist[$field].' --><td align="'.$align.'" class="'.$class.'">'.$valuetoshow.'</td>';
+                        }
+                    }
+
+                    // Can an entry be erased or disabled ?
+                    $iserasable=1;$canbedisabled=1;$canbemodified=1;	// true by default
+                    if (isset($obj->code) && $id != 10)
+                    {
+                    	if (($obj->code == '0' || $obj->code == '' || preg_match('/unknown/i',$obj->code))) { $iserasable = 0; $canbedisabled = 0; }
+                    	else if ($obj->code == 'RECEP') { $iserasable = 0; $canbedisabled = 0; }
+                    	else if ($obj->code == 'EF0')   { $iserasable = 0; $canbedisabled = 0; }
+                    }
+
+                    if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) { $iserasable=0; }
+                    if (in_array($obj->code, array('AC_OTH','AC_OTH_AUTO')) || in_array($obj->type, array('systemauto'))) { $canbedisabled=0; $canbedisabled = 0; }
+                    $canbemodified=$iserasable;
+                    if ($obj->code == 'RECEP') $canbemodified=1;
+
+                    $url = $_SERVER["PHP_SELF"].'?'.($page?'page='.$page.'&':'').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.(! empty($obj->rowid)?$obj->rowid:(! empty($obj->code)?$obj->code:'')).'&code='.(! empty($obj->code)?urlencode($obj->code):'');
+                    if ($param) $url .= '&'.$param;
+                    $url.='&';
+
+                    // Active
+                    print '<td align="center" class="nowrap">';
+                    if ($canbedisabled) print '<a href="'.$url.'action='.$acts[$obj->active].'">'.$actl[$obj->active].'</a>';
+                    else
+                 	{
+                 		if (in_array($obj->code, array('AC_OTH','AC_OTH_AUTO'))) print $langs->trans("AlwaysActive");
+                 		else if (isset($obj->type) && in_array($obj->type, array('systemauto')) && empty($obj->active)) print $langs->trans("Deprecated");
+                  		else if (isset($obj->type) && in_array($obj->type, array('system')) && ! empty($obj->active) && $obj->code != 'AC_OTH') print $langs->trans("UsedOnlyWithTypeOption");
+                    	else print $langs->trans("AlwaysActive");
+                    }
+                    print "</td>";
+
+                    // Modify link
+                    if ($canbemodified) print '<td align="center"><a class="reposition" href="'.$url.'action=edit">'.img_edit().'</a></td>';
+                    else print '<td>&nbsp;</td>';
+
+                    // Delete link
+                    if ($iserasable)
+                    {
+                        print '<td align="center">';
+                        if ($user->admin) print '<a href="'.$url.'action=delete">'.img_delete().'</a>';
+                        //else print '<a href="#">'.img_delete().'</a>';    // Some dictionnary can be edited by other profile than admin
+                        print '</td>';
+                    }
+                    else print '<td>&nbsp;</td>';
+
+                    print '</td>';
+                    print "</tr>\n";
+                }
+                $i++;
+            }
+        }
+    }
+    else {
+        dol_print_error($db);
+    }
+
+    print '</table>';
+
+    print '</form>';
 }
-print '</div>';
+
+print '<br>';
+
 
 llxFooter();
-$db->close();
+$db->close();
+
+
+/**
+ *	Show fields in insert/edit mode
+ *
+ * 	@param		array	$fieldlist		Array of fields
+ * 	@param		Object	$obj			If we show a particular record, obj is filled with record fields
+ *  @param		string	$tabname		Name of SQL table
+ *  @param		string	$context		'add'=Output field for the "add form", 'edit'=Output field for the "edit form", 'hide'=Output field for the "add form" but we dont want it to be rendered
+ *	@return		void
+ */
+function fieldList($fieldlist, $obj='', $tabname='', $context='')
+{
+	global $conf,$langs,$db;
+	global $form, $mysoc;
+	global $region_id;
+	global $elementList,$sourceList,$localtax_typeList;
+	global $bc;
+
+	$formadmin = new FormAdmin($db);
+	$formcompany = new FormCompany($db);
+
+	foreach ($fieldlist as $field => $value)
+	{
+		if ($fieldlist[$field] == 'nature')
+		{
+			print '<td>';
+			print $form->selectarray('nature', $sourceList,(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''));
+			print '</td>';
+		}
+		elseif ($fieldlist[$field] == 'code' && isset($obj->{$fieldlist[$field]})) {
+			print '<td><input type="text" class="flat minwidth100" value="'.(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'" name="'.$fieldlist[$field].'"></td>';
+		}
+		else
+		{
+			print '<td>';
+			$size=''; $class='';
+			if ($fieldlist[$field]=='code')  $class='maxwidth100';
+			if ($fieldlist[$field]=='label') $class='quatrevingtpercent';
+			if ($fieldlist[$field]=='sortorder' || $fieldlist[$field]=='sens' || $fieldlist[$field]=='category_type') $size='size="2" ';
+			print '<input type="text" '.$size.'class="flat'.($class?' '.$class:'').'" value="'.(isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'" name="'.$fieldlist[$field].'">';
+			print '</td>';
+		}
+	}
+}

+ 0 - 260
htdocs/accountancy/class/accountingjournal.class.php

@@ -82,208 +82,6 @@ class AccountingJournal extends CommonObject
 		}
 	}
 	
-	/**
-	 * Insert journal in database
-	 *
-	 * @param	User	$user		Use making action
-	 * @param	int		$notrigger	Disable triggers
-	 * @return 	int 				<0 if KO, >0 if OK
-	 */
-	function create($user, $notrigger = 0)
-	{
-		global $conf;
-		$error = 0;
-		$now = dol_now();
-		
-		// Clean parameters
-		if (isset($this->code))
-			$this->code = trim($this->code);
-		if (isset($this->label))
-			$this->label = trim($this->label);
-
-		// Check parameters
-		if (empty($this->nature) || $this->nature == '-1')
-		{
-		    $this->nature = '0';
-		}
-
-		// Insert request
-		$sql = "INSERT INTO " . MAIN_DB_PREFIX . "accounting_journal(";
-		$sql .= "code";
-		$sql .= ", label";
-		$sql .= ", nature";
-		$sql .= ", active";
-		$sql .= ") VALUES (";
-		$sql .= " " . (empty($this->code) ? 'NULL' : "'" . $this->db->escape($this->code) . "'");
-		$sql .= ", " . (empty($this->label) ? 'NULL' : "'" . $this->db->escape($this->label) . "'");
-		$sql .= ", " . (empty($this->nature) ? '0' : "'" . $this->db->escape($this->nature) . "'");
-		$sql .= ", " . (! isset($this->active) ? 'NULL' : $this->db->escape($this->active));
-		$sql .= ")";
-		
-		$this->db->begin();
-		
-		dol_syslog(get_class($this) . "::create sql=" . $sql, LOG_DEBUG);
-		$resql = $this->db->query($sql);
-		if (! $resql) {
-			$error ++;
-			$this->errors[] = "Error " . $this->db->lasterror();
-		}
-		
-		if (! $error) {
-			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "accounting_journal");
-			
-			// if (! $notrigger) {
-			// Uncomment this and change MYOBJECT to your own tag if you
-			// want this action calls a trigger.
-			
-			// // Call triggers
-			// include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			// $interface=new Interfaces($this->db);
-			// $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
-			// if ($result < 0) { $error++; $this->errors=$interface->errors; }
-			// // End call triggers
-			// }
-		}
-		
-		// Commit or rollback
-		if ($error) {
-			foreach ( $this->errors as $errmsg ) {
-				dol_syslog(get_class($this) . "::create " . $errmsg, LOG_ERR);
-				$this->error .= ($this->error ? ', ' . $errmsg : $errmsg);
-			}
-			$this->db->rollback();
-			return - 1 * $error;
-		} else {
-			$this->db->commit();
-			return $this->id;
-		}
-	}
-	
-	/**
-	 * Update record
-	 *
-	 * @param  User $user      Use making update
-	 * @return int             <0 if KO, >0 if OK
-	 */
-	function update($user) 
-	{
-	    // Check parameters
-	    if (empty($this->nature) || $this->nature == '-1')
-	    {
-	        $this->nature = '0';
-	    }
-
-	    $this->db->begin();
-		
-		$sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_journal ";
-		$sql .= " SET code = " . ($this->code ? "'" . $this->db->escape($this->code) . "'" : "null");
-		$sql .= " , label = " . ($this->label ? "'" . $this->db->escape($this->label) . "'" : "null");
-		$sql .= " , nature = " . ($this->nature ? "'" . $this->db->escape($this->nature) . "'" : "0");
-		$sql .= " , active = '" . $this->active . "'";
-		$sql .= " WHERE rowid = " . $this->id;
-		
-		dol_syslog(get_class($this) . "::update sql=" . $sql, LOG_DEBUG);
-		$result = $this->db->query($sql);
-		if ($result) {
-			$this->db->commit();
-			return 1;
-		} else {
-			$this->error = $this->db->lasterror();
-			$this->db->rollback();
-			return - 1;
-		}
-	}
-	
-	/**
-	 * Check usage of accounting journal
-	 *
-	 * @return int <0 if KO, >0 if OK
-	 */
-	function checkUsage() {
-		global $langs;
-		
-		$sql = "(SELECT fk_code_ventilation FROM " . MAIN_DB_PREFIX . "facturedet";
-		$sql .= " WHERE  fk_code_ventilation=" . $this->id . ")";
-		$sql .= "UNION";
-		$sql .= "(SELECT fk_code_ventilation FROM " . MAIN_DB_PREFIX . "facture_fourn_det";
-		$sql .= " WHERE  fk_code_ventilation=" . $this->id . ")";
-		
-		dol_syslog(get_class($this) . "::checkUsage sql=" . $sql, LOG_DEBUG);
-		$resql = $this->db->query($sql);
-		
-		if ($resql) {
-			$num = $this->db->num_rows($resql);
-			if ($num > 0) {
-				$this->error = $langs->trans('ErrorAccountingJournalIsAlreadyUse');
-				return 0;
-			} else {
-				return 1;
-			}
-		} else {
-			$this->error = $this->db->lasterror();
-			return - 1;
-		}
-	}
-	
-	/**
-	 * Delete object in database
-	 *
-	 * @param User $user User that deletes
-	 * @param int $notrigger 0=triggers after, 1=disable triggers
-	 * @return int <0 if KO, >0 if OK
-	 */
-	function delete($user, $notrigger = 0) {
-		$error = 0;
-		
-		$result = $this->checkUsage();
-		
-		if ($result > 0) {
-			
-			$this->db->begin();
-			
-			// if (! $error) {
-			// if (! $notrigger) {
-			// Uncomment this and change MYOBJECT to your own tag if you
-			// want this action calls a trigger.
-			
-			// // Call triggers
-			// include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			// $interface=new Interfaces($this->db);
-			// $result=$interface->run_triggers('ACCOUNTANCY_ACCOUNT_DELETE',$this,$user,$langs,$conf);
-			// if ($result < 0) { $error++; $this->errors=$interface->errors; }
-			// // End call triggers
-			// }
-			// }
-			
-			if (! $error) {
-				$sql = "DELETE FROM " . MAIN_DB_PREFIX . "accounting_journal";
-				$sql .= " WHERE rowid=" . $this->id;
-				
-				dol_syslog(get_class($this) . "::delete sql=" . $sql);
-				$resql = $this->db->query($sql);
-				if (! $resql) {
-					$error ++;
-					$this->errors[] = "Error " . $this->db->lasterror();
-				}
-			}
-			
-			// Commit or rollback
-			if ($error) {
-				foreach ( $this->errors as $errmsg ) {
-					dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR);
-					$this->error .= ($this->error ? ', ' . $errmsg : $errmsg);
-				}
-				$this->db->rollback();
-				return - 1 * $error;
-			} else {
-				$this->db->commit();
-				return 1;
-			}
-		} else {
-			return - 1;
-		}
-	}
-	
 	/**
 	 * Return clicable name (with picto eventually)
 	 *
@@ -311,64 +109,6 @@ class AccountingJournal extends CommonObject
 		return $result;
 	}
 	
-	/**
-	 * Deactivate journal
-	 *
-	 * @param int $id Id
-	 * @return int <0 if KO, >0 if OK
-	 */
-	function journal_deactivate($id) {
-		$result = $this->checkUsage();
-		
-		if ($result > 0) {
-			$this->db->begin();
-			
-			$sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_journal ";
-			$sql .= "SET active = '0'";
-			$sql .= " WHERE rowid = " . $this->db->escape($id);
-			
-			dol_syslog(get_class($this) . "::deactivate sql=" . $sql, LOG_DEBUG);
-			$result = $this->db->query($sql);
-			
-			if ($result) {
-				$this->db->commit();
-				return 1;
-			} else {
-				$this->error = $this->db->lasterror();
-				$this->db->rollback();
-				return - 1;
-			}
-		} else {
-			return - 1;
-		}
-	}
-	
-	/**
-	 * Activate journal
-	 *
-	 * @param int $id Id
-	 * @return int <0 if KO, >0 if OK
-	 */
-	function journal_activate($id) {
-		$this->db->begin();
-		
-		$sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_journal ";
-		$sql .= "SET active = '1'";
-		$sql .= " WHERE rowid = " . $this->db->escape($id);
-		
-		dol_syslog(get_class($this) . "::activate sql=" . $sql, LOG_DEBUG);
-		$result = $this->db->query($sql);
-		if ($result) {
-			$this->db->commit();
-			return 1;
-		} else {
-			$this->error = $this->db->lasterror();
-			$this->db->rollback();
-			return - 1;
-		}
-	}
-	
-	
 	/**
 	 *  Retourne le libelle du statut d'un user (actif, inactif)
 	 *

+ 9 - 8
htdocs/core/menus/init_menu_auguria.sql

@@ -211,14 +211,15 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled', __HANDLER__, 'left', 2400__+MAX_llx_menu__, 'accountancy', 'accounting', 6__+MAX_llx_menu__, '/accountancy/index.php?leftmenu=accountancy', 'MenuAccountancy', 0, 'accountancy', '! empty($conf->accounting->enabled) || $user->rights->accounting->bind->write || $user->rights->accounting->bind->write || $user->rights->compta->resultat->lire', '', 0, 7, __ENTITY__);
 	-- Setup
 	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled', __HANDLER__, 'left', 2451__+MAX_llx_menu__, 'accountancy', 'accountancy_admin',            2400__+MAX_llx_menu__, '/accountancy/index.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'Setup', 1, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 1, __ENTITY__);
-	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2455__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chartmodel',    2451__+MAX_llx_menu__, '/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'Pcg_version', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 10, __ENTITY__);
-	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2456__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chart',         2451__+MAX_llx_menu__, '/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'Chartofaccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 20, __ENTITY__);
-	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2457__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chart_group',   2451__+MAX_llx_menu__, '/accountancy/admin/categories_list.php?id=32&mainmenu=accountancy&leftmenu=accountancy_admin', 'AccountingCategory', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 22, __ENTITY__);
-	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2458__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_default',       2451__+MAX_llx_menu__, '/accountancy/admin/defaultaccounts.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuDefaultAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 30, __ENTITY__);
-	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2459__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_vat',           2451__+MAX_llx_menu__, '/admin/dict.php?id=10&from=accountancy&search_country_id=__MYCOUNTRYID__&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuVatAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 40, __ENTITY__);
-	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2460__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_tax',           2451__+MAX_llx_menu__, '/admin/dict.php?id=7&from=accountancy&search_country_id=__MYCOUNTRYID__&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuTaxAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 50, __ENTITY__);
-	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2461__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_expensereport', 2451__+MAX_llx_menu__, '/admin/dict.php?id=17&from=accountancy&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuExpenseReportAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 60, __ENTITY__);
-	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2462__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_product',       2451__+MAX_llx_menu__, '/accountancy/admin/productaccount.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuProductsAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 70, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2457__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_journal',       2451__+MAX_llx_menu__, '/accountancy/admin/journals_list.php?id=35&mainmenu=accountancy&leftmenu=accountancy_admin', 'AccountingJournals', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 10, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2455__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chartmodel',    2451__+MAX_llx_menu__, '/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'Pcg_version', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 20, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2456__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chart',         2451__+MAX_llx_menu__, '/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'Chartofaccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 30, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2457__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_chart_group',   2451__+MAX_llx_menu__, '/accountancy/admin/categories_list.php?id=32&mainmenu=accountancy&leftmenu=accountancy_admin', 'AccountingCategory', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 40, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2458__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_default',       2451__+MAX_llx_menu__, '/accountancy/admin/defaultaccounts.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuDefaultAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 50, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2459__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_vat',           2451__+MAX_llx_menu__, '/admin/dict.php?id=10&from=accountancy&search_country_id=__MYCOUNTRYID__&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuVatAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 60, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2460__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_tax',           2451__+MAX_llx_menu__, '/admin/dict.php?id=7&from=accountancy&search_country_id=__MYCOUNTRYID__&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuTaxAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 70, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2461__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_expensereport', 2451__+MAX_llx_menu__, '/admin/dict.php?id=17&from=accountancy&mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuExpenseReportAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 80, __ENTITY__);
+	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="accountancy_admin"', __HANDLER__, 'left', 2462__+MAX_llx_menu__, 'accountancy', 'accountancy_admin_product',       2451__+MAX_llx_menu__, '/accountancy/admin/productaccount.php?mainmenu=accountancy&leftmenu=accountancy_admin', 'MenuProductsAccounts', 2, 'accountancy', '$user->rights->accounting->chartofaccount', '', 0, 90, __ENTITY__);
 	-- Binding
 	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled', __HANDLER__, 'left', 2401__+MAX_llx_menu__, 'accountancy', 'dispatch_customer', 2400__+MAX_llx_menu__, '/accountancy/customer/index.php?leftmenu=dispatch_customer', 'CustomersVentilation', 1, 'accountancy', '$user->rights->accounting->bind->write', '', 0, 2, __ENTITY__);
 	insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled && $leftmenu=="dispatch_customer"', __HANDLER__, 'left', 2402__+MAX_llx_menu__, 'accountancy', '', 2401__+MAX_llx_menu__, '/accountancy/customer/list.php', 'ToDispatch', 2, 'accountancy', '$user->rights->accounting->bind->write', '', 0, 3, __ENTITY__);

+ 1 - 1
htdocs/core/menus/standard/eldy.lib.php

@@ -952,7 +952,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 
 				// Chart of account
 				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy/',$leftmenu)) $newmenu->add("/accountancy/index.php?leftmenu=accountancy_admin", $langs->trans("Setup"),1,$user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin', 1);
-				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/journals_list.php?id=33&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("AccountingJournals"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_journal', 10);
+				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/journals_list.php?id=35&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("AccountingJournals"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_journal', 10);
 				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/accountmodel.php?id=31&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("Pcg_version"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chartmodel', 20);
 				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("Chartofaccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chart', 30);
 				if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/categories_list.php?id=32&search_country_id=".$mysoc->country_id."&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("AccountingCategory"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chart', 31);

+ 4 - 4
htdocs/install/mysql/data/llx_accounting.sql

@@ -31,10 +31,10 @@ delete from llx_accounting_account;
 delete from llx_accounting_system;
 delete from llx_accounting_journal;
 
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (1,'VT', 'Journal des ventes', 1, 1);
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (2,'AC', 'Journal des achats', 2, 1);
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (3,'BQ', 'Journal de banque', 3, 1);
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (4,'OD', 'Journal des opérations diverses', 0, 1);
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (1,'VT', 'Journal des ventes', 2, 1);
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (2,'AC', 'Journal des achats', 3, 1);
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (3,'BQ', 'Journal de banque', 4, 1);
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (4,'OD', 'Journal des opérations diverses', 1, 1);
 INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (5,'AN', 'Journal des à-nouveaux', 9, 1);
 --
 -- Descriptif des plans comptables FR PCG99-ABREGE

+ 1 - 1
htdocs/install/mysql/tables/llx_accounting_journal.sql

@@ -22,6 +22,6 @@ create table llx_accounting_journal
   rowid             integer AUTO_INCREMENT PRIMARY KEY,
   code       		varchar(32) NOT NULL,
   label             varchar(128) NOT NULL,
-  nature			smallint DEFAULT 0 NOT NULL,			-- type of journals (0:various operations / 1:sale / 2:purchase / 3:bank / 9: has-new)
+  nature			smallint DEFAULT 0 NOT NULL,			-- type of journals (1:various operations / 2:sale / 3:purchase / 4:bank / 9: has-new)
   active            smallint DEFAULT 0
 )ENGINE=innodb;

+ 5 - 5
htdocs/langs/en_US/accountancy.lang

@@ -204,11 +204,11 @@ NewAccountingJournal=New accounting journal
 ShowAccoutingJournal=Show accounting journal
 Code=Code
 Nature=Nature
-AccountingJournalTypeVariousOperation=Various operation
-AccountingJournalTypeSale=Sale
-AccountingJournalTypePurchase=Purchase
-AccountingJournalTypeBank=Bank
-AccountingJournalTypeHasNew=Has-new
+AccountingJournalType1=Various operation
+AccountingJournalType2=Sales
+AccountingJournalType3=Purchases
+AccountingJournalType4=Bank
+AccountingJournalType9=Has-new
 ErrorAccountingJournalIsAlreadyUse=This journal is already use
 
 ## Export

+ 1 - 0
htdocs/langs/en_US/admin.lang

@@ -856,6 +856,7 @@ DictionaryOrderMethods=Ordering methods
 DictionarySource=Origin of proposals/orders
 DictionaryAccountancyCategory=Accounting account groups
 DictionaryAccountancysystem=Models for chart of accounts
+DictionaryAccountancyJournal=Accounting journals
 DictionaryEMailTemplates=Emails templates
 DictionaryUnits=Units
 DictionaryProspectStatus=Prospection status