From d8872a412b1f6709492cbd37c3af05d0e52c0eed Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 7 Feb 2018 14:21:57 +0100 Subject: [PATCH] Fix numbering for expense report --- .../expensereport/mod_expensereport_jade.php | 45 +++++++++++++++++++ htdocs/expensereport/card.php | 27 ++++++++--- .../class/expensereport.class.php | 2 +- htdocs/langs/en_US/trips.lang | 1 + 4 files changed, 68 insertions(+), 7 deletions(-) diff --git a/htdocs/core/modules/expensereport/mod_expensereport_jade.php b/htdocs/core/modules/expensereport/mod_expensereport_jade.php index c85625cabf8..051ae29f2ee 100644 --- a/htdocs/core/modules/expensereport/mod_expensereport_jade.php +++ b/htdocs/core/modules/expensereport/mod_expensereport_jade.php @@ -101,6 +101,51 @@ class mod_expensereport_jade extends ModeleNumRefExpenseReport { global $db,$conf; + // For backward compatibility and restore old behavior to get ref of expense report + if ($conf->global->EXPENSEREPORT_USE_OLD_NUMBERING_RULE) + { + $fuser = null; + if ($object->fk_user_author > 0) + { + $fuser=new User($db); + $fuser->fetch($object->fk_user_author); + } + + $expld_car = (empty($conf->global->NDF_EXPLODE_CHAR))?"-":$conf->global->NDF_EXPLODE_CHAR; + $num_car = (empty($conf->global->NDF_NUM_CAR_REF))?"5":$conf->global->NDF_NUM_CAR_REF; + + $sql = 'SELECT MAX(de.ref_number_int) as max'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'expensereport de'; + + $result = $db->query($sql); + + if($db->num_rows($result) > 0): + $objp = $db->fetch_object($result); + $newref = $objp->max; + $newref++; + while(strlen($newref) < $num_car): + $newref = "0".$newref; + endwhile; + else: + $newref = 1; + while(strlen($newref) < $num_car): + $newref = "0".$newref; + endwhile; + endif; + + $ref_number_int = ($newref+1)-1; + $update_number_int = true; + + $user_author_infos = dolGetFirstLastname($fuser->firstname, $fuser->lastname); + + $prefix="ER"; + if (! empty($conf->global->EXPENSE_REPORT_PREFIX)) $prefix=$conf->global->EXPENSE_REPORT_PREFIX; + $newref = str_replace(' ','_', $user_author_infos).$expld_car.$prefix.$newref.$expld_car.dol_print_date($object->date_debut,'%y%m%d'); + + dol_syslog("mod_expensereport_jade::getNextValue return ".$newref); + return $newref; + } + // D'abord on recupere la valeur max $posindice=8; $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 29bc181a358..0b8b7cdc91b 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -315,11 +315,16 @@ if (empty($reshook)) if ($action == "confirm_validate" && GETPOST("confirm") == "yes" && $id > 0 && $user->rights->expensereport->creer) { + $error = 0; + + $db->begin(); + $object = new ExpenseReport($db); $object->fetch($id); + $result = $object->setValidate($user); - if ($result > 0) + if ($result >= 0) { // Define output language if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) @@ -338,8 +343,13 @@ if (empty($reshook)) $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref); } } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + $error++; + } - if ($result > 0 && $object->fk_user_validator > 0) + if (! $error && $result > 0 && $object->fk_user_validator > 0) { $langs->load("mails"); @@ -418,10 +428,15 @@ if (empty($reshook)) $action=''; } } - else - { - setEventMessages($object->error, $object->errors, 'errors'); - } + + if (! $error) + { + $db->commit(); + } + else + { + $db->rollback(); + } } if ($action == "confirm_save_from_refuse" && GETPOST("confirm") == "yes" && $id > 0 && $user->rights->expensereport->creer) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 2052b63fe0c..b1523f3bbf9 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1091,7 +1091,7 @@ class ExpenseReport extends CommonObject { $num = $this->ref; } - if (empty($num)) return -1; + if (empty($num) || $num < 0) return -1; $this->newref = $num; diff --git a/htdocs/langs/en_US/trips.lang b/htdocs/langs/en_US/trips.lang index ad4f7217d6f..a5ab097aa0e 100644 --- a/htdocs/langs/en_US/trips.lang +++ b/htdocs/langs/en_US/trips.lang @@ -74,6 +74,7 @@ EX_CAM_VP=PV maintenance and repair DefaultCategoryCar=Default transportation mode DefaultRangeNumber=Default range number +Error_EXPENSEREPORT_ADDON_NotDefined=Error, the rule for expense report numbering ref was not defined into setup of module 'Expense Report' ErrorDoubleDeclaration=You have declared another expense report into a similar date range. AucuneLigne=There is no expense report declared yet