Merge remote-tracking branch 'Dolibarr/13.0' into 13
This commit is contained in:
commit
4875720816
@ -159,11 +159,11 @@ if ($action == 'export_csv')
|
||||
|
||||
foreach ($object->lines as $line)
|
||||
{
|
||||
print length_accountg($line->numero_compte).$sep;
|
||||
print $object->get_compte_desc($line->numero_compte).$sep;
|
||||
print price($line->debit).$sep;
|
||||
print price($line->credit).$sep;
|
||||
print price($line->debit - $line->credit).$sep;
|
||||
print '"'.length_accountg($line->numero_compte).'"'.$sep;
|
||||
print '"'.$object->get_compte_desc($line->numero_compte).'"'.$sep;
|
||||
print '"'.price($line->debit).'"'.$sep;
|
||||
print '"'.price($line->credit).'"'.$sep;
|
||||
print '"'.price($line->debit - $line->credit).'"'.$sep;
|
||||
print "\n";
|
||||
}
|
||||
|
||||
|
||||
@ -559,9 +559,9 @@ class AccountancyExport
|
||||
$Tab['contrepartie'] = str_repeat(' ', 8);
|
||||
|
||||
// Force date format : %d%m%y
|
||||
if (!empty($data->date_echeance)) {
|
||||
//$Tab['date_echeance'] = dol_print_date($data->date_echeance, $conf->global->ACCOUNTING_EXPORT_DATE);
|
||||
$Tab['date_echeance'] = dol_print_date($data->date_echeance, '%d%m%y'); // Format must be ddmmyy
|
||||
if (!empty($data->date_lim_reglement)) {
|
||||
//$Tab['date_echeance'] = dol_print_date($data->date_lim_reglement, $conf->global->ACCOUNTING_EXPORT_DATE);
|
||||
$Tab['date_echeance'] = dol_print_date($data->date_lim_reglement, '%d%m%y'); // Format must be ddmmyy
|
||||
} else {
|
||||
$Tab['date_echeance'] = '000000';
|
||||
}
|
||||
@ -657,9 +657,9 @@ class AccountancyExport
|
||||
|
||||
$Tab['code_stat'] = str_repeat(' ', 4);
|
||||
|
||||
if (!empty($data->date_echeance)) {
|
||||
//$Tab['date_echeance'] = dol_print_date($data->date_echeance, $conf->global->ACCOUNTING_EXPORT_DATE);
|
||||
$Tab['date_echeance'] = dol_print_date($data->date_echeance, '%d%m%Y');
|
||||
if (!empty($data->date_lim_reglement)) {
|
||||
//$Tab['date_echeance'] = dol_print_date($data->date_lim_reglement, $conf->global->ACCOUNTING_EXPORT_DATE);
|
||||
$Tab['date_echeance'] = dol_print_date($data->date_lim_reglement, '%d%m%Y');
|
||||
} else {
|
||||
$Tab['date_echeance'] = dol_print_date($data->doc_date, '%d%m%Y');
|
||||
}
|
||||
|
||||
@ -802,8 +802,8 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
|
||||
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 == 'taux' || $value == 'localtax1') {
|
||||
$_POST[$keycode] = price2num(GETPOST($keycode), 8); // Note that localtax2 can be a list of rates separated by coma like X:Y:Z
|
||||
}
|
||||
elseif ($value == 'entity') {
|
||||
$_POST[$keycode] = getEntity($tabname[$id]);
|
||||
@ -811,17 +811,17 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
|
||||
|
||||
if ($i) $sql .= ",";
|
||||
|
||||
if ($keycode == 'sortorder') // For column name 'sortorder', we use the field name 'position'
|
||||
{
|
||||
$sql .= "'".(int) GETPOST('position', 'int')."'";
|
||||
} elseif ($_POST[$keycode] == '' && !($keycode == 'code' && $id == 10)) $sql .= "null"; // For vat, we want/accept code = ''
|
||||
elseif ($keycode == 'content') {
|
||||
$sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
|
||||
} elseif (in_array($keycode, array('joinfile', 'private', 'position', 'scale'))) {
|
||||
$sql .= (int) GETPOST($keycode, 'int');
|
||||
} else {
|
||||
$sql .= "'".$db->escape(GETPOST($keycode, 'nohtml'))."'";
|
||||
}
|
||||
if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position'
|
||||
$sql .= "'".(int) GETPOST('position', 'int')."'";
|
||||
} elseif ($_POST[$keycode] == '' && !($keycode == 'code' && $id == 10)) {
|
||||
$sql .= "null"; // For vat, we want/accept code = ''
|
||||
} elseif ($keycode == 'content') {
|
||||
$sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
|
||||
} elseif (in_array($keycode, array('joinfile', 'private', 'position', 'scale'))) {
|
||||
$sql .= (int) GETPOST($keycode, 'int');
|
||||
} else {
|
||||
$sql .= "'".$db->escape(GETPOST($keycode, 'nohtml'))."'";
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
@ -869,26 +869,26 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
|
||||
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 == 'taux' || $field == 'localtax1') {
|
||||
$_POST[$keycode] = price2num(GETPOST($keycode), 8); // Note that localtax2 can be a list of rates separated by coma like X:Y:Z
|
||||
}
|
||||
elseif ($field == 'entity') {
|
||||
$_POST[$keycode] = getEntity($tabname[$id]);
|
||||
}
|
||||
|
||||
if ($i) $sql .= ",";
|
||||
$sql .= $field."=";
|
||||
if ($listfieldvalue[$i] == 'sortorder') // For column name 'sortorder', we use the field name 'position'
|
||||
{
|
||||
$sql .= (int) GETPOST('position', 'int');
|
||||
} elseif ($_POST[$keycode] == '' && !($keycode == 'code' && $id == 10)) $sql .= "null"; // For vat, we want/accept code = ''
|
||||
elseif ($keycode == 'content') {
|
||||
$sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
|
||||
} elseif (in_array($keycode, array('private', 'position', 'scale'))) {
|
||||
$sql .= (int) GETPOST($keycode, 'int');
|
||||
} else {
|
||||
$sql .= "'".$db->escape(GETPOST($keycode, 'nohtml'))."'";
|
||||
}
|
||||
if ($i) $sql .= ",";
|
||||
$sql .= $field."=";
|
||||
if ($listfieldvalue[$i] == 'sortorder') { // For column name 'sortorder', we use the field name 'position'
|
||||
$sql .= (int) GETPOST('position', 'int');
|
||||
} elseif ($_POST[$keycode] == '' && !($keycode == 'code' && $id == 10)) {
|
||||
$sql .= "null"; // For vat, we want/accept code = ''
|
||||
} elseif ($keycode == 'content') {
|
||||
$sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
|
||||
} elseif (in_array($keycode, array('private', 'position', 'scale'))) {
|
||||
$sql .= (int) GETPOST($keycode, 'int');
|
||||
} else {
|
||||
$sql .= "'".$db->escape(GETPOST($keycode, 'nohtml'))."'";
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
@ -1072,7 +1072,7 @@ if ($id)
|
||||
$sql = $tabsql[$id];
|
||||
|
||||
if (!preg_match('/ WHERE /', $sql)) $sql .= " WHERE 1 = 1";
|
||||
if ($search_country_id > 0) $sql .= " AND c.rowid = ".$search_country_id;
|
||||
if ($search_country_id > 0) $sql .= " AND c.rowid = ".((int) $search_country_id);
|
||||
if ($search_code != '' && $id == 9) $sql .= natural_search("code_iso", $search_code);
|
||||
elseif ($search_code != '' && $id == 28) $sql .= natural_search("h.code", $search_code);
|
||||
elseif ($search_code != '' && $id == 32) $sql .= natural_search("a.code", $search_code);
|
||||
@ -1146,9 +1146,9 @@ if ($id)
|
||||
$class = 'center';
|
||||
}
|
||||
if ($fieldlist[$field] == 'localtax1_type') { $valuetoshow = $langs->trans("UseLocalTax")." 2"; $class = "center"; $sortable = 0; }
|
||||
if ($fieldlist[$field] == 'localtax1') { $valuetoshow = $langs->trans("Rate")." 2"; $class = "center"; }
|
||||
if ($fieldlist[$field] == 'localtax1') { $valuetoshow = $langs->trans("RateOfTaxN", '2'); $class = "center"; }
|
||||
if ($fieldlist[$field] == 'localtax2_type') { $valuetoshow = $langs->trans("UseLocalTax")." 3"; $class = "center"; $sortable = 0; }
|
||||
if ($fieldlist[$field] == 'localtax2') { $valuetoshow = $langs->trans("Rate")." 3"; $class = "center"; }
|
||||
if ($fieldlist[$field] == 'localtax2') { $valuetoshow = $langs->trans("RateOfTaxN", '3'); $class = "center"; }
|
||||
if ($fieldlist[$field] == 'organization') { $valuetoshow = $langs->trans("Organization"); }
|
||||
if ($fieldlist[$field] == 'lang') { $valuetoshow = $langs->trans("Language"); }
|
||||
if ($fieldlist[$field] == 'type') {
|
||||
@ -1376,9 +1376,9 @@ if ($id)
|
||||
$cssprefix = 'center ';
|
||||
}
|
||||
if ($fieldlist[$field] == 'localtax1_type') { $valuetoshow = $langs->trans("UseLocalTax")." 2"; $cssprefix = "center "; $sortable = 0; }
|
||||
if ($fieldlist[$field] == 'localtax1') { $valuetoshow = $langs->trans("Rate")." 2"; $cssprefix = "center "; $sortable = 0; }
|
||||
if ($fieldlist[$field] == 'localtax1') { $valuetoshow = $langs->trans("RateOfTaxN", '2'); $cssprefix = "center "; $sortable = 0; }
|
||||
if ($fieldlist[$field] == 'localtax2_type') { $valuetoshow = $langs->trans("UseLocalTax")." 3"; $cssprefix = "center "; $sortable = 0; }
|
||||
if ($fieldlist[$field] == 'localtax2') { $valuetoshow = $langs->trans("Rate")." 3"; $cssprefix = "center "; $sortable = 0; }
|
||||
if ($fieldlist[$field] == 'localtax2') { $valuetoshow = $langs->trans("RateOfTaxN", '3'); $cssprefix = "center "; $sortable = 0; }
|
||||
if ($fieldlist[$field] == 'organization') { $valuetoshow = $langs->trans("Organization"); }
|
||||
if ($fieldlist[$field] == 'lang') { $valuetoshow = $langs->trans("Language"); }
|
||||
if ($fieldlist[$field] == 'type') { $valuetoshow = $langs->trans("Type"); }
|
||||
|
||||
@ -187,7 +187,7 @@ if ($action == 'delete')
|
||||
$form = new Form($db);
|
||||
$formadmin = new FormAdmin($db);
|
||||
|
||||
$wikihelp = 'EN:Setup Translation|FR:Paramétrage traduction|ES:Configuración';
|
||||
$wikihelp = 'EN:Setup_Translation|FR:Paramétrage_Traduction|ES:Configuración_Traducción';
|
||||
llxHeader('', $langs->trans("Setup"), $wikihelp);
|
||||
|
||||
$param = '&mode='.urlencode($mode);
|
||||
|
||||
@ -66,6 +66,8 @@ $modulesdir = dolGetModulesDirs('/mailings');
|
||||
$object = new Mailing($db);
|
||||
$result = $object->fetch($id);
|
||||
|
||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||
$hookmanager->initHooks(array('ciblescard', 'globalcard'));
|
||||
|
||||
/*
|
||||
* Actions
|
||||
@ -453,6 +455,10 @@ if ($object->fetch($id) >= 0)
|
||||
}
|
||||
} // End foreach dir
|
||||
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
print $hookmanager->resPrint;
|
||||
|
||||
print '</div>';
|
||||
|
||||
print '<br><br>';
|
||||
|
||||
@ -336,7 +336,7 @@ if (empty($reshook))
|
||||
$duration = GETPOST('duree_validite', 'int');
|
||||
|
||||
if (empty($datep)) {
|
||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors');
|
||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DatePropal")), null, 'errors');
|
||||
$action = 'create';
|
||||
$error++;
|
||||
}
|
||||
@ -1576,7 +1576,7 @@ if ($action == 'create')
|
||||
}
|
||||
|
||||
// Date
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans('Date').'</td><td>';
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans('DatePropal').'</td><td>';
|
||||
print $form->selectDate('', '', '', '', '', "addprop", 1, 1);
|
||||
print '</td></tr>';
|
||||
|
||||
@ -2004,7 +2004,7 @@ if ($action == 'create')
|
||||
print '<tr>';
|
||||
print '<td>';
|
||||
print '<table class="nobordernopadding" width="100%"><tr><td>';
|
||||
print $langs->trans('Date');
|
||||
print $langs->trans('DatePropal');
|
||||
print '</td>';
|
||||
if ($action != 'editdate' && $object->statut == Propal::STATUS_DRAFT && $usercancreate)
|
||||
print '<td class="right"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editdate&id='.$object->id.'">'.img_edit($langs->trans('SetDate'), 1).'</a></td>';
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
* Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr>
|
||||
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
|
||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2016-2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2016-2021 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2017-2018 Charlene Benke <charlie@patas-monkey.com>
|
||||
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
@ -167,7 +167,7 @@ $arrayfields = array(
|
||||
'state.nom'=>array('label'=>"StateShort", 'checked'=>0),
|
||||
'country.code_iso'=>array('label'=>"Country", 'checked'=>0),
|
||||
'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers),
|
||||
'p.date'=>array('label'=>"Date", 'checked'=>1),
|
||||
'p.date'=>array('label'=>"DatePropal", 'checked'=>1),
|
||||
'p.fin_validite'=>array('label'=>"DateEnd", 'checked'=>1),
|
||||
'p.date_livraison'=>array('label'=>"DeliveryDate", 'checked'=>0),
|
||||
'ava.rowid'=>array('label'=>"AvailabilityPeriod", 'checked'=>0),
|
||||
@ -349,7 +349,7 @@ $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'
|
||||
|
||||
$sql = 'SELECT';
|
||||
if ($sall || $search_product_category > 0 || $search_user > 0) $sql = 'SELECT DISTINCT';
|
||||
$sql .= ' s.rowid as socid, s.nom as name, s.email, s.town, s.zip, s.fk_pays, s.client, s.code_client, ';
|
||||
$sql .= ' s.rowid as socid, s.nom as name, s.name_alias, s.email, s.town, s.zip, s.fk_pays, s.client, s.code_client, ';
|
||||
$sql .= " typent.code as typent_code,";
|
||||
$sql .= " ava.rowid as availability,";
|
||||
$sql .= " state.code_departement as state_code, state.nom as state_name,";
|
||||
@ -504,12 +504,12 @@ if ($resql)
|
||||
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);
|
||||
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);
|
||||
if ($sall) $param .= '&sall='.urlencode($sall);
|
||||
if ($search_date_start) $param .= '&search_date_start='.urlencode($search_date_start);
|
||||
if ($search_date_end) $param .= '&search_date_end='.urlencode($search_date_end);
|
||||
if ($search_dateend_start) $param .= '&search_dateend_start='.urlencode($search_dateend_start);
|
||||
if ($search_dateend_end) $param .= '&search_dateend_end='.urlencode($search_dateend_end);
|
||||
if ($search_datedelivery_start) $param .= '&search_datedelivery_start='.urlencode($search_datedelivery_start);
|
||||
if ($search_datedelivery_end) $param .= '&search_datedelivery_end='.urlencode($search_datedelivery_end);
|
||||
if ($search_date_start) $param .= '&search_date_startday='.urlencode(dol_print_date($search_date_start, '%d')).'&search_date_startmonth='.urlencode(dol_print_date($search_date_start, '%m')).'&search_date_startyear='.urlencode(dol_print_date($search_date_start, '%Y'));
|
||||
if ($search_date_end) $param .= '&search_date_endday='.urlencode(dol_print_date($search_date_end, '%d')).'&search_date_endmonth='.urlencode(dol_print_date($search_date_end, '%m')).'&search_date_endyear='.urlencode(dol_print_date($search_date_end, '%Y'));
|
||||
if ($search_dateend_start) $param .= '&search_dateend_startday='.urlencode(dol_print_date($search_dateend_start, '%d')).'&search_dateend_startmonth='.urlencode(dol_print_date($search_dateend_start, '%m')).'&search_dateend_startyear='.urlencode(dol_print_date($search_dateend_start, '%Y'));
|
||||
if ($search_dateend_end) $param .= '&search_dateend_endday='.urlencode(dol_print_date($search_dateend_end, '%d')).'&search_dateend_endmonth='.urlencode(dol_print_date($search_dateend_end, '%m')).'&search_dateend_endyear='.urlencode(dol_print_date($search_dateend_end, '%Y'));
|
||||
if ($search_datedelivery_start) $param .= '&search_datedelivery_startday='.urlencode(dol_print_date($search_datedelivery_start, '%d')).'&search_datedelivery_startmonth='.urlencode(dol_print_date($search_datedelivery_start, '%m')).'&search_datedelivery_startyear='.urlencode(dol_print_date($search_datedelivery_start, '%Y'));
|
||||
if ($search_datedelivery_end) $param .= '&search_datedelivery_endday='.urlencode(dol_print_date($search_datedelivery_end, '%d')).'&search_datedelivery_endmonth='.urlencode(dol_print_date($search_datedelivery_end, '%m')).'&search_datedelivery_endyear='.urlencode(dol_print_date($search_datedelivery_end, '%Y'));
|
||||
if ($search_ref) $param .= '&search_ref='.urlencode($search_ref);
|
||||
if ($search_refcustomer) $param .= '&search_refcustomer='.urlencode($search_refcustomer);
|
||||
if ($search_refproject) $param .= '&search_refproject='.urlencode($search_refproject);
|
||||
@ -949,6 +949,7 @@ if ($resql)
|
||||
|
||||
$companystatic->id = $obj->socid;
|
||||
$companystatic->name = $obj->name;
|
||||
$companystatic->name_alias = $obj->name_alias;
|
||||
$companystatic->client = $obj->client;
|
||||
$companystatic->code_client = $obj->code_client;
|
||||
$companystatic->email = $obj->email;
|
||||
|
||||
@ -44,7 +44,10 @@ class CommandeStats extends Stats
|
||||
public $userid;
|
||||
|
||||
public $from;
|
||||
public $from_line;
|
||||
public $field;
|
||||
public $field_line;
|
||||
public $categ_link;
|
||||
public $where;
|
||||
public $join;
|
||||
|
||||
@ -78,6 +81,7 @@ class CommandeStats extends Stats
|
||||
$this->field = 'total_ht';
|
||||
$this->field_line = 'total_ht';
|
||||
//$this->where .= " c.fk_statut > 0"; // Not draft and not cancelled
|
||||
$this->categ_link = MAIN_DB_PREFIX.'categorie_societe';
|
||||
} elseif ($mode == 'supplier')
|
||||
{
|
||||
$object = new CommandeFournisseur($this->db);
|
||||
@ -86,11 +90,14 @@ class CommandeStats extends Stats
|
||||
$this->field = 'total_ht';
|
||||
$this->field_line = 'total_ht';
|
||||
//$this->where .= " c.fk_statut > 2"; // Only approved & ordered
|
||||
$this->categ_link = MAIN_DB_PREFIX.'categorie_fournisseur';
|
||||
}
|
||||
//$this->where.= " AND c.fk_soc = s.rowid AND c.entity = ".$conf->entity;
|
||||
$this->where .= ($this->where ? ' AND ' : '').'c.entity IN ('.getEntity('commande').')';
|
||||
|
||||
if (!$user->rights->societe->client->voir && !$this->socid) $this->where .= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = ".$user->id;
|
||||
if (!$user->rights->societe->client->voir && !$this->socid) {
|
||||
$this->where .= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = ".$user->id;
|
||||
}
|
||||
if ($this->socid)
|
||||
{
|
||||
$this->where .= " AND c.fk_soc = ".$this->socid;
|
||||
@ -100,14 +107,14 @@ class CommandeStats extends Stats
|
||||
if ($typentid)
|
||||
{
|
||||
$this->join .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe as s ON s.rowid = c.fk_soc';
|
||||
$this->where .= ' AND s.fk_typent = '.$typentid;
|
||||
$this->where .= ' AND s.fk_typent = '.((int) $typentid);
|
||||
}
|
||||
|
||||
if ($categid)
|
||||
{
|
||||
$this->join .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_societe as cats ON cats.fk_soc = c.fk_soc';
|
||||
$this->join .= ' LEFT JOIN '.$this->categ_link.' as cats ON cats.fk_soc = c.fk_soc';
|
||||
$this->join .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as cat ON cat.rowid = cats.fk_categorie';
|
||||
$this->where .= ' AND cat.rowid = '.$categid;
|
||||
$this->where .= ' AND cat.rowid = '.((int) $categid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
* Copyright (C) 2015-2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2016 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2016-2021 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2018 Charlene Benke <charlie@patas-monkey.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -55,10 +55,8 @@ $confirm = GETPOST('confirm', 'alpha');
|
||||
$toselect = GETPOST('toselect', 'array');
|
||||
$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'orderlist';
|
||||
|
||||
$search_datecloture_start = GETPOST('search_datecloture_start', 'int');
|
||||
if (empty($search_datecloture_start)) $search_datecloture_start = dol_mktime(0, 0, 0, GETPOST('search_datecloture_startmonth', 'int'), GETPOST('search_datecloture_startday', 'int'), GETPOST('search_datecloture_startyear', 'int'));
|
||||
$search_datecloture_end = GETPOST('search_datecloture_end', 'int');
|
||||
if (empty($search_datecloture_end)) $search_datecloture_end = dol_mktime(23, 59, 59, GETPOST('search_datecloture_endmonth', 'int'), GETPOST('search_datecloture_endday', 'int'), GETPOST('search_datecloture_endyear', 'int'));
|
||||
$search_datecloture_start = dol_mktime(0, 0, 0, GETPOST('search_datecloture_startmonth', 'int'), GETPOST('search_datecloture_startday', 'int'), GETPOST('search_datecloture_startyear', 'int'));
|
||||
$search_datecloture_end = dol_mktime(23, 59, 59, GETPOST('search_datecloture_endmonth', 'int'), GETPOST('search_datecloture_endday', 'int'), GETPOST('search_datecloture_endyear', 'int'));
|
||||
$search_dateorder_start = dol_mktime(0, 0, 0, GETPOST('search_dateorder_start_month', 'int'), GETPOST('search_dateorder_start_day', 'int'), GETPOST('search_dateorder_start_year', 'int'));
|
||||
$search_dateorder_end = dol_mktime(23, 59, 59, GETPOST('search_dateorder_end_month', 'int'), GETPOST('search_dateorder_end_day', 'int'), GETPOST('search_dateorder_end_year', 'int'));
|
||||
$search_datedelivery_start = dol_mktime(0, 0, 0, GETPOST('search_datedelivery_start_month', 'int'), GETPOST('search_datedelivery_start_day', 'int'), GETPOST('search_datedelivery_start_year', 'int'));
|
||||
@ -272,7 +270,7 @@ $help_url = "EN:Module_Customers_Orders|FR:Module_Commandes_Clients|ES:Módulo_P
|
||||
|
||||
$sql = 'SELECT';
|
||||
if ($sall || $search_product_category > 0 || $search_user > 0) $sql = 'SELECT DISTINCT';
|
||||
$sql .= ' s.rowid as socid, s.nom as name, s.email, s.town, s.zip, s.fk_pays, s.client, s.code_client,';
|
||||
$sql .= ' s.rowid as socid, s.nom as name, s.name_alias, s.email, s.town, s.zip, s.fk_pays, s.client, s.code_client,';
|
||||
$sql .= " typent.code as typent_code,";
|
||||
$sql .= " state.code_departement as state_code, state.nom as state_name,";
|
||||
$sql .= ' c.rowid, c.ref, c.total_ht, c.tva as total_tva, c.total_ttc, c.ref_client, c.fk_user_author,';
|
||||
@ -446,8 +444,8 @@ if ($resql)
|
||||
if ($sall) $param .= '&sall='.urlencode($sall);
|
||||
if ($socid > 0) $param .= '&socid='.urlencode($socid);
|
||||
if ($search_status != '') $param .= '&search_status='.urlencode($search_status);
|
||||
if ($search_datecloture_start) $param .= '&search_datecloture_start='.urlencode($search_datecloture_start);
|
||||
if ($search_datecloture_end) $param .= '&search_datecloture_end='.urlencode($search_datecloture_end);
|
||||
if ($search_datecloture_start) $param .= '&search_datecloture_startday='.dol_print_date($search_datecloture_start, '%d').'&search_datecloture_startmonth='.dol_print_date($search_datecloture_start, '%m').'&search_datecloture_startyear='.dol_print_date($search_datecloture_start, '%Y');
|
||||
if ($search_datecloture_end) $param .= '&search_datecloture_endday='.dol_print_date($search_datecloture_end, '%d').'&search_datecloture_endmonth='.dol_print_date($search_datecloture_end, '%m').'&search_datecloture_endyear='.dol_print_date($search_datecloture_end, '%Y');
|
||||
if ($search_dateorder_start) $param .= '&search_dateorder_start_day='.dol_print_date($search_dateorder_start, '%d').'&search_dateorder_start_month='.dol_print_date($search_dateorder_start, '%m').'&search_dateorder_start_year='.dol_print_date($search_dateorder_start, '%Y');
|
||||
if ($search_dateorder_end) $param .= '&search_dateorder_end_day='.dol_print_date($search_dateorder_end, '%d').'&search_dateorder_end_month='.dol_print_date($search_dateorder_end, '%m').'&search_dateorder_end_year='.dol_print_date($search_dateorder_end, '%Y');
|
||||
if ($search_datedelivery_start) $param .= '&search_datedelivery_start_day='.dol_print_date($search_datedelivery_start, '%d').'&search_datedelivery_start_month='.dol_print_date($search_datedelivery_start, '%m').'&search_datedelivery_start_year='.dol_print_date($search_datedelivery_start, '%Y');
|
||||
@ -939,6 +937,7 @@ if ($resql)
|
||||
$companystatic->id = $obj->socid;
|
||||
$companystatic->code_client = $obj->code_client;
|
||||
$companystatic->name = $obj->name;
|
||||
$companystatic->name_alias = $obj->name_alias;
|
||||
$companystatic->client = $obj->client;
|
||||
$companystatic->email = $obj->email;
|
||||
if (!isset($getNomUrl_cache[$obj->socid])) {
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
|
||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2015-2016 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2015-2021 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2017 Josep Lluís Amador <joseplluis@lliuretic.cat>
|
||||
* Copyright (C) 2018 Charlene Benke <charlie@patas-monkey.com>
|
||||
* Copyright (C) 2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
@ -422,7 +422,7 @@ $sql .= ' f.datef as df, f.date_valid, f.date_lim_reglement as datelimite, f.mod
|
||||
$sql .= ' f.paye as paye, f.fk_statut, f.close_code,';
|
||||
$sql .= ' f.datec as date_creation, f.tms as date_update, f.date_closing as date_closing,';
|
||||
$sql .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,';
|
||||
$sql .= ' s.rowid as socid, s.nom as name, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,';
|
||||
$sql .= ' s.rowid as socid, s.nom as name, s.name_alias, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta as code_compta_client, s.code_compta_fournisseur,';
|
||||
$sql .= " typent.code as typent_code,";
|
||||
$sql .= " state.code_departement as state_code, state.nom as state_name,";
|
||||
$sql .= " country.code as country_code,";
|
||||
@ -551,7 +551,7 @@ if (!$sall)
|
||||
$sql .= ' f.retained_warranty, f.retained_warranty_date_limit, f.situation_final, f.situation_cycle_ref, f.situation_counter,';
|
||||
$sql .= ' f.fk_user_author, f.fk_multicurrency, f.multicurrency_code, f.multicurrency_tx, f.multicurrency_total_ht, f.multicurrency_total_tva,';
|
||||
$sql .= ' f.multicurrency_total_tva, f.multicurrency_total_ttc,';
|
||||
$sql .= ' s.rowid, s.nom, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,';
|
||||
$sql .= ' s.rowid, s.nom, s.name_alias, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,';
|
||||
$sql .= ' typent.code,';
|
||||
$sql .= ' state.code_departement, state.nom,';
|
||||
$sql .= ' country.code,';
|
||||
@ -616,12 +616,12 @@ if ($resql)
|
||||
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);
|
||||
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);
|
||||
if ($sall) $param .= '&sall='.urlencode($sall);
|
||||
if ($search_date_start) $param .= '&search_date_start='.urlencode($search_date_start);
|
||||
if ($search_date_end) $param .= '&search_date_end='.urlencode($search_date_end);
|
||||
if ($search_date_valid_start) $param .= '&search_date_valid_start='.urlencode($search_date_valid_start);
|
||||
if ($search_date_valid_end) $param .= '&search_date_valid_end='.urlencode($search_date_valid_end);
|
||||
if ($search_datelimit_start) $param .= '&search_datelimit_start='.urlencode($search_datelimit_start);
|
||||
if ($search_datelimit_end) $param .= '&search_datelimit_end='.urlencode($search_datelimit_end);
|
||||
if ($search_date_start) $param .= '&search_date_startday='.urlencode(dol_print_date($search_date_start, '%d')).'&search_date_startmonth='.urlencode(dol_print_date($search_date_start, '%m')).'&search_date_startyear='.urlencode(dol_print_date($search_date_start, '%Y'));
|
||||
if ($search_date_end) $param .= '&search_date_endday='.urlencode(dol_print_date($search_date_end, '%d')).'&search_date_endmonth='.urlencode(dol_print_date($search_date_end, '%m')).'&search_date_endyear='.urlencode(dol_print_date($search_date_end, '%Y'));
|
||||
if ($search_date_valid_start) $param .= '&search_date_valid_startday='.urlencode(dol_print_date($search_date_valid_start, '%d')).'&search_date_valid_startmonth='.urlencode(dol_print_date($search_date_valid_start, '%m')).'&search_date_valid_startyear='.urlencode(dol_print_date($search_date_valid_start, '%Y'));
|
||||
if ($search_date_valid_end) $param .= '&search_date_valid_endday='.urlencode(dol_print_date($search_date_valid_end, '%d')).'&search_date_valid_endmonth='.urlencode(dol_print_date($search_date_valid_end, '%m')).'&search_date_valid_endyear='.urlencode(dol_print_date($search_date_valid_end, '%Y'));
|
||||
if ($search_datelimit_start) $param .= '&search_datelimit_startday='.urlencode(dol_print_date($search_datelimit_start, '%d')).'&search_datelimit_startmonth='.urlencode(dol_print_date($search_datelimit_start, '%m')).'&search_datelimit_startyear='.urlencode(dol_print_date($search_datelimit_start, '%Y'));
|
||||
if ($search_datelimit_end) $param .= '&search_datelimit_endday='.urlencode(dol_print_date($search_datelimit_end, '%d')).'&search_datelimit_endmonth='.urlencode(dol_print_date($search_datelimit_end, '%m')).'&search_datelimit_endyear='.urlencode(dol_print_date($search_datelimit_end, '%Y'));
|
||||
if ($search_ref) $param .= '&search_ref='.urlencode($search_ref);
|
||||
if ($search_refcustomer) $param .= '&search_refcustomer='.urlencode($search_refcustomer);
|
||||
if ($search_project_ref) $param .= '&search_project_ref='.urlencode($search_project_ref);
|
||||
@ -1193,6 +1193,7 @@ if ($resql)
|
||||
}
|
||||
$thirdpartystatic->id = $obj->socid;
|
||||
$thirdpartystatic->name = $obj->name;
|
||||
$thirdpartystatic->name_alias = $obj->name_alias;
|
||||
$thirdpartystatic->client = $obj->client;
|
||||
$thirdpartystatic->fournisseur = $obj->fournisseur;
|
||||
$thirdpartystatic->code_client = $obj->code_client;
|
||||
|
||||
@ -244,6 +244,8 @@ if ($search_email) $sql .= natural_search('s.email', $search_email);
|
||||
if ($search_contract) $sql .= natural_search(array('c.rowid', 'c.ref'), $search_contract);
|
||||
if (!empty($search_ref_customer)) $sql .= natural_search(array('c.ref_customer'), $search_ref_customer);
|
||||
if (!empty($search_ref_supplier)) $sql .= natural_search(array('c.ref_supplier'), $search_ref_supplier);
|
||||
if ($search_zip) $sql .= natural_search(array('s.zip'), $search_zip);
|
||||
if ($search_town) $sql .= natural_search(array('s.town'), $search_town);
|
||||
if ($search_sale > 0)
|
||||
{
|
||||
$sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$search_sale;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2015-2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2018-2021 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2018 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2019 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2019-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||
@ -559,8 +559,10 @@ if (!$error && $massaction == 'confirm_presend')
|
||||
{
|
||||
$resaction .= $langs->trans('ErrorFailedToSendMail', $from, $sendto);
|
||||
$resaction .= '<br><div class="error">'.$mailfile->error.'</div>';
|
||||
} else {
|
||||
} elseif (!empty($conf->global->MAIN_DISABLE_ALL_MAILS)) {
|
||||
$resaction .= '<div class="warning">No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS</div>';
|
||||
} else {
|
||||
$resaction .= $langs->trans('ErrorFailedToSendMail', $from, $sendto) . '<br><div class="error">(unhandled error)</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1239,8 +1241,13 @@ if (!$error && ($massaction == 'delete' || ($action == 'delete' && $confirm == '
|
||||
}
|
||||
|
||||
if (in_array($objecttmp->element, array('societe', 'member'))) $result = $objecttmp->delete($objecttmp->id, $user, 1);
|
||||
else $result = $objecttmp->delete($user);
|
||||
|
||||
else {
|
||||
if (get_class($objecttmp) === "ActionComm") {
|
||||
$result = $objecttmp->delete();
|
||||
} else {
|
||||
$result = $objecttmp->delete($user);
|
||||
}
|
||||
}
|
||||
if ($result <= 0)
|
||||
{
|
||||
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
|
||||
|
||||
@ -894,7 +894,7 @@ class CMailFile
|
||||
}
|
||||
// send mail
|
||||
try {
|
||||
$result = $this->mailer->send($this->message);
|
||||
$result = $this->mailer->send($this->message, $failedRecipients);
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
}
|
||||
@ -902,6 +902,9 @@ class CMailFile
|
||||
|
||||
$res = true;
|
||||
if (!empty($this->error) || !$result) {
|
||||
if (!empty($failedRecipients)) {
|
||||
$this->error = 'Transport failed for the following addresses: "' . join('", "', $failedRecipients) . '".';
|
||||
}
|
||||
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
|
||||
$res = false;
|
||||
} else {
|
||||
|
||||
@ -8118,8 +8118,8 @@ class Form
|
||||
}
|
||||
|
||||
// Search all projects
|
||||
$sql = 'SELECT f.rowid, f.ref as fref, "nolabel" as flabel, p.rowid as pid, f.ref,
|
||||
p.title, p.fk_soc, p.fk_statut, p.public,';
|
||||
$sql = "SELECT f.rowid, f.ref as fref, 'nolabel' as flabel, p.rowid as pid, f.ref,
|
||||
p.title, p.fk_soc, p.fk_statut, p.public,";
|
||||
$sql .= ' s.nom as name';
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'projet as p';
|
||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe as s ON s.rowid = p.fk_soc,';
|
||||
@ -8129,7 +8129,7 @@ class Form
|
||||
//if ($projectsListId) $sql.= " AND p.rowid IN (".$projectsListId.")";
|
||||
//if ($socid == 0) $sql.= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)";
|
||||
//if ($socid > 0) $sql.= " AND (p.fk_soc=".$socid." OR p.fk_soc IS NULL)";
|
||||
$sql .= " GROUP BY f.ref ORDER BY p.ref, f.ref ASC";
|
||||
$sql .= " ORDER BY p.ref, f.ref ASC";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql)
|
||||
|
||||
@ -1250,7 +1250,7 @@ function pdf_getlinedesc($object, $i, $outputlangs, $hideref = 0, $hidedesc = 0,
|
||||
// ($textwasmodified is replaced with $textwasmodifiedorcompleted and we add completion).
|
||||
|
||||
// Set label
|
||||
// If we want another language, and if label is same than default language (we did force it to a specific value), we can use translation.
|
||||
// If we want another language, and if label is same than default language (we did not force it to a specific value), we can use translation.
|
||||
//var_dump($outputlangs->defaultlang.' - '.$langs->defaultlang.' - '.$label.' - '.$prodser->label);exit;
|
||||
$textwasmodified = ($label == $prodser->label);
|
||||
if (!empty($prodser->multilangs[$outputlangs->defaultlang]["label"]) && ($textwasmodified || $translatealsoifmodified)) {
|
||||
|
||||
@ -1528,7 +1528,7 @@ class pdf_azur extends ModelePDFPropales
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
$pdf->SetTextColor(0, 0, 60);
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("Date")." : ".dol_print_date($object->date, "day", false, $outputlangs, true), '', 'R');
|
||||
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("DatePropal")." : ".dol_print_date($object->date, "day", false, $outputlangs, true), '', 'R');
|
||||
|
||||
$posy += 4;
|
||||
$pdf->SetXY($posx, $posy);
|
||||
|
||||
@ -434,13 +434,14 @@ class pdf_cyan extends ModelePDFPropales
|
||||
$notetoshow = dol_concatdesc($notetoshow, $extranote);
|
||||
}
|
||||
|
||||
if (!empty($conf->global->MAIN_ADD_CREATOR_IN_NOTE) && $object->user_author_id > 0)
|
||||
{
|
||||
if (!empty($conf->global->MAIN_ADD_CREATOR_IN_NOTE) && $object->user_author_id > 0) {
|
||||
$tmpuser = new User($this->db);
|
||||
$tmpuser->fetch($object->user_author_id);
|
||||
$notetoshow .= $langs->trans("CaseFollowedBy").' '.$tmpuser->getFullName($langs);
|
||||
if ($tmpuser->email) $notetoshow .= ', Mail: '.$tmpuser->email;
|
||||
if ($tmpuser->office_phone) $notetoshow .= ', Tel: '.$tmpuser->office_phone;
|
||||
$creator_info = $langs->trans("CaseFollowedBy").' '.$tmpuser->getFullName($langs);
|
||||
if ($tmpuser->email) $creator_info .= ', '.$langs->trans("EMail").': '.$tmpuser->email;
|
||||
if ($tmpuser->office_phone) $creator_info .= ', '.$langs->trans("Phone").': '.$tmpuser->office_phone;
|
||||
|
||||
$notetoshow = dol_concatdesc($notetoshow, $creator_info);
|
||||
}
|
||||
|
||||
$tab_height = $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforsignature - $heightforfooter;
|
||||
|
||||
@ -239,7 +239,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
|
||||
$pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/";
|
||||
$dir = $conf->product->dir_output.'/'.$pdir;
|
||||
} else {
|
||||
$pdir = get_exdir(0, 2, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/';
|
||||
$pdir = get_exdir(0, 0, 0, 0, $objphoto, 'product');
|
||||
$dir = $conf->product->dir_output.'/'.$pdir;
|
||||
}
|
||||
|
||||
|
||||
@ -117,13 +117,17 @@ if (is_array($extrafields->attributes[$elementtype]['type']) && count($extrafiel
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
print '<td class="right nowraponall"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'&attrname='.$key.'#formeditextrafield">'.img_edit().'</a>';
|
||||
print ' <a class="paddingleft" href="'.$_SERVER["PHP_SELF"].'?action=delete&token='.newToken().'&attrname='.$key.'">'.img_delete().'</a></td>'."\n";
|
||||
print '<td class="right nowraponall">';
|
||||
print '<a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'&attrname='.$key.'#formeditextrafield">'.img_edit().'</a>';
|
||||
print ' <a class="paddingleft" href="'.$_SERVER["PHP_SELF"].'?action=delete&token='.newToken().'&attrname='.$key.'">'.img_delete().'</a>';
|
||||
print '</td>'."\n";
|
||||
print "</tr>";
|
||||
}
|
||||
} else {
|
||||
$colspan = 13;
|
||||
if (!empty($conf->multicompany->enabled)) $colspan++;
|
||||
$colspan = 14;
|
||||
if (!empty($conf->multicompany->enabled)) {
|
||||
$colspan++;
|
||||
}
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td class="opacitymedium" colspan="'.$colspan.'">';
|
||||
|
||||
@ -119,6 +119,52 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
$newparent = $object->_load_ldap_dn($info, 1);
|
||||
|
||||
$result = $ldap->update($dn, $info, $user, $olddn, $newrdn, $newparent);
|
||||
|
||||
if ($result > 0 && !empty($object->context['newgroupid'])) { // We are in context of adding a new group to user
|
||||
$usergroup = new Usergroup($this->db);
|
||||
|
||||
$usergroup->fetch($object->context['newgroupid']);
|
||||
|
||||
$oldinfo = $usergroup->_load_ldap_info();
|
||||
$olddn = $usergroup->_load_ldap_dn($oldinfo);
|
||||
|
||||
// Verify if entry exist
|
||||
$container = $usergroup->_load_ldap_dn($oldinfo, 1);
|
||||
$search = "(".$usergroup->_load_ldap_dn($oldinfo, 2).")";
|
||||
$records = $ldap->search($container, $search);
|
||||
if (count($records) && $records['count'] == 0)
|
||||
{
|
||||
$olddn = '';
|
||||
}
|
||||
|
||||
$info = $usergroup->_load_ldap_info(); // Contains all members, included the new one (insert already done before trigger call)
|
||||
$dn = $usergroup->_load_ldap_dn($info);
|
||||
|
||||
$result = $ldap->update($dn, $info, $user, $olddn);
|
||||
}
|
||||
|
||||
if ($result > 0 && !empty($object->context['oldgroupid'])) { // We are in context of removing a group from user
|
||||
$usergroup = new Usergroup($this->db);
|
||||
|
||||
$usergroup->fetch($object->context['oldgroupid']);
|
||||
|
||||
$oldinfo = $usergroup->_load_ldap_info();
|
||||
$olddn = $usergroup->_load_ldap_dn($oldinfo);
|
||||
|
||||
// Verify if entry exist
|
||||
$container = $usergroup->_load_ldap_dn($oldinfo, 1);
|
||||
$search = "(".$usergroup->_load_ldap_dn($oldinfo, 2).")";
|
||||
$records = $ldap->search($container, $search);
|
||||
if (count($records) && $records['count'] == 0)
|
||||
{
|
||||
$olddn = '';
|
||||
}
|
||||
|
||||
$info = $usergroup->_load_ldap_info(); // Contains all members, except the old one (remove already done before trigger call)
|
||||
$dn = $usergroup->_load_ldap_dn($info);
|
||||
|
||||
$result = $ldap->update($dn, $info, $user, $olddn);
|
||||
}
|
||||
}
|
||||
|
||||
if ($result < 0) $this->error = "ErrorLDAP ".$ldap->error;
|
||||
@ -248,8 +294,8 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
$info = $object->_load_ldap_info();
|
||||
$dn = $object->_load_ldap_dn($info);
|
||||
|
||||
// Get a gid number for objectclass PosixGroup
|
||||
if (in_array('posixGroup', $info['objectclass'])) {
|
||||
// Get a gid number for objectclass PosixGroup if none was provided
|
||||
if (empty($info[$conf->global->LDAP_GROUP_FIELD_GROUPID]) && in_array('posixGroup', $info['objectclass'])) {
|
||||
$info['gidNumber'] = $ldap->getNextGroupGid('LDAP_KEY_GROUPS');
|
||||
}
|
||||
|
||||
|
||||
@ -33,7 +33,7 @@ class Donations extends DolibarrApi
|
||||
* @var array $FIELDS Mandatory fields, checked when create and update object
|
||||
*/
|
||||
static $FIELDS = array(
|
||||
'socid'
|
||||
'amount'
|
||||
);
|
||||
|
||||
/**
|
||||
@ -193,7 +193,7 @@ class Donations extends DolibarrApi
|
||||
}*/
|
||||
|
||||
if ($this->don->create(DolibarrApiAccess::$user) < 0) {
|
||||
throw new RestException(500, "Error creating order", array_merge(array($this->don->error), $this->don->errors));
|
||||
throw new RestException(500, "Error creating donation", array_merge(array($this->don->error), $this->don->errors));
|
||||
}
|
||||
|
||||
return $this->don->id;
|
||||
@ -302,7 +302,7 @@ class Donations extends DolibarrApi
|
||||
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
||||
}
|
||||
|
||||
$result = $this->don->valid(DolibarrApiAccess::$user, $idwarehouse, $notrigger);
|
||||
$result = $this->don->valid_promesse($id, DolibarrApiAccess::$user->id, $notrigger);
|
||||
if ($result == 0) {
|
||||
throw new RestException(304, 'Error nothing done. May be object is already validated');
|
||||
}
|
||||
@ -355,7 +355,7 @@ class Donations extends DolibarrApi
|
||||
private function _validate($data)
|
||||
{
|
||||
$don = array();
|
||||
foreach (Orders::$FIELDS as $field) {
|
||||
foreach (Donations::$FIELDS as $field) {
|
||||
if (!isset($data[$field]))
|
||||
throw new RestException(400, $field." field missing");
|
||||
$don[$field] = $data[$field];
|
||||
|
||||
@ -390,7 +390,7 @@ class Don extends CommonObject
|
||||
$sql .= ", phone";
|
||||
$sql .= ", phone_mobile";
|
||||
$sql .= ") VALUES (";
|
||||
$sql .= "'".$this->db->idate($now)."'";
|
||||
$sql .= "'".$this->db->idate($this->date ? $this->date : $now)."'";
|
||||
$sql .= ", ".$conf->entity;
|
||||
$sql .= ", ".price2num($this->amount);
|
||||
$sql .= ", ".($this->modepaymentid ? $this->modepaymentid : "null");
|
||||
|
||||
@ -2211,7 +2211,8 @@ if ($action == 'create')
|
||||
// only show lot numbers from src warehouse when shipping from multiple warehouses
|
||||
$line->fetch($detail_batch->fk_expeditiondet);
|
||||
}
|
||||
print '<td>'.$formproduct->selectLotStock($detail_batch->fk_origin_stock, 'batchl'.$detail_batch->fk_expeditiondet.'_'.$detail_batch->fk_origin_stock, '', 1, 0, $lines[$i]->fk_product, $line->entrepot_id).'</td>';
|
||||
$entrepot_id = !empty($detail_batch->entrepot_id)?$detail_batch->entrepot_id:$lines[$i]->entrepot_id;
|
||||
print '<td>'.$formproduct->selectLotStock($detail_batch->fk_origin_stock, 'batchl'.$detail_batch->fk_expeditiondet.'_'.$detail_batch->fk_origin_stock, '', 1, 0, $lines[$i]->fk_product, $entrepot_id).'</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
// add a 0 qty lot row to be able to add a lot
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2010 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2016-2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2016-2021 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2020 Thibault FOUCART <support@ptibogxiv.net>
|
||||
*
|
||||
@ -340,10 +340,10 @@ if ($resql)
|
||||
if ($search_town) $param .= '&search_town='.urlencode($search_town);
|
||||
if ($search_zip) $param .= '&search_zip='.urlencode($search_zip);
|
||||
|
||||
if ($search_datedelivery_start) $param .= '&search_datedelivery_start='.urlencode($search_datedelivery_start);
|
||||
if ($search_datedelivery_end) $param .= '&search_datedelivery_end='.urlencode($search_datedelivery_end);
|
||||
if ($search_datereceipt_start) $param .= '&search_datereceipt_start='.urlencode($search_datereceipt_start);
|
||||
if ($search_datereceipt_end) $param .= '&search_datereceipt_end='.urlencode($search_datereceipt_end);
|
||||
if ($search_datedelivery_start) $param .= '&search_datedelivery_startday='.urlencode(dol_print_date($search_datedelivery_start, '%d')).'&search_datedelivery_startmonth='.urlencode(dol_print_date($search_datedelivery_start, '%m')).'&search_datedelivery_startyear='.urlencode(dol_print_date($search_datedelivery_start, '%Y'));
|
||||
if ($search_datedelivery_end) $param .= '&search_datedelivery_endday='.urlencode(dol_print_date($search_datedelivery_end, '%d')).'&search_datedelivery_endmonth='.urlencode(dol_print_date($search_datedelivery_end, '%m')).'&search_datedelivery_endyear='.urlencode(dol_print_date($search_datedelivery_end, '%Y'));
|
||||
if ($search_datereceipt_start) $param .= '&search_datereceipt_startday='.urlencode(dol_print_date($search_datereceipt_start, '%d')).'&search_datereceipt_startmonth='.urlencode(dol_print_date($search_datereceipt_start, '%m')).'&search_datereceipt_startyear='.urlencode(dol_print_date($search_datereceipt_start, '%Y'));
|
||||
if ($search_datereceipt_end) $param .= '&search_datereceipt_endday='.urlencode(dol_print_date($search_datereceipt_end, '%d')).'&search_datereceipt_endmonth='.urlencode(dol_print_date($search_datereceipt_end, '%m')).'&search_datereceipt_endyear='.urlencode(dol_print_date($search_datereceipt_end, '%Y'));
|
||||
|
||||
if ($search_product_category != '') $param .= '&search_product_category='.urlencode($search_product_category);
|
||||
if ($search_categ_cus > 0) $param .= '&search_categ_cus='.urlencode($search_categ_cus);
|
||||
@ -506,11 +506,11 @@ if ($resql)
|
||||
print '<td class="liste_titre center">';
|
||||
print '<div class="nowrap">';
|
||||
print $langs->trans('From').' ';
|
||||
print $form->selectDate($search_delivery_start ? $search_delivery_start : -1, 'search_delivery_start', 0, 0, 1);
|
||||
print $form->selectDate($search_datedelivery_start ? $search_datedelivery_start : -1, 'search_datedelivery_start', 0, 0, 1);
|
||||
print '</div>';
|
||||
print '<div class="nowrap">';
|
||||
print $langs->trans('to').' ';
|
||||
print $form->selectDate($search_delivery_end ? $search_delivery_end : -1, 'search_delivery_end', 0, 0, 1);
|
||||
print $form->selectDate($search_datedelivery_end ? $search_datedelivery_end : -1, 'search_datedelivery_end', 0, 0, 1);
|
||||
print '</div>';
|
||||
print '</td>';
|
||||
}
|
||||
|
||||
@ -1606,8 +1606,9 @@ if ($action == 'create')
|
||||
// Validate
|
||||
if ($object->statut == Fichinter::STATUS_DRAFT && (count($object->lines) > 0 || !empty($conf->global->FICHINTER_DISABLE_DETAILS))) {
|
||||
if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->rights->ficheinter->creer) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->rights->ficheinter->ficheinter_advance->validate)) {
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.'&action=validate"';
|
||||
print '>'.$langs->trans("Validate").'</a></div>';
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.'&action=validate">'.$langs->trans("Validate").'</a></div>';
|
||||
} else {
|
||||
print '<div class="inline-block divButActionRefused"><span class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans("Validate").'</span></div>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -1640,7 +1641,7 @@ if ($action == 'create')
|
||||
}
|
||||
}
|
||||
|
||||
// create intervention model
|
||||
// Create intervention model
|
||||
if ($conf->global->MAIN_FEATURES_LEVEL >= 1 && $object->statut == Fichinter::STATUS_DRAFT && $user->rights->ficheinter->creer && (count($object->lines) > 0)) {
|
||||
print '<div class="inline-block divButAction">';
|
||||
print '<a class="butAction" href="'.DOL_URL_ROOT.'/fichinter/card-rec.php?id='.$object->id.'&action=create">'.$langs->trans("ChangeIntoRepeatableIntervention").'</a>';
|
||||
|
||||
@ -278,6 +278,11 @@ class CommandeFournisseur extends CommonOrder
|
||||
const STATUS_REFUSED = 9;
|
||||
|
||||
|
||||
/**
|
||||
* The constant used into source field to track the order was generated by the replenishement feature
|
||||
*/
|
||||
const SOURCE_ID_REPLENISHMENT = 42;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -1260,6 +1260,8 @@ if (empty($reshook))
|
||||
$tva_tx = get_default_tva($soc, $mysoc, $lines[$i]->fk_product, $product_fourn_price_id);
|
||||
}
|
||||
|
||||
$object->special_code = $lines[$i]->special_code;
|
||||
|
||||
$result = $object->addline(
|
||||
$desc,
|
||||
$lines[$i]->subprice,
|
||||
|
||||
@ -464,7 +464,7 @@ if ($action == 'updateline' && $user->rights->fournisseur->commande->receptionne
|
||||
$product = $supplierorderdispatch->fk_product;
|
||||
$price = price2num(GETPOST('price'), '', 2);
|
||||
$comment = $supplierorderdispatch->comment;
|
||||
$eatby = $supplierorderdispatch->fk_product;
|
||||
$eatby = $supplierorderdispatch->eatby;
|
||||
$sellby = $supplierorderdispatch->sellby;
|
||||
$batch = $supplierorderdispatch->batch;
|
||||
|
||||
|
||||
@ -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_statut', 'int');
|
||||
$search_status = GETPOST('search_status', 'int');
|
||||
$search_type = GETPOST('search_type', 'int');
|
||||
|
||||
// Initialize technical objects
|
||||
|
||||
@ -138,13 +138,21 @@ $sql .= " FROM ".MAIN_DB_PREFIX."holiday cp";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user u ON cp.fk_user = u.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_holiday_types ct ON cp.fk_type = ct.rowid";
|
||||
$sql .= " WHERE cp.rowid > 0";
|
||||
$sql .= " AND cp.statut = 3"; // 3 = Approved
|
||||
$sql .= " AND cp.statut = ".Holiday::STATUS_APPROVED;
|
||||
$sql .= " AND (date_format(cp.date_debut, '%Y-%m') = '".$db->escape($year_month)."' OR date_format(cp.date_fin, '%Y-%m') = '".$db->escape($year_month)."')";
|
||||
|
||||
if (!empty($search_ref)) $sql .= natural_search('cp.ref', $search_ref);
|
||||
if (!empty($search_employee)) $sql .= " AND cp.fk_user = '".$db->escape($search_employee)."'";
|
||||
if (!empty($search_type)) $sql .= ' AND cp.fk_type IN ('.$db->escape($search_type).')';
|
||||
if (!empty($search_description)) $sql .= natural_search('cp.description', $search_description);
|
||||
if (!empty($search_ref)) {
|
||||
$sql .= natural_search('cp.ref', $search_ref);
|
||||
}
|
||||
if (!empty($search_employee) && $search_employee > 0) {
|
||||
$sql .= " AND cp.fk_user = ".((int) $search_employee);
|
||||
}
|
||||
if (!empty($search_type) && $search_type != '-1') {
|
||||
$sql .= ' AND cp.fk_type IN ('.$db->escape($search_type).')';
|
||||
}
|
||||
if (!empty($search_description)) {
|
||||
$sql .= natural_search('cp.description', $search_description);
|
||||
}
|
||||
|
||||
$sql .= $db->order($sortfield, $sortorder);
|
||||
|
||||
|
||||
@ -323,7 +323,7 @@ if (!empty($arrayfields['cpl.fk_type']['checked'])) {
|
||||
|
||||
// Filter: Previous balance
|
||||
if (!empty($arrayfields['cpl.prev_solde']['checked'])) {
|
||||
print '<td class="liste_titre">';
|
||||
print '<td class="liste_titre right">';
|
||||
print '<input type="text" class="maxwidth50" name="search_prev_solde" value="'.$search_prev_solde.'">';
|
||||
print '</td>';
|
||||
}
|
||||
@ -335,7 +335,7 @@ if (!empty($arrayfields['variation']['checked'])) {
|
||||
|
||||
// Filter: New Balance
|
||||
if (!empty($arrayfields['cpl.new_solde']['checked'])) {
|
||||
print '<td class="liste_titre">';
|
||||
print '<td class="liste_titre right">';
|
||||
print '<input type="text" class="maxwidth50" name="search_new_solde" value="'.$search_new_solde.'">';
|
||||
print '</td>';
|
||||
}
|
||||
@ -360,13 +360,20 @@ if (!empty($arrayfields['cpl.new_solde']['checked'])) print_liste_field_titre($a
|
||||
print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ');
|
||||
print '</tr>';
|
||||
|
||||
// TODO: $i = 0;
|
||||
$i = 1;
|
||||
|
||||
while ($i < min($num, $limit))
|
||||
{
|
||||
//TODO: $obj = $db->fetch_object($resql);
|
||||
$j = 0;
|
||||
while ($j < ($page * $limit)) {
|
||||
$obj = next($object->logs);
|
||||
$j++;
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
while ($i < min($num, $limit)) {
|
||||
//TODO: $obj = $db->fetch_object($resql);
|
||||
$obj = current($object->logs);
|
||||
if (empty($obj)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$holidaylogstatic->id = $obj['rowid'];
|
||||
$holidaylogstatic->date = $obj['date_action'];
|
||||
@ -444,6 +451,7 @@ while ($i < min($num, $limit))
|
||||
print '</tr>';
|
||||
|
||||
$i++;
|
||||
next($object->logs);
|
||||
}
|
||||
|
||||
if ($log_holiday == '2') {
|
||||
|
||||
@ -427,6 +427,7 @@ LT1IN=CGST
|
||||
LT2IN=SGST
|
||||
LT1GC=Additionnal cents
|
||||
VATRate=Tax Rate
|
||||
RateOfTaxN=Rate of tax %s
|
||||
VATCode=Tax Rate code
|
||||
VATNPR=Tax Rate NPR
|
||||
DefaultTaxRate=Default tax rate
|
||||
|
||||
@ -58,11 +58,11 @@ if ($action == 'setvalue' && $user->admin)
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_CSS_URL", GETPOST('ONLINE_PAYMENT_CSS_URL', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_FORM", GETPOST('ONLINE_PAYMENT_MESSAGE_FORM', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_FORM", GETPOST('ONLINE_PAYMENT_MESSAGE_FORM', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_OK", GETPOST('ONLINE_PAYMENT_MESSAGE_OK', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_OK", GETPOST('ONLINE_PAYMENT_MESSAGE_OK', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_KO", GETPOST('ONLINE_PAYMENT_MESSAGE_KO', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_KO", GETPOST('ONLINE_PAYMENT_MESSAGE_KO', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_SENDEMAIL", GETPOST('ONLINE_PAYMENT_SENDEMAIL'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
|
||||
@ -61,11 +61,11 @@ if ($action == 'setvalue' && $user->admin)
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "PAYPAL_ADD_PAYMENT_URL", GETPOST('PAYPAL_ADD_PAYMENT_URL', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_FORM", GETPOST('ONLINE_PAYMENT_MESSAGE_FORM'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_FORM", GETPOST('ONLINE_PAYMENT_MESSAGE_FORM', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_OK", GETPOST('ONLINE_PAYMENT_MESSAGE_OK'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_OK", GETPOST('ONLINE_PAYMENT_MESSAGE_OK', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_KO", GETPOST('ONLINE_PAYMENT_MESSAGE_KO'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_KO", GETPOST('ONLINE_PAYMENT_MESSAGE_KO', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_SENDEMAIL", GETPOST('ONLINE_PAYMENT_SENDEMAIL'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0) $error++;
|
||||
|
||||
@ -1534,6 +1534,36 @@ class Product extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* used to check if price have really change to avoid log pollution
|
||||
*
|
||||
* @param int $level price level to change
|
||||
* @return array
|
||||
*/
|
||||
private function getArrayForPriceCompare($level = 0)
|
||||
{
|
||||
|
||||
$testExit = array('multiprices','multiprices_ttc','multiprices_base_type','multiprices_min','multiprices_min_ttc','multiprices_tva_tx','multiprices_recuperableonly');
|
||||
|
||||
foreach ($testExit as $field){
|
||||
if (!isset($this->$field[$level])) {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
$lastPrice = array(
|
||||
'level' => $level ? $level : 1,
|
||||
'multiprices' => doubleval($this->multiprices[$level]),
|
||||
'multiprices_ttc' => doubleval($this->multiprices_ttc[$level]),
|
||||
'multiprices_base_type' => $this->multiprices_base_type[$level],
|
||||
'multiprices_min' => doubleval($this->multiprices_min[$level]),
|
||||
'multiprices_min_ttc' => doubleval($this->multiprices_min_ttc[$level]),
|
||||
'multiprices_tva_tx' => doubleval($this->multiprices_tva_tx[$level]),
|
||||
'multiprices_recuperableonly' => doubleval($this->multiprices_recuperableonly[$level]),
|
||||
);
|
||||
|
||||
return $lastPrice;
|
||||
}
|
||||
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
@ -1862,6 +1892,8 @@ class Product extends CommonObject
|
||||
{
|
||||
global $conf, $langs;
|
||||
|
||||
$lastPriceData = $this->getArrayForPriceCompare($level); // temporary store current price before update
|
||||
|
||||
$id = $this->id;
|
||||
|
||||
dol_syslog(get_class($this)."::update_price id=".$id." newprice=".$newprice." newpricebase=".$newpricebase." newminprice=".$newminprice." level=".$level." npr=".$newnpr." newdefaultvatcode=".$newdefaultvatcode);
|
||||
@ -1994,7 +2026,11 @@ class Product extends CommonObject
|
||||
// Price by quantity
|
||||
$this->price_by_qty = $newpbq;
|
||||
|
||||
$this->_log_price($user, $level); // Save price for level into table product_price
|
||||
// check if price have really change before log
|
||||
$newPriceData = $this->getArrayForPriceCompare($level);
|
||||
if (!empty(array_diff_assoc($newPriceData, $lastPriceData)) || empty($conf->global->PRODUIT_MULTIPRICES)) {
|
||||
$this->_log_price($user, $level); // Save price for level into table product_price
|
||||
}
|
||||
|
||||
$this->level = $level; // Store level of price edited for trigger
|
||||
|
||||
@ -5172,11 +5208,11 @@ class Product extends CommonObject
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
* Retourne tableau de toutes les photos du produit
|
||||
* Return an array with all photos of product found on disk. There is no sorting criteria.
|
||||
*
|
||||
* @param string $dir Repertoire a scanner
|
||||
* @param int $nbmax Nombre maximum de photos (0=pas de max)
|
||||
* @return array Tableau de photos
|
||||
* @param string $dir Directory to scan
|
||||
* @param int $nbmax Number maxium of photos (0=no maximum)
|
||||
* @return array Array of photos
|
||||
*/
|
||||
public function liste_photos($dir, $nbmax = 0)
|
||||
{
|
||||
@ -5190,16 +5226,17 @@ class Product extends CommonObject
|
||||
$dir_osencoded = dol_osencode($dir);
|
||||
$handle = @opendir($dir_osencoded);
|
||||
if (is_resource($handle)) {
|
||||
while (($file = readdir($handle)) !== false)
|
||||
{
|
||||
if (!utf8_check($file)) { $file = utf8_encode($file); // readdir returns ISO
|
||||
while (($file = readdir($handle)) !== false) {
|
||||
if (!utf8_check($file)) {
|
||||
$file = utf8_encode($file); // readdir returns ISO
|
||||
}
|
||||
if (dol_is_file($dir.$file) && image_format_supported($file) >= 0) {
|
||||
$nbphoto++;
|
||||
|
||||
// On determine nom du fichier vignette
|
||||
// We forge name of thumb.
|
||||
$photo = $file;
|
||||
$photo_vignette = '';
|
||||
$regs = array();
|
||||
if (preg_match('/('.$this->regeximgext.')$/i', $photo, $regs)) {
|
||||
$photo_vignette = preg_replace('/'.$regs[0].'/i', '', $photo).'_small'.$regs[0];
|
||||
}
|
||||
@ -5209,14 +5246,17 @@ class Product extends CommonObject
|
||||
// Objet
|
||||
$obj = array();
|
||||
$obj['photo'] = $photo;
|
||||
if ($photo_vignette && dol_is_file($dirthumb.$photo_vignette)) { $obj['photo_vignette'] = 'thumbs/'.$photo_vignette;
|
||||
} else { $obj['photo_vignette'] = "";
|
||||
if ($photo_vignette && dol_is_file($dirthumb.$photo_vignette)) {
|
||||
$obj['photo_vignette'] = 'thumbs/'.$photo_vignette;
|
||||
} else {
|
||||
$obj['photo_vignette'] = "";
|
||||
}
|
||||
|
||||
$tabobj[$nbphoto - 1] = $obj;
|
||||
|
||||
// On continue ou on arrete de boucler ?
|
||||
if ($nbmax && $nbphoto >= $nbmax) { break;
|
||||
// Do we have to continue with next photo ?
|
||||
if ($nbmax && $nbphoto >= $nbmax) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5229,9 +5269,9 @@ class Product extends CommonObject
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
* Efface la photo du produit et sa vignette
|
||||
* Delete a photo and its thumbs
|
||||
*
|
||||
* @param string $file Chemin de l'image
|
||||
* @param string $file Path to image file
|
||||
* @return void
|
||||
*/
|
||||
public function delete_photo($file)
|
||||
|
||||
@ -1477,7 +1477,7 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action == 'showlog_defaul
|
||||
}
|
||||
|
||||
print '<td class="center">'.$langs->trans("PriceBase").'</td>';
|
||||
print $conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL;
|
||||
|
||||
if (empty($conf->global->PRODUIT_MULTIPRICES) && empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) print '<td class="right">'.$langs->trans("DefaultTaxRate").'</td>';
|
||||
print '<td class="right">'.$langs->trans("HT").'</td>';
|
||||
print '<td class="right">'.$langs->trans("TTC").'</td>';
|
||||
|
||||
@ -355,7 +355,9 @@ class MouvementStock extends CommonObject
|
||||
$qtyisnotenough = 0;
|
||||
foreach ($product->stock_warehouse[$entrepot_id]->detail_batch as $batchcursor => $prodbatch)
|
||||
{
|
||||
if ($batch != $batchcursor) continue;
|
||||
if ((string) $batch != (string) $batchcursor) { // Lot '59' must be different than lot '59c'
|
||||
continue;
|
||||
}
|
||||
$foundforbatch = 1;
|
||||
if ($prodbatch->qty < abs($qty)) $qtyisnotenough = $prodbatch->qty;
|
||||
break;
|
||||
|
||||
@ -205,17 +205,24 @@ if ($action == 'order' && GETPOST('valid'))
|
||||
foreach ($suppliers as $supplier)
|
||||
{
|
||||
$order = new CommandeFournisseur($db);
|
||||
|
||||
// Check if an order for the supplier exists
|
||||
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."commande_fournisseur";
|
||||
$sql .= " WHERE fk_soc = ".$suppliersid[$i];
|
||||
$sql .= " AND source = 42 AND fk_statut = 0";
|
||||
$sql .= " WHERE fk_soc = ".((int) $suppliersid[$i]);
|
||||
$sql .= " AND source = ".((int) $order::SOURCE_ID_REPLENISHMENT)." AND fk_statut = ".$order::STATUS_DRAFT;
|
||||
$sql .= " AND entity IN (".getEntity('commande_fournisseur').")";
|
||||
$sql .= " ORDER BY date_creation DESC";
|
||||
$resql = $db->query($sql);
|
||||
if ($resql && $db->num_rows($resql) > 0) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
|
||||
$order->fetch($obj->rowid);
|
||||
$order->fetch_thirdparty();
|
||||
|
||||
foreach ($supplier['lines'] as $line) {
|
||||
if (empty($line->remise_percent)) {
|
||||
$line->remise_percent = $order->thirdparty->remise_supplier_percent;
|
||||
}
|
||||
$result = $order->addline(
|
||||
$line->desc,
|
||||
$line->subprice,
|
||||
@ -249,13 +256,19 @@ if ($action == 'order' && GETPOST('valid'))
|
||||
} else {
|
||||
$order->socid = $suppliersid[$i];
|
||||
$order->fetch_thirdparty();
|
||||
//trick to know which orders have been generated this way
|
||||
$order->source = 42;
|
||||
|
||||
// Trick to know which orders have been generated using the replenishment feature
|
||||
$order->source = $order::SOURCE_ID_REPLENISHMENT;
|
||||
|
||||
foreach ($supplier['lines'] as $line) {
|
||||
if (empty($line->remise_percent)) {
|
||||
$line->remise_percent = $order->thirdparty->remise_supplier_percent;
|
||||
}
|
||||
$order->lines[] = $line;
|
||||
}
|
||||
$order->cond_reglement_id = $order->thirdparty->cond_reglement_supplier_id;
|
||||
$order->mode_reglement_id = $order->thirdparty->mode_reglement_supplier_id;
|
||||
|
||||
$id = $order->create($user);
|
||||
if ($id < 0) {
|
||||
$fail++;
|
||||
@ -306,7 +319,7 @@ if (!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE) && $fk_entre
|
||||
}
|
||||
|
||||
$sql = 'SELECT p.rowid, p.ref, p.label, p.description, p.price,';
|
||||
$sql .= ' p.price_ttc, p.price_base_type,p.fk_product_type,';
|
||||
$sql .= ' p.price_ttc, p.price_base_type, p.fk_product_type,';
|
||||
$sql .= ' p.tms as datem, p.duration, p.tobuy,';
|
||||
$sql .= ' p.desiredstock, p.seuil_stock_alerte,';
|
||||
if (!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE) && $fk_entrepot > 0) {
|
||||
@ -327,11 +340,8 @@ $sql .= $hookmanager->resPrint;
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'product as p';
|
||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as s ON p.rowid = s.fk_product';
|
||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'entrepot AS ent ON s.fk_entrepot = ent.rowid AND ent.entity IN('.getEntity('stock').')';
|
||||
if ($fk_supplier > 0) {
|
||||
$sql .= ' INNER JOIN '.MAIN_DB_PREFIX.'product_fournisseur_price pfp ON (pfp.fk_product = p.rowid AND pfp.fk_soc = '.$fk_supplier.')';
|
||||
}
|
||||
if (!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE) && $fk_entrepot > 0) {
|
||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_warehouse_properties AS pse ON (p.rowid = pse.fk_product AND pse.fk_entrepot = '.$fk_entrepot.')';
|
||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_warehouse_properties AS pse ON (p.rowid = pse.fk_product AND pse.fk_entrepot = '.((int) $fk_entrepot).')';
|
||||
}
|
||||
|
||||
// Add fields from hooks
|
||||
@ -352,9 +362,12 @@ if (dol_strlen($type)) {
|
||||
if ($search_ref) $sql .= natural_search('p.ref', $search_ref);
|
||||
if ($search_label) $sql .= natural_search('p.label', $search_label);
|
||||
$sql .= ' AND p.tobuy = 1';
|
||||
if (empty($conf->global->VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PARENT)) { // Add test to exclude products that has variants
|
||||
if (!empty($conf->variants->eabled) && empty($conf->global->VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PARENT)) { // Add test to exclude products that has variants
|
||||
$sql .= ' AND p.rowid NOT IN (SELECT pac.fk_product_parent FROM '.MAIN_DB_PREFIX.'product_attribute_combination as pac WHERE pac.entity IN ('.getEntity('product').'))';
|
||||
}
|
||||
if ($fk_supplier > 0) {
|
||||
$sql .= ' AND EXISTS (SELECT pfp.rowid FROM '.MAIN_DB_PREFIX.'product_fournisseur_price as pfp WHERE pfp.fk_product = p.rowid AND pfp.fk_soc = '.((int) $fk_supplier).' AND pfp.entity IN ('.getEntity('product_fournisseur_price').'))';
|
||||
}
|
||||
$sql .= ' GROUP BY p.rowid, p.ref, p.label, p.description, p.price';
|
||||
$sql .= ', p.price_ttc, p.price_base_type,p.fk_product_type, p.tms';
|
||||
$sql .= ', p.duration, p.tobuy';
|
||||
@ -855,7 +868,9 @@ while ($i < ($limit ? min($num, $limit) : $num))
|
||||
print '<td class="right">'.($fk_entrepot > 0 ? $alertstockwarehouse : $alertstock).'</td>';
|
||||
|
||||
// Current stock (all warehouses)
|
||||
print '<td class="right">'.$warning.$stock.'</td>';
|
||||
print '<td class="right">'.$warning.$stock;
|
||||
print '<!-- stock returned by main sql is '.$objp->stock_physique.' -->';
|
||||
print '</td>';
|
||||
|
||||
// Current stock (warehouse selected only)
|
||||
if (!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE) && $fk_entrepot > 0)
|
||||
|
||||
@ -45,7 +45,7 @@ if ($user->socid) {
|
||||
$result = restrictedArea($user, 'produit|service');
|
||||
|
||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||
$hookmanager->initHooks(array('stockreplenishlist'));
|
||||
$hookmanager->initHooks(array('stockatdate'));
|
||||
|
||||
//checks if a product has been ordered
|
||||
|
||||
|
||||
@ -62,7 +62,7 @@ if (!empty($conf->incoterm->enabled)) $langs->load('incoterm');
|
||||
if (!empty($conf->productbatch->enabled)) $langs->load('productbatch');
|
||||
|
||||
$origin = GETPOST('origin', 'alpha') ?GETPOST('origin', 'alpha') : 'reception'; // Example: commande, propal
|
||||
$origin_id = GETPOST('id', 'int') ?GETPOST('id', 'int') : '';
|
||||
$origin_id = GETPOST('id', 'int') ? GETPOST('id', 'int') : '';
|
||||
$id = $origin_id;
|
||||
if (empty($origin_id)) $origin_id = GETPOST('origin_id', 'int'); // Id of order or propal
|
||||
if (empty($origin_id)) $origin_id = GETPOST('object_id', 'int'); // Id of order or propal
|
||||
@ -87,7 +87,7 @@ $action = GETPOST('action', 'alpha');
|
||||
if (GETPOST('modelselected')) {
|
||||
$action = 'presend';
|
||||
}
|
||||
$confirm = GETPOST('confirm', 'alpha');
|
||||
$confirm = GETPOST('confirm', 'alpha');
|
||||
$cancel = GETPOST('cancel', 'alpha');
|
||||
|
||||
//PDF
|
||||
@ -707,14 +707,13 @@ if ($action == 'create')
|
||||
if ($origin == 'supplierorder')$classname = 'CommandeFournisseur';
|
||||
else $classname = ucfirst($origin);
|
||||
|
||||
$object = new $classname($db);
|
||||
if ($object->fetch($origin_id)) // This include the fetch_lines
|
||||
{
|
||||
$objectsrc = new $classname($db);
|
||||
if ($objectsrc->fetch($origin_id)) { // This include the fetch_lines
|
||||
$soc = new Societe($db);
|
||||
$soc->fetch($object->socid);
|
||||
$soc->fetch($objectsrc->socid);
|
||||
|
||||
$author = new User($db);
|
||||
$author->fetch($object->user_author_id);
|
||||
$author->fetch($objectsrc->user_author_id);
|
||||
|
||||
if (!empty($conf->stock->enabled)) $entrepot = new Entrepot($db);
|
||||
|
||||
@ -722,10 +721,8 @@ if ($action == 'create')
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="action" value="add">';
|
||||
print '<input type="hidden" name="origin" value="'.$origin.'">';
|
||||
print '<input type="hidden" name="origin_id" value="'.$object->id.'">';
|
||||
print '<input type="hidden" name="ref_int" value="'.$object->ref_int.'">';
|
||||
if (GETPOST('entrepot_id', 'int'))
|
||||
{
|
||||
print '<input type="hidden" name="origin_id" value="'.$objectsrc->id.'">';
|
||||
if (GETPOST('entrepot_id', 'int')) {
|
||||
print '<input type="hidden" name="entrepot_id" value="'.GETPOST('entrepot_id', 'int').'">';
|
||||
}
|
||||
|
||||
@ -735,13 +732,11 @@ if ($action == 'create')
|
||||
|
||||
// Ref
|
||||
print '<tr><td class="titlefieldcreate fieldrequired">';
|
||||
if ($origin == 'supplierorder' && !empty($conf->fournisseur->enabled))
|
||||
{
|
||||
print $langs->trans("RefOrder").'</td><td colspan="3"><a href="'.DOL_URL_ROOT.'/fourn/commande/card.php?id='.$object->id.'">'.img_object($langs->trans("ShowOrder"), 'order').' '.$object->ref;
|
||||
if ($origin == 'supplierorder' && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled))) {
|
||||
print $langs->trans("RefOrder").'</td><td colspan="3"><a href="'.DOL_URL_ROOT.'/fourn/commande/card.php?id='.$objectsrc->id.'">'.img_object($langs->trans("ShowOrder"), 'order').' '.$objectsrc->ref;
|
||||
}
|
||||
if ($origin == 'propal' && !empty($conf->propal->enabled))
|
||||
{
|
||||
print $langs->trans("RefProposal").'</td><td colspan="3"><a href="'.DOL_URL_ROOT.'/comm/card.php?id='.$object->id.'">'.img_object($langs->trans("ShowProposal"), 'propal').' '.$object->ref;
|
||||
if ($origin == 'propal' && !empty($conf->propal->enabled)) {
|
||||
print $langs->trans("RefProposal").'</td><td colspan="3"><a href="'.DOL_URL_ROOT.'/comm/card.php?id='.$objectsrc->id.'">'.img_object($langs->trans("ShowProposal"), 'propal').' '.$objectsrc->ref;
|
||||
}
|
||||
print '</a></td>';
|
||||
print "</tr>\n";
|
||||
@ -751,7 +746,7 @@ if ($action == 'create')
|
||||
if ($origin == 'supplier_order') print $langs->trans('SupplierOrder');
|
||||
else print $langs->trans('RefSupplier');
|
||||
print '</td><td colspan="3">';
|
||||
print '<input type="text" name="ref_supplier" value="'.$object->ref_supplier.'" />';
|
||||
print '<input type="text" name="ref_supplier" value="'.$objectsrc->ref_supplier.'" />';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
@ -764,8 +759,12 @@ if ($action == 'create')
|
||||
if (!empty($conf->projet->enabled))
|
||||
{
|
||||
$projectid = GETPOST('projectid', 'int') ?GETPOST('projectid', 'int') : 0;
|
||||
if (empty($projectid) && !empty($object->fk_project)) $projectid = $object->fk_project;
|
||||
if ($origin == 'project') $projectid = ($originid ? $originid : 0);
|
||||
if (empty($projectid) && !empty($objectsrc->fk_project)) {
|
||||
$projectid = $objectsrc->fk_project;
|
||||
}
|
||||
if ($origin == 'project') {
|
||||
$projectid = ($originid ? $originid : 0);
|
||||
}
|
||||
|
||||
$langs->load("projects");
|
||||
print '<tr>';
|
||||
@ -779,7 +778,7 @@ if ($action == 'create')
|
||||
// Date delivery planned
|
||||
print '<tr><td>'.$langs->trans("DateDeliveryPlanned").'</td>';
|
||||
print '<td colspan="3">';
|
||||
$date_delivery = ($date_delivery ? $date_delivery : $object->delivery_date); // $date_delivery comes from GETPOST
|
||||
$date_delivery = ($date_delivery ? $date_delivery : $objectsrc->delivery_date); // $date_delivery comes from GETPOST
|
||||
print $form->selectDate($date_delivery ? $date_delivery : -1, 'date_delivery', 1, 1, 1);
|
||||
print "</td>\n";
|
||||
print '</tr>';
|
||||
@ -787,16 +786,15 @@ if ($action == 'create')
|
||||
// Note Public
|
||||
print '<tr><td>'.$langs->trans("NotePublic").'</td>';
|
||||
print '<td colspan="3">';
|
||||
$doleditor = new DolEditor('note_public', $object->note_public, '', 60, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, '90%');
|
||||
$doleditor = new DolEditor('note_public', $objectsrc->note_public, '', 60, 'dolibarr_notes', 'In', 0, false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC) ? 0 : 1, ROWS_3, '90%');
|
||||
print $doleditor->Create(1);
|
||||
print "</td></tr>";
|
||||
|
||||
// Note Private
|
||||
if ($object->note_private && !$user->socid)
|
||||
{
|
||||
if ($objectsrc->note_private && !$user->socid) {
|
||||
print '<tr><td>'.$langs->trans("NotePrivate").'</td>';
|
||||
print '<td colspan="3">';
|
||||
$doleditor = new DolEditor('note_private', $object->note_private, '', 60, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, '90%');
|
||||
$doleditor = new DolEditor('note_private', $objectsrc->note_private, '', 60, 'dolibarr_notes', 'In', 0, false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PRIVATE) ? 0 : 1, ROWS_3, '90%');
|
||||
print $doleditor->Create(1);
|
||||
print "</td></tr>";
|
||||
}
|
||||
@ -837,15 +835,15 @@ if ($action == 'create')
|
||||
|
||||
// Other attributes
|
||||
$parameters = array('objectsrc' => $objectsrc, 'colspan' => ' colspan="3"', 'cols' => '3', 'socid'=>$socid);
|
||||
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $recept, $action); // Note that $action and $object may have been modified by hook
|
||||
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $recept, $action); // Note that $action and $objectsrc may have been modified by hook
|
||||
print $hookmanager->resPrint;
|
||||
|
||||
// Here $object can be of an object Order
|
||||
// Here $object can be of an object Reception
|
||||
$extrafields->fetch_name_optionals_label($object->table_element);
|
||||
if (empty($reshook) && !empty($extrafields->attributes[$object->table_element]['label'])) {
|
||||
// copy from order
|
||||
if ($object->fetch_optionals() > 0) {
|
||||
$recept->array_options = array_merge($recept->array_options, $object->array_options);
|
||||
if ($objectsrc->fetch_optionals() > 0) {
|
||||
$recept->array_options = array_merge($recept->array_options, $objectsrc->array_options);
|
||||
}
|
||||
print $object->showOptionals($extrafields, 'edit', $parameters);
|
||||
}
|
||||
@ -854,9 +852,9 @@ if ($action == 'create')
|
||||
if (!empty($conf->incoterm->enabled))
|
||||
{
|
||||
print '<tr>';
|
||||
print '<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans("IncotermLabel"), $object->label_incoterms, 1).'</label></td>';
|
||||
print '<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans("IncotermLabel"), $objectsrc->label_incoterms, 1).'</label></td>';
|
||||
print '<td colspan="3" class="maxwidthonsmartphone">';
|
||||
print $form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms : ''), (!empty($object->location_incoterms) ? $object->location_incoterms : ''));
|
||||
print $form->select_incoterms((!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms : ''), (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms : ''));
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
@ -876,15 +874,15 @@ if ($action == 'create')
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
|
||||
// Reception lines
|
||||
$numAsked = 0;
|
||||
$dispatchLines = array();
|
||||
foreach ($_POST as $key => $value)
|
||||
{
|
||||
foreach ($_POST as $key => $value) {
|
||||
// If create form is coming from the button "Create Reception" of previous page
|
||||
|
||||
// without batch module enabled
|
||||
if (preg_match('/^product_([0-9]+)_([0-9]+)$/i', $key, $reg))
|
||||
{
|
||||
$reg = array();
|
||||
if (preg_match('/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
|
||||
$numAsked++;
|
||||
|
||||
// $numline=$reg[2] + 1; // line of product
|
||||
@ -915,6 +913,25 @@ if ($action == 'create')
|
||||
$fk_commandefourndet = 'fk_commandefourndet_'.$reg[1].'_'.$reg[2];
|
||||
$dispatchLines[$numAsked] = array('prod' => GETPOST($prod, 'int'), 'qty' =>GETPOST($qty), 'ent' =>GETPOST($ent, 'int'), 'pu' =>GETPOST($pu), 'comment' =>GETPOST('comment'), 'fk_commandefourndet' => GETPOST($fk_commandefourndet, 'int'), 'DLC'=> $dDLC, 'DLUO'=> $dDLUO, 'lot'=> GETPOST($lot, 'alpha'));
|
||||
}
|
||||
|
||||
// If create form is coming from same page post was sent but an error occured
|
||||
if (preg_match('/^productid([0-9]+)$/i', $key, $reg)) {
|
||||
$numAsked++;
|
||||
|
||||
// eat-by date dispatch
|
||||
// $numline=$reg[2] + 1; // line of product
|
||||
$numline = $numAsked;
|
||||
$prod = 'productid'.$reg[1];
|
||||
$comment = 'comment'.$reg[1];
|
||||
$qty = 'qtyl'.$reg[1];
|
||||
$ent = 'entl'.$reg[1];
|
||||
$pu = 'pul'.$reg[1];
|
||||
$lot = 'batch'.$reg[1];
|
||||
$dDLUO = dol_mktime(12, 0, 0, GETPOST('dluo'.$reg[1].'month', 'int'), GETPOST('dluo'.$reg[1].'day', 'int'), GETPOST('dluo'.$reg[1].'year', 'int'));
|
||||
$dDLC = dol_mktime(12, 0, 0, GETPOST('dlc'.$reg[1].'month', 'int'), GETPOST('dlc'.$reg[1].'day', 'int'), GETPOST('dlc'.$reg[1].'year', 'int'));
|
||||
$fk_commandefourndet = 'fk_commandefournisseurdet'.$reg[1];
|
||||
$dispatchLines[$numAsked] = array('prod' => GETPOST($prod, 'int'), 'qty' =>GETPOST($qty), 'ent' =>GETPOST($ent, 'int'), 'pu' =>GETPOST($pu), 'comment' =>GETPOST($comment), 'fk_commandefourndet' => GETPOST($fk_commandefourndet, 'int'), 'DLC'=> $dDLC, 'DLUO'=> $dDLUO, 'lot'=> GETPOST($lot, 'alpha'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -944,7 +961,7 @@ if ($action == 'create')
|
||||
print '<table class="noborder centpercent">';
|
||||
|
||||
// Load receptions already done for same order
|
||||
$object->loadReceptions();
|
||||
$objectsrc->loadReceptions();
|
||||
|
||||
if ($numAsked)
|
||||
{
|
||||
@ -980,14 +997,13 @@ if ($action == 'create')
|
||||
while ($indiceAsked <= $numAsked)
|
||||
{
|
||||
$product = new Product($db);
|
||||
foreach ($object->lines as $supplierLine) {
|
||||
foreach ($objectsrc->lines as $supplierLine) {
|
||||
if ($dispatchLines[$indiceAsked]['fk_commandefourndet'] == $supplierLine->id) {
|
||||
$line = $supplierLine;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Show product and description
|
||||
$type = $line->product_type ? $line->product_type : $line->fk_product_type;
|
||||
// Try to enhance type detection using date_start and date_end for free lines where type
|
||||
@ -995,7 +1011,7 @@ if ($action == 'create')
|
||||
if (!empty($line->date_start)) $type = 1;
|
||||
if (!empty($line->date_end)) $type = 1;
|
||||
|
||||
print '<!-- line '.$line->rowid.' for product -->'."\n";
|
||||
print '<!-- line fk_commandefourndet='.$line->id.' for product='.$line->fk_product.' -->'."\n";
|
||||
print '<tr class="oddeven">'."\n";
|
||||
|
||||
|
||||
@ -1008,12 +1024,10 @@ if ($action == 'create')
|
||||
|
||||
print '<td>';
|
||||
print '<a name="'.$line->id.'"></a>'; // ancre pour retourner sur la ligne
|
||||
print '<input type="hidden" name="productid'.$indiceAsked.'" value="'.$line->fk_product.'">';
|
||||
|
||||
// Show product and description
|
||||
$product_static->type = $line->fk_product_type;
|
||||
$product_static->id = $line->fk_product;
|
||||
$product_static->ref = $line->ref;
|
||||
$product_static->status_batch = $line->product_tobatch;
|
||||
$product_static = $product;
|
||||
|
||||
$text = $product_static->getNomUrl(1);
|
||||
$text .= ' - '.(!empty($line->label) ? $line->label : $line->product_label);
|
||||
@ -1049,17 +1063,15 @@ if ($action == 'create')
|
||||
|
||||
// Qty
|
||||
print '<td class="center">'.$line->qty;
|
||||
print '<input type="hidden" name="fk_commandefournisseurdet'.$indiceAsked.'" value=\''.$line->id.'\' />';
|
||||
print '<textarea style="display:none;" name="comment'.$indiceAsked.'" >'.$line->desc.'</textarea>';
|
||||
print '<input type="hidden" name="fk_commandefournisseurdet'.$indiceAsked.'" value="'.$line->id.'">';
|
||||
print '<input type="hidden" name="pul'.$indiceAsked.'" value="'.$line->pu_ht.'">';
|
||||
print '<input name="qtyasked'.$indiceAsked.'" id="qtyasked'.$indiceAsked.'" type="hidden" value="'.$line->qty.'">';
|
||||
print '</td>';
|
||||
$qtyProdCom = $line->qty;
|
||||
|
||||
// Qty already received
|
||||
print '<td class="center">';
|
||||
|
||||
|
||||
$quantityDelivered = $object->receptions[$line->id];
|
||||
$quantityDelivered = $objectsrc->receptions[$line->id];
|
||||
print $quantityDelivered;
|
||||
print '<input name="qtydelivered'.$indiceAsked.'" id="qtydelivered'.$indiceAsked.'" type="hidden" value="'.$quantityDelivered.'">';
|
||||
print '</td>';
|
||||
|
||||
@ -3111,12 +3111,24 @@ class Societe extends CommonObject
|
||||
public function set_parent($id)
|
||||
{
|
||||
// phpcs:enable
|
||||
dol_syslog(get_class($this).'::set_parent', LOG_DEBUG);
|
||||
|
||||
if ($this->id) {
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."societe";
|
||||
$sql .= " SET parent = ".($id > 0 ? $id : "null");
|
||||
$sql .= " WHERE rowid = ".$this->id;
|
||||
dol_syslog(get_class($this).'::set_parent', LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
// Check if the id we want to add as parent has not already one parent that is the current id we try to update
|
||||
if ($id > 0) {
|
||||
$sameparent = $this->validateFamilyTree($id, $this->id, 0);
|
||||
if ($sameparent < 0) {
|
||||
return -1;
|
||||
}
|
||||
if ($sameparent == 1) {
|
||||
setEventMessages('ParentCompanyToAddIsAlreadyAChildOfModifiedCompany', null, 'warnings');
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'societe SET parent = '.($id > 0 ? $id : 'null').' WHERE rowid = '.((int) $this->id);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
$this->parent = $id;
|
||||
return 1;
|
||||
@ -3128,6 +3140,40 @@ class Societe extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a thirdparty $idchild is or not inside the parents (or grand parents) of another thirdparty id $idparent.
|
||||
*
|
||||
* @param int $idparent Id of thirdparty to check
|
||||
* @param int $idchild Id of thirdparty to compare to
|
||||
* @param int $counter Counter to protect against infinite loops
|
||||
* @return int <0 if KO, 0 if OK or 1 if at some level a parent company was the child to compare to
|
||||
*/
|
||||
public function validateFamilyTree($idparent, $idchild, $counter = 0)
|
||||
{
|
||||
if ($counter > 100) {
|
||||
dol_syslog("Too high level of parent - child for company. May be an infinite loop ?", LOG_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT s.parent';
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'societe as s';
|
||||
$sql .= ' WHERE rowid = '.$idparent;
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
|
||||
if ($obj->parent == '') {
|
||||
return 0;
|
||||
} elseif ($obj->parent == $idchild) {
|
||||
return 1;
|
||||
} else {
|
||||
$sameparent = $this->validateFamilyTree($obj->parent, $idchild, ($counter + 1));
|
||||
}
|
||||
return $sameparent;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
* Returns if a profid sould be verified to be unique
|
||||
|
||||
@ -429,6 +429,10 @@ $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."c_stcomm as st ON s.fk_stcomm = st.id";
|
||||
// We'll need this table joined to the select in order to filter by sale
|
||||
if ($search_sale == -2) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON sc.fk_soc = s.rowid";
|
||||
elseif ($search_sale || (!$user->rights->societe->client->voir && !$socid)) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
// Add table from hooks
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook
|
||||
$sql .= $hookmanager->resPrint;
|
||||
$sql .= " WHERE s.entity IN (".getEntity('societe').")";
|
||||
if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
|
||||
if ($search_sale && $search_sale != -2) $sql .= " AND s.rowid = sc.fk_soc"; // Join for the needed table to filter by sale
|
||||
@ -490,6 +494,11 @@ if (empty($reshook)) {
|
||||
}
|
||||
$sql .= $hookmanager->resPrint;
|
||||
|
||||
// Add GroupBy from hooks
|
||||
$parameters = array('all' => $all, 'fieldstosearchall' => $fieldstosearchall);
|
||||
$reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object); // Note that $action and $object may have been modified by hook
|
||||
$sql .= $hookmanager->resPrint;
|
||||
|
||||
$sql .= $db->order($sortfield, $sortorder);
|
||||
|
||||
// Count total nb of records
|
||||
|
||||
@ -92,13 +92,13 @@ if ($action == 'setvalue' && $user->admin)
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_CSS_URL", GETPOST('ONLINE_PAYMENT_CSS_URL', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0)
|
||||
$error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_FORM", GETPOST('ONLINE_PAYMENT_MESSAGE_FORM', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_FORM", GETPOST('ONLINE_PAYMENT_MESSAGE_FORM', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0)
|
||||
$error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_OK", GETPOST('ONLINE_PAYMENT_MESSAGE_OK', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_OK", GETPOST('ONLINE_PAYMENT_MESSAGE_OK', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0)
|
||||
$error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_KO", GETPOST('ONLINE_PAYMENT_MESSAGE_KO', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_KO", GETPOST('ONLINE_PAYMENT_MESSAGE_KO', 'restricthtml'), 'chaine', 0, '', $conf->entity);
|
||||
if (!$result > 0)
|
||||
$error++;
|
||||
$result = dolibarr_set_const($db, "ONLINE_PAYMENT_SENDEMAIL", GETPOST('ONLINE_PAYMENT_SENDEMAIL'), 'chaine', 0, '', $conf->entity);
|
||||
|
||||
@ -1297,15 +1297,28 @@ elseif (empty($action) || $action == 'view' || $action == 'addlink' || $action =
|
||||
// add a message
|
||||
if ($action == 'presend' || $action == 'presend_addmessage')
|
||||
{
|
||||
if ($object->fk_soc > 0) {
|
||||
$object->fetch_thirdparty();
|
||||
}
|
||||
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) {
|
||||
$newlang = GETPOST('lang_id', 'aZ09');
|
||||
}
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && is_object($object->thirdparty)) {
|
||||
$newlang = $object->thirdparty->default_lang;
|
||||
}
|
||||
$arrayoffamiliestoexclude = array('objectamount');
|
||||
|
||||
$action = 'add_message'; // action to use to post the message
|
||||
$modelmail = 'ticket_send';
|
||||
|
||||
// Substitution array
|
||||
$morehtmlright = '';
|
||||
$help = "";
|
||||
$substitutionarray = array();
|
||||
$substitutionarray = getCommonSubstitutionArray($newlang, 0, $arrayoffamiliestoexclude, $object);
|
||||
if ($object->fk_soc > 0) {
|
||||
$object->fetch_thirdparty();
|
||||
$substitutionarray['__THIRDPARTY_NAME__'] = $object->thirdparty->name;
|
||||
}
|
||||
$substitutionarray['__USER_SIGNATURE__'] = $user->signature;
|
||||
@ -1338,16 +1351,6 @@ elseif (empty($action) || $action == 'view' || $action == 'addlink' || $action =
|
||||
|
||||
print '<hr>';
|
||||
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && !empty($_REQUEST['lang_id'])) {
|
||||
$newlang = $_REQUEST['lang_id'];
|
||||
}
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
|
||||
$newlang = $object->default_lang;
|
||||
}
|
||||
|
||||
$formticket = new FormTicket($db);
|
||||
|
||||
$formticket->action = $action;
|
||||
|
||||
@ -73,9 +73,9 @@ class Users extends DolibarrApi
|
||||
|
||||
$obj_ret = array();
|
||||
|
||||
if (!DolibarrApiAccess::$user->rights->user->user->lire) {
|
||||
throw new RestException(401, "You are not allowed to read list of users");
|
||||
}
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->lire) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401, "You are not allowed to read list of users");
|
||||
}
|
||||
|
||||
// case of external user, $societe param is ignored and replaced by user's socid
|
||||
//$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $societe;
|
||||
@ -150,9 +150,10 @@ class Users extends DolibarrApi
|
||||
*/
|
||||
public function get($id, $includepermissions = 0)
|
||||
{
|
||||
//if (!DolibarrApiAccess::$user->rights->user->user->lire) {
|
||||
//throw new RestException(401);
|
||||
//}
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->lire) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
|
||||
if ($id == 0) {
|
||||
$result = $this->useraccount->initAsSpecimen();
|
||||
} else {
|
||||
@ -187,9 +188,9 @@ class Users extends DolibarrApi
|
||||
*/
|
||||
public function getByLogin($login, $includepermissions = 0)
|
||||
{
|
||||
//if (!DolibarrApiAccess::$user->rights->user->user->lire) {
|
||||
//throw new RestException(401);
|
||||
//}
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->lire) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401, 'Not allowed');
|
||||
}
|
||||
|
||||
$result = $this->useraccount->fetch('', $login);
|
||||
if (!$result) {
|
||||
@ -221,9 +222,9 @@ class Users extends DolibarrApi
|
||||
*/
|
||||
public function getByEmail($email, $includepermissions = 0)
|
||||
{
|
||||
//if (!DolibarrApiAccess::$user->rights->user->user->lire) {
|
||||
//throw new RestException(401);
|
||||
//}
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->lire) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401, 'Not allowed');
|
||||
}
|
||||
|
||||
$result = $this->useraccount->fetch('', '', '', 0, -1, $email);
|
||||
if (!$result) {
|
||||
@ -254,6 +255,10 @@ class Users extends DolibarrApi
|
||||
*/
|
||||
public function getInfo($includepermissions = 0)
|
||||
{
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->lire) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401, 'Not allowed');
|
||||
}
|
||||
|
||||
$apiUser = DolibarrApiAccess::$user;
|
||||
|
||||
$result = $this->useraccount->fetch($apiUser->id);
|
||||
@ -289,9 +294,10 @@ class Users extends DolibarrApi
|
||||
public function post($request_data = null)
|
||||
{
|
||||
// check user authorization
|
||||
//if(! DolibarrApiAccess::$user->rights->user->creer) {
|
||||
// throw new RestException(401, "User creation not allowed");
|
||||
//}
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->creer) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401, "User creation not allowed");
|
||||
}
|
||||
|
||||
// check mandatory fields
|
||||
/*if (!isset($request_data["login"]))
|
||||
throw new RestException(400, "login field missing");
|
||||
@ -322,11 +328,11 @@ class Users extends DolibarrApi
|
||||
* @throws RestException 404 Not found
|
||||
* @throws RestException 500 System error
|
||||
*/
|
||||
public function put($id, $request_data = null)
|
||||
{
|
||||
//if (!DolibarrApiAccess::$user->rights->user->user->creer) {
|
||||
//throw new RestException(401);
|
||||
//}
|
||||
public function put($id, $request_data = null)
|
||||
{
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->creer) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
|
||||
$result = $this->useraccount->fetch($id);
|
||||
if (!$result) {
|
||||
@ -378,7 +384,7 @@ class Users extends DolibarrApi
|
||||
{
|
||||
$obj_ret = array();
|
||||
|
||||
if (!DolibarrApiAccess::$user->rights->user->user->lire) {
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->lire) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(403);
|
||||
}
|
||||
|
||||
@ -413,9 +419,9 @@ class Users extends DolibarrApi
|
||||
|
||||
global $conf;
|
||||
|
||||
//if (!DolibarrApiAccess::$user->rights->user->user->supprimer) {
|
||||
//throw new RestException(401);
|
||||
//}
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->creer) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
$result = $this->useraccount->fetch($id);
|
||||
if (!$result) {
|
||||
throw new RestException(404, 'User not found');
|
||||
@ -462,9 +468,10 @@ class Users extends DolibarrApi
|
||||
|
||||
$obj_ret = array();
|
||||
|
||||
if (!DolibarrApiAccess::$user->rights->user->group_advance->read) {
|
||||
throw new RestException(401, "You are not allowed to read list of groups");
|
||||
}
|
||||
if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty(DolibarrApiAccess::$user->rights->user->user->lire) && empty(DolibarrApiAccess::$user->admin)) ||
|
||||
!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty(DolibarrApiAccess::$user->rights->user->group_advance->read) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401, "You are not allowed to read groups");
|
||||
}
|
||||
|
||||
// case of external user, $societe param is ignored and replaced by user's socid
|
||||
//$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $societe;
|
||||
@ -532,9 +539,10 @@ class Users extends DolibarrApi
|
||||
{
|
||||
global $db, $conf;
|
||||
|
||||
if (!DolibarrApiAccess::$user->rights->user->group_advance->read) {
|
||||
throw new RestException(401, "You are not allowed to read groups");
|
||||
}
|
||||
if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty(DolibarrApiAccess::$user->rights->user->user->lire) && empty(DolibarrApiAccess::$user->admin)) ||
|
||||
!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty(DolibarrApiAccess::$user->rights->user->group_advance->read) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401, "You are not allowed to read groups");
|
||||
}
|
||||
|
||||
$group_static = new UserGroup($this->db);
|
||||
$result = $group_static->fetch($group, '', $load_members);
|
||||
@ -552,11 +560,11 @@ class Users extends DolibarrApi
|
||||
* @param int $id Account ID
|
||||
* @return array
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
//if (!DolibarrApiAccess::$user->rights->user->user->supprimer) {
|
||||
//throw new RestException(401);
|
||||
//}
|
||||
public function delete($id)
|
||||
{
|
||||
if (empty(DolibarrApiAccess::$user->rights->user->user->supprimer) && empty(DolibarrApiAccess::$user->admin)) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
$result = $this->useraccount->fetch($id);
|
||||
if (!$result) {
|
||||
throw new RestException(404, 'User not found');
|
||||
|
||||
@ -822,10 +822,10 @@ class UserGroup extends CommonObject
|
||||
$valueofldapfield[] = $muser->_load_ldap_dn($info2);
|
||||
}
|
||||
$info[$conf->global->LDAP_GROUP_FIELD_GROUPMEMBERS] = (!empty($valueofldapfield) ? $valueofldapfield : '');
|
||||
}
|
||||
if (!empty($info[$conf->global->LDAP_GROUP_FIELD_GROUPID])) {
|
||||
$info[$conf->global->LDAP_GROUP_FIELD_GROUPID] = $this->id;
|
||||
}
|
||||
}
|
||||
if (!empty($conf->global->LDAP_GROUP_FIELD_GROUPID)) {
|
||||
$info[$conf->global->LDAP_GROUP_FIELD_GROUPID] = $this->id;
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
|
||||
@ -69,8 +69,8 @@ if ($action == 'dolibarr2ldap')
|
||||
{
|
||||
$info = $object->_load_ldap_info();
|
||||
|
||||
// Get a gid number for objectclass PosixGroup
|
||||
if (in_array('posixGroup', $info['objectclass'])) {
|
||||
// Get a gid number for objectclass PosixGroup if none was provided
|
||||
if (empty($info[$conf->global->LDAP_GROUP_FIELD_GROUPID]) && in_array('posixGroup', $info['objectclass'])) {
|
||||
$info['gidNumber'] = $ldap->getNextGroupGid('LDAP_KEY_GROUPS');
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user