diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php
index 9c4536e94c4..333efefbc9d 100644
--- a/htdocs/accountancy/admin/account.php
+++ b/htdocs/accountancy/admin/account.php
@@ -27,6 +27,7 @@ require '../../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
// Load translation files required by the page
$langs->loadLangs(array("compta", "bills", "admin", "accountancy", "salaries"));
@@ -180,6 +181,7 @@ if (empty($reshook))
*/
$form = new Form($db);
+$formaccounting = new FormAccounting($db);
llxHeader('', $langs->trans("ListAccounts"));
@@ -198,9 +200,42 @@ if ($db->type == 'pgsql') $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_accou
else $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as a2 ON a2.rowid = aa.account_parent AND a2.entity = ".$conf->entity;
$sql .= " WHERE asy.rowid = ".$pcgver;
//print $sql;
-if (strlen(trim($search_account))) $sql .= natural_search("aa.account_number", $search_account);
+if (strlen(trim($search_account))) {
+ $lengthpaddingaccount = 0;
+ if ($conf->global->ACCOUNTING_LENGTH_GACCOUNT || $conf->global->ACCOUNTING_LENGTH_AACCOUNT) {
+ $lengthpaddingaccount = max($conf->global->ACCOUNTING_LENGTH_GACCOUNT, $conf->global->ACCOUNTING_LENGTH_AACCOUNT);
+ }
+ $search_account_tmp = $search_account;
+ $weremovedsomezero = 0;
+ if (strlen($search_account_tmp) <= $lengthpaddingaccount) {
+ for($i = 0; $i < $lengthpaddingaccount; $i++) {
+ if (preg_match('/0$/', $search_account_tmp)) {
+ $weremovedsomezero++;
+ $search_account_tmp = preg_replace('/0$/', '', $search_account_tmp);
+ }
+ }
+ }
+
+ //var_dump($search_account); exit;
+ if ($search_account_tmp) {
+ if ($weremovedsomezero) {
+ $search_account_tmp_clean = $search_account_tmp;
+ $search_account_clean = $search_account;
+ $startchar = '%';
+ if (strpos($search_account_tmp, '^') === 0)
+ {
+ $startchar = '';
+ $search_account_tmp_clean = preg_replace('/^\^/', '', $search_account_tmp);
+ $search_account_clean = preg_replace('/^\^/', '', $search_account);
+ }
+ $sql .= " AND (aa.account_number LIKE '".$startchar.$search_account_tmp_clean."'";
+ $sql .= " OR aa.account_number LIKE '".$startchar.$search_account_clean."%')";
+ }
+ else $sql .= natural_search("aa.account_number", $search_account_tmp);
+ }
+}
if (strlen(trim($search_label))) $sql .= natural_search("aa.label", $search_label);
-if (strlen(trim($search_accountparent))) $sql .= natural_search("aa.account_parent", $search_accountparent);
+if (strlen(trim($search_accountparent)) && $search_accountparent != '-1') $sql .= natural_search("aa.account_parent", $search_accountparent, 2);
if (strlen(trim($search_pcgtype))) $sql .= natural_search("aa.pcg_type", $search_pcgtype);
if (strlen(trim($search_pcgsubtype))) $sql .= natural_search("aa.pcg_subtype", $search_pcgsubtype);
$sql .= $db->order($sortfield, $sortorder);
@@ -232,7 +267,7 @@ if ($resql)
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit;
if ($search_account) $param .= '&search_account='.urlencode($search_account);
if ($search_label) $param .= '&search_label='.urlencode($search_label);
- if ($search_accountparent) $param .= '&search_accountparent='.urlencode($search_accountparent);
+ if ($search_accountparent > 0 || $search_accountparent == '0') $param .= '&search_accountparent='.urlencode($search_accountparent);
if ($search_pcgtype) $param .= '&search_pcgtype='.urlencode($search_pcgtype);
if ($search_pcgsubtype) $param .= '&search_pcgsubtype='.urlencode($search_pcgsubtype);
if ($optioncss != '') $param .= '&optioncss='.$optioncss;
@@ -316,8 +351,12 @@ if ($resql)
print '
';
if (!empty($arrayfields['aa.account_number']['checked'])) print ' | ';
if (!empty($arrayfields['aa.label']['checked'])) print ' | ';
- if (!empty($arrayfields['aa.account_parent']['checked'])) print ' | ';
- if (!empty($arrayfields['aa.pcg_type']['checked'])) print ' | ';
+ if (!empty($arrayfields['aa.account_parent']['checked'])) {
+ print '';
+ print $formaccounting->select_account($search_accountparent, 'search_accountparent', 2);
+ print ' | ';
+ }
+ if (!empty($arrayfields['aa.pcg_type']['checked'])) print ' | ';
if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print ' | ';
if (!empty($arrayfields['aa.active']['checked'])) print ' | ';
print '';
@@ -339,6 +378,7 @@ if ($resql)
$accountstatic = new AccountingAccount($db);
$accountparent = new AccountingAccount($db);
+ $totalarray = array();
$i = 0;
while ($i < min($num, $limit))
{
diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php
index 95cbd6beb7a..41cdd5caf5c 100644
--- a/htdocs/comm/action/class/actioncomm.class.php
+++ b/htdocs/comm/action/class/actioncomm.class.php
@@ -791,16 +791,16 @@ class ActionComm extends CommonObject
*/
public function fetchResources()
{
- $sql = 'SELECT fk_actioncomm, element_type, fk_element, answer_status, mandatory, transparency';
+ $this->userassigned = array();
+ $this->socpeopleassigned = array();
+
+ $sql = 'SELECT fk_actioncomm, element_type, fk_element, answer_status, mandatory, transparency';
$sql .= ' FROM '.MAIN_DB_PREFIX.'actioncomm_resources';
$sql .= ' WHERE fk_actioncomm = '.$this->id;
$sql .= " AND element_type IN ('user', 'socpeople')";
$resql = $this->db->query($sql);
if ($resql)
{
- $this->userassigned = array();
- $this->socpeopleassigned = array();
-
// If owner is known, we must but id first into list
if ($this->userownerid > 0) $this->userassigned[$this->userownerid] = array('id'=>$this->userownerid); // Set first so will be first into list.
@@ -1393,7 +1393,11 @@ class ActionComm extends CommonObject
if (!empty($conf->dol_no_mouse_hover)) $notooltip = 1; // Force disable tooltips
- if ((!$user->rights->agenda->allactions->read && $this->authorid != $user->id) || (!$user->rights->agenda->myactions->read && $this->authorid == $user->id))
+ $canread = 0;
+ if ($user->rights->agenda->myactions->read && $this->authorid == $user->id) $canread = 1; // Can read my event
+ if ($user->rights->agenda->myactions->read && array_key_exists($user->id, $this->userassigned)) $canread = 1; // Can read my event i am assigned
+ if ($user->rights->agenda->allactions->read) $canread = 1; // Can read all event of other
+ if (! $canread)
{
$option = 'nolink';
}
diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php
index c4750ef54db..a9a832ea6b4 100644
--- a/htdocs/comm/action/index.php
+++ b/htdocs/comm/action/index.php
@@ -1568,13 +1568,12 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
$titletoshow = $daterange;
$titletoshow .= ($titletoshow ? ' ' : '').($event->label ? $event->label : $event->libelle);
- if ($event->type_code == 'ICALEVENT') print $titletoshow;
- else
- {
+ if ($event->type_code != 'ICALEVENT') {
$savlabel = $event->label ? $event->label : $event->libelle;
$event->label = $titletoshow;
$event->libelle = $titletoshow;
- print $event->getNomUrl(0, $maxnbofchar, 'cal_event', '', 0, 0);
+ // Note: List of users are inside $event->userassigned. Link may be clickable depending on permissions of user.
+ $titletoshow = $event->getNomUrl(0, $maxnbofchar, 'cal_event', '', 0, 0);
$event->label = $savlabel;
$event->libelle = $savlabel;
}
@@ -1595,6 +1594,8 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
$listofusertoshow .= $cacheusers[$tmpid]->getNomUrl(-3, '', 0, 0, 0, 0, '', 'paddingright valigntextbottom');
}
+
+ print $titletoshow;
print $listofusertoshow;
if ($event->type_code == 'ICALEVENT') print ' ('.dol_trunc($event->icalname, $maxnbofchar).')';
diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php
index 8288db9d90b..6df7aaa55ba 100644
--- a/htdocs/comm/action/list.php
+++ b/htdocs/comm/action/list.php
@@ -554,7 +554,10 @@ if ($resql)
$actionstatic->type_picto = $obj->type_picto;
$actionstatic->label = $obj->label;
$actionstatic->location = $obj->location;
- $actionstatic->note = dol_htmlentitiesbr($obj->note);
+ $actionstatic->note = dol_htmlentitiesbr($obj->note); // deprecated
+ $actionstatic->note_public = dol_htmlentitiesbr($obj->note);
+
+ $actionstatic->fetchResources();
print ' |
';
@@ -656,7 +659,6 @@ if ($resql)
if (!empty($arrayfields['a.fk_contact']['checked'])) {
print '| ';
- $actionstatic->fetchResources();
if (!empty($actionstatic->socpeopleassigned))
{
$contactList = array();
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index 4c685cbd122..791c4872794 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -3432,7 +3432,6 @@ class Propal extends CommonObject
$xnbp++;
}
-// var_dump($this->lines);exit;
}
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php
index 3308d0e816e..f72a3ed7f13 100644
--- a/htdocs/compta/facture/card.php
+++ b/htdocs/compta/facture/card.php
@@ -5150,6 +5150,7 @@ elseif ($id > 0 || !empty($ref))
// For situation invoice with excess received
if ($object->statut > Facture::STATUS_DRAFT
+ && $object->type == Facture::TYPE_SITUATION
&& ($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits) > 0
&& $usercancreate
&& !$objectidnext
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 990bfded07f..623cc6e14ba 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -6125,7 +6125,7 @@ abstract class CommonObject
$param_list_array = explode(':', $param_list[0]);
$showempty = (($required && $default != '') ? 0 : 1);
- $out = $form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty, '', '', $morecss, '', 0, empty($val['disabled']) ? 0 : 1);
+ $out = $form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty, '', '', $morecss, $moreparam, 0, empty($val['disabled']) ? 0 : 1);
if (!empty($param_list_array[2])) // If we set to add a create button
{
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index bc69d809e46..0fe8c72220c 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -5169,11 +5169,11 @@ class Form
{
if ($societe_vendeuse->id == $mysoc->id)
{
- $return .= ''.$langs->trans("ErrorYourCountryIsNotDefined").'';
+ $return .= ''.$langs->trans("ErrorYourCountryIsNotDefined").'';
}
else
{
- $return .= ''.$langs->trans("ErrorSupplierCountryIsNotDefined").'';
+ $return .= ''.$langs->trans("ErrorSupplierCountryIsNotDefined").'';
}
return $return;
}
@@ -6235,7 +6235,12 @@ class Form
$out .= ' |