diff --git a/ChangeLog b/ChangeLog
index 3a591059b36..30dc6308146 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,60 @@ English Dolibarr ChangeLog
--------------------------------------------------------------
+***** ChangeLog for 13.0.1 compared to 13.0.0 *****
+
+FIX: 10.0 before crediting a withdrawal receipt, check whether it has been credited already.
+FIX: 11.0 when a mandatory extrafield of type sellist contains '0' it should be considered empty and trigger an error message upon insertion
+FIX: 11.0 when a new intervention is created from an object, a new $extrafields object is instantiated but not initialized
+FIX: create MO, Column 'tms' cannot be null
+FIX: #14290 #15900
+FIX: #16076
+FIX: #16077
+FIX: #16079
+FIX: #16080
+FIX: 16084
+FIX: #16107
+FIX: #16118 Timezone problem on some fields
+FIX: #16131
+FIX: #16135
+FIX: #16143
+FIX: #16156
+FIX: #16160
+FIX: #16185
+FIX: #16189, fix download/see check deposit PDF
+FIX: #16215
+FIX: Accountancy - label_operation is used instead of label_compte
+FIX: Add critical price patch
+FIX: Assignement of actors on tasks
+FIX: Bad dates on info tabs
+FIX: cash fence for takepos with multientity
+FIX: CSRF errors on margin forms
+FIX: encoding status in graph of vendor proposals
+FIX: Fix detect dispached product and set to received completely when the supplier order have services (support STOCK_SUPPORTS_SERVICES)
+FIX: Hide/Unhide external ICSS calendars
+FIX: link to create event when task is in a project with a thirdparty
+FIX: Localtax must be converted with price2num
+FIX: manage price min for PRODUIT_CUSTOMER_PRICES
+FIX: Missing language ico
+FIX: Must not be able to edit vat of all lines if not draft
+FIX: Bad "htdocs" found into a path
+FIX: removed no more used proc update_modified_column_date_m on pgsql (its presence triggered errors)
+FIX: Vulnerability report by Ricardo Matias
+FIX: select default mail template
+FIX: Select transport mode function when creating a supplier invoice and add unique key to the table llx_c_transport_mode in migrate sql
+FIX: Merge of thirdparties : "unknow column fk_soc" + "Delivery" label
+FIX: SQL Error in group by with postgres or mysql strict mode
+FIX: takepos : load date function
+FIX: Timeout during import
+FIX: Trigger on expense report was not fired
+FIX: User creation of expense report not visible
+FIX: warning when adding a line if $remise_percent is an empty string
+FIX: status late on purchase orders
+FIX: ODT generation very slow
+FIX: amount in summary of report
+FIX: vat value when code contains number
+
+
***** ChangeLog for 13.0.0 compared to 12.0.0 *****
For users:
diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php
index 6ff8a988899..84fbb8dae30 100644
--- a/htdocs/admin/barcode.php
+++ b/htdocs/admin/barcode.php
@@ -400,7 +400,7 @@ if ($conf->product->enabled)
print img_picto($langs->trans("Activated"), 'switch_on');
print '';
} else {
- print '
';
+ print ' ';
print img_picto($langs->trans("Disabled"), 'switch_off');
print ' ';
}
diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php
index 550f4770c08..82753a58fa5 100644
--- a/htdocs/admin/company.php
+++ b/htdocs/admin/company.php
@@ -215,8 +215,7 @@ if (($action == 'update' && !GETPOST("cancel", 'alpha'))
if ($_POST["optionlocaltax1"] == "localtax1on")
{
- if (!isset($_REQUEST['lt1']))
- {
+ if (!GETPOSTISSET('lt1')) {
dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX1", 0, 'chaine', 0, '', $conf->entity);
} else {
dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX1", GETPOST('lt1', 'aZ09'), 'chaine', 0, '', $conf->entity);
@@ -225,8 +224,7 @@ if (($action == 'update' && !GETPOST("cancel", 'alpha'))
}
if ($_POST["optionlocaltax2"] == "localtax2on")
{
- if (!isset($_REQUEST['lt2']))
- {
+ if (!GETPOSTISSET('lt2')) {
dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX2", 0, 'chaine', 0, '', $conf->entity);
} else {
dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX2", GETPOST('lt2', 'aZ09'), 'chaine', 0, '', $conf->entity);
@@ -236,7 +234,9 @@ if (($action == 'update' && !GETPOST("cancel", 'alpha'))
if (!$error)
{
- setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
+ if (GETPOST('save')) { // To avoid to show message when we juste switch the country that resubmit the form.
+ setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
+ }
$db->commit();
} else {
$db->rollback();
diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php
index 1a6a4f272c0..6801c9236b0 100644
--- a/htdocs/admin/dict.php
+++ b/htdocs/admin/dict.php
@@ -799,11 +799,15 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
$keycode = $listfieldvalue[$i];
if (empty($keycode)) $keycode = $value;
- if ($value == 'price' || preg_match('/^amount/i', $value) || $value == 'taux') {
- $_POST[$keycode] = price2num($_POST[$keycode], 'MU');
- } elseif ($value == 'entity') {
- $_POST[$keycode] = getEntity($tabname[$id]);
- }
+ if ($value == 'price' || preg_match('/^amount/i', $value)) {
+ $_POST[$keycode] = price2num(GETPOST($keycode), 'MU');
+ }
+ elseif ($value == 'taux' || $value == 'localtax1' || $value == 'localtax2') {
+ $_POST[$keycode] = price2num(GETPOST($keycode), 8);
+ }
+ elseif ($value == 'entity') {
+ $_POST[$keycode] = getEntity($tabname[$id]);
+ }
if ($i) $sql .= ",";
@@ -823,11 +827,11 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
}
$sql .= ",1)";
- dol_syslog("actionadd", LOG_DEBUG);
- $result = $db->query($sql);
- if ($result) // Add is ok
- {
- setEventMessages($langs->transnoentities("RecordCreatedSuccessfully"), null, 'mesgs');
+ dol_syslog("actionadd", LOG_DEBUG);
+ $result = $db->query($sql);
+ if ($result) // Add is ok
+ {
+ setEventMessages($langs->transnoentities("RecordCreatedSuccessfully"), null, 'mesgs');
// Clean $_POST array, we keep only id of dictionary
if ($id == 10 && GETPOST('country', 'int') > 0) {
@@ -862,11 +866,15 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
$keycode = $listfieldvalue[$i];
if (empty($keycode)) $keycode = $field;
- if ($field == 'price' || preg_match('/^amount/i', $field) || $field == 'taux') {
- $_POST[$keycode] = price2num($_POST[$keycode], 'MU');
- } elseif ($field == 'entity') {
- $_POST[$keycode] = getEntity($tabname[$id]);
- }
+ if ($field == 'price' || preg_match('/^amount/i', $field)) {
+ $_POST[$keycode] = price2num(GETPOST($keycode), 'MU');
+ }
+ elseif ($field == 'taux' || $field == 'localtax1' || $field == 'localtax2') {
+ $_POST[$keycode] = price2num(GETPOST($keycode), 8);
+ }
+ elseif ($field == 'entity') {
+ $_POST[$keycode] = getEntity($tabname[$id]);
+ }
if ($i) $sql .= ",";
$sql .= $field."=";
diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php
index 5b037e70a73..9c73199abea 100644
--- a/htdocs/admin/emailcollector_card.php
+++ b/htdocs/admin/emailcollector_card.php
@@ -415,7 +415,10 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
if (function_exists('imap_open'))
{
- $connectstringserver = $object->getConnectStringIMAP();
+ // Note: $object->host has been loaded by the fetch
+ $usessl = 1;
+
+ $connectstringserver = $object->getConnectStringIMAP($usessl);
try {
if ($sourcedir) {
diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php
index 84d4ddc3679..85a45e9ff45 100644
--- a/htdocs/api/class/api_setup.class.php
+++ b/htdocs/api/class/api_setup.class.php
@@ -643,7 +643,7 @@ class Setup extends DolibarrApi
public function getListOfShipmentMethods($sortfield = "rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '')
{
$list = array();
- $sql = "SELECT t.rowid, t.code, t.libelle, t.description, t.tracking";
+ $sql = "SELECT t.rowid, t.code, t.libelle as label, t.description, t.tracking";
$sql .= " FROM ".MAIN_DB_PREFIX."c_shipment_mode as t";
$sql .= " WHERE t.active = ".$active;
// Add sql filters
diff --git a/htdocs/categories/card.php b/htdocs/categories/card.php
index feca9c4f204..74e16f9082d 100644
--- a/htdocs/categories/card.php
+++ b/htdocs/categories/card.php
@@ -210,7 +210,7 @@ llxHeader("", $langs->trans("Categories"), $helpurl);
if ($user->rights->categorie->creer)
{
// Create or add
- if ($action == 'create' || $_POST["addcat"] == 'addcat')
+ if ($action == 'create' || GETPOST("addcat") == 'addcat')
{
dol_set_focus('#label');
diff --git a/htdocs/categories/viewcat.php b/htdocs/categories/viewcat.php
index 864de6e2e98..4fb2a1aede4 100644
--- a/htdocs/categories/viewcat.php
+++ b/htdocs/categories/viewcat.php
@@ -285,16 +285,19 @@ print dol_get_fiche_end();
*/
print "\n";
+$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
+if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
+if (empty($reshook)) {
+ if ($user->rights->categorie->creer)
+ {
+ $socid = ($object->socid ? "&socid=".$object->socid : "");
+ print '
'.$langs->trans("Modify").' ';
+ }
-if ($user->rights->categorie->creer)
-{
- $socid = ($object->socid ? "&socid=".$object->socid : "");
- print '
'.$langs->trans("Modify").' ';
-}
-
-if ($user->rights->categorie->supprimer)
-{
- print '
id.'&type='.$type.'">'.$langs->trans("Delete").' ';
+ if ($user->rights->categorie->supprimer)
+ {
+ print '
id.'&type='.$type.'">'.$langs->trans("Delete").' ';
+ }
}
print "
";
diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php
index 5396454667b..99287ec82d7 100644
--- a/htdocs/comm/action/index.php
+++ b/htdocs/comm/action/index.php
@@ -280,10 +280,10 @@ if (empty($action) || $action == 'show_month')
$tmpday += ((isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1) - 1);
if ($tmpday >= 1) $tmpday -= 7; // If tmpday is 0 we start with sunday, if -6, we start with monday of previous week.
// Define firstdaytoshow and lastdaytoshow (warning: lastdaytoshow is last second to show + 1)
- $firstdaytoshow = dol_mktime(0, 0, 0, $prev_month, $max_day_in_prev_month + $tmpday, $prev_year, 'gmt');
+ $firstdaytoshow = dol_mktime(0, 0, 0, $prev_month, $max_day_in_prev_month + $tmpday, $prev_year, 'tzuserrel');
$next_day = 7 - ($max_day_in_month + 1 - $tmpday) % 7;
if ($next_day < 6) $next_day += 7;
- $lastdaytoshow = dol_mktime(0, 0, 0, $next_month, $next_day, $next_year, 'gmt');
+ $lastdaytoshow = dol_mktime(0, 0, 0, $next_month, $next_day, $next_year, 'tzuserrel');
}
if ($action == 'show_week')
{
@@ -304,10 +304,10 @@ if ($action == 'show_week')
$next_day = $next['day'];
// Define firstdaytoshow and lastdaytoshow (warning: lastdaytoshow is last second to show + 1)
- $firstdaytoshow = dol_mktime(0, 0, 0, $first_month, $first_day, $first_year, 'gmt');
+ $firstdaytoshow = dol_mktime(0, 0, 0, $first_month, $first_day, $first_year, 'tzuserrel');
$lastdaytoshow = dol_time_plus_duree($firstdaytoshow, 7, 'd');
- $max_day_in_month = date("t", dol_mktime(0, 0, 0, $month, 1, $year));
+ $max_day_in_month = date("t", dol_mktime(0, 0, 0, $month, 1, $year, 'gmt'));
$tmpday = $first_day;
}
@@ -323,8 +323,8 @@ if ($action == 'show_day')
$next_day = $next['day'];
// Define firstdaytoshow and lastdaytoshow (warning: lastdaytoshow is last second to show + 1)
- $firstdaytoshow = dol_mktime(0, 0, 0, $prev_month, $prev_day, $prev_year, 'gmt');
- $lastdaytoshow = dol_mktime(0, 0, 0, $next_month, $next_day, $next_year, 'gmt');
+ $firstdaytoshow = dol_mktime(0, 0, 0, $prev_month, $prev_day, $prev_year, 'tzuserrel');
+ $lastdaytoshow = dol_mktime(0, 0, 0, $next_month, $next_day, $next_year, 'tzuserrel');
}
//print 'xx'.$prev_year.'-'.$prev_month.'-'.$prev_day;
//print 'xx'.$next_year.'-'.$next_month.'-'.$next_day;
@@ -607,17 +607,18 @@ if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND (a.fk_soc IS
if ($socid > 0) $sql .= ' AND a.fk_soc = '.$socid;
// We must filter on assignement table
if ($filtert > 0 || $usergroup > 0) $sql .= " AND ar.fk_actioncomm = a.id AND ar.element_type='user'";
+//var_dump($day.' '.$month.' '.$year);
if ($action == 'show_day')
{
$sql .= " AND (";
- $sql .= " (a.datep BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
- $sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
+ $sql .= " (a.datep BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year, 'tzuserrel'))."'";
+ $sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year, 'tzuserrel'))."')";
$sql .= " OR ";
- $sql .= " (a.datep2 BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
- $sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
+ $sql .= " (a.datep2 BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year, 'tzuserrel'))."'";
+ $sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year, 'tzuserrel'))."')";
$sql .= " OR ";
- $sql .= " (a.datep < '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
- $sql .= " AND a.datep2 > '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
+ $sql .= " (a.datep < '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year, 'tzuserrel'))."'";
+ $sql .= " AND a.datep2 > '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year, 'tzuserrel'))."')";
$sql .= ')';
} else {
// To limit array
@@ -723,9 +724,9 @@ if ($resql)
// Add an entry in actionarray for each day
$daycursor = $event->date_start_in_calendar;
- $annee = dol_print_date($daycursor, '%Y');
- $mois = dol_print_date($daycursor, '%m');
- $jour = dol_print_date($daycursor, '%d');
+ $annee = dol_print_date($daycursor, '%Y', 'tzuserrel');
+ $mois = dol_print_date($daycursor, '%m', 'tzuserrel');
+ $jour = dol_print_date($daycursor, '%d', 'tzuserrel');
//var_dump(dol_print_date($event->date_start_in_calendar, 'dayhour', 'gmt'));
//var_dump($annee.'-'.$mois.'-'.$jour);
@@ -1539,9 +1540,9 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
foreach ($eventarray as $daykey => $notused)
{
- $annee = date('Y', $daykey);
- $mois = date('m', $daykey);
- $jour = date('d', $daykey);
+ $annee = dol_print_date($daykey, '%Y');
+ $mois = dol_print_date($daykey, '%m');
+ $jour = dol_print_date($daykey, '%d');
if ($day == $jour && $month == $mois && $year == $annee)
{
@@ -1703,20 +1704,17 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
if (empty($event->fulldayevent))
{
// Show hours (start ... end)
- $tmpyearstart = date('Y', $event->date_start_in_calendar);
- $tmpmonthstart = date('m', $event->date_start_in_calendar);
- $tmpdaystart = date('d', $event->date_start_in_calendar);
- $tmpyearend = date('Y', $event->date_end_in_calendar);
- $tmpmonthend = date('m', $event->date_end_in_calendar);
- $tmpdayend = date('d', $event->date_end_in_calendar);
- /*var_dump($tmpyearstart.' '.$tmpmonthstart.' '.$tmpdaystart);
- var_dump($tmpyearend.' '.$tmpmonthend.' '.$tmpdayend);
- var_dump($annee.' '.$mois.' '.$jour);*/
+ $tmpyearstart = dol_print_date($event->date_start_in_calendar, '%Y', 'tzuserrel');
+ $tmpmonthstart = dol_print_date($event->date_start_in_calendar, '%m', 'tzuserrel');
+ $tmpdaystart = dol_print_date($event->date_start_in_calendar, '%d', 'tzuserrel');
+ $tmpyearend = dol_print_date($event->date_end_in_calendar, '%Y', 'tzuserrel');
+ $tmpmonthend = dol_print_date($event->date_end_in_calendar, '%m', 'tzuserrel');
+ $tmpdayend = dol_print_date($event->date_end_in_calendar, '%d', 'tzuserrel');
// Hour start
if ($tmpyearstart == $annee && $tmpmonthstart == $mois && $tmpdaystart == $jour)
{
- $daterange .= dol_print_date($event->date_start_in_calendar, 'hour', 'tzuser');
+ $daterange .= dol_print_date($event->date_start_in_calendar, 'hour', 'tzuserrel');
if ($event->date_end_in_calendar && $event->date_start_in_calendar != $event->date_end_in_calendar)
{
if ($tmpyearstart == $tmpyearend && $tmpmonthstart == $tmpmonthend && $tmpdaystart == $tmpdayend)
@@ -1736,7 +1734,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
if ($event->date_end_in_calendar && $event->date_start_in_calendar != $event->date_end_in_calendar)
{
if ($tmpyearend == $annee && $tmpmonthend == $mois && $tmpdayend == $jour)
- $daterange .= dol_print_date($event->date_end_in_calendar, 'hour', 'tzuser');
+ $daterange .= dol_print_date($event->date_end_in_calendar, 'hour', 'tzuserrel');
}
} else {
if ($showinfo)
diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php
index 991e945b16d..2db2d988add 100644
--- a/htdocs/comm/action/list.php
+++ b/htdocs/comm/action/list.php
@@ -67,9 +67,9 @@ $search_id = GETPOST('search_id', 'alpha');
$search_title = GETPOST('search_title', 'alpha');
$search_note = GETPOST('search_note', 'alpha');
-$dateselect = dol_mktime(0, 0, 0, GETPOST('dateselectmonth', 'int'), GETPOST('dateselectday', 'int'), GETPOST('dateselectyear', 'int'));
-$datestart = dol_mktime(0, 0, 0, GETPOST('datestartmonth', 'int'), GETPOST('datestartday', 'int'), GETPOST('datestartyear', 'int'));
-$dateend = dol_mktime(0, 0, 0, GETPOST('dateendmonth', 'int'), GETPOST('dateendday', 'int'), GETPOST('dateendyear', 'int'));
+$dateselect = dol_mktime(0, 0, 0, GETPOST('dateselectmonth', 'int'), GETPOST('dateselectday', 'int'), GETPOST('dateselectyear', 'int'), 'tzuserrel');
+$datestart = dol_mktime(0, 0, 0, GETPOST('datestartmonth', 'int'), GETPOST('datestartday', 'int'), GETPOST('datestartyear', 'int'), 'tzuserrel');
+$dateend = dol_mktime(0, 0, 0, GETPOST('dateendmonth', 'int'), GETPOST('dateendday', 'int'), GETPOST('dateendyear', 'int'), 'tzuserrel');
if ($search_status == '' && !GETPOSTISSET('search_status')) $search_status = (empty($conf->global->AGENDA_DEFAULT_FILTER_STATUS) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_STATUS);
if (empty($action) && !GETPOSTISSET('action')) $action = (empty($conf->global->AGENDA_DEFAULT_VIEW) ? 'show_month' : $conf->global->AGENDA_DEFAULT_VIEW);
@@ -563,12 +563,12 @@ if ($resql)
if (!empty($arrayfields['a.note']['checked'])) print ' ';
if (!empty($arrayfields['a.datep']['checked'])) {
print '';
- print $form->selectDate($datestart, 'datestart', 0, 0, 1, '', 1, 0);
+ print $form->selectDate($datestart, 'datestart', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzuserrel');
print ' ';
}
if (!empty($arrayfields['a.datep2']['checked'])) {
print '';
- print $form->selectDate($dateend, 'dateend', 0, 0, 1, '', 1, 0);
+ print $form->selectDate($dateend, 'dateend', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzuserrel');
print ' ';
}
if (!empty($arrayfields['s.nom']['checked'])) {
diff --git a/htdocs/comm/action/pertype.php b/htdocs/comm/action/pertype.php
index f956b5ae5f7..a399ee3d580 100644
--- a/htdocs/comm/action/pertype.php
+++ b/htdocs/comm/action/pertype.php
@@ -265,7 +265,7 @@ $next_month = $month;
$next_day = $day;
// Define firstdaytoshow and lastdaytoshow (warning: lastdaytoshow is last second to show + 1)
-$firstdaytoshow = dol_mktime(0, 0, 0, $first_month, $first_day, $first_year, 'gmt');
+$firstdaytoshow = dol_mktime(0, 0, 0, $first_month, $first_day, $first_year, 'tzuserrel');
$lastdaytoshow = dol_time_plus_duree($firstdaytoshow, 7, 'd');
//print $firstday.'-'.$first_month.'-'.$first_year;
//print dol_print_date($firstdaytoshow,'dayhour');
@@ -482,14 +482,14 @@ if ($filtert > 0 || $usergroup > 0) $sql .= " AND ar.fk_actioncomm = a.id AND ar
if ($action == 'show_day')
{
$sql .= " AND (";
- $sql .= " (a.datep BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
+ $sql .= " (a.datep BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year, 'tzuserrel'))."'";
$sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
$sql .= " OR ";
- $sql .= " (a.datep2 BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
+ $sql .= " (a.datep2 BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year, 'tzuserrel'))."'";
$sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
$sql .= " OR ";
$sql .= " (a.datep < '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
- $sql .= " AND a.datep2 > '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
+ $sql .= " AND a.datep2 > '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year, 'tzuserrel'))."')";
$sql .= ')';
} else {
// To limit array
@@ -599,9 +599,9 @@ if ($resql)
// Add an entry in actionarray for each day
$daycursor = $event->date_start_in_calendar;
- $annee = dol_print_date($daycursor, '%Y');
- $mois = dol_print_date($daycursor, '%m');
- $jour = dol_print_date($daycursor, '%d');
+ $annee = dol_print_date($daycursor, '%Y', 'tzuserrel');
+ $mois = dol_print_date($daycursor, '%m', 'tzuserrel');
+ $jour = dol_print_date($daycursor, '%d', 'tzuserrel');
// Loop on each day covered by action to prepare an index to show on calendar
$loop = true; $j = 0;
@@ -858,9 +858,9 @@ function show_day_events_pertype($username, $day, $month, $year, $monthshown, $s
// We are in a particular day for $username, now we scan all events
foreach ($eventarray as $daykey => $notused)
{
- $annee = dol_print_date($daykey, '%Y', 'gmt');
- $mois = dol_print_date($daykey, '%m', 'gmt');
- $jour = dol_print_date($daykey, '%d', 'gmt');
+ $annee = dol_print_date($daykey, '%Y');
+ $mois = dol_print_date($daykey, '%m');
+ $jour = dol_print_date($daykey, '%d');
if ($day == $jour && $month == $mois && $year == $annee) // Is it the day we are looking for when calling function ?
{
@@ -931,9 +931,9 @@ function show_day_events_pertype($username, $day, $month, $year, $monthshown, $s
$newcolor = ''; //init
if (empty($event->fulldayevent))
{
- $a = dol_mktime((int) $h, 0, 0, $month, $day, $year, 'auto', 0);
- $b = dol_mktime((int) $h, 30, 0, $month, $day, $year, 'auto', 0);
- $c = dol_mktime((int) $h + 1, 0, 0, $month, $day, $year, 'auto', 0);
+ $a = dol_mktime((int) $h, 0, 0, $month, $day, $year, 'tzuserrel', 0);
+ $b = dol_mktime((int) $h, 30, 0, $month, $day, $year, 'tzuserrel', 0);
+ $c = dol_mktime((int) $h + 1, 0, 0, $month, $day, $year, 'tzuserrel', 0);
$dateendtouse = $event->date_end_in_calendar;
if ($dateendtouse == $event->date_start_in_calendar) $dateendtouse++;
@@ -944,13 +944,13 @@ function show_day_events_pertype($username, $day, $month, $year, $monthshown, $s
{
$busy = $event->transparency;
$cases1[$h][$event->id]['busy'] = $busy;
- $cases1[$h][$event->id]['string'] = dol_print_date($event->date_start_in_calendar, 'dayhour');
+ $cases1[$h][$event->id]['string'] = dol_print_date($event->date_start_in_calendar, 'dayhour', 'tzuserrel');
if ($event->date_end_in_calendar && $event->date_end_in_calendar != $event->date_start_in_calendar)
{
$tmpa = dol_getdate($event->date_start_in_calendar, true);
$tmpb = dol_getdate($event->date_end_in_calendar, true);
- if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) $cases1[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'hour');
- else $cases1[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'dayhour');
+ if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) $cases1[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'hour', 'tzuserrel');
+ else $cases1[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'dayhour', 'tzuserrel');
}
if ($event->label) $cases1[$h][$event->id]['string'] .= ' - '.$event->label;
$cases1[$h][$event->id]['typecode'] = $event->type_code;
@@ -990,13 +990,13 @@ function show_day_events_pertype($username, $day, $month, $year, $monthshown, $s
{
$busy = $event->transparency;
$cases2[$h][$event->id]['busy'] = $busy;
- $cases2[$h][$event->id]['string'] = dol_print_date($event->date_start_in_calendar, 'dayhour');
+ $cases2[$h][$event->id]['string'] = dol_print_date($event->date_start_in_calendar, 'dayhour', 'tzuserrel');
if ($event->date_end_in_calendar && $event->date_end_in_calendar != $event->date_start_in_calendar)
{
$tmpa = dol_getdate($event->date_start_in_calendar, true);
$tmpb = dol_getdate($event->date_end_in_calendar, true);
- if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) $cases2[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'hour');
- else $cases2[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'dayhour');
+ if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) $cases2[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'hour', 'tzuserrel');
+ else $cases2[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'dayhour', 'tzuserrel');
}
if ($event->label) $cases2[$h][$event->id]['string'] .= ' - '.$event->label;
$cases2[$h][$event->id]['typecode'] = $event->type_code;
diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php
index 2dc62a52e91..6b54a327705 100644
--- a/htdocs/comm/action/peruser.php
+++ b/htdocs/comm/action/peruser.php
@@ -404,7 +404,11 @@ if ($user->rights->agenda->myactions->create || $user->rights->agenda->allaction
{
$tmpforcreatebutton = dol_getdate(dol_now(), true);
- $newparam .= '&month='.str_pad($month, 2, "0", STR_PAD_LEFT).'&year='.$tmpforcreatebutton['year'];
+ $newparam .= '&month='.urlencode(str_pad($month, 2, "0", STR_PAD_LEFT)).'&year='.urlencode($tmpforcreatebutton['year']);
+ if ($begin_h !== '') $newparam .= '&begin_h='.urlencode($begin_h);
+ if ($end_h !== '') $newparam .= '&end_h='.urlencode($end_h);
+ if ($begin_d !== '') $newparam .= '&begin_d='.urlencode($begin_d);
+ if ($end_d !== '') $newparam .= '&end_d='.urlencode($end_d);
//$param='month='.$monthshown.'&year='.$year;
$hourminsec = '100000';
@@ -487,14 +491,14 @@ if ($filtert > 0 || $usergroup > 0) $sql .= " AND ar.fk_actioncomm = a.id AND ar
if ($action == 'show_day')
{
$sql .= " AND (";
- $sql .= " (a.datep BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
- $sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
+ $sql .= " (a.datep BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year, 'tzuserrel'))."'";
+ $sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year, 'tzuserrel'))."')";
$sql .= " OR ";
- $sql .= " (a.datep2 BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
- $sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
+ $sql .= " (a.datep2 BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year, 'tzuserrel'))."'";
+ $sql .= " AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year, 'tzuserrel'))."')";
$sql .= " OR ";
- $sql .= " (a.datep < '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."'";
- $sql .= " AND a.datep2 > '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."')";
+ $sql .= " (a.datep < '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year, 'tzuserrel'))."'";
+ $sql .= " AND a.datep2 > '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year, 'tzuserrel'))."')";
$sql .= ')';
} else {
// To limit array
@@ -605,9 +609,10 @@ if ($resql)
// Add an entry in actionarray for each day
$daycursor = $event->date_start_in_calendar;
- $annee = dol_print_date($daycursor, '%Y');
- $mois = dol_print_date($daycursor, '%m');
- $jour = dol_print_date($daycursor, '%d');
+ $annee = dol_print_date($daycursor, '%Y', 'tzuserrel');
+ $mois = dol_print_date($daycursor, '%m', 'tzuserrel');
+ $jour = dol_print_date($daycursor, '%d', 'tzuserrel');
+ //print $daycursor.' '.dol_print_date($daycursor, 'dayhour', 'gmt').' '.$event->id.' -> '.$annee.'-'.$mois.'-'.$jour.' ';
// Loop on each day covered by action to prepare an index to show on calendar
$loop = true; $j = 0;
@@ -920,7 +925,7 @@ jQuery(document).ready(function() {
if (ids == \'none\') /* No event */
{
/* alert(\'no event\'); */
- url = "'.DOL_URL_ROOT.'/comm/action/card.php?action=create&assignedtouser="+userid+"&datep="+year+month+day+hour+min+"00&backtopage='.urlencode($_SERVER["PHP_SELF"].'?year='.$year.'&month='.$month.'&day='.$day).'"
+ url = "'.DOL_URL_ROOT.'/comm/action/card.php?action=create&assignedtouser="+userid+"&datep="+year+month+day+hour+min+"00&backtopage='.urlencode($_SERVER["PHP_SELF"].'?year='.$year.'&month='.$month.'&day='.$day.($begin_h !== '' ? '&begin_h='.$begin_h : '').($end_h !== '' ? '&end_h='.$end_h : '').($begin_d !== '' ? '&begin_d='.$begin_d : '').($end_d !== '' ? '&end_d='.$end_d : '')).'"
window.location.href = url;
}
else if (ids.indexOf(",") > -1) /* There is several events */
@@ -979,7 +984,7 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, &
$cases2 = array(); // Color second half hour
$i = 0; $numother = 0; $numbirthday = 0; $numical = 0; $numicals = array();
- $ymd = sprintf("%04d", $year).sprintf("%02d", $month).sprintf("%02d", $day);
+ //$ymd = sprintf("%04d", $year).sprintf("%02d", $month).sprintf("%02d", $day);
$colorindexused[$user->id] = 0; // Color index for current user (user->id) is always 0
$nextindextouse = count($colorindexused); // At first run this is 0, so first user has 0, next 1, ...
@@ -988,16 +993,16 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, &
// We are in a particular day for $username, now we scan all events
foreach ($eventarray as $daykey => $notused)
{
- $annee = dol_print_date($daykey, '%Y', 'gmt');
- $mois = dol_print_date($daykey, '%m', 'gmt');
- $jour = dol_print_date($daykey, '%d', 'gmt');
+ $annee = dol_print_date($daykey, '%Y');
+ $mois = dol_print_date($daykey, '%m');
+ $jour = dol_print_date($daykey, '%d');
if ($day == $jour && $month == $mois && $year == $annee) // Is it the day we are looking for when calling function ?
{
// Scan all event for this date
foreach ($eventarray[$daykey] as $index => $event)
{
- //print $daykey.' '.$year.'-'.$month.'-'.$day.' -> '.$event->id.' '.$index.' '.$annee.'-'.$mois.'-'.$jour." \n";
+ //print $daykey.' '.dol_print_date($daykey, 'dayhour', 'gmt').' '.$year.'-'.$month.'-'.$day.' -> '.$event->id.' '.$index.' '.$annee.'-'.$mois.'-'.$jour." \n";
//var_dump($event);
$keysofuserassigned = array_keys($event->userassigned);
@@ -1078,7 +1083,6 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, &
// Define color
$color = sprintf("%02x%02x%02x", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]);
}
- //$cssclass=$cssclass.' '.$cssclass.'_day_'.$ymd;
// Define all rects with event (cases1 is first half hour, cases2 is second half hour)
for ($h = $begin_h; $h < $end_h; $h++)
@@ -1087,9 +1091,9 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, &
$newcolor = ''; //init
if (empty($event->fulldayevent))
{
- $a = dol_mktime((int) $h, 0, 0, $month, $day, $year, 'auto', 0);
- $b = dol_mktime((int) $h, 30, 0, $month, $day, $year, 'auto', 0);
- $c = dol_mktime((int) $h + 1, 0, 0, $month, $day, $year, 'auto', 0);
+ $a = dol_mktime((int) $h, 0, 0, $month, $day, $year, 'tzuserrel', 0);
+ $b = dol_mktime((int) $h, 30, 0, $month, $day, $year, 'tzuserrel', 0);
+ $c = dol_mktime((int) $h + 1, 0, 0, $month, $day, $year, 'tzuserrel', 0);
$dateendtouse = $event->date_end_in_calendar;
if ($dateendtouse == $event->date_start_in_calendar) $dateendtouse++;
@@ -1100,13 +1104,13 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, &
{
$busy = $event->transparency;
$cases1[$h][$event->id]['busy'] = $busy;
- $cases1[$h][$event->id]['string'] = dol_print_date($event->date_start_in_calendar, 'dayhour');
+ $cases1[$h][$event->id]['string'] = dol_print_date($event->date_start_in_calendar, 'dayhour', 'tzuserrel');
if ($event->date_end_in_calendar && $event->date_end_in_calendar != $event->date_start_in_calendar)
{
$tmpa = dol_getdate($event->date_start_in_calendar, true);
$tmpb = dol_getdate($event->date_end_in_calendar, true);
- if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) $cases1[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'hour');
- else $cases1[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'dayhour');
+ if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) $cases1[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'hour', 'tzuserrel');
+ else $cases1[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'dayhour', 'tzuserrel');
}
if ($event->label) $cases1[$h][$event->id]['string'] .= ' - '.$event->label;
$cases1[$h][$event->id]['typecode'] = $event->type_code;
@@ -1146,13 +1150,13 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, &
{
$busy = $event->transparency;
$cases2[$h][$event->id]['busy'] = $busy;
- $cases2[$h][$event->id]['string'] = dol_print_date($event->date_start_in_calendar, 'dayhour');
+ $cases2[$h][$event->id]['string'] = dol_print_date($event->date_start_in_calendar, 'dayhour', 'tzuserrel');
if ($event->date_end_in_calendar && $event->date_end_in_calendar != $event->date_start_in_calendar)
{
$tmpa = dol_getdate($event->date_start_in_calendar, true);
$tmpb = dol_getdate($event->date_end_in_calendar, true);
- if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) $cases2[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'hour');
- else $cases2[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'dayhour');
+ if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) $cases2[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'hour', 'tzuserrel');
+ else $cases2[$h][$event->id]['string'] .= '-'.dol_print_date($event->date_end_in_calendar, 'dayhour', 'tzuserrel');
}
if ($event->label) $cases2[$h][$event->id]['string'] .= ' - '.$event->label;
$cases2[$h][$event->id]['typecode'] = $event->type_code;
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index 10a2238088b..3766c7ba1a1 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -484,6 +484,7 @@ class Propal extends CommonObject
}
} else {
$this->error = $line->error;
+ $this->errors = $line->errors;
$this->db->rollback();
return -2;
}
@@ -710,8 +711,8 @@ class Propal extends CommonObject
// Mise a jour informations denormalisees au niveau de la propale meme
$result = $this->update_price(1, 'auto', 0, $mysoc); // This method is designed to add line from user input so total calculation must be done using 'auto' mode.
- if ($result > 0)
- {
+
+ if ($result > 0) {
$this->db->commit();
return $this->line->id;
} else {
@@ -721,6 +722,7 @@ class Propal extends CommonObject
}
} else {
$this->error = $this->line->error;
+ $this->errors = $this->line->errors;
$this->db->rollback();
return -2;
}
@@ -913,7 +915,7 @@ class Propal extends CommonObject
return $result;
} else {
$this->error = $this->line->error;
-
+ $this->errors = $this->line->errors;
$this->db->rollback();
return -1;
}
diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php
index 535654458a7..5190adb379a 100644
--- a/htdocs/comm/propal/list.php
+++ b/htdocs/comm/propal/list.php
@@ -111,6 +111,11 @@ $pagenext = $page + 1;
if (!$sortfield) $sortfield = 'p.ref';
if (!$sortorder) $sortorder = 'DESC';
+$permissiontoread = $user->rights->propal->lire;
+$permissiontoadd = $user->rights->propal->write;
+$permissiontodelete = $user->rights->propal->supprimer;
+$permissiontoclose = $user->rights->propal->cloturer;
+
// Security check
$module = 'propal';
$dbtable = '';
@@ -246,17 +251,83 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x'
}
if ($object_statut != '') $search_status = $object_statut;
+
if (empty($reshook))
{
$objectclass = 'Propal';
$objectlabel = 'Proposals';
- $permissiontoread = $user->rights->propal->lire;
- $permissiontodelete = $user->rights->propal->supprimer;
- $permissiontoclose = $user->rights->propal->cloturer;
$uploaddir = $conf->propal->multidir_output[$conf->entity];
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
}
+// Mass action validate (after a confirmation question, it is $action that is used).
+if ($action == 'validate') {
+ if (GETPOST('confirm') == 'yes') {
+ $tmpproposal = new Propal($db);
+
+ $db->begin();
+ $error = 0;
+ foreach ($toselect as $checked) {
+ if ($tmpproposal->fetch($checked)) {
+ if ($tmpproposal->statut == $tmpproposal::STATUS_DRAFT) {
+ if ($tmpproposal->valid($user)) {
+ setEventMessage($tmpproposal->ref." ".$langs->trans('PassedInOpenStatus'), 'mesgs');
+ } else {
+ setEventMessage($langs->trans('CantBeValidated'), 'errors');
+ $error++;
+ }
+ } else {
+ setEventMessage($tmpproposal->ref." ".$langs->trans('IsNotADraft'), 'errors');
+ $error++;
+ }
+ } else {
+ dol_print_error($db);
+ $error++;
+ }
+ }
+ if ($error) {
+ $db->rollback();
+ } else {
+ $db->commit();
+ }
+ }
+}
+
+// Mass action sign (after a confirmation question, it is $action that is used).
+if ($action == "sign") {
+ if (GETPOST('confirm') == 'yes') {
+ $tmpproposal = new Propal($db);
+
+ $db->begin();
+ $error = 0;
+ foreach ($toselect as $checked) {
+ if ($tmpproposal->fetch($checked)) {
+ if ($tmpproposal->statut == $tmpproposal::STATUS_VALIDATED) {
+ $tmpproposal->statut = $tmpproposal::STATUS_SIGNED;
+
+ if ($tmpproposal->update($user)) {
+ setEventMessage($tmpproposal->ref." ".$langs->trans('Signed'), 'mesgs');
+ } else {
+ dol_print_error($db);
+ $error++;
+ }
+ } else {
+ setEventMessage($tmpproposal->ref." ".$langs->trans('CantBeSign'), 'errors');
+ $error++;
+ }
+ } else {
+ dol_print_error($db);
+ $error++;
+ }
+ }
+ if ($error) {
+ $db->rollback();
+ } else {
+ $db->commit();
+ }
+ }
+}
+
/*
@@ -1299,72 +1370,10 @@ if ($resql)
$delallowed = $user->rights->propal->creer;
print $formfile->showdocuments('massfilesarea_proposals', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty);
-
- if ($action == 'validate') {
- if (GETPOST('confirm') == 'yes') {
- $tmpproposal = new Propal($db);
- $db->begin();
- $error = 0;
- foreach ($toselect as $checked) {
- if ($tmpproposal->fetch($checked)) {
- if ($tmpproposal->statut == 0) {
- if ($tmpproposal->valid($user)) {
- setEventMessage($tmpproposal->ref." ".$langs->trans('PassedInOpenStatus'), 'mesgs');
- } else {
- setEventMessage($langs->trans('CantBeValidated'), 'errors');
- $error++;
- }
- } else {
- setEventMessage($tmpproposal->ref." ".$langs->trans('IsNotADraft'), 'errors');
- $error++;
- }
- }
- dol_print_error($db);
- $error++;
- }
- if ($error) {
- $db->rollback();
- } else {
- $db->commit();
- }
- }
- }
-
- if ($action == "sign") {
- if (GETPOST('confirm') == 'yes') {
- $tmpproposal = new Propal($db);
- $db->begin();
- $error = 0;
- foreach ($toselect as $checked) {
- if ($tmpproposal->fetch($checked)) {
- if ($tmpproposal->statut == 1) {
- $tmpproposal->statut = 2;
- if ($tmpproposal->update($user)) {
- setEventMessage($tmpproposal->ref." ".$langs->trans('Signed'), 'mesgs');
- } else {
- dol_print_error($db);
- $error++;
- }
- } else {
- setEventMessage($tmpproposal->ref." ".$langs->trans('CantBeSign'), 'errors');
- $error++;
- }
- } else {
- dol_print_error($db);
- $error++;
- }
- }
- if ($error) {
- $db->rollback();
- } else {
- $db->commit();
- }
- }
- }
} else {
- dol_print_error($db);
+ dol_print_error($db);
}
- // End of page
- llxFooter();
- $db->close();
+// End of page
+llxFooter();
+$db->close();
diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php
index 27dd6b2308e..2cb2e3b1029 100644
--- a/htdocs/commande/card.php
+++ b/htdocs/commande/card.php
@@ -646,6 +646,9 @@ if (empty($reshook))
$qty = price2num(GETPOST('qty'.$predef, 'alpha'), 'MS');
$remise_percent = (GETPOSTISSET('remise_percent'.$predef) ? price2num(GETPOST('remise_percent'.$predef, 'alpha')) : 0);
+ if (empty($remise_percent)) {
+ $remise_percent = 0;
+ }
// Extrafields
$extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index fae2fefefaa..c51b5b29196 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -742,11 +742,11 @@ class Commande extends CommonOrder
if ($usercanclose)
{
- $this->db->begin();
if ($this->statut == self::STATUS_CLOSED)
{
return 0;
}
+ $this->db->begin();
$now = dol_now();
@@ -1976,6 +1976,7 @@ class Commande extends CommonOrder
}
} else {
$this->error = $line->error;
+ $this->errors = $line->errors;
$this->db->rollback();
return -2;
}
diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php
index b2d499c5f34..0002dbcb8ed 100644
--- a/htdocs/compta/bank/class/account.class.php
+++ b/htdocs/compta/bank/class/account.class.php
@@ -575,7 +575,8 @@ class Account extends CommonObject
return $accline->id;
} else {
- $this->error = $this->db->lasterror();
+ $this->error = $accline->error;
+ $this->errors = $accline->errors;
$this->db->rollback();
return -2;
diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php
index f3efea15235..a7177b78b5a 100644
--- a/htdocs/compta/bank/list.php
+++ b/htdocs/compta/bank/list.php
@@ -576,7 +576,7 @@ foreach ($accounts as $key=>$type)
if (!empty($arrayfields['balance']['checked']))
{
print '';
- print ''.price($solde, 0, $langs, 0, -1, -1, $objecttmp->currency_code).' ';
+ print ''.price($solde, 0, $langs, 1, -1, -1, $objecttmp->currency_code).' ';
print ' ';
if (!$i) $totalarray['nbfield']++;
if (!$i) $totalarray['pos'][$totalarray['nbfield']] = 'balance';
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index 26c40c2c45e..ef0962a0169 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -797,6 +797,7 @@ class Facture extends CommonInvoice
if ($result < 0)
{
$this->error = $newinvoiceline->error;
+ $this->errors = $newinvoiceline->errors;
$error++;
break;
}
@@ -3202,6 +3203,7 @@ class Facture extends CommonInvoice
}
} else {
$this->error = $this->line->error;
+ $this->errors = $this->line->errors;
$this->db->rollback();
return -2;
}
diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php
index 4b93cb4cca3..c6afa4def1d 100644
--- a/htdocs/compta/paiement/cheque/card.php
+++ b/htdocs/compta/paiement/cheque/card.php
@@ -749,7 +749,7 @@ if ($action != 'new')
if ($object->statut == 1)
{
$filename = dol_sanitizeFileName($object->ref);
- $filedir = $dir.get_exdir($object->ref, 0, 1, 0, $object, 'cheque').dol_sanitizeFileName($object->ref);
+ $filedir = $dir.get_exdir($object->ref, 0, 1, 0, $object, 'checkdeposits');
$urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
print $formfile->showdocuments('remisecheque', $filename, $filedir, $urlsource, 1, 1);
diff --git a/htdocs/compta/paiement/list.php b/htdocs/compta/paiement/list.php
index e1f6fb38dbc..cfcdead5fed 100644
--- a/htdocs/compta/paiement/list.php
+++ b/htdocs/compta/paiement/list.php
@@ -148,7 +148,7 @@ llxHeader('', $langs->trans('ListPayment'));
if (GETPOST("orphelins", "alpha")) {
// Payments not linked to an invoice. Should not happend. For debug only.
- $sql = "SELECT p.ref, p.datep, p.amount, p.statut, p.num_paiement";
+ $sql = "SELECT p.rowid, p.ref, p.datep, p.amount, p.statut, p.num_paiement";
$sql .= ", c.code as paiement_code";
// Add fields from hooks
@@ -166,7 +166,7 @@ if (GETPOST("orphelins", "alpha")) {
$sql .= $hookmanager->resPrint;
} else {
// DISTINCT is to avoid duplicate when there is a link to sales representatives
- $sql = "SELECT DISTINCT p.ref, p.datep, p.fk_bank, p.amount, p.statut, p.num_paiement";
+ $sql = "SELECT DISTINCT p.rowid, p.ref, p.datep, p.fk_bank, p.amount, p.statut, p.num_paiement";
$sql .= ", c.code as paiement_code";
$sql .= ", ba.rowid as bid, ba.ref as bref, ba.label as blabel, ba.number, ba.account_number as account_number, ba.fk_accountancy_journal as accountancy_journal";
$sql .= ", s.rowid as socid, s.nom as name, s.email";
@@ -390,7 +390,7 @@ while ($i < min($num, $limit)) {
$objp = $db->fetch_object($resql);
$object->id = $objp->rowid;
- $object->ref = $objp->ref;
+ $object->ref = ($objp->ref ? $objp->ref : $objp->rowid);
$companystatic->id = $objp->socid;
$companystatic->name = $objp->name;
@@ -497,6 +497,14 @@ while ($i < min($num, $limit)) {
// Show total line
include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
+// If no record found
+if ($num == 0)
+{
+ $colspan = 1;
+ foreach ($arrayfields as $key => $val) { if (!empty($val['checked'])) $colspan++; }
+ print ''.$langs->trans("NoRecordFound").' ';
+}
+
print "";
print "";
print "";
diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php
index 5d87303236a..b58b4ddec0c 100644
--- a/htdocs/compta/prelevement/card.php
+++ b/htdocs/compta/prelevement/card.php
@@ -98,7 +98,13 @@ if (empty($reshook))
// Seems to no be used and replaced with $action == 'infocredit'
if ($action == 'confirm_credite' && GETPOST('confirm', 'alpha') == 'yes')
{
- $res = $object->set_credite();
+ if ($object->statut == 2) {
+ $res = -1;
+ setEventMessages('WithdrawalCantBeCreditedTwice', array(), 'errors');
+ } else {
+ $res = $object->set_credite();
+ }
+
if ($res >= 0)
{
header("Location: card.php?id=".$id);
@@ -145,10 +151,16 @@ if (empty($reshook))
{
$dt = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
- $error = $object->set_infocredit($user, $dt);
+ if ($object->statut == 2) {
+ $error = 1;
+ setEventMessages('WithdrawalCantBeCreditedTwice', array(), 'errors');
+ } else {
+ $error = $object->set_infocredit($user, $dt);
+ }
+
if ($error)
{
- setEventMessages($object->error, $object->errors, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php
index 3072dcdee2b..4f1a3043c76 100644
--- a/htdocs/compta/resultat/clientfourn.php
+++ b/htdocs/compta/resultat/clientfourn.php
@@ -252,7 +252,7 @@ if ($modecompta == 'BOOKKEEPING')
$sql .= " AND f.entity = ".$conf->entity;
if (!empty($date_start) && !empty($date_end))
$sql .= " AND f.doc_date >= '".$db->idate($date_start)."' AND f.doc_date <= '".$db->idate($date_end)."'";
- $sql .= " GROUP BY pcg_type, name, socid";
+ $sql .= " GROUP BY pcg_type DESC, name, socid";
$sql .= $db->order($sortfield, $sortorder);
$oldpcgtype = '';
@@ -284,6 +284,15 @@ if ($modecompta == 'BOOKKEEPING')
$total_ht += (isset($objp->amount) ? $objp->amount : 0);
$total_ttc += (isset($objp->amount) ? $objp->amount : 0);
+ if ($objp->pcg_type == 'INCOME') {
+ $total_ht_income += (isset($objp->amount) ? $objp->amount : 0);
+ $total_ttc_income += (isset($objp->amount) ? $objp->amount : 0);
+ }
+ if ($objp->pcg_type == 'EXPENSE') {
+ $total_ht_outcome -= (isset($objp->amount) ? $objp->amount : 0);
+ $total_ttc_outcome -= (isset($objp->amount) ? $objp->amount : 0);
+ }
+
// Loop on detail of all accounts
// This make 14 calls for each detail of account (NP, N and month m)
if ($showaccountdetail != 'no')
@@ -446,6 +455,7 @@ if ($modecompta == 'BOOKKEEPING')
$total_ht_income += $total_ht;
$total_ttc_income += $total_ttc;
+
print '';
if ($modecompta == 'CREANCES-DETTES')
print ''.price($total_ht).' ';
@@ -525,11 +535,12 @@ if ($modecompta == 'BOOKKEEPING')
$total_ht_income += $subtotal_ht;
$total_ttc_income += $subtotal_ttc;
+
print ' ';
if ($modecompta == 'CREANCES-DETTES')
print ''.price($subtotal_ht).' ';
- print ''.price($subtotal_ttc).' ';
- print ' ';
+ print ''.price($subtotal_ttc).' ';
+ print '';
}
/*
@@ -609,6 +620,7 @@ if ($modecompta == 'BOOKKEEPING')
$total_ht_outcome += $subtotal_ht;
$total_ttc_outcome += $subtotal_ttc;
+
print '';
if ($modecompta == 'CREANCES-DETTES')
print ''.price(-$subtotal_ht).' ';
@@ -686,6 +698,7 @@ if ($modecompta == 'BOOKKEEPING')
$total_ht_outcome += $subtotal_ht;
$total_ttc_outcome += $subtotal_ttc;
+
print ' ';
if ($modecompta == 'CREANCES-DETTES')
print ''.price(-$subtotal_ht).' ';
@@ -764,6 +777,7 @@ if ($modecompta == 'BOOKKEEPING')
$total_ht_outcome += $subtotal_ht;
$total_ttc_outcome += $subtotal_ttc;
+
print ' ';
if ($modecompta == 'CREANCES-DETTES')
print ''.price(-$subtotal_ht).' ';
@@ -841,6 +855,7 @@ if ($modecompta == 'BOOKKEEPING')
$total_ht_outcome += $subtotal_ht;
$total_ttc_outcome += $subtotal_ttc;
+
print ' ';
if ($modecompta == 'CREANCES-DETTES')
print ''.price(-$subtotal_ht).' ';
@@ -926,6 +941,7 @@ if ($modecompta == 'BOOKKEEPING')
$total_ht_outcome += $subtotal_ht;
$total_ttc_outcome += $subtotal_ttc;
+
print ' ';
if ($modecompta == 'CREANCES-DETTES') print ''.price(-$subtotal_ht).' ';
print ''.price(-$subtotal_ttc).' ';
@@ -963,6 +979,7 @@ if ($modecompta == 'BOOKKEEPING')
{
$subtotal_ht += -$obj->amount;
$subtotal_ttc += -$obj->amount;
+
$total_ht_outcome += $obj->amount;
$total_ttc_outcome += $obj->amount;
}
@@ -978,6 +995,7 @@ if ($modecompta == 'BOOKKEEPING')
{
$subtotal_ht += $obj->amount;
$subtotal_ttc += $obj->amount;
+
$total_ht_income += $obj->amount;
$total_ttc_income += $obj->amount;
}
@@ -1038,8 +1056,10 @@ if ($modecompta == 'BOOKKEEPING')
}
$total_ht += $subtotal_ht;
$total_ttc += $subtotal_ttc;
+
$total_ht_income += $subtotal_ht;
$total_ttc_income += $subtotal_ttc;
+
print ' ';
if ($modecompta == 'CREANCES-DETTES')
print ''.price($subtotal_ht).' ';
@@ -1101,8 +1121,10 @@ if ($modecompta == 'BOOKKEEPING')
} else {
dol_print_error($db);
}
+
$total_ht_outcome -= 0;
$total_ttc_outcome -= $amount;
+
print ' ';
print "".$langs->trans("VATToPay")." \n";
print ' '."\n";
@@ -1151,6 +1173,7 @@ if ($modecompta == 'BOOKKEEPING')
} else {
dol_print_error($db);
}
+
$total_ht_income += 0;
$total_ttc_income += $amount;
@@ -1197,8 +1220,10 @@ if ($modecompta == 'BOOKKEEPING')
} else {
dol_print_error($db);
}
+
$total_ht_outcome -= 0;
$total_ttc_outcome -= $amount;
+
print ' ';
print "".$langs->trans("VATPaid")." \n";
if ($modecompta == 'CREANCES-DETTES')
@@ -1243,8 +1268,10 @@ if ($modecompta == 'BOOKKEEPING')
} else {
dol_print_error($db);
}
+
$total_ht_income += 0;
$total_ttc_income += $amount;
+
print ' ';
print "".$langs->trans("VATCollected")." \n";
if ($modecompta == 'CREANCES-DETTES')
@@ -1279,19 +1306,22 @@ print '';
print ' ';
print ' ';
-print ''.$langs->trans("Outcome").' ';
-if ($modecompta == 'CREANCES-DETTES')
- print ''.price(price2num(-$total_ht_outcome, 'MT')).' ';
-print ''.price(price2num(-$total_ttc_outcome, 'MT')).' ';
-print ' ';
print ''.$langs->trans("Income").' ';
-if ($modecompta == 'CREANCES-DETTES')
+if ($modecompta == 'CREANCES-DETTES') {
print ''.price(price2num($total_ht_income, 'MT')).' ';
+}
print ''.price(price2num($total_ttc_income, 'MT')).' ';
print ' ';
+print ''.$langs->trans("Outcome").' ';
+if ($modecompta == 'CREANCES-DETTES') {
+ print ''.price(price2num(-$total_ht_outcome, 'MT')).' ';
+}
+print ''.price(price2num(-$total_ttc_outcome, 'MT')).' ';
+print ' ';
print ''.$langs->trans("Profit").' ';
-if ($modecompta == 'CREANCES-DETTES')
+if ($modecompta == 'CREANCES-DETTES') {
print ''.price(price2num($total_ht, 'MT')).' ';
+}
print ''.price(price2num($total_ttc, 'MT')).' ';
print ' ';
diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php
index ec2a8bb2623..38d0f4ec3f9 100644
--- a/htdocs/compta/resultat/index.php
+++ b/htdocs/compta/resultat/index.php
@@ -866,9 +866,9 @@ if (!empty($conf->accounting->enabled) && ($modecompta == 'BOOKKEEPING'))
if ($obj->pcg_type == 'INCOME') {
if (!isset($encaiss[$obj->dm])) $encaiss[$obj->dm] = 0; // To avoid warning of var not defined
$encaiss[$obj->dm] += $obj->credit;
- $encaiss[$obj->dm] -= $obj->credit;
+ $encaiss[$obj->dm] -= $obj->debit;
}
- if ($obj->pcg_type == 'INCOME') {
+ if ($obj->pcg_type == 'EXPENSE') {
if (!isset($decaiss[$obj->dm])) $decaiss[$obj->dm] = 0; // To avoid warning of var not defined
$decaiss[$obj->dm] += $obj->debit;
$decaiss[$obj->dm] -= $obj->credit;
diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php
index 72a8ec2974d..bcddb637b68 100644
--- a/htdocs/contrat/list.php
+++ b/htdocs/contrat/list.php
@@ -658,7 +658,7 @@ while ($i < min($num, $limit))
}
if (!empty($arrayfields['s.nom']['checked']))
{
- print '';
+ print ' ';
if ($obj->socid > 0) {
// TODO Use a cache for this string
print $socstatic->getNomUrl(1, '');
diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php
index 356eb36a04b..b1b03e8de97 100644
--- a/htdocs/core/actions_massactions.inc.php
+++ b/htdocs/core/actions_massactions.inc.php
@@ -1082,6 +1082,7 @@ if ($action == 'remove_file')
$action = '';
}
+
// Validate records
if (!$error && $massaction == 'validate' && $permissiontoadd)
{
diff --git a/htdocs/core/boxes/box_comptes.php b/htdocs/core/boxes/box_comptes.php
index 53be2725680..f09a80f0227 100644
--- a/htdocs/core/boxes/box_comptes.php
+++ b/htdocs/core/boxes/box_comptes.php
@@ -135,7 +135,7 @@ class box_comptes extends ModeleBoxes
$this->info_box_contents[$line][] = array(
'td' => 'class="right nowraponall"',
- 'text' => price($solde, 0, $langs, 0, -1, -1, $objp->currency_code)
+ 'text' => price($solde, 0, $langs, 1, -1, -1, $objp->currency_code)
);
$line++;
diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php
index 8448ae8bc57..fa81515b90d 100644
--- a/htdocs/core/class/extrafields.class.php
+++ b/htdocs/core/class/extrafields.class.php
@@ -839,7 +839,7 @@ class ExtraFields
$array_name_label = array();
// We should not have several time this request. If we have, there is some optimization to do by calling a simple $extrafields->fetch_optionals() in top of code and not into subcode
- $sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos,alwayseditable,perms,langs,list,printable,totalizable,fielddefault,fieldcomputed,entity,enabled,help";
+ $sql = "SELECT rowid, name, label, type, size, elementtype, fieldunique, fieldrequired, param, pos, alwayseditable, perms, langs, list, printable, totalizable, fielddefault, fieldcomputed, entity, enabled, help";
$sql .= " FROM ".MAIN_DB_PREFIX."extrafields";
//$sql.= " WHERE entity IN (0,".$conf->entity.")"; // Filter is done later
if ($elementtype) $sql .= " WHERE elementtype = '".$this->db->escape($elementtype)."'"; // Filed with object->table_element
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 2482795147a..fc50c21f793 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -3047,7 +3047,7 @@ class Form
// "key" value of json key array is used by jQuery automatically as selected value
// "label" value of json key array is used by jQuery automatically as text for combo box
$out .= $opt;
- array_push($outarray, array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'qty'=>$outqty, 'up'=>$objp->unitprice, 'discount'=>$outdiscount, 'type'=>$outtype, 'duration_value'=>$outdurationvalue, 'duration_unit'=>$outdurationunit, 'disabled'=>(empty($objp->idprodfournprice) ?true:false)));
+ array_push($outarray, array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'qty'=>$outqty, 'up'=>price2num($objp->unitprice, 'MT'), 'discount'=>$outdiscount, 'type'=>$outtype, 'duration_value'=>$outdurationvalue, 'duration_unit'=>$outdurationunit, 'disabled'=>(empty($objp->idprodfournprice) ?true:false)));
// Exemple of var_dump $outarray
// array(1) {[0]=>array(6) {[key"]=>string(1) "2" ["value"]=>string(3) "ppp"
// ["label"]=>string(76) "ppp (f ff2) - ppp - 20,00 Euros/1unité (20,00 Euros/unité)"
@@ -4174,7 +4174,7 @@ class Form
$output .= ' ';
foreach ($cate_arbo as $key => $value)
{
- if ($cate_arbo[$key]['id'] == $selected || ($selected == 'auto' && count($cate_arbo) == 1))
+ if ($cate_arbo[$key]['id'] == $selected || ($selected === 'auto' && count($cate_arbo) == 1))
{
$add = 'selected ';
} else {
@@ -5511,9 +5511,11 @@ class Form
*/
public function selectDateToDate($set_time = '', $set_time_end = '', $prefix = 're', $empty = 0)
{
- $ret = $this->selectDate($set_time, $prefix.'_start', 0, 0, $empty);
- $ret .= ' ';
- $ret .= $this->selectDate($set_time_end, $prefix.'_end', 0, 0, $empty);
+ global $langs;
+
+ $ret = $this->selectDate($set_time, $prefix.'_start', 0, 0, $empty, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("from"), 'tzuserrel');
+ $ret .= ' ';
+ $ret .= $this->selectDate($set_time_end, $prefix.'_end', 0, 0, $empty, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"), 'tzuserrel');
return $ret;
}
@@ -5628,7 +5630,7 @@ class Form
if (strval($set_time) != '' && $set_time != -1)
{
//$formated_date=dol_print_date($set_time,$conf->format_date_short);
- $formated_date = dol_print_date($set_time, $langs->trans("FormatDateShortInput")); // FormatDateShortInput for dol_print_date / FormatDateShortJavaInput that is same for javascript
+ $formated_date = dol_print_date($set_time, $langs->trans("FormatDateShortInput"), $gm); // FormatDateShortInput for dol_print_date / FormatDateShortJavaInput that is same for javascript
}
// Calendrier popup version eldy
diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php
index 11e67104f9a..ab075348c3a 100644
--- a/htdocs/core/class/translate.class.php
+++ b/htdocs/core/class/translate.class.php
@@ -113,7 +113,12 @@ class Translate
} else $srclang = strtolower($langpart[0])."_".strtoupper($langpart[0]);
} else { // If it's for a codetouse that is a short code xx
// Array to convert short lang code into long code.
- $longforshort = array('ar'=>'ar_SA', 'el'=>'el_GR', 'ca'=>'ca_ES', 'en'=>'en_US', 'ja'=>'ja_JP', 'nb'=>'nb_NO', 'no'=>'nb_NO');
+ $longforshort = array(
+ 'am'=>'am_ET', 'ar'=>'ar_SA', 'bn'=>'bn_DB', 'el'=>'el_GR', 'ca'=>'ca_ES', 'cs'=>'cs_CZ', 'en'=>'en_US', 'fa'=>'fa_IR',
+ 'gl'=>'gl_ES', 'he'=>'he_IL', 'hi'=>'hi_IN', 'ja'=>'ja_JP',
+ 'ka'=>'ka_GE', 'km'=>'km_KH', 'kn'=>'kn_IN', 'ko'=>'ko_KR', 'lo'=>'lo_LA', 'nb'=>'nb_NO', 'no'=>'nb_NO', 'ne'=>'ne_NP',
+ 'sl'=>'sl_SI', 'sq'=>'sq_AL', 'sr'=>'sr_RS', 'sv'=>'sv_SE', 'uk'=>'uk_UA', 'vi'=>'vi_VN', 'zh'=>'zh_CN'
+ );
if (isset($longforshort[strtolower($langpart[0])])) $srclang = $longforshort[strtolower($langpart[0])];
elseif (!empty($langpart[0])) $srclang = strtolower($langpart[0])."_".strtoupper($langpart[0]);
else $srclang = 'en_US';
diff --git a/htdocs/core/lib/ajax.lib.php b/htdocs/core/lib/ajax.lib.php
index 58265700e26..8a364359e9d 100644
--- a/htdocs/core/lib/ajax.lib.php
+++ b/htdocs/core/lib/ajax.lib.php
@@ -147,7 +147,7 @@ function ajax_autocompleter($selected, $htmlname, $url, $urloption = '', $minLen
console.log("We will trigger change on input '.$htmlname.' because of the select definition of autocomplete code for input#search_'.$htmlname.'");
console.log("Selected id = "+ui.item.id+" - If this value is null, it means you select a record with key that is null so selection is not effective");
- console.log("Propagate before some properties");
+ console.log("Propagate before some properties retrieved into data-xxx properties");
$("#'.$htmlname.'").attr("data-pbq", ui.item.pbq);
$("#'.$htmlname.'").attr("data-pbqup", ui.item.price_ht);
$("#'.$htmlname.'").attr("data-pbqbase", ui.item.pricebasetype);
@@ -190,6 +190,7 @@ function ajax_autocompleter($selected, $htmlname, $url, $urloption = '', $minLen
console.log("Make action update on each ui.item.update")
// loop on each "update" fields
$.each(ui.item.update, function(key, value) {
+ console.log("Set value "+value+" into #"+key);
$("#" + key).val(value).trigger("change");
});
}
diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php
index 1e2be9e856d..10cec80edda 100644
--- a/htdocs/core/lib/company.lib.php
+++ b/htdocs/core/lib/company.lib.php
@@ -1206,24 +1206,23 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin
global $form;
global $param, $massactionbutton;
- $start_year = GETPOST('dateevent_startyear');
- $start_month = GETPOST('dateevent_startmonth');
- $start_day = GETPOST('dateevent_startday');
- $end_year = GETPOST('dateevent_endyear');
- $end_month = GETPOST('dateevent_endmonth');
- $end_day = GETPOST('dateevent_endday');
+ $start_year = GETPOST('dateevent_startyear', 'int');
+ $start_month = GETPOST('dateevent_startmonth', 'int');
+ $start_day = GETPOST('dateevent_startday', 'int');
+ $end_year = GETPOST('dateevent_endyear', 'int');
+ $end_month = GETPOST('dateevent_endmonth', 'int');
+ $end_day = GETPOST('dateevent_endday', 'int');
+ $tms_start = '';
+ $tms_end = '';
+
if (!empty($start_year) && !empty($start_month) && !empty($start_day)) {
- $search_start = $start_year.'-'.$start_month.'-'.$start_day;
- $tms_start = strtotime($search_start);
+ $tms_start = dol_mktime(0, 0, 0, $start_month, $start_day, $start_year, 'tzuserrel');
}
if (!empty($end_year) && !empty($end_month) && !empty($end_day)) {
- $search_end = $end_year.'-'.$end_month.'-'.$end_day.' 23:59:59';
- $tms_end = strtotime($search_end);
+ $tms_end = dol_mktime(23, 59, 59, $end_month, $end_day, $end_year, 'tzuserrel');
}
if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All test are required to be compatible with all browsers
- $search_start = '';
$tms_start = '';
- $search_end = '';
$tms_end = '';
}
dol_include_once('/comm/action/class/actioncomm.class.php');
@@ -1325,14 +1324,14 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin
}
}
- if (!empty($search_start) && !empty($search_end)) {
- $sql .= " AND ((a.datep BETWEEN '$search_start' AND '$search_end') OR (a.datep2 BETWEEN '$search_start' AND '$search_end'))";
+ if (!empty($tms_start) && !empty($tms_end)) {
+ $sql .= " AND ((a.datep BETWEEN '".$db->idate($tms_start)."' AND '".$db->idate($tms_end)."') OR (a.datep2 BETWEEN '".$db->idate($tms_start)."' AND '".$db->idate($tms_end)."'))";
}
- elseif (empty($search_start) && !empty($search_end)) {
- $sql .= " AND ((a.datep <= '$search_end') OR (a.datep2 <= '$search_end'))";
+ elseif (empty($tms_start) && !empty($tms_end)) {
+ $sql .= " AND ((a.datep <= '".$db->idate($tms_end)."') OR (a.datep2 <= '".$db->idate($tms_end)."'))";
}
- elseif (!empty($search_start) && empty($search_end)) {
- $sql .= " AND ((a.datep >= '$search_start') OR (a.datep2 >= '$search_start'))";
+ elseif (!empty($tms_start) && empty($tms_end)) {
+ $sql .= " AND ((a.datep >= '".$db->idate($tms_start)."') OR (a.datep2 >= '".$db->idate($tms_start)."'))";
}
if (is_array($actioncode) && !empty($actioncode)) {
@@ -1488,7 +1487,9 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin
$out .= $formactions->select_type_actions($actioncode, "actioncode", '', empty($conf->global->AGENDA_USE_EVENT_TYPE) ? 1 : -1, 0, (empty($conf->global->AGENDA_USE_MULTISELECT_TYPE) ? 0 : 1), 1);
$out .= ' ';
$out .= ' ';
- $out .= ''.$form->selectDateToDate($tms_start, $tms_end, 'dateevent', 1).' ';
+ $out .= '';
+ $out .= $form->selectDateToDate($tms_start, $tms_end, 'dateevent', 1);
+ $out .= ' ';
$out .= ' ';
$out .= ' ';
$out .= ' ';
diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php
index 6a590b44368..1bdaeef13ef 100644
--- a/htdocs/core/lib/files.lib.php
+++ b/htdocs/core/lib/files.lib.php
@@ -1513,6 +1513,7 @@ function dol_init_file_process($pathtoscan = '', $trackid = '')
* @param int $generatethumbs 1=Generate also thumbs for uploaded image files
* @param Object $object Object used to set 'src_object_*' fields
* @return int <=0 if KO, >0 if OK
+ * @see dol_remove_file_process()
*/
function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesession = 0, $varfiles = 'addedfile', $savingdocmask = '', $link = null, $trackid = '', $generatethumbs = 1, $object = null)
{
@@ -1673,6 +1674,7 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess
* @param int $donotdeletefile 1=Do not delete physically file
* @param string $trackid Track id (used to prefix name of session vars to avoid conflict)
* @return void
+ * @see dol_add_file_process()
*/
function dol_remove_file_process($filenb, $donotupdatesession = 0, $donotdeletefile = 1, $trackid = '')
{
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index 99a66a9a682..719992a52f8 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -4500,7 +4500,7 @@ function print_barre_liste($titre, $page, $file, $options = '', $sortfield = '',
//print 'totalnboflines='.$totalnboflines.'-savlimit='.$savlimit.'-limit='.$limit.'-num='.$num.'-nextpage='.$nextpage;
print "\n";
- print "\n";
+ print "\n";
print ''; // maring bottom must be same than into load_fiche_tire
// Left
@@ -5786,8 +5786,8 @@ function dol_string_nohtmltag($stringtoclean, $removelinefeed = 1, $pagecodeto =
// Example of $temp: 0000-021
$temp = preg_replace($pattern, "", $temp); // pass 1 - $temp after pass 1: 0000-021
$temp = preg_replace($pattern, "", $temp); // pass 2 - $temp after pass 2: 0000-021
- // removed '<' into non closing html tags like ' trans("Step")." ".$i;
$head[$h][2] = 'step'.$i;
$h++;
diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php
index 2f1e3d5596b..4602e877bd1 100644
--- a/htdocs/core/lib/security.lib.php
+++ b/htdocs/core/lib/security.lib.php
@@ -590,9 +590,9 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
$sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql .= " WHERE dbt.rowid IN (".$objectid.")";
$sql .= " AND dbt.".$dbt_keyfield." = ".$user->socid;
- } elseif (!empty($conf->societe->enabled)) {
+ } elseif (!empty($conf->societe->enabled) && !$user->rights->societe->client->voir) {
// If internal user: Check permission for internal users that are restricted on their objects
- if ($feature != 'ticket' && !$user->rights->societe->client->voir) {
+ if ($feature != 'ticket') {
if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined');
$sql = "SELECT COUNT(sc.fk_soc) as nb";
$sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
@@ -601,9 +601,8 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
$sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
$sql .= " AND sc.fk_soc = dbt.".$dbt_keyfield;
$sql .= " AND sc.fk_user = ".$user->id;
- }
- // On ticket, the thirdparty is not mandatory, so we need a special test to accept record with no thirdparties.
- if ($feature == 'ticket' && !$user->rights->societe->client->voir) {
+ } else {
+ // On ticket, the thirdparty is not mandatory, so we need a special test to accept record with no thirdparties.
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON sc.fk_soc = dbt.".$dbt_keyfield." AND sc.fk_user = ".$user->id;
diff --git a/htdocs/core/modules/cheque/doc/pdf_blochet.class.php b/htdocs/core/modules/cheque/doc/pdf_blochet.class.php
index f3ea817fa73..ee00a98b039 100644
--- a/htdocs/core/modules/cheque/doc/pdf_blochet.class.php
+++ b/htdocs/core/modules/cheque/doc/pdf_blochet.class.php
@@ -101,7 +101,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
// Load traductions files required by page
$outputlangs->loadLangs(array("main", "companies", "bills", "products", "compta"));
- $dir = $_dir."/".get_exdir($number, 0, 1, 0, $object, 'cheque').$number;
+ $dir = $_dir."/".get_exdir($number, 0, 1, 0, $object, 'checkdeposits');
if (!is_dir($dir))
{
diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php
index 36dc3ca8f13..e7386f0b7e4 100644
--- a/htdocs/core/modules/import/import_csv.modules.php
+++ b/htdocs/core/modules/import/import_csv.modules.php
@@ -618,6 +618,7 @@ class ImportCsv extends ModeleImports
if (!empty($objimport->array_import_regex[0][$val]) && ($newval != ''))
{
// If test is "Must exist in a field@table or field@table:..."
+ $reg = array();
if (preg_match('/^(.+)@([^:]+)(:.+)?$/', $objimport->array_import_regex[0][$val], $reg))
{
$field = $reg[1];
@@ -844,7 +845,7 @@ class ImportCsv extends ModeleImports
$sqlend .= ', '.$user->id;
}
$sql = $sqlstart.$sqlend.')';
- dol_syslog("import_csv.modules", LOG_DEBUG);
+ //dol_syslog("import_csv.modules", LOG_DEBUG);
// Run insert request
if ($sql)
diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php
index c427e01a758..6c0bcc0f4b1 100644
--- a/htdocs/core/modules/import/import_xlsx.modules.php
+++ b/htdocs/core/modules/import/import_xlsx.modules.php
@@ -636,6 +636,7 @@ class ImportXlsx extends ModeleImports
// Test regexp
if (!empty($objimport->array_import_regex[0][$val]) && ($newval != '')) {
// If test is "Must exist in a field@table or field@table:..."
+ $reg = array();
if (preg_match('/^(.+)@([^:]+)(:.+)?$/', $objimport->array_import_regex[0][$val], $reg)) {
$field = $reg[1];
$table = $reg[2];
@@ -845,7 +846,7 @@ class ImportXlsx extends ModeleImports
$sqlend .= ', ' . $user->id;
}
$sql = $sqlstart . $sqlend . ')';
- dol_syslog("import_xlsx.modules", LOG_DEBUG);
+ //dol_syslog("import_xlsx.modules", LOG_DEBUG);
// Run insert request
if ($sql) {
diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php
index 8990f75951d..e56c7fb9257 100644
--- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php
+++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php
@@ -169,6 +169,7 @@ $totalizable = $extrafields->attributes[$elementtype]['totalizable'][$attrname];
$help = $extrafields->attributes[$elementtype]['help'][$attrname];
$entitycurrentorall = $extrafields->attributes[$elementtype]['entityid'][$attrname];
$printable = $extrafields->attributes[$elementtype]['printable'][$attrname];
+$enabled = $extrafields->attributes[$elementtype]['enabled'][$attrname];
if ((($type == 'select') || ($type == 'checkbox') || ($type == 'radio')) && is_array($param))
{
@@ -299,6 +300,14 @@ if (in_array($type, array_keys($typewecanchangeinto)))
trans("AllEntities"); ?> >
+
+
+
+ trans("EnabledCondition"); ?>
+
+
+
+
diff --git a/htdocs/core/tpl/admin_extrafields_view.tpl.php b/htdocs/core/tpl/admin_extrafields_view.tpl.php
index fb542f9037e..c62a95ec12b 100644
--- a/htdocs/core/tpl/admin_extrafields_view.tpl.php
+++ b/htdocs/core/tpl/admin_extrafields_view.tpl.php
@@ -76,6 +76,11 @@ if (is_array($extrafields->attributes[$elementtype]['type']) && count($extrafiel
{
foreach ($extrafields->attributes[$elementtype]['type'] as $key => $value)
{
+ /*if (! dol_eval($extrafields->attributes[$elementtype]['enabled'][$key], 1)) {
+ // TODO Uncomment this to exclude extrafields of modules not enabled. Add a link to "Show extrafields disabled"
+ // continue;
+ }*/
+
// Load language if required
if (!empty($extrafields->attributes[$elementtype]['langfile'][$key])) {
$langs->load($extrafields->attributes[$elementtype]['langfile'][$key]);
diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php
index a40b385913d..5f19ed672a7 100644
--- a/htdocs/core/tpl/objectline_create.tpl.php
+++ b/htdocs/core/tpl/objectline_create.tpl.php
@@ -32,6 +32,7 @@
* $senderissupplier (0 by default, 1 or 2 for supplier invoices/orders)
* $inputalsopricewithtax (0 by default, 1 to also show column with unit price including tax)
*/
+
// Protection to avoid direct call of template
if (empty($object) || !is_object($object)) {
print "Error: this template page cannot be called directly as an URL";
@@ -239,18 +240,18 @@ if ($nolinesbefore) {
array('qty'=>'qty', 'remise_percent' => 'discount', 'idprod' => 'idprod'), // html id tags that will be edited with each ajax json response key
- 'option_disabled' => 'idthatdoesnotexists', // html id to disable once select is done
- 'warning' => $langs->trans("NoPriceDefinedForThisSupplier") // translation of an error saved into var 'warning' (for example shown we select a disabled option into combo)
+ 'update' => array('qty'=>'qty', 'remise_percent' => 'discount', 'idprod' => 'idprod'), // html id tags that will be edited with each ajax json response key
+ 'option_disabled' => 'idthatdoesnotexists', // html id to disable once select is done
+ 'warning' => $langs->trans("NoPriceDefinedForThisSupplier") // translation of an error saved into var 'warning' (for example shown we select a disabled option into combo)
);
$alsoproductwithnosupplierprice = 0;
} else {
$ajaxoptions = array(
- 'update' => array('remise_percent' => 'discount') // html id tags that will be edited with each ajax json response key
+ 'update' => array('remise_percent' => 'discount', 'price_ht' => 'up') // html id tags that will be edited with each ajax json response key
);
$alsoproductwithnosupplierprice = 1;
}
@@ -531,47 +532,47 @@ if (!empty($usemargins) && $user->rights->margins->creer)
/* TODO This does not work for number with thousand separator that is , */
function checkFreeLine(e, npRate)
{
- var buying_price = $("input[name='buying_price']:first");
- var remise = $("input[name='remise_percent']:first");
+ var buying_price = $("input[name='buying_price']:first");
+ var remise = $("input[name='remise_percent']:first");
- var rate = $("input[name='"+npRate+"']:first");
- if (rate.val() == '')
- return true;
+ var rate = $("input[name='"+npRate+"']:first");
+ if (rate.val() == '')
+ return true;
- if (! $.isNumeric(rate.val().replace(',','.')))
- {
- alert('trans("rateMustBeNumeric")); ?>');
- e.stopPropagation();
- setTimeout(function () { rate.focus() }, 50);
- return false;
- }
- if (npRate == "np_markRate" && rate.val() >= 100)
- {
- alert('trans("markRateShouldBeLesserThan100")); ?>');
- e.stopPropagation();
- setTimeout(function () { rate.focus() }, 50);
- return false;
- }
+ if (! $.isNumeric(rate.val().replace(',','.')))
+ {
+ alert('trans("rateMustBeNumeric")); ?>');
+ e.stopPropagation();
+ setTimeout(function () { rate.focus() }, 50);
+ return false;
+ }
+ if (npRate == "np_markRate" && rate.val() >= 100)
+ {
+ alert('trans("markRateShouldBeLesserThan100")); ?>');
+ e.stopPropagation();
+ setTimeout(function () { rate.focus() }, 50);
+ return false;
+ }
- var price = 0;
- remisejs=price2numjs(remise.val());
+ var price = 0;
+ remisejs=price2numjs(remise.val());
- if (remisejs != 100) // If a discount not 100 or no discount
- {
- if (remisejs == '') remisejs=0;
+ if (remisejs != 100) // If a discount not 100 or no discount
+ {
+ if (remisejs == '') remisejs=0;
- bpjs=price2numjs(buying_price.val());
- ratejs=price2numjs(rate.val());
+ bpjs=price2numjs(buying_price.val());
+ ratejs=price2numjs(rate.val());
- if (npRate == "np_marginRate")
- price = ((bpjs * (1 + ratejs / 100)) / (1 - remisejs / 100));
- else if (npRate == "np_markRate")
- price = ((bpjs / (1 - ratejs / 100)) / (1 - remisejs / 100));
- }
+ if (npRate == "np_marginRate")
+ price = ((bpjs * (1 + ratejs / 100)) / (1 - remisejs / 100));
+ else if (npRate == "np_markRate")
+ price = ((bpjs / (1 - ratejs / 100)) / (1 - remisejs / 100));
+ }
- $("input[name='price_ht']:first").val(price); // TODO Must use a function like php price to have here a formated value
+ $("input[name='price_ht']:first").val(price); // TODO Must use a function like php price to have here a formated value
- return true;
+ return true;
}
rights->margins->creer)
});
$("#prod_entry_mode_free").on( "click", function() {
- setforfree();
+ setforfree();
});
$("#select_type").change(function()
{
- setforfree();
- if (jQuery('#select_type').val() >= 0)
- {
- /* focus work on a standard textarea but not if field was replaced with CKEDITOR */
- jQuery('#dp_desc').focus();
- /* focus if CKEDITOR */
- if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined")
- {
- var editor = CKEDITOR.instances['dp_desc'];
- if (editor) { editor.focus(); }
- }
- }
- console.log("Hide/show date according to product type");
- if (jQuery('#select_type').val() == '0')
- {
- jQuery('#trlinefordates').hide();
- jQuery('.divlinefordates').hide();
- }
- else
- {
- jQuery('#trlinefordates').show();
- jQuery('.divlinefordates').show();
- }
+ setforfree();
+ if (jQuery('#select_type').val() >= 0)
+ {
+ /* focus work on a standard textarea but not if field was replaced with CKEDITOR */
+ jQuery('#dp_desc').focus();
+ /* focus if CKEDITOR */
+ if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined")
+ {
+ var editor = CKEDITOR.instances['dp_desc'];
+ if (editor) { editor.focus(); }
+ }
+ }
+ console.log("Hide/show date according to product type");
+ if (jQuery('#select_type').val() == '0')
+ {
+ jQuery('#trlinefordates').hide();
+ jQuery('.divlinefordates').hide();
+ }
+ else
+ {
+ jQuery('#trlinefordates').show();
+ jQuery('.divlinefordates').show();
+ }
});
$("#prod_entry_mode_predef").on( "click", function() {
- console.log("click prod_entry_mode_predef");
- setforpredef();
- jQuery('#trlinefordates').show();
+ console.log("click prod_entry_mode_predef");
+ setforpredef();
+ jQuery('#trlinefordates').show();
});
rights->margins->creer)
/* When changing predefined product, we reload list of supplier prices required for margin combo */
$("#idprod, #idprodfournprice").change(function()
{
- console.log("Call method change() after change on #idprod or #idprodfournprice. this.val = "+$(this).val());
+ console.log("Call method change() after change on #idprod or #idprodfournprice (senderissupplier=). this.val = "+$(this).val());
setforpredef(); // TODO Keep vat combo visible and set it to first entry into list that match result of get_default_tva
diff --git a/htdocs/core/tpl/objectline_view.tpl.php b/htdocs/core/tpl/objectline_view.tpl.php
index cba0b0b3e53..ba0bf6212ac 100644
--- a/htdocs/core/tpl/objectline_view.tpl.php
+++ b/htdocs/core/tpl/objectline_view.tpl.php
@@ -160,7 +160,7 @@ if (($line->info_bits & 2) == 2) {
}
}
-if ($user->rights->fournisseur->lire && $line->fk_fournprice > 0)
+if ($user->rights->fournisseur->lire && $line->fk_fournprice > 0 && empty($conf->global->SUPPLIER_HIDE_SUPPLIER_OBJECTLINES))
{
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
$productfourn = new ProductFournisseur($this->db);
diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php
index 1a05017c1d3..b01f1883d53 100644
--- a/htdocs/emailcollector/class/emailcollector.class.php
+++ b/htdocs/emailcollector/class/emailcollector.class.php
@@ -202,7 +202,6 @@ class EmailCollector extends CommonObject
public $debuginfo;
-
const STATUS_DISABLED = 0;
const STATUS_ENABLED = 1;
@@ -716,11 +715,15 @@ class EmailCollector extends CommonObject
// Connect to IMAP
$flags = '/service=imap'; // IMAP
- if ($ssl) $flags .= '/ssl'; // '/tls'
+ if (!empty($conf->global->IMAP_FORCE_TLS)) {
+ $flags .= '/tls';
+ } elseif (empty($conf->global->IMAP_FORCE_NOSSL)) {
+ if ($ssl) $flags .= '/ssl';
+ }
$flags .= '/novalidate-cert';
//$flags.='/readonly';
//$flags.='/debug';
- if ($norsh || !empty($conf->global->IMPA_FORCE_NORSH)) $flags .= '/norsh';
+ if ($norsh || !empty($conf->global->IMAP_FORCE_NORSH)) $flags .= '/norsh';
$connectstringserver = '{'.$this->host.':993'.$flags.'}';
diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php
index c7efc735051..e1e5fb34f2a 100644
--- a/htdocs/expensereport/card.php
+++ b/htdocs/expensereport/card.php
@@ -225,10 +225,12 @@ if (empty($reshook))
if (!($object->fk_user_author > 0)) $object->fk_user_author = $user->id;
// Check that expense report is for a user inside the hierarchy or advanced permission for all is set
- if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->expensereport->creer)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->expensereport->writeall_advance))) {
+ if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->expensereport->creer))
+ || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->expensereport->creer) && empty($user->rights->expensereport->writeall_advance))) {
$error++;
setEventMessages($langs->trans("NotEnoughPermission"), null, 'errors');
- } else {
+ }
+ if (!$error) {
if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || empty($user->rights->expensereport->writeall_advance)) {
if (!in_array($object->fk_user_author, $childids)) {
$error++;
diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php
index 7ac1924fec8..35173044971 100644
--- a/htdocs/expensereport/class/expensereport.class.php
+++ b/htdocs/expensereport/class/expensereport.class.php
@@ -337,6 +337,7 @@ class ExpenseReport extends CommonObject
if ($result < 0)
{
$this->error = $newndfline->error;
+ $this->errors = $newndfline->errors;
$error++;
break;
}
diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
index f2b508f665e..f4c493c8b52 100644
--- a/htdocs/fourn/class/fournisseur.commande.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.class.php
@@ -1562,8 +1562,6 @@ class CommandeFournisseur extends CommonOrder
{
global $langs, $mysoc, $conf;
- $error = 0;
-
dol_syslog(get_class($this)."::addline $desc, $pu_ht, $qty, $txtva, $txlocaltax1, $txlocaltax2, $fk_product, $fk_prod_fourn_price, $ref_supplier, $remise_percent, $price_base_type, $pu_ttc, $type, $info_bits, $notrigger, $date_start, $date_end, $fk_unit, $pu_ht_devise, $origin, $origin_id");
include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
@@ -3069,8 +3067,10 @@ class CommandeFournisseur extends CommonOrder
/**
* Is the supplier order delayed?
+ * We suppose a purchase ordered as late if a the purchase order has been sent and the delivery date is set and before the delay.
+ * If order has not been sent, we use the order date.
*
- * @return bool
+ * @return bool True if object is delayed
*/
public function hasDelay()
{
@@ -3078,14 +3078,28 @@ class CommandeFournisseur extends CommonOrder
if (empty($this->delivery_date) && !empty($this->date_livraison)) $this->delivery_date = $this->date_livraison; // For backward compatibility
- $now = dol_now();
- $date_to_test = empty($this->delivery_date) ? $this->date_commande : $this->delivery_date;
+ if ($this->statut == self::STATUS_ORDERSENT || $this->statut == self::STATUS_RECEIVED_PARTIALLY) {
+ $now = dol_now();
+ if (!empty($this->delivery_date)) {
+ $date_to_test = $this->delivery_date;
+ return $date_to_test && $date_to_test < ($now - $conf->commande->fournisseur->warning_delay);
+ } else {
+ //$date_to_test = $this->date_commande;
+ //return $date_to_test && $date_to_test < ($now - $conf->commande->fournisseur->warning_delay);
+ return false;
+ }
+ } else {
+ $now = dol_now();
+ $date_to_test = $this->date_commande;
- return ($this->statut > 0 && $this->statut < 5) && $date_to_test && $date_to_test < ($now - $conf->commande->fournisseur->warning_delay);
+ return ($this->statut > 0 && $this->statut < 5) && $date_to_test && $date_to_test < ($now - $conf->commande->fournisseur->warning_delay);
+ }
}
/**
- * Show the customer delayed info
+ * Show the customer delayed info.
+ * We suppose a purchase ordered as late if a the purchase order has been sent and the delivery date is set and before the delay.
+ * If order has not been sent, we use the order date.
*
* @return string Show delayed information
*/
@@ -3095,12 +3109,20 @@ class CommandeFournisseur extends CommonOrder
if (empty($this->delivery_date) && !empty($this->date_livraison)) $this->delivery_date = $this->date_livraison; // For backward compatibility
- if (empty($this->delivery_date)) {
- $text = $langs->trans("OrderDate").' '.dol_print_date($this->date_commande, 'day');
+ $text = '';
+
+ if ($this->statut == self::STATUS_ORDERSENT || $this->statut == self::STATUS_RECEIVED_PARTIALLY) {
+ if (!empty($this->delivery_date)) {
+ $text = $langs->trans("DeliveryDate").' '.dol_print_date($this->delivery_date, 'day');
+ } else {
+ $text = $langs->trans("OrderDate").' '.dol_print_date($this->date_commande, 'day');
+ }
} else {
- $text = $langs->trans("DeliveryDate").' '.dol_print_date($this->delivery_date, 'day');
+ $text = $langs->trans("OrderDate").' '.dol_print_date($this->date_commande, 'day');
+ }
+ if ($text) {
+ $text .= ' '.($conf->commande->fournisseur->warning_delay > 0 ? '+' : '-').' '.round(abs($conf->commande->fournisseur->warning_delay) / 3600 / 24, 1).' '.$langs->trans("days").' < '.$langs->trans("Today");
}
- $text .= ' '.($conf->commande->fournisseur->warning_delay > 0 ? '+' : '-').' '.round(abs($conf->commande->fournisseur->warning_delay) / 3600 / 24, 1).' '.$langs->trans("days").' < '.$langs->trans("Today");
return $text;
}
diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php
index ed8a6f75a1d..520c8bc3c47 100644
--- a/htdocs/fourn/commande/card.php
+++ b/htdocs/fourn/commande/card.php
@@ -564,7 +564,9 @@ if (empty($reshook))
$fk_unit = GETPOST('units', 'alpha');
- $tva_tx = price2num($tva_tx); // When vat is text input field
+ if (!preg_match('/\((.*)\)/', $tva_tx)) {
+ $tva_tx = price2num($tva_tx); // When vat is text input field
+ }
// Local Taxes
$localtax1_tx = get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
@@ -2147,6 +2149,12 @@ if ($action == 'create')
print '';
}
+ // Delivery delay (in days)
+ print '';
+ print ''.$langs->trans('NbDaysToDelivery').' '.img_picto($langs->trans('DescNbDaysToDelivery'), 'info', 'style="cursor:help"').' ';
+ print ''.$object->getMaxDeliveryTimeDay($langs).' ';
+ print ' ';
+
// Delivery date planed
print '';
print '';
@@ -2175,12 +2183,6 @@ if ($action == 'create')
}
print ' ';
- // Delivery delay (in days)
- print '';
- print ''.$langs->trans('NbDaysToDelivery').' '.img_picto($langs->trans('DescNbDaysToDelivery'), 'info', 'style="cursor:help"').' ';
- print ''.$object->getMaxDeliveryTimeDay($langs).' ';
- print ' ';
-
// Incoterms
if (!empty($conf->incoterm->enabled))
{
diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php
index 4175e5064c6..78db7e85a47 100644
--- a/htdocs/fourn/commande/dispatch.php
+++ b/htdocs/fourn/commande/dispatch.php
@@ -724,7 +724,7 @@ if ($id > 0 || !empty($ref)) {
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
$sql .= $hookmanager->resPrint;
- $sql .= " GROUP BY p.ref, p.label, p.tobatch, l.rowid, l.fk_product, l.subprice, l.remise_percent, p.fk_default_warehouse"; // Calculation of amount dispatched is done per fk_product so we must group by fk_product
+ $sql .= " GROUP BY p.ref, p.label, p.tobatch, p.fk_default_warehouse, l.rowid, l.fk_product, l.subprice, l.remise_percent, l.ref"; // Calculation of amount dispatched is done per fk_product so we must group by fk_product
$sql .= " ORDER BY p.ref, p.label";
$resql = $db->query($sql);
diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php
index c5173ccddeb..f06542ab143 100644
--- a/htdocs/fourn/commande/list.php
+++ b/htdocs/fourn/commande/list.php
@@ -142,30 +142,30 @@ if (empty($user->socid)) $fieldstosearchall["cf.note_private"] = "NotePrivate";
$checkedtypetiers = 0;
$arrayfields = array(
- 'cf.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
- 'cf.ref_supplier'=>array('label'=>$langs->trans("RefOrderSupplierShort"), 'checked'=>1, 'enabled'=>1),
- 'p.project_ref'=>array('label'=>$langs->trans("ProjectRef"), 'checked'=>0, 'enabled'=>1),
- 'u.login'=>array('label'=>$langs->trans("AuthorRequest"), 'checked'=>1),
- 's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
- 's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1),
- 's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>1),
- 'state.nom'=>array('label'=>$langs->trans("StateShort"), 'checked'=>0),
- 'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>0),
- 'typent.code'=>array('label'=>$langs->trans("ThirdPartyType"), 'checked'=>$checkedtypetiers),
- 'cf.date_commande'=>array('label'=>$langs->trans("OrderDateShort"), 'checked'=>1),
- 'cf.date_delivery'=>array('label'=>$langs->trans("DateDeliveryPlanned"), 'checked'=>1, 'enabled'=>empty($conf->global->ORDER_DISABLE_DELIVERY_DATE)),
- 'cf.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
- 'cf.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0),
- 'cf.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0),
+ 'cf.ref'=>array('label'=>"Ref", 'checked'=>1),
+ 'cf.ref_supplier'=>array('label'=>"RefOrderSupplierShort", 'checked'=>1, 'enabled'=>1),
+ 'p.project_ref'=>array('label'=>"ProjectRef", 'checked'=>0, 'enabled'=>1),
+ 'u.login'=>array('label'=>"AuthorRequest", 'checked'=>1),
+ 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1),
+ 's.town'=>array('label'=>"Town", 'checked'=>1),
+ 's.zip'=>array('label'=>"Zip", 'checked'=>1),
+ 'state.nom'=>array('label'=>"StateShort", 'checked'=>0),
+ 'country.code_iso'=>array('label'=>"Country", 'checked'=>0),
+ 'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers),
+ 'cf.date_commande'=>array('label'=>"OrderDateShort", 'checked'=>1),
+ 'cf.date_livraison'=>array('label'=>"DateDeliveryPlanned", 'checked'=>1, 'enabled'=>empty($conf->global->ORDER_DISABLE_DELIVERY_DATE)),
+ 'cf.total_ht'=>array('label'=>"AmountHT", 'checked'=>1),
+ 'cf.total_vat'=>array('label'=>"AmountVAT", 'checked'=>0),
+ 'cf.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0),
'cf.multicurrency_code'=>array('label'=>'Currency', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
'cf.multicurrency_tx'=>array('label'=>'CurrencyRate', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
'cf.multicurrency_total_ht'=>array('label'=>'MulticurrencyAmountHT', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
'cf.multicurrency_total_vat'=>array('label'=>'MulticurrencyAmountVAT', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
'cf.multicurrency_total_ttc'=>array('label'=>'MulticurrencyAmountTTC', 'checked'=>0, 'enabled'=>(empty($conf->multicurrency->enabled) ? 0 : 1)),
- 'cf.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
- 'cf.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
- 'cf.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
- 'cf.billed'=>array('label'=>$langs->trans("Billed"), 'checked'=>1, 'position'=>1000, 'enabled'=>1)
+ 'cf.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500),
+ 'cf.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500),
+ 'cf.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000),
+ 'cf.billed'=>array('label'=>"Billed", 'checked'=>1, 'position'=>1000, 'enabled'=>1)
);
// Extra fields
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
@@ -525,7 +525,7 @@ if ($sall || $search_product_category > 0 || $search_user > 0) $sql = 'SELECT DI
$sql .= ' s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client, s.email,';
$sql .= " typent.code as typent_code,";
$sql .= " state.code_departement as state_code, state.nom as state_name,";
-$sql .= " cf.rowid, cf.ref, cf.ref_supplier, cf.fk_statut, cf.billed, cf.total_ht, cf.tva as total_tva, cf.total_ttc, cf.fk_user_author, cf.date_commande as date_commande, cf.date_livraison as date_delivery,";
+$sql .= " cf.rowid, cf.ref, cf.ref_supplier, cf.fk_statut, cf.billed, cf.total_ht, cf.tva as total_tva, cf.total_ttc, cf.fk_user_author, cf.date_commande as date_commande, cf.date_livraison as date_livraison,";
$sql .= ' cf.fk_multicurrency, cf.multicurrency_code, cf.multicurrency_tx, cf.multicurrency_total_ht, cf.multicurrency_total_tva as multicurrency_total_vat, cf.multicurrency_total_ttc,';
$sql .= ' cf.date_creation as date_creation, cf.tms as date_update,';
$sql .= ' cf.note_public, cf.note_private,';
@@ -874,7 +874,7 @@ if ($resql)
print '';
}
// Date delivery
- if (!empty($arrayfields['cf.date_delivery']['checked']))
+ if (!empty($arrayfields['cf.date_livraison']['checked']))
{
print '';
if (!empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print ' ';
@@ -993,7 +993,7 @@ if ($resql)
if (!empty($arrayfields['typent.code']['checked'])) print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, '', $sortfield, $sortorder, 'center ');
if (!empty($arrayfields['cf.fk_author']['checked'])) print_liste_field_titre($arrayfields['cf.fk_author']['label'], $_SERVER["PHP_SELF"], "cf.fk_author", "", $param, '', $sortfield, $sortorder);
if (!empty($arrayfields['cf.date_commande']['checked'])) print_liste_field_titre($arrayfields['cf.date_commande']['label'], $_SERVER["PHP_SELF"], "cf.date_commande", "", $param, '', $sortfield, $sortorder, 'center ');
- if (!empty($arrayfields['cf.date_delivery']['checked'])) print_liste_field_titre($arrayfields['cf.date_delivery']['label'], $_SERVER["PHP_SELF"], 'cf.date_livraison', '', $param, '', $sortfield, $sortorder, 'center ');
+ if (!empty($arrayfields['cf.date_livraison']['checked'])) print_liste_field_titre($arrayfields['cf.date_livraison']['label'], $_SERVER["PHP_SELF"], 'cf.date_livraison', '', $param, '', $sortfield, $sortorder, 'center ');
if (!empty($arrayfields['cf.total_ht']['checked'])) print_liste_field_titre($arrayfields['cf.total_ht']['label'], $_SERVER["PHP_SELF"], "cf.total_ht", "", $param, '', $sortfield, $sortorder, 'right ');
if (!empty($arrayfields['cf.total_vat']['checked'])) print_liste_field_titre($arrayfields['cf.total_vat']['label'], $_SERVER["PHP_SELF"], "cf.tva", "", $param, '', $sortfield, $sortorder, 'right ');
if (!empty($arrayfields['cf.total_ttc']['checked'])) print_liste_field_titre($arrayfields['cf.total_ttc']['label'], $_SERVER["PHP_SELF"], "cf.total_ttc", "", $param, '', $sortfield, $sortorder, 'right ');
@@ -1043,7 +1043,7 @@ if ($resql)
$objectstatic->total_tva = $obj->total_tva;
$objectstatic->total_ttc = $obj->total_ttc;
$objectstatic->date_commande = $db->jdate($obj->date_commande);
- $objectstatic->date_delivery = $db->jdate($obj->date_delivery);
+ $objectstatic->delivery_date = $db->jdate($obj->date_livraison);
$objectstatic->note_public = $obj->note_public;
$objectstatic->note_private = $obj->note_private;
$objectstatic->statut = $obj->fk_statut;
@@ -1153,19 +1153,23 @@ if ($resql)
{
print ' ';
print dol_print_date($db->jdate($obj->date_commande), 'day');
- if ($objectstatic->hasDelay() && !empty($objectstatic->date_delivery)) {
- print ' '.img_picto($langs->trans("Late").' : '.$objectstatic->showDelay(), "warning");
+ if ($objectstatic->statut != $objectstatic::STATUS_ORDERSENT && $objectstatic->statut != $objectstatic::STATUS_RECEIVED_PARTIALLY) {
+ if ($objectstatic->hasDelay()) {
+ print ' '.img_picto($langs->trans("Late").' : '.$objectstatic->showDelay(), "warning");
+ }
}
print ' ';
if (!$i) $totalarray['nbfield']++;
}
// Plannned date of delivery
- if (!empty($arrayfields['cf.date_delivery']['checked']))
+ if (!empty($arrayfields['cf.date_livraison']['checked']))
{
print '';
- print dol_print_date($db->jdate($obj->date_delivery), 'day');
- if ($objectstatic->hasDelay() && !empty($objectstatic->date_delivery)) {
- print ' '.img_picto($langs->trans("Late").' : '.$objectstatic->showDelay(), "warning");
+ print dol_print_date($db->jdate($obj->date_livraison), 'day');
+ if ($objectstatic->statut == $objectstatic::STATUS_ORDERSENT || $objectstatic->statut == $objectstatic::STATUS_RECEIVED_PARTIALLY) {
+ if ($objectstatic->hasDelay()) {
+ print ' '.img_picto($langs->trans("Late").' : '.$objectstatic->showDelay(), "warning");
+ }
}
print ' ';
if (!$i) $totalarray['nbfield']++;
diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php
index 357abd029fa..d655b97c74f 100644
--- a/htdocs/fourn/facture/contact.php
+++ b/htdocs/fourn/facture/contact.php
@@ -136,7 +136,7 @@ if ($id > 0 || !empty($ref))
print dol_get_fiche_head($head, 'contact', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice');
- $linkback = ''.$langs->trans("BackToList").' ';
+ $linkback = ''.$langs->trans("BackToList").' ';
$morehtmlref = '';
// Ref supplier
diff --git a/htdocs/fourn/facture/info.php b/htdocs/fourn/facture/info.php
index 656cd3c5553..69ea8839cfb 100644
--- a/htdocs/fourn/facture/info.php
+++ b/htdocs/fourn/facture/info.php
@@ -67,7 +67,7 @@ $head = facturefourn_prepare_head($object);
$titre = $langs->trans('SupplierInvoice');
print dol_get_fiche_head($head, 'info', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice');
-$linkback = '
'.$langs->trans("BackToList").' ';
+$linkback = '
'.$langs->trans("BackToList").' ';
$morehtmlref = '
';
// Ref supplier
diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php
index cbd9b76e45e..cb8da24052b 100644
--- a/htdocs/holiday/list.php
+++ b/htdocs/holiday/list.php
@@ -106,7 +106,7 @@ $search_month_end = GETPOST('search_month_end', 'int');
$search_year_end = GETPOST('search_year_end', 'int');
$search_employee = GETPOST('search_employee', 'int');
$search_valideur = GETPOST('search_valideur', 'int');
-$search_status = GETPOST('search_status', 'int');
+$search_status = GETPOST('search_statut', 'int');
$search_type = GETPOST('search_type', 'int');
// Initialize technical objects
diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php
index 8814fa584fa..344ede7d0cd 100644
--- a/htdocs/imports/import.php
+++ b/htdocs/imports/import.php
@@ -1255,6 +1255,14 @@ if ($step == 4 && $datatoimport)
// STEP 5: Summary of choices and launch simulation
if ($step == 5 && $datatoimport)
{
+ $max_execution_time_for_importexport = (empty($conf->global->IMPORT_MAX_EXECUTION_TIME) ? 300 : $conf->global->IMPORT_MAX_EXECUTION_TIME); // 5mn if not defined
+ $max_time = @ini_get("max_execution_time");
+ if ($max_time && $max_time < $max_execution_time_for_importexport)
+ {
+ dol_syslog("max_execution_time=".$max_time." is lower than max_execution_time_for_importexport=".$max_execution_time_for_importexport.". We try to increase it dynamically.");
+ @ini_set("max_execution_time", $max_execution_time_for_importexport); // This work only if safe mode is off. also web servers has timeout of 300
+ }
+
$model = $format;
$liste = $objmodelimport->liste_modeles($db);
@@ -1518,14 +1526,6 @@ if ($step == 5 && $datatoimport)
}
print '
';
} else {
- $max_execution_time_for_importexport = (empty($conf->global->IMPORT_MAX_EXECUTION_TIME) ? 300 : $conf->global->IMPORT_MAX_EXECUTION_TIME); // 5mn if not defined
- $max_time = @ini_get("max_execution_time");
- if ($max_time && $max_time < $max_execution_time_for_importexport)
- {
- dol_syslog("max_execution_time=".$max_time." is lower than max_execution_time_for_importexport=".$max_execution_time_for_importexport.". We try to increase it dynamically.");
- @ini_set("max_execution_time", $max_execution_time_for_importexport); // This work only if safe mode is off. also web servers has timeout of 300
- }
-
// Launch import
$arrayoferrors = array();
$arrayofwarnings = array();
@@ -1603,8 +1603,10 @@ if ($step == 5 && $datatoimport)
// Show OK
if (!count($arrayoferrors) && !count($arrayofwarnings)) {
print '
'.img_picto($langs->trans("OK"), 'tick').' '.$langs->trans("NoError").'
';
- print $langs->trans("NbInsert", $obj->nbinsert).'
';
- print $langs->trans("NbUpdate", $obj->nbupdate).'
';
+ print '
';
+ print $langs->trans("NbInsert", empty($obj->nbinsert) ? 0 : $obj->nbinsert).' ';
+ print $langs->trans("NbUpdate", empty($obj->nbupdate) ? 0 : $obj->nbupdate).' ';
+ print '
';
} else print $langs->trans("NbOfLinesOK", $nbok).'
';
// Show Errors
@@ -1692,9 +1694,17 @@ if ($step == 5 && $datatoimport)
// STEP 6: Real import
if ($step == 6 && $datatoimport)
{
+ $max_execution_time_for_importexport = (empty($conf->global->IMPORT_MAX_EXECUTION_TIME) ? 300 : $conf->global->IMPORT_MAX_EXECUTION_TIME); // 5mn if not defined
+ $max_time = @ini_get("max_execution_time");
+ if ($max_time && $max_time < $max_execution_time_for_importexport)
+ {
+ dol_syslog("max_execution_time=".$max_time." is lower than max_execution_time_for_importexport=".$max_execution_time_for_importexport.". We try to increase it dynamically.");
+ @ini_set("max_execution_time", $max_execution_time_for_importexport); // This work only if safe mode is off. also web servers has timeout of 300
+ }
+
$model = $format;
$liste = $objmodelimport->liste_modeles($db);
- $importid = $_REQUEST["importid"];
+ $importid = GETPOST("importid", 'alphanohtml');
// Create classe to use for import
@@ -1970,12 +1980,14 @@ if ($step == 6 && $datatoimport)
// Show result
print '
';
- print '
';
+ print '
';
print $langs->trans("NbOfLinesImported", $nbok).' ';
- print $langs->trans("NbInsert", $obj->nbinsert).' ';
- print $langs->trans("NbUpdate", $obj->nbupdate).' ';
+ print $langs->trans("NbInsert", empty($obj->nbinsert) ? 0 : $obj->nbinsert).' ';
+ print $langs->trans("NbUpdate", empty($obj->nbupdate) ? 0 : $obj->nbupdate).' ';
+ print '
';
+ print '
';
print $langs->trans("FileWasImported", $importid).' ';
- print $langs->trans("YouCanUseImportIdToFindRecord", $importid).' ';
+ print ''.$langs->trans("YouCanUseImportIdToFindRecord", $importid).' ';
print '
';
}
diff --git a/htdocs/includes/odtphp/odf.php b/htdocs/includes/odtphp/odf.php
index e7ce32cf4b9..d269cd5e5dc 100644
--- a/htdocs/includes/odtphp/odf.php
+++ b/htdocs/includes/odtphp/odf.php
@@ -138,6 +138,7 @@ class Odf
if (strpos($this->contentXml, $tag) === false && strpos($this->stylesXml, $tag) === false) {
// Add the throw only for development. In most cases, it is normal to not having the key into the document (only few keys are presents).
//throw new OdfException("var $key not found in the document");
+ return $this;
}
$this->vars[$tag] = $this->convertVarToOdf($value, $encode, $charset);
diff --git a/htdocs/install/mysql/migration/12.0.0-13.0.0.sql b/htdocs/install/mysql/migration/12.0.0-13.0.0.sql
index f75ef8adee6..4c8adf5282e 100644
--- a/htdocs/install/mysql/migration/12.0.0-13.0.0.sql
+++ b/htdocs/install/mysql/migration/12.0.0-13.0.0.sql
@@ -574,3 +574,5 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_PAID','Expense report billed','Executed when an expense report is set as billed','expensereport',204);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',205);
+-- Removed no more used function
+-- VPGSQL8.2 DROP FUNCTION IF EXISTS update_modified_column_date_m CASCADE;
diff --git a/htdocs/intracommreport/card.php b/htdocs/intracommreport/card.php
index 077f793d649..0226848bd48 100644
--- a/htdocs/intracommreport/card.php
+++ b/htdocs/intracommreport/card.php
@@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
require_once DOL_DOCUMENT_ROOT.'/intracommreport/class/intracommreport.class.php';
$langs->loadLangs(array("intracommreport"));
-var_dump($_POST);
+
$action = GETPOST('action');
$exporttype = GETPOSTISSET('exporttype') ? GETPOST('exporttype', 'alphanohtml') : 'deb'; // DEB ou DES
$year = GETPOSTINT('year');
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index cc10b054606..f5770bad737 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -444,8 +444,8 @@ ExtrafieldParamHelpPassword=Leaving this field blank means this value will be st
ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')
for example:
1,value1
2,value2
code3,value3
...
In order to have the list depending on another complementary attribute list:
1,value1|options_
parent_list_code :parent_key
2,value2|options_
parent_list_code :parent_key
In order to have the list depending on another list:
1,value1|
parent_list_code :parent_key
2,value2|
parent_list_code :parent_key
ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')
for example:
1,value1
2,value2
3,value3
...
ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')
for example:
1,value1
2,value2
3,value3
...
-ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter
- id_field is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)
In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_
parent_list_code |parent_column:filter
In order to have the list depending on another list:
c_typent:libelle:id:
parent_list_code |parent_column:filter
-ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter
filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)
In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_
parent_list_code |parent_column:filter
In order to have the list depending on another list:
c_typent:libelle:id:
parent_list_code |parent_column:filter
+ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql
- id_field is necessarly a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)
In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_
parent_list_code |parent_column:filter
In order to have the list depending on another list:
c_typent:libelle:id:
parent_list_code |parent_column:filter
+ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql
filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)
In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_
parent_list_code |parent_column:filter
In order to have the list depending on another list:
c_typent:libelle:id:
parent_list_code |parent_column:filter
ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default for new session, then status is kept for each user session)
Set this to 2 for a collapsing separator (collapsed by default for new session, then status is kept fore each user session)
LibraryToBuildPDF=Library used for PDF generation
diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang
index 99bed13179f..d4c9f95b0b9 100644
--- a/htdocs/langs/en_US/companies.lang
+++ b/htdocs/langs/en_US/companies.lang
@@ -203,6 +203,7 @@ ProfId2IT=-
ProfId3IT=-
ProfId4IT=-
ProfId5IT=EORI number
+ProfId6IT=-
ProfId1LU=Id. prof. 1 (R.C.S. Luxembourg)
ProfId2LU=Id. prof. 2 (Business permit)
ProfId3LU=-
diff --git a/htdocs/langs/en_US/withdrawals.lang b/htdocs/langs/en_US/withdrawals.lang
index 553e3ac0eaa..eb26ee91a6f 100644
--- a/htdocs/langs/en_US/withdrawals.lang
+++ b/htdocs/langs/en_US/withdrawals.lang
@@ -44,6 +44,7 @@ MakeBankTransferOrder=Make a credit transfer request
WithdrawRequestsDone=%s direct debit payment requests recorded
ThirdPartyBankCode=Third-party bank code
NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode
%s .
+WithdrawalCantBeCreditedTwice=This withdrawal receipt is already marked as credited; this can't be done twice, as this would potentially create duplicate payments and bank entries.
ClassCredited=Classify credited
ClassCreditedConfirm=Are you sure you want to classify this withdrawal receipt as credited on your bank account?
TransData=Transmission date
diff --git a/htdocs/langs/fr_FR/withdrawals.lang b/htdocs/langs/fr_FR/withdrawals.lang
index e20eca0c75f..771fcfbcc83 100644
--- a/htdocs/langs/fr_FR/withdrawals.lang
+++ b/htdocs/langs/fr_FR/withdrawals.lang
@@ -45,6 +45,7 @@ WithdrawRequestsDone=%s demandes de prélèvements enregistrées
BankTransferRequestsDone=%s demande de prélèvement enregistrée
ThirdPartyBankCode=Code banque du tiers
NoInvoiceCouldBeWithdrawed=Aucune facture traitée avec succès. Vérifiez que les factures sont sur les sociétés avec un BAN par défaut valide et que le BAN a un RUM avec le mode
%s .
+WithdrawalCantBeCreditedTwice=Ce bon de prélèvement est déjà classé crédité ; cette opération ne peut pas être réalisée deux fois, car cela pourrait engendrer des doublons dans les paiements et les écritures bancaires.
ClassCredited=Classer crédité
ClassCreditedConfirm=Êtes-vous sûr de vouloir classer ce bon de prélèvement comme crédité sur votre compte bancaire ?
TransData=Date de transmission
diff --git a/htdocs/loan/schedule.php b/htdocs/loan/schedule.php
index 5e27a48fa02..b9e6783ceca 100644
--- a/htdocs/loan/schedule.php
+++ b/htdocs/loan/schedule.php
@@ -48,7 +48,9 @@ $object->fetch($loanid);
$echeances = new LoanSchedule($db);
$echeances->fetchAll($object->id);
-if ($object->paid > 0 && count($echeances->lines) == 0) $pay_without_schedule = 1;
+if ($object->paid > 0 && count($echeances->lines) == 0) {
+ $pay_without_schedule = 1;
+}
/*
* Actions
@@ -86,8 +88,9 @@ if ($action == 'createecheancier' && empty($pay_without_schedule)) {
$echeances->lines[] = $new_echeance;
$i++;
}
- var_dump($result);
- if ($result > 0) $db->commit();
+ if ($result > 0) {
+ $db->commit();
+ }
}
if ($action == 'updateecheancier' && empty($pay_without_schedule)) {
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 3e64482fdc6..78ed3d82bda 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -1517,7 +1517,8 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr
// To use external ckeditor 4 js lib
$pathckeditor = constant('JS_CKEDITOR');
}
- print ''."\n";
print ''."\n";
print '