Laurent Destailleur 3 rokov pred
rodič
commit
ed2e1bda46

+ 10 - 3
htdocs/admin/expensereport_ik.php

@@ -36,10 +36,10 @@ $langs->loadLangs(array("admin", "trips", "errors", "other", "dict"));
 $error = 0;
 
 $action = GETPOST('action', 'aZ09');
+
 $id = GETPOST('id', 'int');
 $ikoffset = GETPOST('ikoffset', 'int');
 $coef = GETPOST('coef', 'int');
-
 $fk_c_exp_tax_cat = GETPOST('fk_c_exp_tax_cat');
 $fk_range = GETPOST('fk_range', 'int');
 
@@ -62,9 +62,16 @@ if ($action == 'updateik') {
 		}
 	}
 
-	$expIk->setValues($_POST);
-	$result = $expIk->create($user);
+	$expIk->coef = $coef;
+	$expIk->ikoffset = $ikoffset;
+	$expIk->fk_c_exp_tax_cat = $fk_c_exp_tax_cat;
+	$expIk->fk_range = $fk_range;
 
+	if ($expIk->id > 0) {
+		$result = $expIk->update($user);
+	} else {
+		$result = $expIk->create($user);
+	}
 	if ($result > 0) {
 		setEventMessages('SetupSaved', null, 'mesgs');
 

+ 31 - 17
htdocs/admin/expensereport_rules.php

@@ -34,13 +34,19 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport_rule.class.ph
 // Load translation files required by the page
 $langs->loadLangs(array("admin", "other", "trips", "errors", "dict"));
 
+// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
+$hookmanager->initHooks(array('admin', 'dictionaryadmin','expensereport_rules'));
+
+$object = new ExpenseReportRule($db);
+
 if (!$user->admin) {
 	accessforbidden();
 }
 
-// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
-$hookmanager->initHooks(array('admin', 'dictionaryadmin','expensereport_rules'));
 
+/*
+ * Action
+ */
 
 $parameters = array();
 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
@@ -51,7 +57,6 @@ if ($reshook < 0) {
 if (empty($reshook)) {
 	//Init error
 	$error = false;
-	$message = false;
 
 	$action = GETPOST('action', 'aZ09');
 	$id = GETPOST('id', 'int');
@@ -59,21 +64,20 @@ if (empty($reshook)) {
 	$apply_to = GETPOST('apply_to');
 	$fk_user = GETPOST('fk_user', 'int');
 	$fk_usergroup = GETPOST('fk_usergroup', 'int');
-
-	$fk_c_type_fees = GETPOST('fk_c_type_fees');
+	$restrictive = GETPOST('restrictive', 'int');
+	$fk_c_type_fees = GETPOST('fk_c_type_fees', 'int');
 	$code_expense_rules_type = GETPOST('code_expense_rules_type');
 	$dates = dol_mktime(12, 0, 0, GETPOST('startmonth'), GETPOST('startday'), GETPOST('startyear'));
 	$datee = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear'));
-	$amount = GETPOST('amount');
+	$amount = price2num(GETPOST('amount'), 'MT', 2);
 
-	$object = new ExpenseReportRule($db);
 	if (!empty($id)) {
 		$result = $object->fetch($id);
 		if ($result < 0) {
 			dol_print_error('', $object->error, $object->errors);
 		}
 	}
-	// TODO do action
+
 	if ($action == 'save') {
 		$error = 0;
 
@@ -104,8 +108,6 @@ if (empty($reshook)) {
 		}
 
 		if (empty($error)) {
-			$object->setValues($_POST);
-
 			if ($apply_to == 'U') {
 				$object->fk_user = (int) $fk_user;
 				$object->fk_usergroup = 0;
@@ -122,18 +124,30 @@ if (empty($reshook)) {
 
 			$object->dates = $dates;
 			$object->datee = $datee;
-
+			$object->restrictive = $restrictive;
+			$object->fk_c_type_fees = $fk_c_type_fees;
+			$object->code_expense_rules_type = $code_expense_rules_type;
+			$object->amount = $amount;
 			$object->entity = $conf->entity;
 
-			$res = $object->create($user);
+			if ($object->id > 0) {
+				$res = $object->update($user);
+			} else {
+				$res = $object->create($user);
+			}
 			if ($res > 0) {
 				setEventMessages($langs->trans('ExpenseReportRuleSave'), null);
 			} else {
 				dol_print_error($object->db);
+				$error++;
 			}
 
-			header('Location: ' . $_SERVER['PHP_SELF']);
-			exit;
+			if (!$error) {
+				header('Location: ' . $_SERVER['PHP_SELF']);
+				exit;
+			} else {
+				$action = '';
+			}
 		}
 	} elseif ($action == 'delete') {
 		// TODO add confirm
@@ -207,7 +221,7 @@ if ($action != 'edit') {
 	echo '<td class="linecoltyperule">' . $form->selectarray('code_expense_rules_type', $tab_rules_type, '', 0) . '</td>';
 	echo '<td class="linecoldatestart">' . $form->selectDate(strtotime(date('Y-m-01', dol_now())), 'start', '', '', 0, '', 1, 0) . '</td>';
 	echo '<td class="linecoldateend>' . $form->selectDate(strtotime(date('Y-m-t', dol_now())), 'end', '', '', 0, '', 1, 0) . '</td>';
-	echo '<td class="linecolamount"><input type="text" value="" class="maxwidth100" name="amount" class="amount" /> ' . $conf->currency . '</td>';
+	echo '<td class="linecolamount"><input type="text" value="" class="maxwidth100" name="amount" class="amount right" /></td>';
 	echo '<td class="linecolrestrictive">' . $form->selectyesno('restrictive', 0, 1) . '</td>';
 	echo '<td class="right linecolbutton"><input type="submit" class="button button-add" value="' . $langs->trans('Add') . '" /></td>';
 	echo '</tr>';
@@ -304,10 +318,10 @@ foreach ($rules as $rule) {
 	}
 	echo '</td>';
 
-
+	// Amount
 	echo '<td class="linecolamount">';
 	if ($action == 'edit' && $object->id == $rule->id) {
-		echo '<input type="text" value="' . price2num($object->amount) . '" name="amount" class="amount" />' . $conf->currency;
+		echo '<input type="text" value="' . price2num($object->amount) . '" name="amount" class="amount width50 right" />';
 	} else {
 		echo price($rule->amount, 0, $langs, 1, -1, -1, $conf->currency);
 	}

+ 1 - 1
htdocs/compta/bank/class/paymentvarious.class.php

@@ -165,7 +165,7 @@ class PaymentVarious extends CommonObject
 	 *
 	 *  @param		DoliDB		$db      Database handler
 	 */
-	public function __construct($db)
+	public function __construct(DoliDB $db)
 	{
 		$this->db = $db;
 		$this->element = 'payment_various';

+ 1 - 1
htdocs/compta/deplacement/class/deplacement.class.php

@@ -121,7 +121,7 @@ class Deplacement extends CommonObject
 	 *
 	 * @param	DoliDB		$db		Database handler
 	 */
-	public function __construct($db)
+	public function __construct(DoliDB $db)
 	{
 		$this->db = $db;
 

+ 1 - 1
htdocs/compta/facture/class/facture-rec.class.php

@@ -222,7 +222,7 @@ class FactureRec extends CommonInvoice
 	 *
 	 * 	@param		DoliDB		$db		Database handler
 	 */
-	public function __construct($db)
+	public function __construct(DoliDB $db)
 	{
 		$this->db = $db;
 	}

+ 1 - 1
htdocs/compta/facture/class/facture.class.php

@@ -428,7 +428,7 @@ class Facture extends CommonInvoice
 	 *
 	 * 	@param	DoliDB		$db			Database handler
 	 */
-	public function __construct($db)
+	public function __construct(DoliDB $db)
 	{
 		$this->db = $db;
 	}

+ 1 - 1
htdocs/compta/facture/class/facturestats.class.php

@@ -57,7 +57,7 @@ class FactureStats extends Stats
 	 * 	@param	int			$typentid   Id typent of thirdpary for filter
 	 * 	@param	int			$categid    Id category of thirdpary for filter
 	 */
-	public function __construct($db, $socid, $mode, $userid = 0, $typentid = 0, $categid = 0)
+	public function __construct(DoliDB $db, $socid, $mode, $userid = 0, $typentid = 0, $categid = 0)
 	{
 		global $user, $conf;
 

+ 1 - 1
htdocs/compta/facture/class/paymentterm.class.php

@@ -68,7 +68,7 @@ class PaymentTerm // extends CommonObject
 	 *
 	 * 	@param	DoliDB		$db			Database handler
 	 */
-	public function __construct($db)
+	public function __construct(DoliDB $db)
 	{
 		$this->db = $db;
 	}

+ 1 - 1
htdocs/compta/sociales/class/chargesociales.class.php

@@ -123,7 +123,7 @@ class ChargeSociales extends CommonObject
 	 *
 	 * @param	DoliDB		$db		Database handler
 	 */
-	public function __construct($db)
+	public function __construct(DoliDB $db)
 	{
 		$this->db = $db;
 	}

+ 1 - 1
htdocs/compta/sociales/class/paymentsocialcontribution.class.php

@@ -105,7 +105,7 @@ class PaymentSocialContribution extends CommonObject
 	 *
 	 *  @param		DoliDB		$db      Database handler
 	 */
-	public function __construct($db)
+	public function __construct(DoliDB $db)
 	{
 		$this->db = $db;
 	}

+ 0 - 413
htdocs/core/class/coreobject.class.php

@@ -1,413 +0,0 @@
-<?php
-/* EXPERIMENTAL
- *
- * Copyright (C) 2016		ATM Consulting			<support@atm-consulting.fr>
- *
- * 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 <https://www.gnu.org/licenses/>.
- */
-
-/**
- *	\file       htdocs/core/class/coreobject.class.php
- *	\ingroup    core
- *	\brief      File of class to manage all object. Might be replace or merge into commonobject
- */
-
-require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
-
-// TODO Remove this class (used in Expensereportik and ExpenseReportRule
-/**
- * CoreObject
- */
-class CoreObject extends CommonObject
-{
-	public $withChild = true;
-
-	/**
-	 *  @var Array $_fields Fields to synchronize with Database
-	 */
-	protected $fields = array();
-
-	/**
-	 *  Constructor
-	 *
-	 *  @param      DoliDB		$db      Database handler
-	 */
-	public function __construct(DoliDB &$db)
-	{
-		$this->db = $db;
-	}
-
-	/**
-	 * Function to init fields
-	 *
-	 * @return bool
-	 */
-	protected function init()
-	{
-		$this->id = 0;
-		$this->datec = 0;
-		$this->tms = 0;
-
-		if (!empty($this->fields)) {
-			foreach ($this->fields as $field => $info) {
-				if ($this->isDate($info)) {
-					$this->{$field} = time();
-				} elseif ($this->isArray($info)) {
-					$this->{$field} = array();
-				} elseif ($this->isInt($info)) {
-					$this->{$field} = (int) 0;
-				} elseif ($this->isFloat($info)) {
-					$this->{$field} = (double) 0;
-				} else {
-					$this->{$field} = '';
-				}
-			}
-
-			$this->to_delete = false;
-			$this->is_clone = false;
-
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	/**
-	 * Test type of field
-	 *
-	 * @param   string  $field  name of field
-	 * @param   string  $type   type of field to test
-	 * @return  boolean         value of field or false
-	 */
-	private function checkFieldType($field, $type)
-	{
-		if (isset($this->fields[$field]) && method_exists($this, 'is_'.$type)) {
-			return $this->{'is_'.$type}($this->fields[$field]);
-		} else {
-			return false;
-		}
-	}
-
-	/**
-	 *	Get object and children from database
-	 *
-	 *	@param      int			$id       		Id of object to load
-	 * 	@param		bool		$loadChild		used to load children from database
-	 *	@return     int         				>0 if OK, <0 if KO, 0 if not found
-	 */
-	public function fetch($id, $loadChild = true)
-	{
-		$res = $this->fetchCommon($id);
-		if ($res > 0) {
-			if ($loadChild) {
-				$this->fetchChild();
-			}
-		}
-
-		return $res;
-	}
-
-
-	/**
-	 * Function to instantiate a new child
-	 *
-	 * @param   string  $tabName        Table name of child
-	 * @param   int     $id             If id is given, we try to return his key if exist or load if we try_to_load
-	 * @param   string  $key            Attribute name of the object id
-	 * @param   bool    $try_to_load    Force the fetch if an id is given
-	 * @return                          int
-	 */
-	public function addChild($tabName, $id = 0, $key = 'id', $try_to_load = false)
-	{
-		if (!empty($id)) {
-			foreach ($this->{$tabName} as $k => &$object) {
-				if ($object->{$key} === $id) {
-					return $k;
-				}
-			}
-		}
-
-		$k = count($this->{$tabName});
-
-		$className = ucfirst($tabName);
-		$this->{$tabName}[$k] = new $className($this->db);
-		if ($id > 0 && $key === 'id' && $try_to_load) {
-			$this->{$tabName}[$k]->fetch($id);
-		}
-
-		return $k;
-	}
-
-
-	/**
-	 * Function to set a child as to delete
-	 *
-	 * @param   string  $tabName        Table name of child
-	 * @param   int     $id             Id of child to set as to delete
-	 * @param   string  $key            Attribute name of the object id
-	 * @return                          bool
-	 */
-	public function removeChild($tabName, $id, $key = 'id')
-	{
-		foreach ($this->{$tabName} as &$object) {
-			if ($object->{$key} == $id) {
-				$object->to_delete = true;
-				return true;
-			}
-		}
-		return false;
-	}
-
-
-	/**
-	 * Function to fetch children objects
-	 *
-	 * @return void
-	 */
-	public function fetchChild()
-	{
-		if ($this->withChild && !empty($this->childtables) && !empty($this->fk_element)) {
-			foreach ($this->childtables as &$childTable) {
-				$className = ucfirst($childTable);
-
-				$this->{$className} = array();
-
-				$sql = "SELECT rowid FROM ".$this->db->prefix().$childTable." WHERE ".$this->fk_element." = ".((int) $this->id);
-				$res = $this->db->query($sql);
-
-				if ($res) {
-					while ($obj = $this->db->fetch_object($res)) {
-						$o = new $className($this->db);
-						$o->fetch($obj->rowid);
-
-						$this->{$className}[] = $o;
-					}
-				} else {
-					$this->errors[] = $this->db->lasterror();
-				}
-			}
-		}
-	}
-
-	/**
-	 * Function to update children data
-	 *
-	 * @param   User    $user   user object
-	 * @return void
-	 */
-	public function saveChild(User &$user)
-	{
-		if ($this->withChild && !empty($this->childtables) && !empty($this->fk_element)) {
-			foreach ($this->childtables as &$childTable) {
-				$className = ucfirst($childTable);
-				if (!empty($this->{$className})) {
-					foreach ($this->{$className} as $i => &$object) {
-						$object->{$this->fk_element} = $this->id;
-
-						$object->update($user);
-						if ($this->unsetChildDeleted && isset($object->to_delete) && $object->to_delete == true) {
-							unset($this->{$className}[$i]);
-						}
-					}
-				}
-			}
-		}
-	}
-
-
-	/**
-	 * Function to update object or create or delete if needed
-	 *
-	 * @param   User    $user   User object
-	 * @return  int             < 0 if KO, > 0 if OK
-	 */
-	public function update(User &$user)
-	{
-		if (empty($this->id)) {
-			return $this->create($user); // To test, with that, no need to test on high level object, the core decide it, update just needed
-		} elseif (isset($this->to_delete) && $this->to_delete == true) {
-			return $this->delete($user);
-		}
-
-		$error = 0;
-		$this->db->begin();
-
-		$res = $this->updateCommon($user);
-		if ($res) {
-			$result = $this->call_trigger(strtoupper($this->element).'_MODIFY', $user);
-			if ($result < 0) {
-				$error++;
-			} else {
-				$this->saveChild($user);
-			}
-		} else {
-			$error++;
-			$this->error = $this->db->lasterror();
-			$this->errors[] = $this->error;
-		}
-
-		if (empty($error)) {
-			$this->db->commit();
-			return $this->id;
-		} else {
-			$this->db->rollback();
-			return -1;
-		}
-	}
-
-	/**
-	 * Function to create object in database
-	 *
-	 * @param   User    $user   User object
-	 * @return  int             < 0 if KO, > 0 if OK
-	 */
-	public function create(User $user)
-	{
-		if ($this->id > 0) {
-			return $this->update($user);
-		}
-
-		$error = 0;
-		$this->db->begin();
-
-		$res = $this->createCommon($user);
-		if ($res) {
-			$this->id = $this->db->last_insert_id($this->table_element);
-
-			$result = $this->call_trigger(strtoupper($this->element).'_CREATE', $user);
-			if ($result < 0) {
-				$error++;
-			} else {
-				$this->saveChild($user);
-			}
-		} else {
-			$error++;
-			$this->error = $this->db->lasterror();
-			$this->errors[] = $this->error;
-		}
-
-		if (empty($error)) {
-			$this->db->commit();
-			return $this->id;
-		} else {
-			$this->db->rollback();
-			return -1;
-		}
-	}
-
-	/**
-	 * Function to delete object in database
-	 *
-	 * @param   User    $user   user object
-	 * @return  int             < 0 if KO, > 0 if OK
-	 */
-	public function delete(User &$user)
-	{
-		if ($this->id <= 0) {
-			return 0;
-		}
-
-		$error = 0;
-		$this->db->begin();
-
-		$result = $this->call_trigger(strtoupper($this->element).'_DELETE', $user);
-		if ($result < 0) {
-			$error++;
-		}
-
-		if (!$error) {
-			$this->deleteCommon($user);
-			if ($this->withChild && !empty($this->childtables)) {
-				foreach ($this->childtables as &$childTable) {
-					$className = ucfirst($childTable);
-					if (!empty($this->{$className})) {
-						foreach ($this->{$className} as &$object) {
-							$object->delete($user);
-						}
-					}
-				}
-			}
-		}
-
-		if (empty($error)) {
-			$this->db->commit();
-			return 1;
-		} else {
-			$this->error = $this->db->lasterror();
-			$this->errors[] = $this->error;
-			$this->db->rollback();
-			return -1;
-		}
-	}
-
-
-	/**
-	 * Function to get a formatted date
-	 *
-	 * @param   string  $field  Attribute to return
-	 * @param   string  $format Output date format
-	 * @return          string
-	 */
-	public function getDate($field, $format = '')
-	{
-		if (empty($this->{$field})) {
-			return '';
-		} else {
-			return dol_print_date($this->{$field}, $format);
-		}
-	}
-
-	/**
-	 * Function to set date in field
-	 *
-	 * @param   string  $field  field to set
-	 * @param   string  $date   formatted date to convert
-	 * @return                  mixed
-	 */
-	public function setDate($field, $date)
-	{
-		if (empty($date)) {
-			$this->{$field} = 0;
-		} else {
-			require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
-			$this->{$field} = dol_stringtotime($date);
-		}
-
-		return $this->{$field};
-	}
-
-
-	/**
-	 * Function to update current object
-	 *
-	 * @param   array   $Tab    Array of values
-	 * @return                  int
-	 */
-	public function setValues(&$Tab)
-	{
-		foreach ($Tab as $key => $value) {
-			if ($this->checkFieldType($key, 'date')) {
-				$this->setDate($key, $value);
-			} elseif ($this->checkFieldType($key, 'float')) {
-				$this->{$key} = (double) price2num($value);
-			} elseif ($this->checkFieldType($key, 'int')) {
-				$this->{$key} = (int) price2num($value);
-			} else {
-				$this->{$key} = dol_string_nohtmltag($value);
-			}
-		}
-
-		return 1;
-	}
-}

+ 1 - 1
htdocs/core/customreports.php

@@ -465,7 +465,7 @@ print '</div>';
 $count = 0;
 print '<div class="divadvancedsearchfield">';
 print '<div class="inline-block opacitymedium"><span class="fas fa-ruler-horizontal paddingright pictofixedwidth" title="'.dol_escape_htmltag($langs->trans("GroupBy")).'"></span></div>';
-print $formother->selectGroupByField($object, $search_groupby, $arrayofgroupby, 'minwidth200 maxwidth250', $langs->trans("GroupBy"));	// Fill the array $arrayofgroupby with possible fields
+print $formother->selectGroupByField($object, $search_groupby, $arrayofgroupby, 'minwidth250 maxwidth300', $langs->trans("GroupBy"));	// Fill the array $arrayofgroupby with possible fields
 print '</div>';
 
 

+ 1 - 1
htdocs/core/db/sqlite3.class.php

@@ -1026,7 +1026,7 @@ class DoliDBSqlite3 extends DoliDB
 	 *
 	 *	@param	string		$table	Name of table
 	 *	@param	string		$field	Optionnel : Name of field if we want description of field
-	 *	@return	SQLite3Result		Resource
+	 *	@return	bool|SQLite3Result		Resource
 	 */
 	public function DDLDescTable($table, $field = "")
 	{

+ 1 - 1
htdocs/core/modules/expedition/doc/pdf_espadon.modules.php

@@ -120,7 +120,7 @@ class pdf_espadon extends ModelePdfExpedition
 	 *
 	 *	@param	DoliDB	$db		Database handler
 	 */
-	public function __construct($db = 0)
+	public function __construct($db)
 	{
 		global $conf, $langs, $mysoc;
 

+ 65 - 6
htdocs/expensereport/class/expensereport_ik.class.php

@@ -22,12 +22,12 @@
  *	\brief      File of class to manage expense ik
  */
 
-require_once DOL_DOCUMENT_ROOT.'/core/class/coreobject.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
 
 /**
  *	Class to manage inventories
  */
-class ExpenseReportIk extends CoreObject
+class ExpenseReportIk extends CommonObject
 {
 	/**
 	 * @var string ID to identify managed object
@@ -68,6 +68,7 @@ class ExpenseReportIk extends CoreObject
 	 */
 	public $ikoffset;
 
+
 	/**
 	 * Attribute object linked with database
 	 * @var array
@@ -80,17 +81,75 @@ class ExpenseReportIk extends CoreObject
 		,'ikoffset'=>array('type'=>'double')
 	);
 
+
 	/**
 	 *  Constructor
 	 *
 	 *  @param      DoliDB		$db      Database handler
 	 */
-	public function __construct(DoliDB &$db)
+	public function __construct(DoliDB $db)
+	{
+		$this->db = $db;
+	}
+
+
+	/**
+	 * Create object into database
+	 *
+	 * @param  User $user      User that creates
+	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
+	 * @return int             <0 if KO, Id of created object if OK
+	 */
+	public function create(User $user, $notrigger = false)
 	{
-		parent::__construct($db);
-		parent::init();
+		$resultcreate = $this->createCommon($user, $notrigger);
+
+		//$resultvalidate = $this->validate($user, $notrigger);
+
+		return $resultcreate;
+	}
 
-		$this->errors = array();
+
+	/**
+	 * Load object in memory from the database
+	 *
+	 * @param int    $id   Id object
+	 * @param string $ref  Ref
+	 * @return int         <0 if KO, 0 if not found, >0 if OK
+	 */
+	public function fetch($id, $ref = null)
+	{
+		$result = $this->fetchCommon($id, $ref);
+		if ($result > 0 && !empty($this->table_element_line)) {
+			$this->fetchLines();
+		}
+		return $result;
+	}
+
+
+	/**
+	 * Update object into database
+	 *
+	 * @param  User $user      User that modifies
+	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
+	 * @return int             <0 if KO, >0 if OK
+	 */
+	public function update(User $user, $notrigger = false)
+	{
+		return $this->updateCommon($user, $notrigger);
+	}
+
+	/**
+	 * Delete object in database
+	 *
+	 * @param User $user       User that deletes
+	 * @param bool $notrigger  false=launch triggers after, true=disable triggers
+	 * @return int             <0 if KO, >0 if OK
+	 */
+	public function delete(User $user, $notrigger = false)
+	{
+		return $this->deleteCommon($user, $notrigger);
+		//return $this->deleteCommon($user, $notrigger, 1);
 	}
 
 

+ 64 - 7
htdocs/expensereport/class/expensereport_rule.class.php

@@ -22,12 +22,12 @@
  *	\brief      File of class to manage expense ik
  */
 
-require_once DOL_DOCUMENT_ROOT.'/core/class/coreobject.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
 
 /**
  *	Class to manage inventories
  */
-class ExpenseReportRule extends CoreObject
+class ExpenseReportRule extends CommonObject
 {
 	/**
 	 * @var string ID to identify managed object
@@ -125,21 +125,78 @@ class ExpenseReportRule extends CoreObject
 		,'entity'=>array('type'=>'integer')
 	);
 
+
 	/**
 	 *  Constructor
 	 *
 	 *  @param      DoliDB		$db      Database handler
 	 */
-	public function __construct(DoliDB &$db)
+	public function __construct(DoliDB $db)
+	{
+		$this->db = $db;
+	}
+
+
+	/**
+	 * Create object into database
+	 *
+	 * @param  User $user      User that creates
+	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
+	 * @return int             <0 if KO, Id of created object if OK
+	 */
+	public function create(User $user, $notrigger = false)
+	{
+		$resultcreate = $this->createCommon($user, $notrigger);
+
+		//$resultvalidate = $this->validate($user, $notrigger);
+
+		return $resultcreate;
+	}
+
+
+	/**
+	 * Load object in memory from the database
+	 *
+	 * @param int    $id   Id object
+	 * @param string $ref  Ref
+	 * @return int         <0 if KO, 0 if not found, >0 if OK
+	 */
+	public function fetch($id, $ref = null)
 	{
-		global $conf;
+		$result = $this->fetchCommon($id, $ref);
+		if ($result > 0 && !empty($this->table_element_line)) {
+			$this->fetchLines();
+		}
+		return $result;
+	}
 
-		parent::__construct($db);
-		parent::init();
 
-		$this->errors = array();
+	/**
+	 * Update object into database
+	 *
+	 * @param  User $user      User that modifies
+	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
+	 * @return int             <0 if KO, >0 if OK
+	 */
+	public function update(User $user, $notrigger = false)
+	{
+		return $this->updateCommon($user, $notrigger);
 	}
 
+	/**
+	 * Delete object in database
+	 *
+	 * @param User $user       User that deletes
+	 * @param bool $notrigger  false=launch triggers after, true=disable triggers
+	 * @return int             <0 if KO, >0 if OK
+	 */
+	public function delete(User $user, $notrigger = false)
+	{
+		return $this->deleteCommon($user, $notrigger);
+		//return $this->deleteCommon($user, $notrigger, 1);
+	}
+
+
 	/**
 	 * Return all rules or filtered by something
 	 *