diff --git a/ChangeLog b/ChangeLog index 2cf9f178a16..3a5fa7d4f37 100644 --- a/ChangeLog +++ b/ChangeLog @@ -277,7 +277,9 @@ Following changes may create regressions for some external modules, but were nec * Jquery plugin tableDnd updated. You now need to use decodeURI on the return value of tableDnDSerialize() and add 'td.' to the beginning of the dragHandle match string. * IE8 and earlier and Firefox 12 and earlier (< 2012) are no more supported. - +* The module ExpenseReport use numbering rules that you can setup (like other modules do). If you need to + keep the hard coded numbering rule of expenses report used in 6.0, just add constant + EXPENSEREPORT_USE_OLD_NUMBERING_RULE to 1. * If you use the external module "multicompany", you must also upgrade the module. Multicompany module for Dolibarr v7 is required because with Dolibarr v7, payment modes and payment conditions are management as data that are dedicated to each company. If you keep your old version of multicompany module, mode and diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index aba48811091..28eb9fa044a 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -10,7 +10,7 @@ delete from llx_menu where menu_handler=__HANDLER__ and entity=__ENTITY__; -- insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '1', 1__+MAX_llx_menu__, __HANDLER__, 'top', 'home', '', 0, '/index.php?mainmenu=home&leftmenu=', 'Home', -1, '', '', '', 2, 10, __ENTITY__); insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('societe|fournisseur', '( ! empty($conf->societe->enabled) && (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) || empty($conf->global->SOCIETE_DISABLE_CUSTOMERS))) || ! empty($conf->fournisseur->enabled)', 2__+MAX_llx_menu__, __HANDLER__, 'top', 'companies', '', 0, '/societe/index.php?mainmenu=companies&leftmenu=', 'ThirdParties', -1, 'companies', '$user->rights->societe->lire || $user->rights->societe->contact->lire', '', 2, 20, __ENTITY__); -insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('product|service', '$conf->product->enabled || $conf->service->enabled', 3__+MAX_llx_menu__, __HANDLER__, 'top', 'products', '', 0, '/product/index.php?mainmenu=products&leftmenu=', 'Products/Services', -1, 'products', '$user->rights->produit->lire||$user->rights->service->lire', '', 0, 30, __ENTITY__); +insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('product|service', '$conf->product->enabled || $conf->service->enabled', 3__+MAX_llx_menu__, __HANDLER__, 'top', 'products', '', 0, '/product/index.php?mainmenu=products&leftmenu=', 'ProductsPipeServices', -1, 'products', '$user->rights->produit->lire||$user->rights->service->lire', '', 0, 30, __ENTITY__); insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('propal|commande|fournisseur|contrat|ficheinter', '$conf->propal->enabled || $conf->commande->enabled || $conf->supplier_order->enabled || $conf->contrat->enabled || $conf->ficheinter->enabled', 5__+MAX_llx_menu__, __HANDLER__, 'top', 'commercial', '', 0, '/comm/index.php?mainmenu=commercial&leftmenu=', 'Commercial', -1, 'commercial', '$user->rights->societe->lire || $user->rights->societe->contact->lire', '', 2, 40, __ENTITY__); insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('facture|don|tax|salaries|loan|banque', '$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->don->enabled || $conf->tax->enabled || $conf->salaries->enabled || $conf->supplier_invoice->enabled || $conf->loan->enabled || $conf->banque->enabled', 6__+MAX_llx_menu__, __HANDLER__, 'top', 'billing', '', 0, '/compta/index.php?mainmenu=billing&leftmenu=', 'MenuFinancial', -1, 'compta', '$user->rights->facture->lire|| $user->rights->don->lire || $user->rights->tax->charges->lire || $user->rights->salaries->read || $user->rights->loan->read || $user->rights->banque->lire', '', 2, 50, __ENTITY__); insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('banque|prelevement', '$conf->banque->enabled || $conf->prelevement->enabled', 14__+MAX_llx_menu__, __HANDLER__, 'top', 'bank', '', 0, '/compta/bank/list.php?mainmenu=bank&leftmenu=bank', 'MenuBankCash', -1, 'banks', '$user->rights->banque->lire || $user->rights->prelevement->bons->lire', '', 0, 52, __ENTITY__); diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index 90746afed0e..15d48694277 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -108,8 +108,8 @@ class pdf_standard extends ModeleExpenseReport $this->posxdate=88; $this->posxtype=107; $this->posxprojet=120; - $this->posxtva=136; - $this->posxup=152; + $this->posxtva=138; + $this->posxup=154; $this->posxqty=168; $this->postotalttc=178; if (empty($conf->projet->enabled)) { @@ -328,7 +328,7 @@ class pdf_standard extends ModeleExpenseReport $nextColumnPosX = $this->posxprojet; } - $pdf->MultiCell($nextColumnPosX-$this->posxtype-0.8, 4, dol_trunc($outputlangs->transnoentities($object->lines[$i]->type_fees_code), 12), 0, 'C'); + $pdf->MultiCell($nextColumnPosX-$this->posxtype-0.8, 4, dol_trunc($outputlangs->transnoentities($object->lines[$i]->type_fees_code), 10), 0, 'C'); // Project if (! empty($conf->projet->enabled)) diff --git a/htdocs/core/modules/expensereport/mod_expensereport_jade.php b/htdocs/core/modules/expensereport/mod_expensereport_jade.php index c85625cabf8..c6153d422eb 100644 --- a/htdocs/core/modules/expensereport/mod_expensereport_jade.php +++ b/htdocs/core/modules/expensereport/mod_expensereport_jade.php @@ -101,6 +101,59 @@ 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'); + + $sqlbis = 'UPDATE '.MAIN_DB_PREFIX.'expensereport SET ref_number_int = '.$ref_number_int.' WHERE rowid = '.$object->id; + $resqlbis = $db->query($sqlbis); + if (! $resqlbis) + { + dol_print_error($resqlbis); + exit; + } + + 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..6d989e6efc0 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"); @@ -387,8 +397,6 @@ if (empty($reshook)) { $mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($emailFrom,2),$mailfile->getValidAddress($emailTo,2)); setEventMessages($mesg, null, 'mesgs'); - header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id); - exit; } else { @@ -418,10 +426,17 @@ if (empty($reshook)) $action=''; } } - else - { - setEventMessages($object->error, $object->errors, 'errors'); - } + + if (! $error) + { + $db->commit(); + header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id); + exit; + } + else + { + $db->rollback(); + } } if ($action == "confirm_save_from_refuse" && GETPOST("confirm") == "yes" && $id > 0 && $user->rights->expensereport->creer) @@ -1955,7 +1970,7 @@ else print ''; print ''; - print '
| '.$langs->trans("TF_".strtoupper(empty($objp->type_fees_libelle)?'OTHER':$objp->type_fees_libelle)).' | '; - print ''.($langs->trans(($line->type_fees_code)) == $line->type_fees_code ? $line->type_fees_libelle : $langs->trans(($line->type_fees_code))).' | '; + print ''; + $labeltype = ($langs->trans(($line->type_fees_code)) == $line->type_fees_code ? $line->type_fees_libelle : $langs->trans($line->type_fees_code)); + print $labeltype; + print ' | '; print ''.$line->comments.' | '; print ''.vatrate($line->vatrate,true).' | '; print ''.price($line->value_unit).' | '; 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/products.lang b/htdocs/langs/en_US/products.lang index 179175041b8..1ff1fb0e427 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -27,6 +27,7 @@ ProductAccountancySellExportCode=Accounting code (sale export) ProductOrService=Product or Service ProductsAndServices=Products and Services ProductsOrServices=Products or Services +ProductsPipeServices=Products | Services ProductsOnSaleOnly=Products for sale only ProductsOnPurchaseOnly=Products for purchase only ProductsNotOnSell=Products not for sale and not for purchase 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 diff --git a/htdocs/projet/activity/perday.php b/htdocs/projet/activity/perday.php index 3227c3cd5f5..f30b0ac4757 100644 --- a/htdocs/projet/activity/perday.php +++ b/htdocs/projet/activity/perday.php @@ -403,7 +403,7 @@ dol_fiche_end(); print '