Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into

develop

Conflicts:
	htdocs/core/class/html.form.class.php
This commit is contained in:
Laurent Destailleur 2020-01-10 14:31:37 +01:00
commit 22d4f37e58
15 changed files with 347 additions and 278 deletions

View File

@ -3,10 +3,11 @@ FROM php:7.2-apache
ENV HOST_USER_ID 33 ENV HOST_USER_ID 33
ENV PHP_INI_DATE_TIMEZONE 'UTC' ENV PHP_INI_DATE_TIMEZONE 'UTC'
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libldap2-dev zlib1g-dev libicu-dev g++\ RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libldap2-dev libzip-dev zlib1g-dev libicu-dev g++\
&& rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \ && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
&& docker-php-ext-install gd \ && docker-php-ext-install gd \
&& docker-php-ext-install zip \
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \
&& docker-php-ext-install ldap \ && docker-php-ext-install ldap \
&& docker-php-ext-install mysqli \ && docker-php-ext-install mysqli \

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2013-2016 Olivier Geffroy <jeff@jeffinfo.com> /* Copyright (C) 2013-2016 Olivier Geffroy <jeff@jeffinfo.com>
* Copyright (C) 2013-2017 Alexandre Spangaro <aspangaro@open-dsi.fr> * Copyright (C) 2013-2020 Alexandre Spangaro <aspangaro@open-dsi.fr>
* Copyright (C) 2016-2018 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2016-2018 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -41,6 +41,7 @@ $contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'acc
$search_account = GETPOST('search_account', 'alpha'); $search_account = GETPOST('search_account', 'alpha');
$search_label = GETPOST('search_label', 'alpha'); $search_label = GETPOST('search_label', 'alpha');
$search_labelshort = GETPOST('search_labelshort', 'alpha');
$search_accountparent = GETPOST('search_accountparent', 'alpha'); $search_accountparent = GETPOST('search_accountparent', 'alpha');
$search_pcgtype = GETPOST('search_pcgtype', 'alpha'); $search_pcgtype = GETPOST('search_pcgtype', 'alpha');
$search_pcgsubtype = GETPOST('search_pcgsubtype', 'alpha'); $search_pcgsubtype = GETPOST('search_pcgsubtype', 'alpha');
@ -64,6 +65,7 @@ if (!$sortorder) $sortorder = "ASC";
$arrayfields = array( $arrayfields = array(
'aa.account_number'=>array('label'=>$langs->trans("AccountNumber"), 'checked'=>1), 'aa.account_number'=>array('label'=>$langs->trans("AccountNumber"), 'checked'=>1),
'aa.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1), 'aa.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
'aa.labelshort'=>array('label'=>$langs->trans("LabelToShow"), 'checked'=>1),
'aa.account_parent'=>array('label'=>$langs->trans("Accountparent"), 'checked'=>1), 'aa.account_parent'=>array('label'=>$langs->trans("Accountparent"), 'checked'=>1),
'aa.pcg_type'=>array('label'=>$langs->trans("Pcgtype"), 'checked'=>1, 'help'=>'PcgtypeDesc'), 'aa.pcg_type'=>array('label'=>$langs->trans("Pcgtype"), 'checked'=>1, 'help'=>'PcgtypeDesc'),
'aa.pcg_subtype'=>array('label'=>$langs->trans("Pcgsubtype"), 'checked'=>0, 'help'=>'PcgtypeDesc'), 'aa.pcg_subtype'=>array('label'=>$langs->trans("Pcgsubtype"), 'checked'=>0, 'help'=>'PcgtypeDesc'),
@ -95,6 +97,7 @@ if (empty($reshook))
{ {
$search_account = ""; $search_account = "";
$search_label = ""; $search_label = "";
$search_labelshort = "";
$search_accountparent = ""; $search_accountparent = "";
$search_pcgtype = ""; $search_pcgtype = "";
$search_pcgsubtype = ""; $search_pcgsubtype = "";
@ -190,7 +193,7 @@ if ($action == 'delete') {
$pcgver = $conf->global->CHARTOFACCOUNTS; $pcgver = $conf->global->CHARTOFACCOUNTS;
$sql = "SELECT aa.rowid, aa.fk_pcg_version, aa.pcg_type, aa.pcg_subtype, aa.account_number, aa.account_parent , aa.label, aa.active, "; $sql = "SELECT aa.rowid, aa.fk_pcg_version, aa.pcg_type, aa.pcg_subtype, aa.account_number, aa.account_parent , aa.label, aa.labelshort, aa.active, ";
$sql .= " a2.rowid as rowid2, a2.label as label2, a2.account_number as account_number2"; $sql .= " a2.rowid as rowid2, a2.label as label2, a2.account_number as account_number2";
$sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa"; $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version AND aa.entity = ".$conf->entity; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version AND aa.entity = ".$conf->entity;
@ -200,6 +203,7 @@ $sql .= " WHERE asy.rowid = ".$pcgver;
//print $sql; //print $sql;
if (strlen(trim($search_account))) $sql .= natural_search("aa.account_number", $search_account); if (strlen(trim($search_account))) $sql .= natural_search("aa.account_number", $search_account);
if (strlen(trim($search_label))) $sql .= natural_search("aa.label", $search_label); if (strlen(trim($search_label))) $sql .= natural_search("aa.label", $search_label);
if (strlen(trim($search_labelshort))) $sql .= natural_search("aa.labelshort", $search_labelshort);
if (strlen(trim($search_accountparent))) $sql .= natural_search("aa.account_parent", $search_accountparent); if (strlen(trim($search_accountparent))) $sql .= natural_search("aa.account_parent", $search_accountparent);
if (strlen(trim($search_pcgtype))) $sql .= natural_search("aa.pcg_type", $search_pcgtype); if (strlen(trim($search_pcgtype))) $sql .= natural_search("aa.pcg_type", $search_pcgtype);
if (strlen(trim($search_pcgsubtype))) $sql .= natural_search("aa.pcg_subtype", $search_pcgsubtype); if (strlen(trim($search_pcgsubtype))) $sql .= natural_search("aa.pcg_subtype", $search_pcgsubtype);
@ -232,6 +236,7 @@ if ($resql)
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit; if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit;
if ($search_account) $param .= '&search_account='.urlencode($search_account); if ($search_account) $param .= '&search_account='.urlencode($search_account);
if ($search_label) $param .= '&search_label='.urlencode($search_label); if ($search_label) $param .= '&search_label='.urlencode($search_label);
if ($search_labelshort) $param.= '&search_labelshort='.urlencode($search_labelshort);
if ($search_accountparent) $param .= '&search_accountparent='.urlencode($search_accountparent); if ($search_accountparent) $param .= '&search_accountparent='.urlencode($search_accountparent);
if ($search_pcgtype) $param .= '&search_pcgtype='.urlencode($search_pcgtype); if ($search_pcgtype) $param .= '&search_pcgtype='.urlencode($search_pcgtype);
if ($search_pcgsubtype) $param .= '&search_pcgsubtype='.urlencode($search_pcgsubtype); if ($search_pcgsubtype) $param .= '&search_pcgsubtype='.urlencode($search_pcgsubtype);
@ -316,6 +321,7 @@ if ($resql)
print '<tr class="liste_titre_filter">'; print '<tr class="liste_titre_filter">';
if (!empty($arrayfields['aa.account_number']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_account" value="'.$search_account.'"></td>'; if (!empty($arrayfields['aa.account_number']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_account" value="'.$search_account.'"></td>';
if (!empty($arrayfields['aa.label']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_label" value="'.$search_label.'"></td>'; if (!empty($arrayfields['aa.label']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_label" value="'.$search_label.'"></td>';
if (!empty($arrayfields['aa.labelshort']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_labelshort" value="' . $search_labelshort . '"></td>';
if (!empty($arrayfields['aa.account_parent']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_accountparent" value="'.$search_accountparent.'"></td>'; if (!empty($arrayfields['aa.account_parent']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_accountparent" value="'.$search_accountparent.'"></td>';
if (!empty($arrayfields['aa.pcg_type']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="6" name="search_pcgtype" value="'.$search_pcgtype.'"></td>'; if (!empty($arrayfields['aa.pcg_type']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="6" name="search_pcgtype" value="'.$search_pcgtype.'"></td>';
if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="6" name="search_pcgsubtype" value="'.$search_pcgsubtype.'"></td>'; if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="6" name="search_pcgsubtype" value="'.$search_pcgsubtype.'"></td>';
@ -329,6 +335,7 @@ if ($resql)
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
if (!empty($arrayfields['aa.account_number']['checked'])) print_liste_field_titre($arrayfields['aa.account_number']['label'], $_SERVER["PHP_SELF"], "aa.account_number", "", $param, '', $sortfield, $sortorder); if (!empty($arrayfields['aa.account_number']['checked'])) print_liste_field_titre($arrayfields['aa.account_number']['label'], $_SERVER["PHP_SELF"], "aa.account_number", "", $param, '', $sortfield, $sortorder);
if (!empty($arrayfields['aa.label']['checked'])) print_liste_field_titre($arrayfields['aa.label']['label'], $_SERVER["PHP_SELF"], "aa.label", "", $param, '', $sortfield, $sortorder); if (!empty($arrayfields['aa.label']['checked'])) print_liste_field_titre($arrayfields['aa.label']['label'], $_SERVER["PHP_SELF"], "aa.label", "", $param, '', $sortfield, $sortorder);
if (!empty($arrayfields['aa.labelshort']['checked'])) print_liste_field_titre($arrayfields['aa.labelshort']['label'], $_SERVER["PHP_SELF"], "aa.labelshort", "", $param, '', $sortfield, $sortorder);
if (!empty($arrayfields['aa.account_parent']['checked'])) print_liste_field_titre($arrayfields['aa.account_parent']['label'], $_SERVER["PHP_SELF"], "aa.account_parent", "", $param, '', $sortfield, $sortorder, 'left '); if (!empty($arrayfields['aa.account_parent']['checked'])) print_liste_field_titre($arrayfields['aa.account_parent']['label'], $_SERVER["PHP_SELF"], "aa.account_parent", "", $param, '', $sortfield, $sortorder, 'left ');
if (!empty($arrayfields['aa.pcg_type']['checked'])) print_liste_field_titre($arrayfields['aa.pcg_type']['label'], $_SERVER["PHP_SELF"], 'aa.pcg_type', '', $param, '', $sortfield, $sortorder, '', $arrayfields['aa.pcg_type']['help']); if (!empty($arrayfields['aa.pcg_type']['checked'])) print_liste_field_titre($arrayfields['aa.pcg_type']['label'], $_SERVER["PHP_SELF"], 'aa.pcg_type', '', $param, '', $sortfield, $sortorder, '', $arrayfields['aa.pcg_type']['help']);
if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print_liste_field_titre($arrayfields['aa.pcg_subtype']['label'], $_SERVER["PHP_SELF"], 'aa.pcg_subtype', '', $param, '', $sortfield, $sortorder, '', $arrayfields['aa.pcg_subtype']['help']); if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print_liste_field_titre($arrayfields['aa.pcg_subtype']['label'], $_SERVER["PHP_SELF"], 'aa.pcg_subtype', '', $param, '', $sortfield, $sortorder, '', $arrayfields['aa.pcg_subtype']['help']);
@ -368,6 +375,15 @@ if ($resql)
if (!$i) $totalarray['nbfield']++; if (!$i) $totalarray['nbfield']++;
} }
// Account label to show (label short)
if (! empty($arrayfields['aa.labelshort']['checked']))
{
print "<td>";
print $obj->labelshort;
print "</td>\n";
if (! $i) $totalarray['nbfield']++;
}
// Account parent // Account parent
if (!empty($arrayfields['aa.account_parent']['checked'])) if (!empty($arrayfields['aa.account_parent']['checked']))
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com> /* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
* Copyright (C) 2013-2018 Alexandre Spangaro <aspangaro@open-dsi.fr> * Copyright (C) 2013-2020 Alexandre Spangaro <aspangaro@open-dsi.fr>
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -97,6 +97,7 @@ if ($action == 'add' && $user->rights->accounting->chartofaccount)
$object->account_parent = $account_parent; $object->account_parent = $account_parent;
$object->account_category = GETPOST('account_category', 'alpha'); $object->account_category = GETPOST('account_category', 'alpha');
$object->label = GETPOST('label', 'alpha'); $object->label = GETPOST('label', 'alpha');
$object->labelshort = GETPOST('labelshort', 'alpha');
$object->active = 1; $object->active = 1;
$res = $object->create($user); $res = $object->create($user);
@ -162,6 +163,7 @@ if ($action == 'add' && $user->rights->accounting->chartofaccount)
$object->account_parent = $account_parent; $object->account_parent = $account_parent;
$object->account_category = GETPOST('account_category', 'alpha'); $object->account_category = GETPOST('account_category', 'alpha');
$object->label = GETPOST('label', 'alpha'); $object->label = GETPOST('label', 'alpha');
$object->labelshort = GETPOST('labelshort', 'alpha');
$result = $object->update($user); $result = $object->update($user);
@ -236,6 +238,10 @@ if ($action == 'create') {
print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td>'; print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td>';
print '<td><input name="label" size="70" value="'.$object->label.'"></td></tr>'; print '<td><input name="label" size="70" value="'.$object->label.'"></td></tr>';
// Label short
print '<tr><td>' . $langs->trans("LabelToShow") . '</td>';
print '<td><input name="labelshort" size="70" value="' . $object->labelshort . '"></td></tr>';
// Account parent // Account parent
print '<tr><td>'.$langs->trans("Accountparent").'</td>'; print '<tr><td>'.$langs->trans("Accountparent").'</td>';
print '<td>'; print '<td>';
@ -254,7 +260,7 @@ if ($action == 'create') {
print '<input type="text" name="pcg_type" value="'.dol_escape_htmltag(isset($_POST['pcg_type']) ?GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">'; print '<input type="text" name="pcg_type" value="'.dol_escape_htmltag(isset($_POST['pcg_type']) ?GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
print '</td></tr>'; print '</td></tr>';
// Chart of acounts subtype // Chart of accounts subtype
print '<tr><td>'.$langs->trans("Pcgsubtype").'</td>'; print '<tr><td>'.$langs->trans("Pcgsubtype").'</td>';
print '<td>'; print '<td>';
print '<input type="text" name="pcg_subtype" value="'.dol_escape_htmltag(isset($_POST['pcg_subtype']) ?GETPOST('pcg_subtype', 'alpha') : $object->pcg_subtype).'">'; print '<input type="text" name="pcg_subtype" value="'.dol_escape_htmltag(isset($_POST['pcg_subtype']) ?GETPOST('pcg_subtype', 'alpha') : $object->pcg_subtype).'">';
@ -301,6 +307,10 @@ elseif ($id > 0 || $ref) {
print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td>'; print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td>';
print '<td><input name="label" size="70" value="'.$object->label.'"</td></tr>'; print '<td><input name="label" size="70" value="'.$object->label.'"</td></tr>';
// Label short
print '<tr><td>' . $langs->trans("LabelToShow") . '</td>';
print '<td><input name="labelshort" size="70" value="' . $object->labelshort . '"</td></tr>';
// Account parent // Account parent
print '<tr><td>'.$langs->trans("Accountparent").'</td>'; print '<tr><td>'.$langs->trans("Accountparent").'</td>';
print '<td>'; print '<td>';
@ -354,6 +364,10 @@ elseif ($id > 0 || $ref) {
print '<tr><td class="titlefield">'.$langs->trans("Label").'</td>'; print '<tr><td class="titlefield">'.$langs->trans("Label").'</td>';
print '<td colspan="2">'.$object->label.'</td></tr>'; print '<td colspan="2">'.$object->label.'</td></tr>';
// Label to show
print '<tr><td class="titlefield">' . $langs->trans("LabelToShow") . '</td>';
print '<td colspan="2">' . $object->labelshort . '</td></tr>';
// Account parent // Account parent
$accp = new AccountingAccount($db); $accp = new AccountingAccount($db);
if (!empty($object->account_parent)) { if (!empty($object->account_parent)) {

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com> /* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
* Copyright (C) 2013-2016 Alexandre Spangaro <aspangaro@open-dsi.fr> * Copyright (C) 2013-2020 Alexandre Spangaro <aspangaro@open-dsi.fr>
* Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2015 Ari Elbaz (elarifr) <github@accedinfo.com> * Copyright (C) 2015 Ari Elbaz (elarifr) <github@accedinfo.com>
@ -120,6 +120,11 @@ class AccountingAccount extends CommonObject
*/ */
public $label; public $label;
/**
* @var string Label short of account
*/
public $labelshort;
/** /**
* @var int ID * @var int ID
*/ */
@ -162,7 +167,7 @@ class AccountingAccount extends CommonObject
global $conf; global $conf;
if ($rowid || $account_number) { if ($rowid || $account_number) {
$sql = "SELECT a.rowid as rowid, a.datec, a.tms, a.fk_pcg_version, a.pcg_type, a.pcg_subtype, a.account_number, a.account_parent, a.label, a.fk_accounting_category, a.fk_user_author, a.fk_user_modif, a.active"; $sql = "SELECT a.rowid as rowid, a.datec, a.tms, a.fk_pcg_version, a.pcg_type, a.pcg_subtype, a.account_number, a.account_parent, a.label, a.labelshort, a.fk_accounting_category, a.fk_user_author, a.fk_user_modif, a.active";
$sql .= ", ca.label as category_label"; $sql .= ", ca.label as category_label";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as a"; $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as a";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_accounting_category as ca ON a.fk_accounting_category = ca.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_accounting_category as ca ON a.fk_accounting_category = ca.rowid";
@ -196,6 +201,7 @@ class AccountingAccount extends CommonObject
$this->account_number = $obj->account_number; $this->account_number = $obj->account_number;
$this->account_parent = $obj->account_parent; $this->account_parent = $obj->account_parent;
$this->label = $obj->label; $this->label = $obj->label;
$this->labelshort = $obj->labelshort;
$this->account_category = $obj->fk_accounting_category; $this->account_category = $obj->fk_accounting_category;
$this->account_category_label = $obj->category_label; $this->account_category_label = $obj->category_label;
$this->fk_user_author = $obj->fk_user_author; $this->fk_user_author = $obj->fk_user_author;
@ -239,6 +245,8 @@ class AccountingAccount extends CommonObject
$this->account_number = trim($this->account_number); $this->account_number = trim($this->account_number);
if (isset($this->label)) if (isset($this->label))
$this->label = trim($this->label); $this->label = trim($this->label);
if (isset($this->labelshort))
$this->labelshort = trim($this->labelshort);
if (empty($this->pcg_type) || $this->pcg_type == '-1') if (empty($this->pcg_type) || $this->pcg_type == '-1')
{ {
@ -261,6 +269,7 @@ class AccountingAccount extends CommonObject
$sql .= ", account_number"; $sql .= ", account_number";
$sql .= ", account_parent"; $sql .= ", account_parent";
$sql .= ", label"; $sql .= ", label";
$sql .= ", labelshort";
$sql .= ", fk_accounting_category"; $sql .= ", fk_accounting_category";
$sql .= ", fk_user_author"; $sql .= ", fk_user_author";
$sql .= ", active"; $sql .= ", active";
@ -273,6 +282,7 @@ class AccountingAccount extends CommonObject
$sql .= ", " . (empty($this->account_number) ? 'NULL' : "'" . $this->db->escape($this->account_number) . "'"); $sql .= ", " . (empty($this->account_number) ? 'NULL' : "'" . $this->db->escape($this->account_number) . "'");
$sql .= ", " . (empty($this->account_parent) ? 0 : (int) $this->account_parent); $sql .= ", " . (empty($this->account_parent) ? 0 : (int) $this->account_parent);
$sql .= ", " . (empty($this->label) ? "''" : "'" . $this->db->escape($this->label) . "'"); $sql .= ", " . (empty($this->label) ? "''" : "'" . $this->db->escape($this->label) . "'");
$sql .= ", " . (empty($this->labelshort) ? "''" : "'" . $this->db->escape($this->labelshort) . "'");
$sql .= ", " . (empty($this->account_category) ? 0 : (int) $this->account_category); $sql .= ", " . (empty($this->account_category) ? 0 : (int) $this->account_category);
$sql .= ", " . $user->id; $sql .= ", " . $user->id;
$sql .= ", " . (int) $this->active; $sql .= ", " . (int) $this->active;
@ -344,6 +354,7 @@ class AccountingAccount extends CommonObject
$sql .= " , account_number = '" . $this->db->escape($this->account_number) . "'"; $sql .= " , account_number = '" . $this->db->escape($this->account_number) . "'";
$sql .= " , account_parent = " . (int) $this->account_parent; $sql .= " , account_parent = " . (int) $this->account_parent;
$sql .= " , label = " . ($this->label ? "'" . $this->db->escape($this->label) . "'" : "''"); $sql .= " , label = " . ($this->label ? "'" . $this->db->escape($this->label) . "'" : "''");
$sql .= " , labelshort = " . ($this->labelshort ? "'" . $this->db->escape($this->labelshort) . "'" : "''");
$sql .= " , fk_accounting_category = " . (empty($this->account_category) ? 0 : (int) $this->account_category); $sql .= " , fk_accounting_category = " . (empty($this->account_category) ? 0 : (int) $this->account_category);
$sql .= " , fk_user_modif = " . $user->id; $sql .= " , fk_user_modif = " . $user->id;
$sql .= " , active = " . (int) $this->active; $sql .= " , active = " . (int) $this->active;
@ -461,9 +472,10 @@ class AccountingAccount extends CommonObject
* @param string $moretitle Add more text to title tooltip * @param string $moretitle Add more text to title tooltip
* @param int $notooltip 1=Disable tooltip * @param int $notooltip 1=Disable tooltip
* @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
* @param int $withcompletelabel 0=Short label (field short label), 1=Complete label (field label)
* @return string String with URL * @return string String with URL
*/ */
public function getNomUrl($withpicto = 0, $withlabel = 0, $nourl = 0, $moretitle = '', $notooltip = 0, $save_lastsearch_value = -1) public function getNomUrl($withpicto = 0, $withlabel = 0, $nourl = 0, $moretitle = '', $notooltip = 0, $save_lastsearch_value = -1, $withcompletelabel = 0)
{ {
global $langs, $conf, $user; global $langs, $conf, $user;
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
@ -482,11 +494,18 @@ class AccountingAccount extends CommonObject
$picto = 'billr'; $picto = 'billr';
$label=''; $label='';
if (empty($this->labelshort) || $withcompletelabel == 1)
{
$labeltoshow = $this->label;
} else {
$labeltoshow = $this->labelshort;
}
$label = '<u>' . $langs->trans("ShowAccountingAccount") . '</u>'; $label = '<u>' . $langs->trans("ShowAccountingAccount") . '</u>';
if (! empty($this->account_number)) if (! empty($this->account_number))
$label .= '<br><b>'.$langs->trans('AccountAccounting') . ':</b> ' . length_accountg($this->account_number); $label .= '<br><b>'.$langs->trans('AccountAccounting') . ':</b> ' . length_accountg($this->account_number);
if (! empty($this->label)) if (! empty($labeltoshow))
$label .= '<br><b>'.$langs->trans('Label') . ':</b> ' . $this->label; $label .= '<br><b>'.$langs->trans('Label') . ':</b> ' . $labeltoshow;
if ($moretitle) $label.=' - '.$moretitle; if ($moretitle) $label.=' - '.$moretitle;
$linkclose=''; $linkclose='';
@ -513,7 +532,7 @@ class AccountingAccount extends CommonObject
} }
$label_link = length_accountg($this->account_number); $label_link = length_accountg($this->account_number);
if ($withlabel) $label_link .= ' - ' . $this->label; if ($withlabel) $label_link .= ' - ' . $labeltoshow;
if ($withpicto) $result.=($linkstart.img_object(($notooltip?'':$label), $picto, ($notooltip?'':'class="classfortooltip"'), 0, 0, $notooltip?0:1).$linkend); if ($withpicto) $result.=($linkstart.img_object(($notooltip?'':$label), $picto, ($notooltip?'':'class="classfortooltip"'), 0, 0, $notooltip?0:1).$linkend);
if ($withpicto && $withpicto != 2) $result .= ' '; if ($withpicto && $withpicto != 2) $result .= ' ';

View File

@ -181,6 +181,10 @@ class Contact extends CommonObject
public $phone_mobile; public $phone_mobile;
public $fax; public $fax;
/**
* Private or public
* @var int
*/
public $priv; public $priv;
public $birthday; public $birthday;

View File

@ -3,7 +3,7 @@
* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com> * Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
* Copyright (C) 2015 Ari Elbaz (elarifr) <github@accedinfo.com> * Copyright (C) 2015 Ari Elbaz (elarifr) <github@accedinfo.com>
* Copyright (C) 2016 Marcos García <marcosgdf@gmail.com> * Copyright (C) 2016 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2016-2017 Alexandre Spangaro <aspangaro@open-dsi.fr> * Copyright (C) 2016-2020 Alexandre Spangaro <aspangaro@open-dsi.fr>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -292,7 +292,7 @@ class FormAccounting extends Form
{ {
$trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT) ? 50 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT; $trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT) ? 50 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT;
$sql = "SELECT DISTINCT aa.account_number, aa.label, aa.rowid, aa.fk_pcg_version"; $sql = "SELECT DISTINCT aa.account_number, aa.label, aa.labelshort, aa.rowid, aa.fk_pcg_version";
$sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa"; $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa";
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version"; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
$sql .= " AND asy.rowid = ".$conf->global->CHARTOFACCOUNTS; $sql .= " AND asy.rowid = ".$conf->global->CHARTOFACCOUNTS;
@ -312,7 +312,16 @@ class FormAccounting extends Form
$selected = 0; $selected = 0;
while ($obj = $this->db->fetch_object($resql)) while ($obj = $this->db->fetch_object($resql))
{ {
$label = length_accountg($obj->account_number).' - '.$obj->label; if (empty($obj->labelshort))
{
$labeltoshow = $obj->label;
}
else
{
$labeltoshow = $obj->labelshort;
}
$label = length_accountg($obj->account_number) . ' - ' . $labeltoshow;
$label = dol_trunc($label, $trunclength); $label = dol_trunc($label, $trunclength);
$select_value_in = $obj->rowid; $select_value_in = $obj->rowid;

View File

@ -573,7 +573,7 @@ function isValidVATID($company)
elseif ($vatprefix == 'MC') $vatprefix = 'FR'; // Monaco is using french VAT numbers elseif ($vatprefix == 'MC') $vatprefix = 'FR'; // Monaco is using french VAT numbers
else $vatprefix = preg_quote($vatprefix, '/');*/ else $vatprefix = preg_quote($vatprefix, '/');*/
$vatprefix = '[a-zA-Z][a-zA-Z]'; $vatprefix = '[a-zA-Z][a-zA-Z]';
if (! preg_match('/^'.$vatprefix.'[a-zA-Z0-9\-\.]{5,14}$/i', str_replace(' ', '', $company->tva_intra))) if (!preg_match('/^'.$vatprefix.'[a-zA-Z0-9\-\.]{5,14}$/i', str_replace(' ', '', $company->tva_intra)))
{ {
return 0; return 0;
} }
@ -732,17 +732,17 @@ function array2table($data, $tableMarkup = 1, $tableoptions = '', $troptions = '
*/ */
function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $date = '', $mode = 'next', $bentityon = true, $objuser = null, $forceentity = null) function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $date = '', $mode = 'next', $bentityon = true, $objuser = null, $forceentity = null)
{ {
global $conf,$user; global $conf, $user;
if (! is_object($objsoc)) $valueforccc=$objsoc; if (!is_object($objsoc)) $valueforccc = $objsoc;
elseif ($table == "commande_fournisseur" || $table == "facture_fourn" ) $valueforccc=dol_string_unaccent($objsoc->code_fournisseur); elseif ($table == "commande_fournisseur" || $table == "facture_fourn") $valueforccc = dol_string_unaccent($objsoc->code_fournisseur);
else $valueforccc=dol_string_unaccent($objsoc->code_client); else $valueforccc = dol_string_unaccent($objsoc->code_client);
$sharetable = $table; $sharetable = $table;
if ($table == 'facture' || $table == 'invoice') $sharetable = 'invoicenumber'; // for getEntity function if ($table == 'facture' || $table == 'invoice') $sharetable = 'invoicenumber'; // for getEntity function
// Clean parameters // Clean parameters
if ($date == '') $date=dol_now(); // We use local year and month of PHP server to search numbers if ($date == '') $date = dol_now(); // We use local year and month of PHP server to search numbers
// but we should use local year and month of user // but we should use local year and month of user
// For debugging // For debugging
@ -811,73 +811,73 @@ function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $
$lastname = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; $lastname = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
if (is_object($objuser)) $lastname = $objuser->lastname; if (is_object($objuser)) $lastname = $objuser->lastname;
$maskuser=$regType[1]; $maskuser = $regType[1];
$maskuser_value=substr($lastname, 0, dol_strlen($regType[1]));// get n first characters of user firstname (where n is length in mask) $maskuser_value = substr($lastname, 0, dol_strlen($regType[1])); // get n first characters of user firstname (where n is length in mask)
$maskuser_value=str_pad($maskuser_value, dol_strlen($regType[1]), "#", STR_PAD_RIGHT); // we fill on right with # to have same number of char than into mask $maskuser_value = str_pad($maskuser_value, dol_strlen($regType[1]), "#", STR_PAD_RIGHT); // we fill on right with # to have same number of char than into mask
} }
else else
{ {
$maskuser=''; $maskuser = '';
$maskuser_value=''; $maskuser_value = '';
} }
// Personalized field {XXX-1} à {XXX-9} // Personalized field {XXX-1} à {XXX-9}
$maskperso=array(); $maskperso = array();
$maskpersonew=array(); $maskpersonew = array();
$tmpmask=$mask; $tmpmask = $mask;
while (preg_match('/\{([A-Z]+)\-([1-9])\}/', $tmpmask, $regKey)) while (preg_match('/\{([A-Z]+)\-([1-9])\}/', $tmpmask, $regKey))
{ {
$maskperso[$regKey[1]]='{'.$regKey[1].'-'.$regKey[2].'}'; $maskperso[$regKey[1]] = '{'.$regKey[1].'-'.$regKey[2].'}';
$maskpersonew[$regKey[1]]=str_pad('', $regKey[2], '_', STR_PAD_RIGHT); $maskpersonew[$regKey[1]] = str_pad('', $regKey[2], '_', STR_PAD_RIGHT);
$tmpmask=preg_replace('/\{'.$regKey[1].'\-'.$regKey[2].'\}/i', $maskpersonew[$regKey[1]], $tmpmask); $tmpmask = preg_replace('/\{'.$regKey[1].'\-'.$regKey[2].'\}/i', $maskpersonew[$regKey[1]], $tmpmask);
} }
if (strstr($mask, 'user_extra_')) if (strstr($mask, 'user_extra_'))
{ {
$start = "{user_extra_"; $start = "{user_extra_";
$end = "\}"; $end = "\}";
$extra= get_string_between($mask, "user_extra_", "}"); $extra = get_string_between($mask, "user_extra_", "}");
if (!empty($user->array_options['options_'.$extra])) { if (!empty($user->array_options['options_'.$extra])) {
$mask = preg_replace('#('.$start.')(.*?)('.$end.')#si', $user->array_options['options_'.$extra], $mask); $mask = preg_replace('#('.$start.')(.*?)('.$end.')#si', $user->array_options['options_'.$extra], $mask);
} }
} }
$maskwithonlyymcode=$mask; $maskwithonlyymcode = $mask;
$maskwithonlyymcode=preg_replace('/\{(0+)([@\+][0-9\-\+\=]+)?([@\+][0-9\-\+\=]+)?\}/i', $maskcounter, $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/\{(0+)([@\+][0-9\-\+\=]+)?([@\+][0-9\-\+\=]+)?\}/i', $maskcounter, $maskwithonlyymcode);
$maskwithonlyymcode=preg_replace('/\{dd\}/i', 'dd', $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/\{dd\}/i', 'dd', $maskwithonlyymcode);
$maskwithonlyymcode=preg_replace('/\{(c+)(0*)\}/i', $maskrefclient, $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/\{(c+)(0*)\}/i', $maskrefclient, $maskwithonlyymcode);
$maskwithonlyymcode=preg_replace('/\{(t+)\}/i', $masktype_value, $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/\{(t+)\}/i', $masktype_value, $maskwithonlyymcode);
$maskwithonlyymcode=preg_replace('/\{(u+)\}/i', $maskuser_value, $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/\{(u+)\}/i', $maskuser_value, $maskwithonlyymcode);
foreach($maskperso as $key => $val) foreach ($maskperso as $key => $val)
{ {
$maskwithonlyymcode=preg_replace('/'.preg_quote($val, '/').'/i', $maskpersonew[$key], $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/'.preg_quote($val, '/').'/i', $maskpersonew[$key], $maskwithonlyymcode);
} }
$maskwithnocode=$maskwithonlyymcode; $maskwithnocode = $maskwithonlyymcode;
$maskwithnocode=preg_replace('/\{yyyy\}/i', 'yyyy', $maskwithnocode); $maskwithnocode = preg_replace('/\{yyyy\}/i', 'yyyy', $maskwithnocode);
$maskwithnocode=preg_replace('/\{yy\}/i', 'yy', $maskwithnocode); $maskwithnocode = preg_replace('/\{yy\}/i', 'yy', $maskwithnocode);
$maskwithnocode=preg_replace('/\{y\}/i', 'y', $maskwithnocode); $maskwithnocode = preg_replace('/\{y\}/i', 'y', $maskwithnocode);
$maskwithnocode=preg_replace('/\{mm\}/i', 'mm', $maskwithnocode); $maskwithnocode = preg_replace('/\{mm\}/i', 'mm', $maskwithnocode);
// Now maskwithnocode = 0000ddmmyyyyccc for example // Now maskwithnocode = 0000ddmmyyyyccc for example
// and maskcounter = 0000 for example // and maskcounter = 0000 for example
//print "maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode."\n<br>"; //print "maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode."\n<br>";
//var_dump($reg); //var_dump($reg);
// If an offset is asked // If an offset is asked
if (! empty($reg[2]) && preg_match('/^\+/', $reg[2])) $maskoffset=preg_replace('/^\+/', '', $reg[2]); if (!empty($reg[2]) && preg_match('/^\+/', $reg[2])) $maskoffset = preg_replace('/^\+/', '', $reg[2]);
if (! empty($reg[3]) && preg_match('/^\+/', $reg[3])) $maskoffset=preg_replace('/^\+/', '', $reg[3]); if (!empty($reg[3]) && preg_match('/^\+/', $reg[3])) $maskoffset = preg_replace('/^\+/', '', $reg[3]);
// Define $sqlwhere // Define $sqlwhere
$sqlwhere=''; $sqlwhere = '';
$yearoffset=0; // Use year of current $date by default $yearoffset = 0; // Use year of current $date by default
$yearoffsettype=false; // false: no reset, 0,-,=,+: reset at offset SOCIETE_FISCAL_MONTH_START, x=reset at offset x $yearoffsettype = false; // false: no reset, 0,-,=,+: reset at offset SOCIETE_FISCAL_MONTH_START, x=reset at offset x
// If a restore to zero after a month is asked we check if there is already a value for this year. // If a restore to zero after a month is asked we check if there is already a value for this year.
if (! empty($reg[2]) && preg_match('/^@/', $reg[2])) $yearoffsettype = preg_replace('/^@/', '', $reg[2]); if (!empty($reg[2]) && preg_match('/^@/', $reg[2])) $yearoffsettype = preg_replace('/^@/', '', $reg[2]);
if (! empty($reg[3]) && preg_match('/^@/', $reg[3])) $yearoffsettype = preg_replace('/^@/', '', $reg[3]); if (!empty($reg[3]) && preg_match('/^@/', $reg[3])) $yearoffsettype = preg_replace('/^@/', '', $reg[3]);
//print "yearoffset=".$yearoffset." yearoffsettype=".$yearoffsettype; //print "yearoffset=".$yearoffset." yearoffsettype=".$yearoffsettype;
if (is_numeric($yearoffsettype) && $yearoffsettype >= 1) if (is_numeric($yearoffsettype) && $yearoffsettype >= 1)
$maskraz=$yearoffsettype; // For backward compatibility $maskraz = $yearoffsettype; // For backward compatibility
elseif ($yearoffsettype === '0' || (! empty($yearoffsettype) && ! is_numeric($yearoffsettype) && $conf->global->SOCIETE_FISCAL_MONTH_START > 1)) elseif ($yearoffsettype === '0' || (!empty($yearoffsettype) && !is_numeric($yearoffsettype) && $conf->global->SOCIETE_FISCAL_MONTH_START > 1))
$maskraz = $conf->global->SOCIETE_FISCAL_MONTH_START; $maskraz = $conf->global->SOCIETE_FISCAL_MONTH_START;
//print "maskraz=".$maskraz; // -1=no reset //print "maskraz=".$maskraz; // -1=no reset
@ -1161,24 +1161,24 @@ function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $
if ($maskrefclient) if ($maskrefclient)
{ {
//print "maskrefclient=".$maskrefclient." maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode." maskrefclient_clientcode=".$maskrefclient_clientcode."\n<br>";exit; //print "maskrefclient=".$maskrefclient." maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode." maskrefclient_clientcode=".$maskrefclient_clientcode."\n<br>";exit;
$maskrefclient_maskbefore='{'.$maskrefclient.'}'; $maskrefclient_maskbefore = '{'.$maskrefclient.'}';
$maskrefclient_maskafter=$maskrefclient_clientcode.str_pad($maskrefclient_counter, dol_strlen($maskrefclient_maskcounter), "0", STR_PAD_LEFT); $maskrefclient_maskafter = $maskrefclient_clientcode.str_pad($maskrefclient_counter, dol_strlen($maskrefclient_maskcounter), "0", STR_PAD_LEFT);
$numFinal = str_replace($maskrefclient_maskbefore, $maskrefclient_maskafter, $numFinal); $numFinal = str_replace($maskrefclient_maskbefore, $maskrefclient_maskafter, $numFinal);
} }
// Now we replace the type // Now we replace the type
if ($masktype) if ($masktype)
{ {
$masktype_maskbefore='{'.$masktype.'}'; $masktype_maskbefore = '{'.$masktype.'}';
$masktype_maskafter=$masktype_value; $masktype_maskafter = $masktype_value;
$numFinal = str_replace($masktype_maskbefore, $masktype_maskafter, $numFinal); $numFinal = str_replace($masktype_maskbefore, $masktype_maskafter, $numFinal);
} }
// Now we replace the user // Now we replace the user
if ($maskuser) if ($maskuser)
{ {
$maskuser_maskbefore='{'.$maskuser.'}'; $maskuser_maskbefore = '{'.$maskuser.'}';
$maskuser_maskafter=$maskuser_value; $maskuser_maskafter = $maskuser_value;
$numFinal = str_replace($maskuser_maskbefore, $maskuser_maskafter, $numFinal); $numFinal = str_replace($maskuser_maskbefore, $maskuser_maskafter, $numFinal);
} }
} }
@ -1214,69 +1214,69 @@ function get_string_between($string, $start, $end)
*/ */
function check_value($mask, $value) function check_value($mask, $value)
{ {
$result=0; $result = 0;
$hasglobalcounter=false; $hasglobalcounter = false;
// Extract value for mask counter, mask raz and mask offset // Extract value for mask counter, mask raz and mask offset
if (preg_match('/\{(0+)([@\+][0-9]+)?([@\+][0-9]+)?\}/i', $mask, $reg)) if (preg_match('/\{(0+)([@\+][0-9]+)?([@\+][0-9]+)?\}/i', $mask, $reg))
{ {
$masktri=$reg[1].(isset($reg[2])?$reg[2]:'').(isset($reg[3])?$reg[3]:''); $masktri = $reg[1].(isset($reg[2]) ? $reg[2] : '').(isset($reg[3]) ? $reg[3] : '');
$maskcounter=$reg[1]; $maskcounter = $reg[1];
$hasglobalcounter=true; $hasglobalcounter = true;
} }
else else
{ {
// setting some defaults so the rest of the code won't fail if there is a third party counter // setting some defaults so the rest of the code won't fail if there is a third party counter
$masktri='00000'; $masktri = '00000';
$maskcounter='00000'; $maskcounter = '00000';
} }
$maskraz=-1; $maskraz = -1;
$maskoffset=0; $maskoffset = 0;
if (dol_strlen($maskcounter) < 3) return 'ErrorCounterMustHaveMoreThan3Digits'; if (dol_strlen($maskcounter) < 3) return 'ErrorCounterMustHaveMoreThan3Digits';
// Extract value for third party mask counter // Extract value for third party mask counter
if (preg_match('/\{(c+)(0*)\}/i', $mask, $regClientRef)) if (preg_match('/\{(c+)(0*)\}/i', $mask, $regClientRef))
{ {
$maskrefclient=$regClientRef[1].$regClientRef[2]; $maskrefclient = $regClientRef[1].$regClientRef[2];
$maskrefclient_maskclientcode=$regClientRef[1]; $maskrefclient_maskclientcode = $regClientRef[1];
$maskrefclient_maskcounter=$regClientRef[2]; $maskrefclient_maskcounter = $regClientRef[2];
$maskrefclient_maskoffset=0; //default value of maskrefclient_counter offset $maskrefclient_maskoffset = 0; //default value of maskrefclient_counter offset
$maskrefclient_clientcode=substr('', 0, dol_strlen($maskrefclient_maskclientcode));//get n first characters of client code to form maskrefclient_clientcode $maskrefclient_clientcode = substr('', 0, dol_strlen($maskrefclient_maskclientcode)); //get n first characters of client code to form maskrefclient_clientcode
$maskrefclient_clientcode=str_pad($maskrefclient_clientcode, dol_strlen($maskrefclient_maskclientcode), "#", STR_PAD_RIGHT);//padding maskrefclient_clientcode for having exactly n characters in maskrefclient_clientcode $maskrefclient_clientcode = str_pad($maskrefclient_clientcode, dol_strlen($maskrefclient_maskclientcode), "#", STR_PAD_RIGHT); //padding maskrefclient_clientcode for having exactly n characters in maskrefclient_clientcode
$maskrefclient_clientcode=dol_string_nospecial($maskrefclient_clientcode);//sanitize maskrefclient_clientcode for sql insert and sql select like $maskrefclient_clientcode = dol_string_nospecial($maskrefclient_clientcode); //sanitize maskrefclient_clientcode for sql insert and sql select like
if (dol_strlen($maskrefclient_maskcounter) > 0 && dol_strlen($maskrefclient_maskcounter) < 3) return 'ErrorCounterMustHaveMoreThan3Digits'; if (dol_strlen($maskrefclient_maskcounter) > 0 && dol_strlen($maskrefclient_maskcounter) < 3) return 'ErrorCounterMustHaveMoreThan3Digits';
} }
else $maskrefclient=''; else $maskrefclient = '';
// fail if there is neither a global nor a third party counter // fail if there is neither a global nor a third party counter
if (! $hasglobalcounter && ($maskrefclient_maskcounter == '')) if (!$hasglobalcounter && ($maskrefclient_maskcounter == ''))
{ {
return 'ErrorBadMask'; return 'ErrorBadMask';
} }
$maskwithonlyymcode=$mask; $maskwithonlyymcode = $mask;
$maskwithonlyymcode=preg_replace('/\{(0+)([@\+][0-9]+)?([@\+][0-9]+)?\}/i', $maskcounter, $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/\{(0+)([@\+][0-9]+)?([@\+][0-9]+)?\}/i', $maskcounter, $maskwithonlyymcode);
$maskwithonlyymcode=preg_replace('/\{dd\}/i', 'dd', $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/\{dd\}/i', 'dd', $maskwithonlyymcode);
$maskwithonlyymcode=preg_replace('/\{(c+)(0*)\}/i', $maskrefclient, $maskwithonlyymcode); $maskwithonlyymcode = preg_replace('/\{(c+)(0*)\}/i', $maskrefclient, $maskwithonlyymcode);
$maskwithnocode=$maskwithonlyymcode; $maskwithnocode = $maskwithonlyymcode;
$maskwithnocode=preg_replace('/\{yyyy\}/i', 'yyyy', $maskwithnocode); $maskwithnocode = preg_replace('/\{yyyy\}/i', 'yyyy', $maskwithnocode);
$maskwithnocode=preg_replace('/\{yy\}/i', 'yy', $maskwithnocode); $maskwithnocode = preg_replace('/\{yy\}/i', 'yy', $maskwithnocode);
$maskwithnocode=preg_replace('/\{y\}/i', 'y', $maskwithnocode); $maskwithnocode = preg_replace('/\{y\}/i', 'y', $maskwithnocode);
$maskwithnocode=preg_replace('/\{mm\}/i', 'mm', $maskwithnocode); $maskwithnocode = preg_replace('/\{mm\}/i', 'mm', $maskwithnocode);
// Now maskwithnocode = 0000ddmmyyyyccc for example // Now maskwithnocode = 0000ddmmyyyyccc for example
// and maskcounter = 0000 for example // and maskcounter = 0000 for example
//print "maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode."\n<br>"; //print "maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode."\n<br>";
// If an offset is asked // If an offset is asked
if (! empty($reg[2]) && preg_match('/^\+/', $reg[2])) $maskoffset=preg_replace('/^\+/', '', $reg[2]); if (!empty($reg[2]) && preg_match('/^\+/', $reg[2])) $maskoffset = preg_replace('/^\+/', '', $reg[2]);
if (! empty($reg[3]) && preg_match('/^\+/', $reg[3])) $maskoffset=preg_replace('/^\+/', '', $reg[3]); if (!empty($reg[3]) && preg_match('/^\+/', $reg[3])) $maskoffset = preg_replace('/^\+/', '', $reg[3]);
// Define $sqlwhere // Define $sqlwhere
// If a restore to zero after a month is asked we check if there is already a value for this year. // If a restore to zero after a month is asked we check if there is already a value for this year.
if (! empty($reg[2]) && preg_match('/^@/', $reg[2])) $maskraz=preg_replace('/^@/', '', $reg[2]); if (!empty($reg[2]) && preg_match('/^@/', $reg[2])) $maskraz = preg_replace('/^@/', '', $reg[2]);
if (! empty($reg[3]) && preg_match('/^@/', $reg[3])) $maskraz=preg_replace('/^@/', '', $reg[3]); if (!empty($reg[3]) && preg_match('/^@/', $reg[3])) $maskraz = preg_replace('/^@/', '', $reg[3]);
if ($maskraz >= 0) if ($maskraz >= 0)
{ {
if ($maskraz == 99) { if ($maskraz == 99) {
@ -1286,8 +1286,8 @@ function check_value($mask, $value)
if ($maskraz > 12) return 'ErrorBadMaskBadRazMonth'; if ($maskraz > 12) return 'ErrorBadMaskBadRazMonth';
// Define reg // Define reg
if ($maskraz > 1 && ! preg_match('/^(.*)\{(y+)\}\{(m+)\}/i', $maskwithonlyymcode, $reg)) return 'ErrorCantUseRazInStartedYearIfNoYearMonthInMask'; if ($maskraz > 1 && !preg_match('/^(.*)\{(y+)\}\{(m+)\}/i', $maskwithonlyymcode, $reg)) return 'ErrorCantUseRazInStartedYearIfNoYearMonthInMask';
if ($maskraz <= 1 && ! preg_match('/^(.*)\{(y+)\}/i', $maskwithonlyymcode, $reg)) return 'ErrorCantUseRazIfNoYearInMask'; if ($maskraz <= 1 && !preg_match('/^(.*)\{(y+)\}/i', $maskwithonlyymcode, $reg)) return 'ErrorCantUseRazIfNoYearInMask';
//print "x".$maskwithonlyymcode." ".$maskraz; //print "x".$maskwithonlyymcode." ".$maskraz;
} }
//print "masktri=".$masktri." maskcounter=".$maskcounter." maskraz=".$maskraz." maskoffset=".$maskoffset."<br>\n"; //print "masktri=".$masktri." maskcounter=".$maskcounter." maskraz=".$maskraz." maskoffset=".$maskoffset."<br>\n";
@ -1616,16 +1616,16 @@ function version_webserver()
*/ */
function getListOfModels($db, $type, $maxfilenamelength = 0) function getListOfModels($db, $type, $maxfilenamelength = 0)
{ {
global $conf,$langs; global $conf, $langs;
$liste=array(); $liste = array();
$found=0; $found = 0;
$dirtoscan=''; $dirtoscan = '';
$sql = "SELECT nom as id, nom as doc_template_name, libelle as label, description as description"; $sql = "SELECT nom as id, nom as doc_template_name, libelle as label, description as description";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; $sql .= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'"; $sql .= " WHERE type = '".$type."'";
$sql.= " AND entity IN (0,".$conf->entity.")"; $sql .= " AND entity IN (0,".$conf->entity.")";
$sql.= " ORDER BY description DESC"; $sql .= " ORDER BY description DESC";
dol_syslog('/core/lib/function2.lib.php::getListOfModels', LOG_DEBUG); dol_syslog('/core/lib/function2.lib.php::getListOfModels', LOG_DEBUG);
$resql = $db->query($sql); $resql = $db->query($sql);
@ -1635,48 +1635,48 @@ function getListOfModels($db, $type, $maxfilenamelength = 0)
$i = 0; $i = 0;
while ($i < $num) while ($i < $num)
{ {
$found=1; $found = 1;
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
// If this generation module needs to scan a directory, then description field is filled // If this generation module needs to scan a directory, then description field is filled
// with the constant that contains list of directories to scan (COMPANY_ADDON_PDF_ODT_PATH, ...). // with the constant that contains list of directories to scan (COMPANY_ADDON_PDF_ODT_PATH, ...).
if (! empty($obj->description)) // A list of directories to scan is defined if (!empty($obj->description)) // A list of directories to scan is defined
{ {
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
$const=$obj->description; $const = $obj->description;
//irtoscan.=($dirtoscan?',':'').preg_replace('/[\r\n]+/',',',trim($conf->global->$const)); //irtoscan.=($dirtoscan?',':'').preg_replace('/[\r\n]+/',',',trim($conf->global->$const));
$dirtoscan= preg_replace('/[\r\n]+/', ',', trim($conf->global->$const)); $dirtoscan = preg_replace('/[\r\n]+/', ',', trim($conf->global->$const));
$listoffiles=array(); $listoffiles = array();
// Now we add models found in directories scanned // Now we add models found in directories scanned
$listofdir=explode(',', $dirtoscan); $listofdir = explode(',', $dirtoscan);
foreach($listofdir as $key=>$tmpdir) foreach ($listofdir as $key=>$tmpdir)
{ {
$tmpdir=trim($tmpdir); $tmpdir = trim($tmpdir);
$tmpdir=preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir); $tmpdir = preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir);
if (! $tmpdir) { unset($listofdir[$key]); continue; } if (!$tmpdir) { unset($listofdir[$key]); continue; }
if (is_dir($tmpdir)) if (is_dir($tmpdir))
{ {
// all type of template is allowed // all type of template is allowed
$tmpfiles=dol_dir_list($tmpdir, 'files', 0, '', '', 'name', SORT_ASC, 0); $tmpfiles = dol_dir_list($tmpdir, 'files', 0, '', '', 'name', SORT_ASC, 0);
if (count($tmpfiles)) $listoffiles=array_merge($listoffiles, $tmpfiles); if (count($tmpfiles)) $listoffiles = array_merge($listoffiles, $tmpfiles);
} }
} }
if (count($listoffiles)) if (count($listoffiles))
{ {
foreach($listoffiles as $record) foreach ($listoffiles as $record)
{ {
$max=($maxfilenamelength?$maxfilenamelength:28); $max = ($maxfilenamelength ? $maxfilenamelength : 28);
$liste[$obj->id.':'.$record['fullname']]=dol_trunc($record['name'], $max, 'middle'); $liste[$obj->id.':'.$record['fullname']] = dol_trunc($record['name'], $max, 'middle');
} }
} }
else else
{ {
$liste[0]=$obj->label.': '.$langs->trans("None"); $liste[0] = $obj->label.': '.$langs->trans("None");
} }
} }
else else
@ -1685,14 +1685,14 @@ function getListOfModels($db, $type, $maxfilenamelength = 0)
{ {
global $_Avery_Labels; global $_Avery_Labels;
include_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; include_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php';
foreach($_Avery_Labels as $key => $val) foreach ($_Avery_Labels as $key => $val)
{ {
$liste[$obj->id.':'.$key]=($obj->label?$obj->label:$obj->doc_template_name).' '.$val['name']; $liste[$obj->id.':'.$key] = ($obj->label ? $obj->label : $obj->doc_template_name).' '.$val['name'];
} }
} }
else // Common usage else // Common usage
{ {
$liste[$obj->id]=$obj->label?$obj->label:$obj->doc_template_name; $liste[$obj->id] = $obj->label ? $obj->label : $obj->doc_template_name;
} }
} }
$i++; $i++;
@ -1829,13 +1829,13 @@ function dolGetElementUrl($objectid, $objecttype, $withpicto = 0, $option = '')
// Special cases, to work with non standard path // Special cases, to work with non standard path
if ($objecttype == 'facture' || $objecttype == 'invoice') { if ($objecttype == 'facture' || $objecttype == 'invoice') {
$classpath = 'compta/facture/class'; $classpath = 'compta/facture/class';
$module='facture'; $module = 'facture';
$myobject='facture'; $myobject = 'facture';
} }
elseif ($objecttype == 'commande' || $objecttype == 'order') { elseif ($objecttype == 'commande' || $objecttype == 'order') {
$classpath = 'commande/class'; $classpath = 'commande/class';
$module='commande'; $module = 'commande';
$myobject='commande'; $myobject = 'commande';
} }
elseif ($objecttype == 'propal') { elseif ($objecttype == 'propal') {
$classpath = 'comm/propal/class'; $classpath = 'comm/propal/class';
@ -1855,43 +1855,43 @@ function dolGetElementUrl($objectid, $objecttype, $withpicto = 0, $option = '')
} }
elseif ($objecttype == 'contract') { elseif ($objecttype == 'contract') {
$classpath = 'contrat/class'; $classpath = 'contrat/class';
$module='contrat'; $module = 'contrat';
$myobject='contrat'; $myobject = 'contrat';
} }
elseif ($objecttype == 'member') { elseif ($objecttype == 'member') {
$classpath = 'adherents/class'; $classpath = 'adherents/class';
$module='adherent'; $module = 'adherent';
$myobject='adherent'; $myobject = 'adherent';
} }
elseif ($objecttype == 'cabinetmed_cons') { elseif ($objecttype == 'cabinetmed_cons') {
$classpath = 'cabinetmed/class'; $classpath = 'cabinetmed/class';
$module='cabinetmed'; $module = 'cabinetmed';
$myobject='cabinetmedcons'; $myobject = 'cabinetmedcons';
} }
elseif ($objecttype == 'fichinter') { elseif ($objecttype == 'fichinter') {
$classpath = 'fichinter/class'; $classpath = 'fichinter/class';
$module='ficheinter'; $module = 'ficheinter';
$myobject='fichinter'; $myobject = 'fichinter';
} }
elseif ($objecttype == 'task') { elseif ($objecttype == 'task') {
$classpath = 'projet/class'; $classpath = 'projet/class';
$module='projet'; $module = 'projet';
$myobject='task'; $myobject = 'task';
} }
elseif ($objecttype == 'stock') { elseif ($objecttype == 'stock') {
$classpath = 'product/stock/class'; $classpath = 'product/stock/class';
$module='stock'; $module = 'stock';
$myobject='stock'; $myobject = 'stock';
} }
elseif ($objecttype == 'inventory') { elseif ($objecttype == 'inventory') {
$classpath = 'product/inventory/class'; $classpath = 'product/inventory/class';
$module='stock'; $module = 'stock';
$myobject='inventory'; $myobject = 'inventory';
} }
elseif ($objecttype == 'mo') { elseif ($objecttype == 'mo') {
$classpath = 'mrp/class'; $classpath = 'mrp/class';
$module='mrp'; $module = 'mrp';
$myobject='mo'; $myobject = 'mo';
} }
// Generic case for $classfile and $classname // Generic case for $classfile and $classname
@ -2257,9 +2257,9 @@ function colorStringToArray($stringcolor, $colorifnotfound = array(88, 88, 88))
*/ */
function colorValidateHex($color, $allow_white = true) function colorValidateHex($color, $allow_white = true)
{ {
if(!$allow_white && ($color === '#fff' || $color === '#ffffff') ) return false; if (!$allow_white && ($color === '#fff' || $color === '#ffffff')) return false;
if(preg_match('/^#[a-f0-9]{6}$/i', $color)) //hex color is valid if (preg_match('/^#[a-f0-9]{6}$/i', $color)) //hex color is valid
{ {
return true; return true;
} }
@ -2607,9 +2607,9 @@ function convertBackOfficeMediasLinksToPublicLinks($notetoshow)
{ {
global $dolibarr_main_url_root; global $dolibarr_main_url_root;
// Define $urlwithroot // Define $urlwithroot
$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); $urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
$notetoshow=preg_replace('/src="[a-zA-Z0-9_\/\-\.]*(viewimage\.php\?modulepart=medias[^"]*)"/', 'src="'.$urlwithroot.'/\1"', $notetoshow); $notetoshow = preg_replace('/src="[a-zA-Z0-9_\/\-\.]*(viewimage\.php\?modulepart=medias[^"]*)"/', 'src="'.$urlwithroot.'/\1"', $notetoshow);
return $notetoshow; return $notetoshow;
} }

View File

@ -105,6 +105,8 @@ class mailing_contacts1 extends MailingTargets
$sql.= " WHERE c.entity IN (".getEntity('socpeople').")"; $sql.= " WHERE c.entity IN (".getEntity('socpeople').")";
$sql.= " AND c.email != ''"; // Note that null != '' is false $sql.= " AND c.email != ''"; // Note that null != '' is false
$sql.= " AND c.no_email = 0"; $sql.= " AND c.no_email = 0";
$sql .= " AND (SELECT count(*) FROM ". MAIN_DB_PREFIX . "mailing_unsubscribe WHERE email = c.email) = 0";
// exclude unsubscribed users
$sql.= " AND c.statut = 1"; $sql.= " AND c.statut = 1";
// The request must return a field called "nb" to be understandable by parent::getNbOfRecipients // The request must return a field called "nb" to be understandable by parent::getNbOfRecipients
@ -384,6 +386,8 @@ class mailing_contacts1 extends MailingTargets
$sql.= " WHERE sp.entity IN (".getEntity('socpeople').")"; $sql.= " WHERE sp.entity IN (".getEntity('socpeople').")";
$sql.= " AND sp.email <> ''"; $sql.= " AND sp.email <> ''";
$sql.= " AND sp.no_email = 0"; $sql.= " AND sp.no_email = 0";
$sql .= " AND (SELECT count(*) FROM ". MAIN_DB_PREFIX . "mailing_unsubscribe WHERE email = sp.email) = 0";
// Exclude unsubscribed email adresses
$sql.= " AND sp.statut = 1"; $sql.= " AND sp.statut = 1";
$sql.= " AND sp.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$mailing_id.")"; $sql.= " AND sp.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$mailing_id.")";
// Filter on category // Filter on category

View File

@ -51,6 +51,7 @@ create table llx_object_lang
ALTER TABLE llx_object_lang ADD UNIQUE INDEX uk_object_lang (fk_object, type_object, property, lang); ALTER TABLE llx_object_lang ADD UNIQUE INDEX uk_object_lang (fk_object, type_object, property, lang);
ALTER TABLE llx_accounting_account ADD COLUMN labelshort varchar(255) DEFAULT NULL after label;
ALTER TABLE llx_subscription ADD COLUMN fk_user_creat integer DEFAULT NULL; ALTER TABLE llx_subscription ADD COLUMN fk_user_creat integer DEFAULT NULL;
ALTER TABLE llx_subscription ADD COLUMN fk_user_valid integer DEFAULT NULL; ALTER TABLE llx_subscription ADD COLUMN fk_user_valid integer DEFAULT NULL;

View File

@ -1,7 +1,7 @@
-- ============================================================================ -- ============================================================================
-- Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> -- Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es> -- Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
-- Copyright (C) 2016 Alexandre Spangaro <aspangaro@open-dsi.fr> -- Copyright (C) 2016-2020 Alexandre Spangaro <aspangaro@open-dsi.fr>
-- --
-- This program is free software; you can redistribute it and/or modify -- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by -- it under the terms of the GNU General Public License as published by
@ -31,6 +31,7 @@ create table llx_accounting_account
account_number varchar(32) NOT NULL, account_number varchar(32) NOT NULL,
account_parent integer DEFAULT 0, -- Hierarchic parent. account_parent integer DEFAULT 0, -- Hierarchic parent.
label varchar(255) NOT NULL, label varchar(255) NOT NULL,
labelshort varchar(255) DEFAULT NULL,
fk_accounting_category integer DEFAULT 0, -- ID of personalized group for report fk_accounting_category integer DEFAULT 0, -- ID of personalized group for report
fk_user_author integer DEFAULT NULL, fk_user_author integer DEFAULT NULL,
fk_user_modif integer DEFAULT NULL, fk_user_modif integer DEFAULT NULL,

View File

@ -48,7 +48,7 @@ class mod_myobject_advanced extends ModeleNumRefMyObject
/** /**
* @var string name * @var string name
*/ */
public $name='advanced'; public $name = 'advanced';
/** /**
@ -65,28 +65,28 @@ class mod_myobject_advanced extends ModeleNumRefMyObject
$form = new Form($db); $form = new Form($db);
$texte = $langs->trans('GenericNumRefModelDesc')."<br>\n"; $texte = $langs->trans('GenericNumRefModelDesc')."<br>\n";
$texte.= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">'; $texte .= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
$texte.= '<input type="hidden" name="token" value="'.newToken().'">'; $texte .= '<input type="hidden" name="token" value="'.newToken().'">';
$texte.= '<input type="hidden" name="action" value="updateMask">'; $texte .= '<input type="hidden" name="action" value="updateMask">';
$texte.= '<input type="hidden" name="maskconstBom" value="MYMODULE_MYOBJECT_ADVANCED_MASK">'; $texte .= '<input type="hidden" name="maskconstBom" value="MYMODULE_MYOBJECT_ADVANCED_MASK">';
$texte.= '<table class="nobordernopadding" width="100%">'; $texte .= '<table class="nobordernopadding" width="100%">';
$tooltip=$langs->trans("GenericMaskCodes", $langs->transnoentities("MyObject"), $langs->transnoentities("MyObject")); $tooltip = $langs->trans("GenericMaskCodes", $langs->transnoentities("MyObject"), $langs->transnoentities("MyObject"));
$tooltip.=$langs->trans("GenericMaskCodes2"); $tooltip .= $langs->trans("GenericMaskCodes2");
$tooltip.=$langs->trans("GenericMaskCodes3"); $tooltip .= $langs->trans("GenericMaskCodes3");
$tooltip.=$langs->trans("GenericMaskCodes4a", $langs->transnoentities("MyObject"), $langs->transnoentities("MyObject")); $tooltip .= $langs->trans("GenericMaskCodes4a", $langs->transnoentities("MyObject"), $langs->transnoentities("MyObject"));
$tooltip.=$langs->trans("GenericMaskCodes5"); $tooltip .= $langs->trans("GenericMaskCodes5");
// Parametrage du prefix // Parametrage du prefix
$texte.= '<tr><td>'.$langs->trans("Mask").':</td>'; $texte .= '<tr><td>'.$langs->trans("Mask").':</td>';
$texte.= '<td class="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskMyObject" value="'.$conf->global->MYMODULE_MYOBJECT_ADVANCED_MASK.'">', $tooltip, 1, 1).'</td>'; $texte .= '<td class="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskMyObject" value="'.$conf->global->MYMODULE_MYOBJECT_ADVANCED_MASK.'">', $tooltip, 1, 1).'</td>';
$texte.= '<td class="left" rowspan="2">&nbsp; <input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button"></td>'; $texte .= '<td class="left" rowspan="2">&nbsp; <input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button"></td>';
$texte.= '</tr>'; $texte .= '</tr>';
$texte.= '</table>'; $texte .= '</table>';
$texte.= '</form>'; $texte .= '</form>';
return $texte; return $texte;
} }
@ -98,17 +98,17 @@ class mod_myobject_advanced extends ModeleNumRefMyObject
*/ */
public function getExample() public function getExample()
{ {
global $conf,$langs,$mysoc; global $conf, $langs, $mysoc;
$old_code_client=$mysoc->code_client; $old_code_client = $mysoc->code_client;
$old_code_type=$mysoc->typent_code; $old_code_type = $mysoc->typent_code;
$mysoc->code_client='CCCCCCCCCC'; $mysoc->code_client = 'CCCCCCCCCC';
$mysoc->typent_code='TTTTTTTTTT'; $mysoc->typent_code = 'TTTTTTTTTT';
$numExample = $this->getNextValue($mysoc, ''); $numExample = $this->getNextValue($mysoc, '');
$mysoc->code_client=$old_code_client; $mysoc->code_client = $old_code_client;
$mysoc->typent_code=$old_code_type; $mysoc->typent_code = $old_code_type;
if (! $numExample) if (!$numExample)
{ {
$numExample = $langs->trans('NotConfigured'); $numExample = $langs->trans('NotConfigured');
} }
@ -123,22 +123,22 @@ class mod_myobject_advanced extends ModeleNumRefMyObject
*/ */
public function getNextValue($object) public function getNextValue($object)
{ {
global $db,$conf; global $db, $conf;
require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
// We get cursor rule // We get cursor rule
$mask=$conf->global->MYMODULE_MYOBJECT_ADVANCED_MASK; $mask = $conf->global->MYMODULE_MYOBJECT_ADVANCED_MASK;
if (! $mask) if (!$mask)
{ {
$this->error='NotConfigured'; $this->error = 'NotConfigured';
return 0; return 0;
} }
$date = $object->date; $date = $object->date;
$numFinal=get_next_value($db, $mask, 'mymodule_myobject', 'ref', '', null, $date); $numFinal = get_next_value($db, $mask, 'mymodule_myobject', 'ref', '', null, $date);
return $numFinal; return $numFinal;
} }

View File

@ -36,17 +36,17 @@ class mod_myobject_standard extends ModeleNumRefMyObject
*/ */
public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
public $prefix='MYOBJECT'; public $prefix = 'MYOBJECT';
/** /**
* @var string Error code (or message) * @var string Error code (or message)
*/ */
public $error=''; public $error = '';
/** /**
* @var string name * @var string name
*/ */
public $name='standard'; public $name = 'standard';
/** /**
@ -80,26 +80,26 @@ class mod_myobject_standard extends ModeleNumRefMyObject
*/ */
public function canBeActivated() public function canBeActivated()
{ {
global $conf,$langs,$db; global $conf, $langs, $db;
$coyymm=''; $max=''; $coyymm = ''; $max = '';
$posindice=8; $posindice = 8;
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
$sql.= " FROM ".MAIN_DB_PREFIX."mymodule_myobject"; $sql .= " FROM ".MAIN_DB_PREFIX."mymodule_myobject";
$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
$sql.= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$resql=$db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
{ {
$row = $db->fetch_row($resql); $row = $db->fetch_row($resql);
if ($row) { $coyymm = substr($row[0], 0, 6); $max=$row[0]; } if ($row) { $coyymm = substr($row[0], 0, 6); $max = $row[0]; }
} }
if ($coyymm && ! preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) if ($coyymm && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm))
{ {
$langs->load("errors"); $langs->load("errors");
$this->error=$langs->trans('ErrorNumRefModel', $max); $this->error = $langs->trans('ErrorNumRefModel', $max);
return false; return false;
} }
@ -114,21 +114,21 @@ class mod_myobject_standard extends ModeleNumRefMyObject
*/ */
public function getNextValue($object) public function getNextValue($object)
{ {
global $db,$conf; global $db, $conf;
// D'abord on recupere la valeur max // D'abord on recupere la valeur max
$posindice=9; $posindice = 9;
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
$sql.= " FROM ".MAIN_DB_PREFIX."mymodule_myobject"; $sql .= " FROM ".MAIN_DB_PREFIX."mymodule_myobject";
$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
$sql.= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$resql=$db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
{ {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
if ($obj) $max = intval($obj->max); if ($obj) $max = intval($obj->max);
else $max=0; else $max = 0;
} }
else else
{ {
@ -137,11 +137,11 @@ class mod_myobject_standard extends ModeleNumRefMyObject
} }
//$date=time(); //$date=time();
$date=$object->date_creation; $date = $object->date_creation;
$yymm = strftime("%y%m", $date); $yymm = strftime("%y%m", $date);
if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is if ($max >= (pow(10, 4) - 1)) $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
else $num = sprintf("%04s", $max+1); else $num = sprintf("%04s", $max + 1);
dol_syslog("mod_myobject_standard::getNextValue return ".$this->prefix.$yymm."-".$num); dol_syslog("mod_myobject_standard::getNextValue return ".$this->prefix.$yymm."-".$num);
return $this->prefix.$yymm."-".$num; return $this->prefix.$yymm."-".$num;

View File

@ -491,7 +491,7 @@ class Mo extends CommonObject
if ($resql) { if ($resql) {
$num = $this->db->num_rows($resql); $num = $this->db->num_rows($resql);
$i=0; $i = 0;
while ($i < $num) { while ($i < $num) {
$obj = $this->db->fetch_object($resql); $obj = $this->db->fetch_object($resql);
if ($obj) { if ($obj) {
@ -543,7 +543,7 @@ class Mo extends CommonObject
$error++; $error++;
} }
if (! $error) { if (!$error) {
setEventMessages($langs->trans("RecordModifiedSuccessfully"), null, 'mesgs'); setEventMessages($langs->trans("RecordModifiedSuccessfully"), null, 'mesgs');
$this->db->commit(); $this->db->commit();
return 1; return 1;
@ -602,7 +602,7 @@ class Mo extends CommonObject
} }
// Lines to consume // Lines to consume
if (! $error) { if (!$error) {
foreach ($bom->lines as $line) foreach ($bom->lines as $line)
{ {
$moline = new MoLine($this->db); $moline = new MoLine($this->db);

View File

@ -169,24 +169,24 @@ if (empty($reshook))
$db->begin(); $db->begin();
// Process line to consume // Process line to consume
foreach($object->lines as $line) { foreach ($object->lines as $line) {
if ($line->role == 'toconsume') { if ($line->role == 'toconsume') {
$tmpproduct = new Product($db); $tmpproduct = new Product($db);
$tmpproduct->fetch($line->fk_product); $tmpproduct->fetch($line->fk_product);
$i=1; $i = 1;
while (GETPOSTISSET('qty-'.$line->id.'-'.$i)) { while (GETPOSTISSET('qty-'.$line->id.'-'.$i)) {
$qtytoprocess = price2num(GETPOST('qty-'.$line->id.'-'.$i)); $qtytoprocess = price2num(GETPOST('qty-'.$line->id.'-'.$i));
if ($qtytoprocess != 0) { if ($qtytoprocess != 0) {
// Check warehouse is set if we should have to // Check warehouse is set if we should have to
if (GETPOSTISSET('idwarehouse-'.$line->id.'-'.$i)) { // If there is a warehouse to set if (GETPOSTISSET('idwarehouse-'.$line->id.'-'.$i)) { // If there is a warehouse to set
if (! (GETPOST('idwarehouse-'.$line->id.'-'.$i) > 0)) { // If there is no warehouse set. if (!(GETPOST('idwarehouse-'.$line->id.'-'.$i) > 0)) { // If there is no warehouse set.
$langs->load("errors"); $langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref), null, 'errors');
$error++; $error++;
} }
if ($tmpproduct->status_batch && (! GETPOST('batch-'.$line->id.'-'.$i))) { if ($tmpproduct->status_batch && (!GETPOST('batch-'.$line->id.'-'.$i))) {
$langs->load("errors"); $langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref), null, 'errors');
$error++; $error++;
@ -194,7 +194,7 @@ if (empty($reshook))
} }
$idstockmove = 0; $idstockmove = 0;
if (! $error && GETPOST('idwarehouse-'.$line->id.'-'.$i) > 0) { if (!$error && GETPOST('idwarehouse-'.$line->id.'-'.$i) > 0) {
// Record stock movement // Record stock movement
$id_product_batch = 0; $id_product_batch = 0;
$stockmove->origin = $object; $stockmove->origin = $object;
@ -205,7 +205,7 @@ if (empty($reshook))
} }
} }
if (! $error) { if (!$error) {
$pos = 0; $pos = 0;
// Record consumption // Record consumption
$moline = new MoLine($db); $moline = new MoLine($db);
@ -236,24 +236,24 @@ if (empty($reshook))
} }
// Process line to produce // Process line to produce
foreach($object->lines as $line) { foreach ($object->lines as $line) {
if ($line->role == 'toproduce') { if ($line->role == 'toproduce') {
$tmpproduct = new Product($db); $tmpproduct = new Product($db);
$tmpproduct->fetch($line->fk_product); $tmpproduct->fetch($line->fk_product);
$i=1; $i = 1;
while (GETPOSTISSET('qtytoproduce-'.$line->id.'-'.$i)) { while (GETPOSTISSET('qtytoproduce-'.$line->id.'-'.$i)) {
$qtytoprocess = price2num(GETPOST('qtytoproduce-'.$line->id.'-'.$i)); $qtytoprocess = price2num(GETPOST('qtytoproduce-'.$line->id.'-'.$i));
if ($qtytoprocess != 0) { if ($qtytoprocess != 0) {
// Check warehouse is set if we should have to // Check warehouse is set if we should have to
if (GETPOSTISSET('idwarehousetoproduce-'.$line->id.'-'.$i)) { // If there is a warehouse to set if (GETPOSTISSET('idwarehousetoproduce-'.$line->id.'-'.$i)) { // If there is a warehouse to set
if (! (GETPOST('idwarehousetoproduce-'.$line->id.'-'.$i) > 0)) { // If there is no warehouse set. if (!(GETPOST('idwarehousetoproduce-'.$line->id.'-'.$i) > 0)) { // If there is no warehouse set.
$langs->load("errors"); $langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref), null, 'errors');
$error++; $error++;
} }
if ($tmpproduct->status_batch && (! GETPOST('batchtoproduce-'.$line->id.'-'.$i))) { if ($tmpproduct->status_batch && (!GETPOST('batchtoproduce-'.$line->id.'-'.$i))) {
$langs->load("errors"); $langs->load("errors");
setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref), null, 'errors');
$error++; $error++;
@ -261,7 +261,7 @@ if (empty($reshook))
} }
$idstockmove = 0; $idstockmove = 0;
if (! $error && GETPOST('idwarehousetoproduce-'.$line->id.'-'.$i) > 0) { if (!$error && GETPOST('idwarehousetoproduce-'.$line->id.'-'.$i) > 0) {
// Record stock movement // Record stock movement
$id_product_batch = 0; $id_product_batch = 0;
$stockmove->origin = $object; $stockmove->origin = $object;
@ -272,7 +272,7 @@ if (empty($reshook))
} }
} }
if (! $error) { if (!$error) {
$pos = 0; $pos = 0;
// Record production // Record production
$moline = new MoLine($db); $moline = new MoLine($db);
@ -302,16 +302,16 @@ if (empty($reshook))
} }
} }
if (! $error) { if (!$error) {
$consumptioncomplete = true; $consumptioncomplete = true;
$productioncomplete = true; $productioncomplete = true;
if (GETPOST('autoclose', 'int')) { if (GETPOST('autoclose', 'int')) {
foreach($object->lines as $line) { foreach ($object->lines as $line) {
if ($line->role == 'toconsume') { if ($line->role == 'toconsume') {
$arrayoflines = $object->fetchLinesLinked('consumed', $line->id); $arrayoflines = $object->fetchLinesLinked('consumed', $line->id);
$alreadyconsumed = 0; $alreadyconsumed = 0;
foreach($arrayoflines as $line2) { foreach ($arrayoflines as $line2) {
$alreadyconsumed += $line2['qty']; $alreadyconsumed += $line2['qty'];
} }
@ -322,7 +322,7 @@ if (empty($reshook))
if ($line->role == 'toproduce') { if ($line->role == 'toproduce') {
$arrayoflines = $object->fetchLinesLinked('produced', $line->id); $arrayoflines = $object->fetchLinesLinked('produced', $line->id);
$alreadyproduced = 0; $alreadyproduced = 0;
foreach($arrayoflines as $line2) { foreach ($arrayoflines as $line2) {
$alreadyproduced += $line2['qty']; $alreadyproduced += $line2['qty'];
} }
@ -649,8 +649,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
print '<td>'.$tmpproduct->getNomUrl(1).'</td>'; print '<td>'.$tmpproduct->getNomUrl(1).'</td>';
print '<td class="right">'; print '<td class="right">';
$help = ''; $help = '';
if ($line->qty_frozen) $help.=($help ? '<br>' : '').'<strong>'.$langs->trans("QuantityFrozen").'</strong>: '.yn(1).' ('.$langs->trans("QuantityConsumedInvariable").')'; if ($line->qty_frozen) $help .= ($help ? '<br>' : '').'<strong>'.$langs->trans("QuantityFrozen").'</strong>: '.yn(1).' ('.$langs->trans("QuantityConsumedInvariable").')';
if ($line->disable_stock_change) $help.=($help ? '<br>' : '').'<strong>'.$langs->trans("DisableStockChange").'</strong>: '.yn(1).' ('.(($tmpproduct->type == Product::TYPE_SERVICE && empty($conf->global->STOCK_SUPPORTS_SERVICES)) ? $langs->trans("NoStockChangeOnServices") : $langs->trans("DisableStockChangeHelp")).')'; if ($line->disable_stock_change) $help .= ($help ? '<br>' : '').'<strong>'.$langs->trans("DisableStockChange").'</strong>: '.yn(1).' ('.(($tmpproduct->type == Product::TYPE_SERVICE && empty($conf->global->STOCK_SUPPORTS_SERVICES)) ? $langs->trans("NoStockChangeOnServices") : $langs->trans("DisableStockChangeHelp")).')';
if ($help) { if ($help) {
print $form->textwithpicto($line->qty, $help, -1); print $form->textwithpicto($line->qty, $help, -1);
} else { } else {

View File

@ -36,58 +36,58 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php';
// Load translation files required by the page // Load translation files required by the page
$langs->loadLangs(array('projects','users','companies')); $langs->loadLangs(array('projects', 'users', 'companies'));
$action=GETPOST('action', 'aZ09'); $action = GETPOST('action', 'aZ09');
$mode=GETPOST("mode", 'alpha'); $mode = GETPOST("mode", 'alpha');
$id=GETPOST('id', 'int'); $id = GETPOST('id', 'int');
$taskid=GETPOST('taskid', 'int'); $taskid = GETPOST('taskid', 'int');
$contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'perweekcard'; $contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'perweekcard';
$mine=0; $mine = 0;
if ($mode == 'mine') $mine=1; if ($mode == 'mine') $mine = 1;
$projectid=''; $projectid = '';
$projectid=isset($_GET["id"])?$_GET["id"]:$_POST["projectid"]; $projectid = isset($_GET["id"]) ? $_GET["id"] : $_POST["projectid"];
$hookmanager->initHooks(array('timesheetperweekcard')); $hookmanager->initHooks(array('timesheetperweekcard'));
// Security check // Security check
$socid=0; $socid = 0;
// For external user, no check is done on company because readability is managed by public status of project and assignement. // For external user, no check is done on company because readability is managed by public status of project and assignement.
// if ($user->socid > 0) $socid=$user->socid; // if ($user->socid > 0) $socid=$user->socid;
$result = restrictedArea($user, 'projet', $projectid); $result = restrictedArea($user, 'projet', $projectid);
$now=dol_now(); $now = dol_now();
$nowtmp=dol_getdate($now); $nowtmp = dol_getdate($now);
$nowday=$nowtmp['mday']; $nowday = $nowtmp['mday'];
$nowmonth=$nowtmp['mon']; $nowmonth = $nowtmp['mon'];
$nowyear=$nowtmp['year']; $nowyear = $nowtmp['year'];
$year=GETPOST('reyear', 'int')?GETPOST('reyear', 'int'):(GETPOST("year", 'int')?GETPOST("year", "int"):date("Y")); $year = GETPOST('reyear', 'int') ?GETPOST('reyear', 'int') : (GETPOST("year", 'int') ?GETPOST("year", "int") : date("Y"));
$month=GETPOST('remonth', 'int')?GETPOST('remonth', 'int'):(GETPOST("month", 'int')?GETPOST("month", "int"):date("m")); $month = GETPOST('remonth', 'int') ?GETPOST('remonth', 'int') : (GETPOST("month", 'int') ?GETPOST("month", "int") : date("m"));
$day=GETPOST('reday', 'int')?GETPOST('reday', 'int'):(GETPOST("day", 'int')?GETPOST("day", "int"):date("d")); $day = GETPOST('reday', 'int') ?GETPOST('reday', 'int') : (GETPOST("day", 'int') ?GETPOST("day", "int") : date("d"));
$week=GETPOST("week", "int")?GETPOST("week", "int"):date("W"); $week = GETPOST("week", "int") ?GETPOST("week", "int") : date("W");
$day = (int) $day; $day = (int) $day;
$search_categ=GETPOST("search_categ", 'alpha'); $search_categ = GETPOST("search_categ", 'alpha');
$search_usertoprocessid=GETPOST('search_usertoprocessid', 'int'); $search_usertoprocessid = GETPOST('search_usertoprocessid', 'int');
$search_task_ref=GETPOST('search_task_ref', 'alpha'); $search_task_ref = GETPOST('search_task_ref', 'alpha');
$search_task_label=GETPOST('search_task_label', 'alpha'); $search_task_label = GETPOST('search_task_label', 'alpha');
$search_project_ref=GETPOST('search_project_ref', 'alpha'); $search_project_ref = GETPOST('search_project_ref', 'alpha');
$search_thirdparty=GETPOST('search_thirdparty', 'alpha'); $search_thirdparty = GETPOST('search_thirdparty', 'alpha');
$search_declared_progress=GETPOST('search_declared_progress', 'alpha'); $search_declared_progress = GETPOST('search_declared_progress', 'alpha');
$startdayarray=dol_get_first_day_week($day, $month, $year); $startdayarray = dol_get_first_day_week($day, $month, $year);
$prev = $startdayarray; $prev = $startdayarray;
$prev_year = $prev['prev_year']; $prev_year = $prev['prev_year'];
$prev_month = $prev['prev_month']; $prev_month = $prev['prev_month'];
$prev_day = $prev['prev_day']; $prev_day = $prev['prev_day'];
$first_day = $prev['first_day']; $first_day = $prev['first_day'];
$first_month= $prev['first_month']; $first_month = $prev['first_month'];
$first_year = $prev['first_year']; $first_year = $prev['first_year'];
$week = $prev['week']; $week = $prev['week'];
@ -808,27 +808,27 @@ if (count($tasksarray) > 0)
if ($conf->use_javascript_ajax) if ($conf->use_javascript_ajax)
{ {
print '<tr class="liste_total"> print '<tr class="liste_total">
<td class="liste_total" colspan="'.($colspan+$addcolspan).'">'; <td class="liste_total" colspan="'.($colspan + $addcolspan).'">';
print $langs->trans("Total"); print $langs->trans("Total");
print '<span class="opacitymediumbycolor"> - '.$langs->trans("ExpectedWorkedHours").': <strong>'.price($usertoprocess->weeklyhours, 1, $langs, 0, 0).'</strong></span>'; print '<span class="opacitymediumbycolor"> - '.$langs->trans("ExpectedWorkedHours").': <strong>'.price($usertoprocess->weeklyhours, 1, $langs, 0, 0).'</strong></span>';
print '</td>'; print '</td>';
for ($idw = 0; $idw < 7; $idw++) for ($idw = 0; $idw < 7; $idw++)
{ {
$cssweekend=''; $cssweekend = '';
if (($idw + 1) < $numstartworkingday || ($idw + 1) > $numendworkingday) // This is a day is not inside the setup of working days, so we use a week-end css. if (($idw + 1) < $numstartworkingday || ($idw + 1) > $numendworkingday) // This is a day is not inside the setup of working days, so we use a week-end css.
{ {
$cssweekend='weekend'; $cssweekend = 'weekend';
} }
$tmpday=dol_time_plus_duree($firstdaytoshow, $idw, 'd'); $tmpday = dol_time_plus_duree($firstdaytoshow, $idw, 'd');
$cssonholiday=''; $cssonholiday = '';
if (! $isavailable[$tmpday]['morning'] && ! $isavailable[$tmpday]['afternoon']) $cssonholiday.='onholidayallday '; if (!$isavailable[$tmpday]['morning'] && !$isavailable[$tmpday]['afternoon']) $cssonholiday .= 'onholidayallday ';
elseif (! $isavailable[$tmpday]['morning']) $cssonholiday.='onholidaymorning '; elseif (!$isavailable[$tmpday]['morning']) $cssonholiday .= 'onholidaymorning ';
elseif (! $isavailable[$tmpday]['afternoon']) $cssonholiday.='onholidayafternoon '; elseif (!$isavailable[$tmpday]['afternoon']) $cssonholiday .= 'onholidayafternoon ';
print '<td class="liste_total hide'.$idw.($cssonholiday?' '.$cssonholiday:'').($cssweekend?' '.$cssweekend:'').'" align="center"><div class="totalDay'.$idw.'">&nbsp;</div></td>'; print '<td class="liste_total hide'.$idw.($cssonholiday ? ' '.$cssonholiday : '').($cssweekend ? ' '.$cssweekend : '').'" align="center"><div class="totalDay'.$idw.'">&nbsp;</div></td>';
} }
print '<td class="liste_total center"><div class="totalDayAll">&nbsp;</div></td> print '<td class="liste_total center"><div class="totalDayAll">&nbsp;</div></td>
</tr>'; </tr>';