mostlyDone

This commit is contained in:
florian HENRY 2019-09-06 09:22:53 +02:00
commit dff7be59c8
106 changed files with 1032 additions and 829 deletions

View File

@ -7,4 +7,4 @@ linters:
fixer: true
fixers:
enable: true
enable: true

View File

@ -18,8 +18,8 @@ Following changes may create regressions for some external modules, but were nec
* The function show_theme() hase been renamed into showSkins()
* Rename 'module_part' parameter into 'modulepart' into document APIs, for consistency.
* The deprecated method get_OutstandingBill has been removed. You can use getOutstandingBills() instead.
* The hook "moreFamily" must return payment into var "totalpayment" and no more "paiement" (english replace french).
* Removed deprecated method actioncomm->add(), use create() instead
***** ChangeLog for 10.0.1 compared to 10.0.0 *****

View File

@ -1 +1 @@
Help wanted...
"Help wanted..."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

View File

@ -88,7 +88,7 @@ $hookmanager->initHooks(array('admin'));
// Put here declaration of dictionaries properties
// Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this.
$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0);
$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,32,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0);
// Name of SQL tables of dictionaries
$tabname=array();
@ -123,9 +123,10 @@ $tabname[28]= MAIN_DB_PREFIX."c_holiday_types";
$tabname[29]= MAIN_DB_PREFIX."c_lead_status";
$tabname[30]= MAIN_DB_PREFIX."c_format_cards";
//$tabname[31]= MAIN_DB_PREFIX."accounting_system";
//$tabname[32]= MAIN_DB_PREFIX."c_accounting_category";
$tabname[32]= MAIN_DB_PREFIX."c_hrm_public_holiday";
$tabname[33]= MAIN_DB_PREFIX."c_hrm_department";
$tabname[34]= MAIN_DB_PREFIX."c_hrm_function";
$tabname[35]= MAIN_DB_PREFIX."c_exp_tax_cat";
$tabname[36]= MAIN_DB_PREFIX."c_exp_tax_range";
$tabname[37]= MAIN_DB_PREFIX."c_units";
@ -163,7 +164,7 @@ $tablib[28]= "DictionaryHolidayTypes";
$tablib[29]= "DictionaryOpportunityStatus";
$tablib[30]= "DictionaryFormatCards";
//$tablib[31]= "DictionaryAccountancysystem";
//$tablib[32]= "DictionaryAccountancyCategory";
$tablib[32]= "DictionaryPublicHolidays";
$tablib[33]= "DictionaryDepartment";
$tablib[34]= "DictionaryFunction";
$tablib[35]= "DictionaryExpenseTaxCat";
@ -203,7 +204,7 @@ $tabsql[28]= "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.new
$tabsql[29]= "SELECT rowid as rowid, code, label, percent, position, active FROM ".MAIN_DB_PREFIX."c_lead_status";
$tabsql[30]= "SELECT rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active FROM ".MAIN_DB_PREFIX."c_format_cards";
//$tabsql[31]= "SELECT s.rowid as rowid, pcg_version, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s";
//$tabsql[32]= "SELECT a.rowid as rowid, a.code as code, a.label, a.range_account, a.sens, a.category_type, a.formula, a.position as position, a.fk_country as country_id, c.code as country_code, c.label as country, a.active FROM ".MAIN_DB_PREFIX."c_accounting_category as a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_country=c.rowid and c.active=1";
$tabsql[32]= "SELECT a.id as rowid, a.entity, a.code, a.fk_country as country_id, c.code as country_code, c.label as country, a.day, a.month, a.year, a.active FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday as a LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON a.fk_country=c.rowid AND c.active=1";
$tabsql[33]= "SELECT rowid, pos, code, label, active FROM ".MAIN_DB_PREFIX."c_hrm_department";
$tabsql[34]= "SELECT rowid, pos, code, label, c_level, active FROM ".MAIN_DB_PREFIX."c_hrm_function";
$tabsql[35]= "SELECT c.rowid, c.label, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_cat c";
@ -243,7 +244,7 @@ $tabsqlsort[28]="country ASC, code ASC";
$tabsqlsort[29]="position ASC";
$tabsqlsort[30]="code ASC";
//$tabsqlsort[31]="pcg_version ASC";
//$tabsqlsort[32]="position ASC";
$tabsqlsort[32]="year ASC, month ASC, day ASC";
$tabsqlsort[33]="code ASC";
$tabsqlsort[34]="code ASC";
$tabsqlsort[35]="c.label ASC";
@ -283,7 +284,7 @@ $tabfield[28]= "code,label,affect,delay,newbymonth,country_id,country";
$tabfield[29]= "code,label,percent,position";
$tabfield[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
//$tabfield[31]= "pcg_version,label";
//$tabfield[32]= "code,label,range_account,sens,category_type,formula,position,country_id,country";
$tabfield[32]= "code,year,month,day,country_id,country";
$tabfield[33]= "code,label";
$tabfield[34]= "code,label";
$tabfield[35]= "label";
@ -323,7 +324,7 @@ $tabfieldvalue[28]= "code,label,affect,delay,newbymonth,country";
$tabfieldvalue[29]= "code,label,percent,position";
$tabfieldvalue[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
//$tabfieldvalue[31]= "pcg_version,label";
//$tabfieldvalue[32]= "code,label,range_account,sens,category_type,formula,position,country";
$tabfieldvalue[32]= "code,day,month,year,country";
$tabfieldvalue[33]= "code,label";
$tabfieldvalue[34]= "code,label";
$tabfieldvalue[35]= "label";
@ -364,15 +365,16 @@ $tabfieldinsert[29]= "code,label,percent,position";
$tabfieldinsert[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
//$tabfieldinsert[31]= "pcg_version,label";
//$tabfieldinsert[32]= "code,label,range_account,sens,category_type,formula,position,fk_country";
$tabfieldinsert[32]= "code,day,month,year,fk_country";
$tabfieldinsert[33]= "code,label";
$tabfieldinsert[34]= "code,label";
$tabfieldinsert[35]= "label";
$tabfieldinsert[36]= "range_ik,fk_c_exp_tax_cat";
$tabfieldinsert[37]= "code,label,short_label,unit_type,scale";
// Rowid name if the field is not autoincrement type
// Example: "" if id field is "rowid" and has autoincrement on
// "nameoffield" if id field is not "rowid" or has not autoincrement on
// Rowid name of field depending if field is autoincrement on or off..
// Use "" if id field is "rowid" and has autoincrement on
// Use "nameoffield" if id field is not "rowid" or has not autoincrement on
$tabrowid=array();
$tabrowid[1] = "";
$tabrowid[2] = "";
@ -405,7 +407,7 @@ $tabrowid[28]= "";
$tabrowid[29]= "";
$tabrowid[30]= "";
//$tabrowid[31]= "";
//$tabrowid[32]= "";
$tabrowid[32]= "id";
$tabrowid[33]= "rowid";
$tabrowid[34]= "rowid";
$tabrowid[35]= "";
@ -445,7 +447,7 @@ $tabcond[28]= ! empty($conf->holiday->enabled);
$tabcond[29]= ! empty($conf->projet->enabled);
$tabcond[30]= ! empty($conf->label->enabled);
//$tabcond[31]= ! empty($conf->accounting->enabled);
//$tabcond[32]= ! empty($conf->accounting->enabled);
$tabcond[32]= (! empty($conf->holiday->enabled) || ! empty($conf->hrm->enabled));
$tabcond[33]= ! empty($conf->hrm->enabled);
$tabcond[34]= ! empty($conf->hrm->enabled);
$tabcond[35]= ! empty($conf->expensereport->enabled);
@ -485,12 +487,12 @@ $tabhelp[28] = array('affect'=>$langs->trans("FollowedByACounter"),'delay'=>$lan
$tabhelp[29] = array('code'=>$langs->trans("EnterAnyCode"), 'percent'=>$langs->trans("OpportunityPercent"), 'position'=>$langs->trans("PositionIntoComboList"));
$tabhelp[30] = array('code'=>$langs->trans("EnterAnyCode"), 'name'=>$langs->trans("LabelName"), 'paper_size'=>$langs->trans("LabelPaperSize"));
//$tabhelp[31] = array('pcg_version'=>$langs->trans("EnterAnyCode"));
//$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"));
$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"), 'daterule'=>"Use 'date'", 'country'=>$langs->trans("EnterACountryOnlyIfSpecificToOneCountry"), 'year'=>$langs->trans("ZeroMeansEveryYear"));
$tabhelp[33] = array('code'=>$langs->trans("EnterAnyCode"));
$tabhelp[34] = array('code'=>$langs->trans("EnterAnyCode"));
$tabhelp[35]= array();
$tabhelp[36]= array('range_ik'=>$langs->trans('PrevRangeToThisRange'));
$tabhelp[37]= array('code'=>$langs->trans("EnterAnyCode"));
$tabhelp[35] = array();
$tabhelp[36] = array('range_ik'=>$langs->trans('PrevRangeToThisRange'));
$tabhelp[37] = array('code'=>$langs->trans("EnterAnyCode"));
// List of check for fields (NOT USED YET)
$tabfieldcheck=array();
@ -525,12 +527,12 @@ $tabfieldcheck[28] = array();
$tabfieldcheck[29] = array();
$tabfieldcheck[30] = array();
//$tabfieldcheck[31] = array();
//$tabfieldcheck[32] = array();
$tabfieldcheck[32] = array();
$tabfieldcheck[33] = array();
$tabfieldcheck[34] = array();
$tabfieldcheck[35]= array();
$tabfieldcheck[36]= array();
$tabfieldcheck[37]= array();
$tabfieldcheck[35] = array();
$tabfieldcheck[36] = array();
$tabfieldcheck[37] = array();
// Complete all arrays with entries found into modules
complete_dictionary_with_modules($taborder, $tabname, $tablib, $tabsql, $tabsqlsort, $tabfield, $tabfieldvalue, $tabfieldinsert, $tabrowid, $tabcond, $tabhelp, $tabfieldcheck);
@ -621,9 +623,11 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
$ok=1;
foreach ($listfield as $f => $value)
{
if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes','DictionaryRevenueStamp','DictionaryAccountancysystem','DictionaryAccountancyCategory'))) continue; // For some pages, country is not mandatory
if ($value == 'country' && in_array($tablib[$id], array('DictionaryCanton','DictionaryCompanyType','DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory
if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue;
// Discard check of mandatory fields for country for some tables
if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryPublicHolidays','DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes','DictionaryRevenueStamp','DictionaryAccountancysystem','DictionaryAccountancyCategory'))) continue; // For some pages, country is not mandatory
if ($value == 'country' && in_array($tablib[$id], array('DictionaryPublicHolidays','DictionaryCanton','DictionaryCompanyType','DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory
// Discard check of mandatory fiedls for other fields
if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue;
if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue;
if ($value == 'color' && empty($_POST['color'])) continue;
if ($value == 'formula' && empty($_POST['formula'])) continue;
@ -992,8 +996,10 @@ if ($id)
if (! preg_match('/ WHERE /', $sql)) $sql.= " WHERE 1 = 1";
if ($search_country_id > 0) $sql.= " AND c.rowid = ".$search_country_id;
if ($search_code != '' && $id != 9) $sql.= natural_search("code", $search_code);
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);
elseif ($search_code != '' && $id != 9) $sql.= natural_search("code", $search_code);
if ($sortfield)
{
@ -1053,7 +1059,7 @@ if ($id)
continue;
}
// Define field friedly name from its technical name
// Define field friendly name from its technical name
$valuetoshow=ucfirst($fieldlist[$field]); // Par defaut
$valuetoshow=$langs->trans($valuetoshow); // try to translate
$class='';
@ -1156,7 +1162,8 @@ if ($id)
print '</tr>';
// Line to enter new values
print '<!-- line to add new entry --><tr class="oddeven nodrag nodrop nohover">';
print '<!-- line to add new entry -->';
print '<tr class="oddeven nodrag nodrop nohover">';
$obj = new stdClass();
// If data was already input, we define them in obj to populate input fields.
@ -1632,10 +1639,10 @@ if ($id)
if ($obj->code == 'RECEP') $canbemodified=1;
if ($tabname[$id] == MAIN_DB_PREFIX."c_actioncomm") $canbemodified=1;
// Url
// Build Url. The table is id=, the id of line is rowid=
$rowidcol=$tabrowid[$id];
// If rowidcol not defined
if (empty($rowidcol) || in_array($id, array(6,7,8,13,17,19,27))) $rowidcol='rowid';
if (empty($rowidcol) || in_array($id, array(6,7,8,13,17,19,27,32))) $rowidcol='rowid';
$url = $_SERVER["PHP_SELF"].'?'.($page?'page='.$page.'&':'').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.((! empty($obj->{$rowidcol}) || $obj->{$rowidcol} == '0')?$obj->{$rowidcol}:(! empty($obj->code)?urlencode($obj->code):'')).'&code='.(! empty($obj->code)?urlencode($obj->code):'');
if (! empty($param)) $url .= '&'.$param;
if (! is_null($withentity)) $url .= '&entity='.$withentity;
@ -1971,7 +1978,6 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '')
}
else
{
$fieldValue = isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'';
if ($fieldlist[$field]=='sortorder')
@ -1981,11 +1987,11 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '')
$classtd=''; $class='';
if ($fieldlist[$field]=='code') $class='maxwidth100';
if (in_array($fieldlist[$field], array('pos', 'use_default', 'affect', 'delay', 'position', 'sortorder', 'sens', 'category_type'))) $class='maxwidth50';
if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'pos', 'use_default', 'affect', 'delay', 'position', 'sortorder', 'sens', 'category_type'))) $class='maxwidth50';
if (in_array($fieldlist[$field], array('libelle', 'label', 'tracking'))) $class='quatrevingtpercent';
print '<td class="'.$classtd.'">';
$transfound=0;
if (in_array($fieldlist[$field], array('label','libelle')))
if (in_array($fieldlist[$field], array('label','libelle'))) // For label
{
$transkey='';
// Special case for labels

View File

@ -158,8 +158,10 @@ $head = mailmanspip_admin_prepare_head();
if (! empty($conf->global->ADHERENT_USE_MAILMAN))
{
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="update">';
dol_fiche_head($head, 'mailman', $langs->trans("Setup"), 0, 'user');
dol_fiche_head($head, 'mailman', $langs->trans("Setup"), -1, 'user');
//$link=img_picto($langs->trans("Active"),'tick').' ';
$link='<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=unset&value=0&name=ADHERENT_USE_MAILMAN">';
@ -227,14 +229,21 @@ else
if (! empty($conf->global->ADHERENT_USE_MAILMAN))
{
print '<form action="'.$_SERVER["PHP_SELF"].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="testsubscribe">';
print $langs->trans("TestSubscribe").'<br>';
print $langs->trans("EMail").' <input type="email" class="flat" name="testsubscribeemail" value="'.GETPOST('testsubscribeemail').'"> <input class="button" type="submit" value="'.$langs->trans("Test").'"><br>';
print '</form>';
print '<form action="'.$_SERVER["PHP_SELF"].'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="testunsubscribe">';
print $langs->trans("TestUnSubscribe").'<br>';
print $langs->trans("EMail").' <input type="email" class="flat" name="testunsubscribeemail" value="'.GETPOST('testunsubscribeemail').'"> <input class="button" type="submit" value="'.$langs->trans("Test").'"><br>';
print '</form>';
}

View File

@ -123,8 +123,10 @@ $head = mailmanspip_admin_prepare_head();
if (! empty($conf->global->ADHERENT_USE_SPIP))
{
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="update">';
dol_fiche_head($head, 'spip', $langs->trans("Setup"), 0, 'user');
dol_fiche_head($head, 'spip', $langs->trans("Setup"), -1, 'user');
//$link=img_picto($langs->trans("Active"),'tick').' ';
$link='<a href="'.$_SERVER["PHP_SELF"].'?action=unset&value=0&name=ADHERENT_USE_SPIP">';

View File

@ -103,14 +103,14 @@ print '<br>';
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print "<td>".$langs->trans("RuleForStockManagementDecrease")."</td>\n";
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
print '</tr>'."\n";
$found=0;
print '<tr class="oddeven">';
print '<td>'.$langs->trans("DeStockOnBill").'</td>';
print '<td align="center">';
print '<td class="right">';
if (! empty($conf->facture->enabled))
{
if ($conf->use_javascript_ajax) {
@ -130,7 +130,7 @@ $found++;
print '<tr class="oddeven">';
print '<td>'.$langs->trans("DeStockOnValidateOrder").'</td>';
print '<td align="center">';
print '<td class="right">';
if (! empty($conf->commande->enabled))
{
if ($conf->use_javascript_ajax) {
@ -152,7 +152,7 @@ $found++;
print '<tr class="oddeven">';
print '<td>'.$langs->trans("DeStockOnShipment").'</td>';
print '<td align="center">';
print '<td class="right">';
if (! empty($conf->expedition->enabled))
{
if ($conf->use_javascript_ajax) {
@ -172,7 +172,7 @@ $found++;
print '<tr class="oddeven">';
print '<td>'.$langs->trans("DeStockOnShipmentOnClosing").'</td>';
print '<td align="center">';
print '<td class="right">';
if (! empty($conf->expedition->enabled))
{
if ($conf->use_javascript_ajax) {
@ -205,14 +205,14 @@ print '<br>';
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print "<td>".$langs->trans("RuleForStockManagementIncrease")."</td>\n";
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
print '</tr>'."\n";
$found=0;
print '<tr class="oddeven">';
print '<td>'.$langs->trans("ReStockOnBill").'</td>';
print '<td align="center">';
print '<td class="right">';
if (! empty($conf->fournisseur->enabled))
{
if ($conf->use_javascript_ajax) {
@ -233,7 +233,7 @@ $found++;
print '<tr class="oddeven">';
print '<td>'.$langs->trans("ReStockOnValidateOrder").'</td>';
print '<td align="center">';
print '<td class="right">';
if (! empty($conf->fournisseur->enabled))
{
if ($conf->use_javascript_ajax) {
@ -253,8 +253,8 @@ $found++;
if (!empty($conf->reception->enabled))
{
print '<tr class="oddeven">';
print '<td width="60%">'.$langs->trans("StockOnReception").'</td>';
print '<td align="center">';
print '<td>'.$langs->trans("StockOnReception").'</td>';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION');
@ -268,8 +268,8 @@ if ($conf->use_javascript_ajax) {
print '<tr class="oddeven">';
print '<td width="60%">'.$langs->trans("StockOnReceptionOnClosing").'</td>';
print '<td align="center">';
print '<td>'.$langs->trans("StockOnReceptionOnClosing").'</td>';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION_CLOSE');
@ -284,7 +284,7 @@ else
{
print '<tr class="oddeven">';
print '<td>'.$langs->trans("ReStockOnDispatchOrder").'</td>';
print '<td align="center">';
print '<td class="right">';
if (! empty($conf->fournisseur->enabled))
{
if ($conf->use_javascript_ajax) {
@ -313,16 +313,17 @@ if ($conf->use_javascript_ajax) {
print '</table>';
print '<br>';
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print "<td>".$langs->trans("RuleForStockAvailability")."</td>\n";
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
print '</tr>'."\n";
print '<tr class="oddeven">';
print '<td>'.$langs->trans("WarehouseAllowNegativeTransfer").'</td>';
print '<td align="center">';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_ALLOW_NEGATIVE_TRANSFER');
} else {
@ -337,7 +338,7 @@ if($conf->invoice->enabled)
{
print '<tr class="oddeven">';
print '<td>'.$langs->trans("StockMustBeEnoughForInvoice").'</td>';
print '<td align="center">';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_INVOICE');
} else {
@ -352,7 +353,7 @@ if($conf->order->enabled)
{
print '<tr class="oddeven">';
print '<td>'.$langs->trans("StockMustBeEnoughForOrder").'</td>';
print '<td align="center">';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_ORDER');
} else {
@ -367,7 +368,7 @@ if($conf->expedition->enabled)
{
print '<tr class="oddeven">';
print '<td>'.$langs->trans("StockMustBeEnoughForShipment").'</td>';
print '<td align="center">';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT');
} else {
@ -391,12 +392,12 @@ if ($virtualdiffersfromphysical)
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print "<td>".$langs->trans("RuleForStockReplenishment")." ".img_help('help', $langs->trans("VirtualDiffersFromPhysical"))."</td>\n";
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
print '</tr>'."\n";
print '<tr class="oddeven">';
print '<td>'.$langs->trans("UseVirtualStockByDefault").'</td>';
print '<td align="center">';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_USE_VIRTUAL_STOCK');
} else {
@ -414,12 +415,12 @@ print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print "<td>".$langs->trans("Other")."</td>\n";
print '<td class="center">'.$langs->trans("Status").'</td>'."\n";
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
print '</tr>'."\n";
print '<tr class="oddeven">';
print '<td>'.$langs->trans("UserWarehouseAutoCreate").'</td>';
print '<td class="center">';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_USERSTOCK_AUTOCREATE');
} else {
@ -433,7 +434,7 @@ print '<tr class="oddeven">';
print '<td>';
print $form->textwithpicto($langs->trans("StockSupportServices"), $langs->trans("StockSupportServicesDesc"));
print '</td>';
print '<td class="center">';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_SUPPORTS_SERVICES');
} else {
@ -445,7 +446,7 @@ print "</tr>\n";
print '<tr class="oddeven">';
print '<td>'.$langs->trans("AllowAddLimitStockByWarehouse").'</td>';
print '<td class="center">';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE');
} else {
@ -455,19 +456,6 @@ if ($conf->use_javascript_ajax) {
print "</td>\n";
print "</tr>\n";
if (! empty($conf->fournisseur->enabled) && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) {
print '<tr class="oddeven">';
print '<td>'.$langs->trans("UseDispatchStatus").'</td>';
print '<td class="center">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS');
} else {
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS);
}
print "</td>\n</tr>\n";
}
print '</table>';
print '<br>';
@ -476,43 +464,45 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print '<td>'.$langs->trans("Inventory").'</td>'."\n";
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
print '</tr>'."\n";
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
print '</tr>'."\n";
// Example with a yes / no select
print '<tr class="oddeven">';
/*print '<tr class="oddeven">';
print '<td>'.$langs->trans("INVENTORY_DISABLE_VIRTUAL").'</td>';
print '<td align="center">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL');
} else {
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL);
}
print '<td align="center">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL');
} else {
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL);
}
print '</td></tr>';
*/
// Example with a yes / no select
print '<tr class="oddeven">';
/*print '<tr class="oddeven">';
print '<td>'.$langs->trans("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA").'</td>';
print '<td align="center">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA');
} else {
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA);
}
print '</td></tr>';
print '<td align="center">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA');
} else {
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA);
}
print '</td></tr>';
*/
// Example with a yes / no select
// Example with a yes / no select
print '<tr class="oddeven">';
print '<td>'.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT").'</td>';
print '<td align="center">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT');
} else {
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT);
}
print '<td>'.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT").'</td>';
print '<td class="right">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT');
} else {
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT);
}
print '</td></tr>';
print '</table>';

View File

@ -494,20 +494,16 @@ print '<td>'.$langs->trans("Parameter").'</td>';
print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
print '<td width="80">&nbsp;</td>';
print "</tr>\n";
$var=false;
//if ($conf->global->MAIN_FEATURES_LEVEL > 0)
//{
print '<tr class="oddeven"><td>';
print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'<br>';
print $langs->trans("IfSetToYesDontForgetPermission");
print '</td><td>';
print '<input type="text" size="6" name="SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED" value="'.$conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED.'">';
print '</td><td class="right">';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</td></tr>\n";
print '<tr class="oddeven"><td>';
print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'<br>';
print $langs->trans("IfSetToYesDontForgetPermission");
print '</td><td>';
print '<input type="text" size="6" name="SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED" value="'.$conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED.'">';
print '</td><td class="right">';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</td></tr>\n";
//}
// Ask for payment bank during supplier order
/* Kept as hidden for the moment
@ -564,6 +560,20 @@ print '</td><td class="right">';
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
print "</td></tr>\n";
// Option to add a quality/validation step, on products, after reception.
$langs->load("stocks");
print '<tr class="oddeven">';
print '<td>'.$langs->trans("UseDispatchStatus").'</td>';
print '<td></td>';
print '<td class="center">';
if ($conf->use_javascript_ajax) {
print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS');
} else {
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS);
}
print "</td>\n</tr>\n";
print '</table><br>';
print '</form>';

View File

@ -586,7 +586,7 @@ print "\n";
?>
<br>
<div class="center"><input type="submit" class="button"
<div class="center"><input type="submit" class="button reposition"
value="<?php echo $langs->trans("GenerateBackup") ?>" id="buttonGo" /><br>
<br>
</div>

View File

@ -112,21 +112,27 @@ $utils = new Utils($db);
if ($compression == 'zip')
{
$ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression);
$ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression, '/(\.log|\/temp\/|documents\/admin\/documents\/)/');
if ($ret < 0)
{
$errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputfile);
$errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputdir);
}
}
elseif (in_array($compression, array('gz', 'bz')))
{
$file = substr($file, 0, strrpos($file, '.'));
$userlogin = ($user->login ? $user->login : 'unknown');
$outputfile = $conf->admin->dir_temp.'/export_files.'.$userlogin.'.out'; // File used with popen method
$file = substr($file, 0, strrpos($file, '.'));
$file .= '.tar';
$cmd = 'tar -cf '.$outputdir."/".$file." --exclude=documents/admin/documents -C ".DOL_DATA_ROOT." ".DOL_DATA_ROOT."/../documents/";
exec($cmd, $out, $retval);
//var_dump($cmd, DOL_DATA_ROOT);exit;
if ($retval != 0)
// We also exclude '/temp/' dir and 'documents/admin/documents'
$cmd = "tar -cf ".$outputdir."/".$file." --exclude-vcs --exclude 'temp' --exclude 'dolibarr.log' --exclude='documents/admin/documents' -C ".dirname(DOL_DATA_ROOT)." ".basename(DOL_DATA_ROOT);
$result = $utils->executeCLI($cmd, $outputfile);
$retval = $result['error'];
if ($result['result'] || ! empty($retval))
{
$langs->load("errors");
dol_syslog("Documents tar retval after exec=".$retval, LOG_ERR);
@ -136,15 +142,17 @@ elseif (in_array($compression, array('gz', 'bz')))
{
if ($compression == 'gz')
{
$cmd = "gzip " . $outputdir."/".$file;
$cmd = "gzip -f " . $outputdir."/".$file;
}
if ($compression == 'bz')
{
$cmd = "bzip2 " . $outputdir."/".$file;
$cmd = "bzip2 -f " . $outputdir."/".$file;
}
exec($cmd, $out, $retval);
if ($retval != 0)
$result = $utils->executeCLI($cmd, $outputfile);
$retval = $result['error'];
if ($result['result'] || ! empty($retval))
{
$errormsg = 'Error '.$compression.' generation return '.$retval;
unlink($outputdir."/".$file);

View File

@ -497,20 +497,6 @@ class ActionComm extends CommonObject
}
}
/**
* Add an action/event into database.
* $this->type_id OR $this->type_code must be set.
*
* @param User $user Object user making action
* @param int $notrigger 1 = disable triggers, 0 = enable triggers
* @return int Id of created event, < 0 if KO
* @deprecated Use create instead
*/
public function add(User $user, $notrigger = 0)
{
return $this->create($user, $notrigger);
}
/**
* Load an object from its id and create a new one in database
*

View File

@ -452,6 +452,7 @@ if ($resql)
if (! empty($arrayfields['owner']['checked'])) print '<td class="liste_titre"></td>';
if (! empty($arrayfields['c.libelle']['checked'])) print '<td class="liste_titre"></td>';
if (! empty($arrayfields['a.label']['checked'])) print '<td class="liste_titre"><input type="text" class="maxwidth75" name="search_title" value="'.$search_title.'"></td>';
if (! empty($arrayfields['a.note']['checked'])) print '<td class="liste_titre"><input type="text" class="maxwidth75" name="search_note" value="'.$search_note.'"></td>';
if (! empty($arrayfields['a.datep']['checked'])) {
print '<td class="liste_titre nowraponall" align="center">';
print $form->selectDate($datestart, 'datestart', 0, 0, 1, '', 1, 0);

View File

@ -2500,7 +2500,7 @@ $formquestion = array_merge($formquestion, array(
if ($usercansend) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=presend&mode=init#formmailbeforetitle">' . $langs->trans('SendMail') . '</a></div>';
} else
print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans('SendMail') . '</a></div>';
print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">' . $langs->trans('SendMail') . '</a></div>';
}
// Create an order
@ -2538,7 +2538,14 @@ $formquestion = array_merge($formquestion, array(
$arrayofinvoiceforpropal = $object->getInvoiceArrayList();
if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED))
{
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=classifybilled&amp;socid=' . $object->socid . '">' . $langs->trans("ClassifyBilled") . '</a></div>';
if ($usercanclose)
{
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=classifybilled&amp;socid=' . $object->socid . '">' . $langs->trans("ClassifyBilled") . '</a></div>';
}
else
{
print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">' . $langs->trans("ClassifyBilled") . '</a></div>';
}
}
}

View File

@ -213,9 +213,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
$i = 0;
while ($i < $num)
{
$paiement = '';
$ref = '';
$refcomp = '';
$totalpayment = '';
$obj = array_shift($tab_sqlobj);
@ -236,7 +236,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
$societestatic->name = $obj->name;
$refcomp=$societestatic->getNomUrl(1, '', 24);
$paiement = -1*$facturefournstatic->getSommePaiement(); // Payment already done
$totalpayment = -1*$facturefournstatic->getSommePaiement(); // Payment already done
}
}
if ($obj->family == 'invoice')
@ -250,9 +250,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
$societestatic->name = $obj->name;
$refcomp=$societestatic->getNomUrl(1, '', 24);
$paiement = $facturestatic->getSommePaiement(); // Payment already done
$paiement+= $facturestatic->getSumDepositsUsed();
$paiement+= $facturestatic->getSumCreditNotesUsed();
$totalpayment = $facturestatic->getSommePaiement(); // Payment already done
$totalpayment+= $facturestatic->getSumDepositsUsed();
$totalpayment+= $facturestatic->getSumCreditNotesUsed();
}
if ($obj->family == 'social_contribution')
{
@ -261,19 +261,19 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
$socialcontribstatic->lib=$obj->type;
$ref = $socialcontribstatic->getNomUrl(1, 24);
$paiement = -1*$socialcontribstatic->getSommePaiement(); // Payment already done
$totalpayment = -1*$socialcontribstatic->getSommePaiement(); // Payment already done
}
$parameters = array('obj' => $obj);
$parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'totalpayment' => $totalpayment);
$reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
if(empty($reshook)){
$ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref;
$refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp;
$paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement;
$totalpayment = isset($hookmanager->resArray['totalpayment']) ? $hookmanager->resArray['totalpayment'] : $totalpayment;
}
$total_ttc = $obj->total_ttc;
if ($paiement) $total_ttc = $obj->total_ttc - $paiement;
if ($totalpayment) $total_ttc = $obj->total_ttc - $totalpayment;
$solde += $total_ttc;
// We discard lines with a remainder to pay to 0

View File

@ -170,7 +170,7 @@ $amountcust=$langs->trans("AmountHT");
$vatcust=$langs->trans("VATReceived");
$namecust=$langs->trans("Name");
if ($mysoc->tva_assuj) {
$vatcust.=' ('.$langs->trans("ToPay").')';
$vatcust.=' ('.$langs->trans("StatusToPay").')';
}
// Suppliers invoices

View File

@ -185,7 +185,7 @@ $productcust=$langs->trans("Description");
$namerate=$langs->trans("VATRate");
$amountcust=$langs->trans("AmountHT");
if ($mysoc->tva_assuj) {
$vatcust.=' ('.$langs->trans("ToPay").')';
$vatcust.=' ('.$langs->trans("StatusToPay").')';
}
$elementsup=$langs->trans("SuppliersInvoices");
$productsup=$langs->trans("Description");

View File

@ -173,7 +173,7 @@ $amountcust=$langs->trans("AmountHT");
$vatcust=$langs->trans("VATReceived");
$namecust=$langs->trans("Name");
if ($mysoc->tva_assuj) {
$vatcust.=' ('.$langs->trans("ToPay").')';
$vatcust.=' ('.$langs->trans("VATToPay").')';
}
// Suppliers invoices

View File

@ -87,21 +87,6 @@ class Contact extends CommonObject
public $zip;
public $town;
/**
* @deprecated
* @see $state_id
*/
public $fk_departement;
/**
* @deprecated
* @see $state_code
*/
public $departement_code;
/**
* @deprecated
* @see $state
*/
public $departement;
public $state_id; // Id of department
public $state_code; // Code of department
public $state; // Label of department
@ -1052,7 +1037,7 @@ class Contact extends CommonObject
// Removed extrafields
if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) {
// For avoid conflicts if trigger used
$result=$this->deleteExtraFields($this);
$result=$this->deleteExtraFields();
if ($result < 0) $error++;
}

View File

@ -705,7 +705,7 @@ while ($i < min($num, $limit))
print '<td class="right">';
if ($obj->cstatut == 0) // If contract is draft, we say line is also draft
{
print $contractstatic->LibStatut(0, 5, ($obj->date_fin_validite && $db->jdate($obj->date_fin_validite) < $now));
print $contractstatic->LibStatut(0, 5);
}
else
{

View File

@ -156,7 +156,7 @@ class box_factures extends ModeleBoxes
);
$this->info_box_contents[$line][] = array(
'td' => '',
'td' => 'class="tdoverflowmax200"',
'text' => $societestatic->getNomUrl(1, '', 40),
'asis' => 1,
);

View File

@ -497,8 +497,16 @@ abstract class CommonDocGenerator
$resarray['object_total_up'] = $totalUp;
$resarray['object_total_up_locale'] = price($resarray['object_total_up'], 0, $outputlangs);
if (method_exists($object, 'getTotalDiscount')) {
$resarray['object_total_discount'] = round(100 / $totalUp * $object->getTotalDiscount(), 2);
$totalDiscount=$object->getTotalDiscount();
} else {
$totalDiscount=0;
}
if (!empty($totalUp) && !empty($totalDiscount)) {
$resarray['object_total_discount'] = round(100 / $totalUp * $totalDiscount, 2);
$resarray['object_total_discount_locale'] = price($resarray['object_total_discount'], 0, $outputlangs);
} else {
$resarray['object_total_discount']='';
$resarray['object_total_discount_locale']='';
}
}
@ -766,10 +774,20 @@ abstract class CommonDocGenerator
//Add value to store price with currency
$array_to_fill=array_merge($array_to_fill, array($array_key.'_options_'.$key.'_currency' => $object->array_options['options_'.$key.'_currency']));
}
elseif($extrafields->attribute_type[$key] == 'select' || $extrafields->attribute_type[$key] == 'checkbox')
elseif($extrafields->attribute_type[$key] == 'select')
{
$object->array_options['options_'.$key] = $extrafields->attribute_param[$key]['options'][$object->array_options['options_'.$key]];
}
elseif($extrafields->attribute_type[$key] == 'checkbox') {
$valArray=explode(',', $object->array_options['options_'.$key]);
$output=array();
foreach($extrafields->attribute_param[$key]['options'] as $keyopt=>$valopt) {
if (in_array($keyopt, $valArray)) {
$output[]=$valopt;
}
}
$object->array_options['options_'.$key] = implode(', ', $output);
}
elseif($extrafields->attribute_type[$key] == 'date')
{
if (strlen($object->array_options['options_'.$key])>0)

View File

@ -5216,7 +5216,7 @@ class Form
* @param datetime $adddateof Add a link "Date of invoice" using the following date.
* @return string|void Nothing or string if nooutput is 1
* @deprecated
* @see form_date(), select_month(), select_year(), select_dayofweek()
* @see selectDate(), form_date(), select_month(), select_year(), select_dayofweek()
*/
public function select_date($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $nooutput = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '')
{

View File

@ -355,22 +355,27 @@ class Link extends CommonObject
/**
* Delete a link from database
*
* @return int <0 if KO, 0 if nothing done, >0 if OK
* @param User $user Object suer
* @return int <0 if KO, 0 if nothing done, >0 if OK
*/
public function delete()
public function delete($user)
{
global $user, $langs, $conf;
global $langs, $conf;
dol_syslog(get_class($this)."::delete", LOG_DEBUG);
$error = 0;
$this->db->begin();
// Call trigger
$result=$this->call_trigger('LINK_DELETE', $user);
if ($result < 0) return -1;
if ($result < 0)
{
$this->db->rollback();
return -1;
}
// End call triggers
$this->db->begin();
// Remove link
$sql = "DELETE FROM " . MAIN_DB_PREFIX . "links";
$sql.= " WHERE rowid = " . $this->id;

View File

@ -316,27 +316,29 @@ class Utils
// TODO Replace with executeCLI function
if ($execmethod == 1)
{
exec($fullcommandclear, $readt, $retval);
$result = $retval;
$output_arr = array(); $retval = null;
exec($fullcommandclear, $output_arr, $retval);
if ($retval != 0)
{
$langs->load("errors");
dol_syslog("Datadump retval after exec=".$retval, LOG_ERR);
$error = 'Error '.$retval;
$errormsg = 'Error '.$retval;
$ok=0;
}
else
{
$i=0;
if (!empty($readt))
foreach($readt as $key=>$read)
if (!empty($output_arr))
{
$i++; // output line number
if ($i == 1 && preg_match('/Warning.*Using a password/i', $read)) continue;
fwrite($handle, $read.($execmethod == 2 ? '' : "\n"));
if (preg_match('/'.preg_quote('-- Dump completed').'/i', $read)) $ok=1;
elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i', $read)) $ok=1;
foreach($output_arr as $key => $read)
{
$i++; // output line number
if ($i == 1 && preg_match('/Warning.*Using a password/i', $read)) continue;
fwrite($handle, $read.($execmethod == 2 ? '' : "\n"));
if (preg_match('/'.preg_quote('-- Dump completed').'/i', $read)) $ok=1;
elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i', $read)) $ok=1;
}
}
}
}
@ -534,6 +536,7 @@ class Utils
if ($execmethod == 1)
{
$retval = null;
exec($command, $output_arr, $retval);
$result = $retval;
if ($retval != 0)
@ -545,7 +548,6 @@ class Utils
}
if ($execmethod == 2) // With this method, there is no way to get the return code, only output
{
$ok=0;
$handle = fopen($outputfile, 'w+b');
if ($handle)
{

View File

@ -1094,6 +1094,8 @@ function complete_dictionary_with_modules(&$taborder, &$tabname, &$tablib, &$tab
{
global $db, $modules, $conf, $langs;
dol_syslog("complete_dictionary_with_modules Search external modules to complete the list of dictionnary tables", LOG_DEBUG, 1);
// Search modules
$modulesdir = dolGetModulesDirs();
$i = 0; // is a sequencer of modules found
@ -1191,6 +1193,8 @@ function complete_dictionary_with_modules(&$taborder, &$tabname, &$tablib, &$tab
}
}
dol_syslog("", LOG_DEBUG, -1);
return 1;
}
@ -1259,7 +1263,7 @@ function activateModulesRequiredByCountry($country_code)
}
/**
* Add external modules to list of contact element
* Search external modules to complete the list of contact element
*
* @param array $elementList elementList
* @return int 1
@ -1278,6 +1282,8 @@ function complete_elementList_with_modules(&$elementList)
$i = 0; // is a sequencer of modules found
$j = 0; // j is module number. Automatically affected if module number not defined.
dol_syslog("complete_elementList_with_modules Search external modules to complete the list of contact element", LOG_DEBUG, 1);
$modulesdir = dolGetModulesDirs();
foreach ($modulesdir as $dir)
@ -1355,6 +1361,8 @@ function complete_elementList_with_modules(&$elementList)
}
}
dol_syslog("", LOG_DEBUG, -1);
return 1;
}

View File

@ -549,15 +549,13 @@ function calendars_prepare_head($param)
$h++;
$object=new stdClass();
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname); to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'agenda');
complete_head_from_modules($conf, $langs, null, $head, $h, 'agenda');
complete_head_from_modules($conf, $langs, $object, $head, $h, 'agenda', 'remove');
complete_head_from_modules($conf, $langs, null, $head, $h, 'agenda', 'remove');
return $head;
}

View File

@ -48,7 +48,7 @@ function asset_admin_prepare_head()
//$this->tabs = array(
// 'entity:-tabname:Title:@assets:/asset/mypage.php?id=__ID__'
//); // to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'assets_admin');
complete_head_from_modules($conf, $langs, null, $head, $h, 'assets_admin');
$head[$h][0] = DOL_URL_ROOT . '/asset/admin/assets_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFields");
@ -60,7 +60,7 @@ function asset_admin_prepare_head()
$head[$h][2] = 'attributes_type';
$h++;
complete_head_from_modules($conf, $langs, $object, $head, $h, 'assets_admin', 'remove');
complete_head_from_modules($conf, $langs, null, $head, $h, 'assets_admin', 'remove');
return $head;
}
@ -68,11 +68,12 @@ function asset_admin_prepare_head()
/**
* Prepare admin pages header
*
* @param Contrat $object Object related to tabs
* @return array head array with tabs
*/
function asset_prepare_head()
function asset_prepare_head(Asset $object)
{
global $langs, $conf;
global $db, $langs, $conf;
$langs->load("assets");
@ -96,7 +97,7 @@ function asset_prepare_head()
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
$upload_dir = $conf->assets->dir_output . '/' . get_exdir($filename, 2, 0, 1, $object, 'assets'). '/'. dol_sanitizeFileName($object->ref);
$upload_dir = $conf->assets->dir_output . '/' . dol_sanitizeFileName($object->ref);
$nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$'));
$nbLinks=Link::count($db, $object->element, $object->id);
$head[$h][0] = DOL_URL_ROOT.'/asset/document.php?id='.$object->id;

View File

@ -163,7 +163,6 @@ function bank_admin_prepare_head($object)
*/
function various_payment_prepare_head($object)
{
global $db, $langs, $conf;
$h = 0;

View File

@ -101,7 +101,7 @@ function contract_prepare_head(Contrat $object)
*/
function contract_admin_prepare_head()
{
global $langs, $conf, $user;
global $langs, $conf;
$h = 0;
$head = array();
@ -127,9 +127,7 @@ function contract_admin_prepare_head()
$head[$h][2] = 'attributeslines';
$h++;
complete_head_from_modules($conf, $langs, null, $head, $h, 'contract_admin', 'remove');
return $head;
return $head;
}

View File

@ -80,7 +80,7 @@ function donation_prepare_head($object)
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
$upload_dir = $conf->don->dir_output . '/' . get_exdir($filename, 2, 0, 1, $object, 'donation'). '/'. dol_sanitizeFileName($object->ref);
$upload_dir = $conf->don->dir_output . '/' . dol_sanitizeFileName($object->ref);
$nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$'));
$nbLinks=Link::count($db, $object->element, $object->id);
$head[$h][0] = DOL_URL_ROOT.'/don/document.php?id='.$object->id;

View File

@ -1222,9 +1222,12 @@ function dol_delete_file($file, $disableglob = 0, $nophperrors = 0, $nohook = 0,
}
}
}
else dol_syslog("Failed to remove file ".$filename, LOG_WARNING);
// TODO Failure to remove can be because file was already removed or because of permission
// If error because it does not exists, we should return true, and we should return false if this is a permission problem
else
{
dol_syslog("Failed to remove file ".$filename, LOG_WARNING);
// TODO Failure to remove can be because file was already removed or because of permission
// If error because it does not exists, we should return true, and we should return false if this is a permission problem
}
}
}
else dol_syslog("No files to delete found", LOG_DEBUG);
@ -1881,14 +1884,16 @@ function dol_convert_file($fileinput, $ext = 'png', $fileoutput = '', $page = ''
/**
* Compress a file
* Compress a file.
* An error string may be returned into parameters.
*
* @param string $inputfile Source file name
* @param string $outputfile Target file name
* @param string $mode 'gz' or 'bz' or 'zip'
* @param string $errorstring Error string
* @return int <0 if KO, >0 if OK
*/
function dol_compress_file($inputfile, $outputfile, $mode = "gz")
function dol_compress_file($inputfile, $outputfile, $mode = "gz", &$errorstring = null)
{
global $conf;
@ -1913,8 +1918,12 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz")
$zip = new ZipArchive;
if ($zip->open($outputfile, ZipArchive::CREATE) !== true) {
$errormsg="Failed to open file ".$outputfile."\n";
dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR);
$errorstring="dol_compress_file failure - Failed to open file ".$outputfile."\n";
dol_syslog($errorstring, LOG_ERR);
global $errormsg;
$errormsg = $errorstring;
return -6;
}
@ -1958,12 +1967,16 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz")
{
global $errormsg;
$errormsg=$archive->errorInfo(true);
dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR);
if ($archive->errorCode() == PCLZIP_ERR_WRITE_OPEN_FAIL)
{
dol_syslog("dol_compress_file error PCLZIP_ERR_WRITE_OPEN_FAIL", LOG_ERR);
$errorstring = "PCLZIP_ERR_WRITE_OPEN_FAIL";
dol_syslog("dol_compress_file error - archive->errorCode() = PCLZIP_ERR_WRITE_OPEN_FAIL", LOG_ERR);
return -4;
}
$errorstring = "dol_compress_file error archive->errorCode = ".$archive->errorCode()." errormsg=".$errormsg;
dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR);
return -3;
}
else
@ -1983,7 +1996,11 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz")
}
else
{
dol_syslog("Try to zip with format ".$mode." with no handler for this format", LOG_ERR);
$errorstring = "Try to zip with format ".$mode." with no handler for this format";
dol_syslog($errorstring, LOG_ERR);
global $errormsg;
$errormsg = $errorstring;
return -2;
}
}
@ -1991,8 +2008,10 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz")
{
global $langs, $errormsg;
$langs->load("errors");
dol_syslog("Failed to open file ".$outputfile, LOG_ERR);
$errormsg=$langs->trans("ErrorFailedToWriteInDir");
$errorstring = "Failed to open file ".$outputfile;
dol_syslog($errorstring, LOG_ERR);
return -1;
}
}
@ -2063,13 +2082,14 @@ function dol_uncompress($inputfile, $outputdir)
* @param string $inputdir Source dir name
* @param string $outputfile Target file name (output directory must exists and be writable)
* @param string $mode 'zip'
* @param string $excludefiles A regex pattern. For example: '/\.log$|\/temp\//'
* @return int <0 if KO, >0 if OK
*/
function dol_compress_dir($inputdir, $outputfile, $mode = "zip")
function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = '')
{
$foundhandler=0;
dol_syslog("Try to zip dir ".$inputdir." into ".$outputdir." mode=".$mode);
dol_syslog("Try to zip dir ".$inputdir." into ".$outputfile." mode=".$mode);
if (! dol_is_dir(dirname($outputfile)) || ! is_writable(dirname($outputfile)))
{
@ -2096,6 +2116,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip")
return 1;
}
else*/
//if (class_exists('ZipArchive') && ! empty($conf->global->MAIN_USE_ZIPARCHIVE_FOR_ZIP_COMPRESS))
if (class_exists('ZipArchive'))
{
$foundhandler=1;
@ -2103,6 +2124,13 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip")
// Initialize archive object
$zip = new ZipArchive();
$result = $zip->open($outputfile, ZipArchive::CREATE | ZipArchive::OVERWRITE);
if (! $result)
{
global $langs, $errormsg;
$langs->load("errors");
$errormsg=$langs->trans("ErrorFailedToWriteInFile", $outputfile);
return -4;
}
// Create recursive directory iterator
/** @var SplFileInfo[] $files */
@ -2119,9 +2147,11 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip")
// Get real and relative path for current file
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($inputdir) + 1);
// Add current file to archive
$zip->addFile($filePath, $relativePath);
if (empty($excludefiles) || ! preg_match($excludefiles, $filePath))
{
// Add current file to archive
$zip->addFile($filePath, $relativePath);
}
}
}

View File

@ -40,7 +40,7 @@ function multicurrencyAdminPrepareHead()
$head[$h][2] = 'settings';
$h++;
complete_head_from_modules($conf, $langs, $object, $head, $h, 'multicurrency');
complete_head_from_modules($conf, $langs, null, $head, $h, 'multicurrency');
return $head;
}

View File

@ -59,7 +59,7 @@ function ticketAdminPrepareHead()
//$this->tabs = array(
// 'entity:-tabname:Title:@ticket:/ticket/mypage.php?id=__ID__'
//); // to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'ticketadmin');
complete_head_from_modules($conf, $langs, null, $head, $h, 'ticketadmin');
return $head;
}

View File

@ -66,6 +66,7 @@ class mailing_thirdparties extends MailingTargets
$cibles = array();
$addDescription= "";
// Select the third parties from category
if (empty($_POST['filter']))
{
@ -77,6 +78,50 @@ class mailing_thirdparties extends MailingTargets
}
else
{
$addFilter ="";
if (isset($_POST["filter_client"]) && $_POST["filter_client"] <> '-1')
{
$addFilter.= " AND s.client=" . $_POST["filter_client"];
$addDescription= $langs->trans('ProspectCustomer')."=";
if ($_POST["filter_client"] == 0)
{
$addDescription.= $langs->trans('NorProspectNorCustomer');
}
elseif ($_POST["filter_client"] == 1)
{
$addDescription.= $langs->trans('Customer');
}
elseif ($_POST["filter_client"] == 2)
{
$addDescription.= $langs->trans('Prospect');
}
elseif ($_POST["filter_client"] == 3)
{
$addDescription.= $langs->trans('ProspectCustomer');
}
else
{
$addDescription.= "Unknown status ".$_POST["filter_client"];
}
}
if (isset($_POST["filter_status"]))
{
if (strlen($addDescription) > 0)
{
$addDescription.= ";";
}
$addDescription.= $langs->trans("Status")."=";
if ($_POST["filter_status"] == '1')
{
$addFilter.= " AND s.status=1";
$addDescription.= $langs->trans("Enabled");
}
else
{
$addFilter.= " AND s.status=0";
$addDescription.= $langs->trans("Disabled");
}
}
$sql = "SELECT s.rowid as id, s.email as email, s.nom as name, null as fk_contact, null as firstname, c.label as label";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."categorie_societe as cs, ".MAIN_DB_PREFIX."categorie as c";
$sql.= " WHERE s.email <> ''";
@ -85,6 +130,7 @@ class mailing_thirdparties extends MailingTargets
$sql.= " AND cs.fk_soc = s.rowid";
$sql.= " AND c.rowid = cs.fk_categorie";
$sql.= " AND c.rowid='".$this->db->escape($_POST['filter'])."'";
$sql.= $addFilter;
$sql.= " UNION ";
$sql.= "SELECT s.rowid as id, s.email as email, s.nom as name, null as fk_contact, null as firstname, c.label as label";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."categorie_fournisseur as cs, ".MAIN_DB_PREFIX."categorie as c";
@ -94,51 +140,7 @@ class mailing_thirdparties extends MailingTargets
$sql.= " AND cs.fk_soc = s.rowid";
$sql.= " AND c.rowid = cs.fk_categorie";
$sql.= " AND c.rowid='".$this->db->escape($_POST['filter'])."'";
}
$addDescription= "";
if (isset($_POST["filter_client"]) && $_POST["filter_client"] <> '-1')
{
$sql.= " AND s.client=" . $_POST["filter_client"];
$addDescription= $langs->trans('ProspectCustomer')."=";
if ($_POST["filter_client"] == 0)
{
$addDescription.= $langs->trans('NorProspectNorCustomer');
}
elseif ($_POST["filter_client"] == 1)
{
$addDescription.= $langs->trans('Customer');
}
elseif ($_POST["filter_client"] == 2)
{
$addDescription.= $langs->trans('Prospect');
}
elseif ($_POST["filter_client"] == 3)
{
$addDescription.= $langs->trans('ProspectCustomer');
}
else
{
$addDescription.= "Unknown status ".$_POST["filter_client"];
}
}
if (isset($_POST["filter_status"]))
{
if (strlen($addDescription) > 0)
{
$addDescription.= ";";
}
$addDescription.= $langs->trans("Status")."=";
if ($_POST["filter_status"] == '1')
{
$sql.= " AND s.status=1";
$addDescription.= $langs->trans("Enabled");
}
else
{
$sql.= " AND s.status=0";
$addDescription.= $langs->trans("Disabled");
}
$sql.= $addFilter;
}
$sql.= " ORDER BY email";

View File

@ -16,7 +16,7 @@
*/
/**
* \defgroup debugbar Debug bar
* \defgroup debugbar Module Debug bar
* \brief debugbar module descriptor.
*
* \file htdocs/core/modules/modDebugBar.class.php

View File

@ -19,6 +19,7 @@
/**
* \defgroup ticket Module Ticket
* \brief Module for ticket and request management.
* \file core/modules/modTicket.class.php
* \ingroup ticket
* \brief Description and activation file for module Ticket

View File

@ -48,7 +48,9 @@ function datapolicyAdminPrepareHead()
$h++;
}
complete_head_from_modules($conf, $langs, $object, $head, $h, 'datapolicy');
complete_head_from_modules($conf, $langs, null, $head, $h, 'datapolicy');
complete_head_from_modules($conf, $langs, null, $head, $h, 'datapolicy', 'remove');
return $head;
}

View File

@ -63,9 +63,9 @@ function dav_admin_prepare_head()
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname); to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'admindav');
complete_head_from_modules($conf, $langs, null, $head, $h, 'admindav');
complete_head_from_modules($conf, $langs, $object, $head, $h, 'admindav', 'remove');
complete_head_from_modules($conf, $langs, null, $head, $h, 'admindav', 'remove');
return $head;
}

View File

@ -81,5 +81,7 @@ function emailcollectorPrepareHead($object)
//); // to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'emailcollector');
complete_head_from_modules($conf, $langs, $object, $head, $h, 'emailcollector', 'remove');
return $head;
}

View File

@ -2340,7 +2340,7 @@ class ExpenseReport extends CommonObject
{
$response->warning_delay=$conf->expensereport->payment->warning_delay/60/60/24;
$response->label=$langs->trans("ExpenseReportsToPay");
$response->labelShort=$langs->trans("ToPay");
$response->labelShort=$langs->trans("StatusToPay");
$response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&amp;statut=5';
}
$response->img=img_object('', "trip");

View File

@ -49,6 +49,7 @@ if (empty($keyforcontent) && empty($conf->global->EXTERNALSITE_URL))
llxHeader();
print '<div class="error">'.$langs->trans('ExternalSiteModuleNotComplete').'</div>';
llxFooter();
exit;
}
if (! empty($keyforcontent))

View File

@ -1822,10 +1822,9 @@ class CommandeFournisseur extends CommonOrder
$error++;
}
// Si module stock gere et que incrementation faite depuis un dispatching en stock
// If module stock is enabled and the stock increase is done on purchase order dispatching
if (! $error && $entrepot > 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER))
{
$mouv = new MouvementStock($this->db);
if ($product > 0)
{

View File

@ -2203,7 +2203,7 @@ class FactureFournisseur extends CommonInvoice
$response = new WorkboardResponse();
$response->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24;
$response->label=$langs->trans("SupplierBillsToPay");
$response->labelShort=$langs->trans("ToPay");
$response->labelShort=$langs->trans("StatusToPay");
$response->url=DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills';
$response->img=img_object($langs->trans("Bills"), "bill");

View File

@ -2346,7 +2346,7 @@ elseif (! empty($object->id))
}*/
// Modify
if ($object->statut == 1)
if ($object->statut == CommandeFournisseur::STATUS_VALIDATED)
{
if ($user->rights->fournisseur->commande->commander)
{
@ -2355,7 +2355,7 @@ elseif (! empty($object->id))
}
// Approve
if ($object->statut == 1)
if ($object->statut == CommandeFournisseur::STATUS_VALIDATED)
{
if ($user->rights->fournisseur->commande->approuver)
{
@ -2377,7 +2377,7 @@ elseif (! empty($object->id))
// Second approval (if option SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED is set)
if (! empty($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) && $conf->global->MAIN_FEATURES_LEVEL > 0 && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED)
{
if ($object->statut == 1)
if ($object->statut == CommandeFournisseur::STATUS_VALIDATED)
{
if ($user->rights->fournisseur->commande->approve2)
{
@ -2398,7 +2398,7 @@ elseif (! empty($object->id))
}
// Refuse
if ($object->statut == 1)
if ($object->statut == CommandeFournisseur::STATUS_VALIDATED)
{
if ($user->rights->fournisseur->commande->approuver || $user->rights->fournisseur->commande->approve2)
{
@ -2411,7 +2411,7 @@ elseif (! empty($object->id))
}
// Send
if (in_array($object->statut, array(2, 3, 4, 5)))
if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED, 3, 4, 5)))
{
if ($user->rights->fournisseur->commande->commander)
{
@ -2420,7 +2420,7 @@ elseif (! empty($object->id))
}
// Reopen
if (in_array($object->statut, array(2)))
if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED)))
{
$buttonshown=0;
if (! $buttonshown && $user->rights->fournisseur->commande->approuver)
@ -2462,7 +2462,7 @@ elseif (! empty($object->id))
}
}
if ($object->statut == 2)
if ($object->statut == CommandeFournisseur::STATUS_ACCEPTED)
{
if ($user->rights->fournisseur->commande->commander)
{
@ -2474,6 +2474,15 @@ elseif (! empty($object->id))
}
}
// Classify received (this does not record reception)
if ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)
{
if ($user->rights->fournisseur->commande->receptionner)
{
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=classifyreception#classifyreception">'.$langs->trans("ClassifyReception").'</a></div>';
}
}
// Create bill
//if (! empty($conf->facture->enabled))
//{
@ -2590,38 +2599,41 @@ elseif (! empty($object->id))
print '</div><div class="fichehalfright"><div class="ficheaddleft">';
if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY))
if ($action == 'classifyreception')
{
// Set status to received (action=livraison)
print '<!-- form to record purchase order received -->'."\n";
print '<form action="card.php?id='.$object->id.'" method="post">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="livraison">';
print load_fiche_titre($langs->trans("Receive"), '', '');
if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY))
{
// Set status to received (action=livraison)
print '<!-- form to record purchase order received -->'."\n";
print '<form id="classifyreception" action="card.php?id='.$object->id.'" method="post">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="livraison">';
print load_fiche_titre($langs->trans("Receive"), '', '');
print '<table class="noborder centpercent">';
//print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Receive").'</td></tr>';
print '<tr><td>'.$langs->trans("DeliveryDate").'</td><td>';
$datepreselected = dol_now();
print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1);
print "</td></tr>\n";
print '<table class="noborder centpercent">';
//print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Receive").'</td></tr>';
print '<tr><td>'.$langs->trans("DeliveryDate").'</td><td>';
$datepreselected = dol_now();
print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1);
print "</td></tr>\n";
print '<tr><td class="fieldrequired">'.$langs->trans("Delivery")."</td><td>\n";
$liv = array();
$liv[''] = '&nbsp;';
$liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected");
$liv['par'] = $langs->trans("PartialWoman");
$liv['nev'] = $langs->trans("NeverReceived");
$liv['can'] = $langs->trans("Canceled");
print '<tr><td class="fieldrequired">'.$langs->trans("Delivery")."</td><td>\n";
$liv = array();
$liv[''] = '&nbsp;';
$liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected");
$liv['par'] = $langs->trans("PartialWoman");
$liv['nev'] = $langs->trans("NeverReceived");
$liv['can'] = $langs->trans("Canceled");
print $form->selectarray("type", $liv);
print $form->selectarray("type", $liv);
print '</td></tr>';
print '<tr><td>'.$langs->trans("Comment").'</td><td><input size="40" type="text" name="comment"></td></tr>';
print '<tr><td class="center" colspan="2"><input type="submit" class="button" value="'.$langs->trans("Receive").'"></td></tr>';
print "</table>\n";
print "</form>\n";
print "<br>";
print '</td></tr>';
print '<tr><td>'.$langs->trans("Comment").'</td><td><input size="40" type="text" name="comment"></td></tr>';
print '<tr><td class="center" colspan="2"><input type="submit" class="button" value="'.$langs->trans("Receive").'"></td></tr>';
print "</table>\n";
print "</form>\n";
print "<br>";
}
}
// List of actions on element

View File

@ -122,7 +122,7 @@ if ($action == 'create')
elseif ($starthalfday == 'afternoon') $halfday=-1;
elseif ($endhalfday == 'morning') $halfday=1;
$valideur = GETPOST('valideur');
$valideur = GETPOST('valideur', 'int');
$description = trim(GETPOST('description'));
// If no type
@ -270,8 +270,8 @@ if ($action == 'update' && ! GETPOSTISSET('savevalidator'))
// If this is the requestor or has read/write rights
if ($cancreate)
{
$valideur = $_POST['valideur'];
$description = trim($_POST['description']);
$valideur = GETPOST('valideur', 'int');
$description = trim(GETPOST('description', 'none'));
// If no start date
if (empty($_POST['date_debut_'])) {
@ -1297,7 +1297,8 @@ else
if (empty($include_users)) print img_warning().' '.$langs->trans("NobodyHasPermissionToValidateHolidays");
else
{
$s=$form->select_dolusers($object->fk_validator, "valideur", (($action == 'editvalidator') ? 0 : 1), ($user->admin ? '' : array($user->id)), 0, $include_users);
$arrayofvalidatorstoexclude = (($user->admin || ($user->id != $userRequest->id))? '' : array($user->id)); // Nobody if we are admin or if we are not the user of the leave.
$s=$form->select_dolusers($object->fk_validator, "valideur", (($action == 'editvalidator') ? 0 : 1), $arrayofvalidatorstoexclude, 0, $include_users);
print $form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate"));
}
if ($action == 'editvalidator')

View File

@ -376,7 +376,6 @@ class Holiday extends CommonObject
$obj = $this->db->fetch_object($resql);
$this->id = $obj->rowid;
$this->rowid = $obj->rowid; // deprecated
$this->ref = ($obj->ref?$obj->ref:$obj->rowid);
$this->fk_user = $obj->fk_user;
$this->date_create = $this->db->jdate($obj->date_create);

View File

@ -366,484 +366,472 @@ if (empty($user->societe_id) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTAT
/*
* Dolibarr Working Board with weather
*/
$showweather=(empty($conf->global->MAIN_DISABLE_METEO) || $conf->global->MAIN_DISABLE_METEO == 2) ? 1 : 0;
if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) {
$showweather = (empty($conf->global->MAIN_DISABLE_METEO) || $conf->global->MAIN_DISABLE_METEO == 2) ? 1 : 0;
//Array that contains all WorkboardResponse classes to process them
$dashboardlines=array();
$dashboardlines = array();
// Do not include sections without management permission
require_once DOL_DOCUMENT_ROOT.'/core/class/workboardresponse.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/workboardresponse.class.php';
// Number of actions to do (late)
if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->read)
{
include_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
$board=new ActionComm($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
if (!empty($conf->agenda->enabled) && $user->rights->agenda->myactions->read) {
include_once DOL_DOCUMENT_ROOT . '/comm/action/class/actioncomm.class.php';
$board = new ActionComm($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
// Number of project opened
if (! empty($conf->projet->enabled) && $user->rights->projet->lire)
{
include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
$board=new Project($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
if (!empty($conf->projet->enabled) && $user->rights->projet->lire) {
include_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
$board = new Project($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
// Number of tasks to do (late)
if (! empty($conf->projet->enabled) && empty($conf->global->PROJECT_HIDE_TASKS) && $user->rights->projet->lire)
{
include_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
$board=new Task($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
if (!empty($conf->projet->enabled) && empty($conf->global->PROJECT_HIDE_TASKS) && $user->rights->projet->lire) {
include_once DOL_DOCUMENT_ROOT . '/projet/class/task.class.php';
$board = new Task($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
// Number of commercial proposals opened (expired)
if (! empty($conf->propal->enabled) && $user->rights->propale->lire)
{
include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
$board=new Propal($db);
$dashboardlines[$board->element.'_opened'] = $board->load_board($user, "opened");
// Number of commercial proposals CLOSED signed (billed)
$dashboardlines[$board->element.'_signed'] = $board->load_board($user, "signed");
}
if (!empty($conf->propal->enabled) && $user->rights->propale->lire) {
include_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php';
$board = new Propal($db);
$dashboardlines[$board->element . '_opened'] = $board->load_board($user, "opened");
// Number of commercial proposals CLOSED signed (billed)
$dashboardlines[$board->element . '_signed'] = $board->load_board($user, "signed");
}
// Number of commercial proposals opened (expired)
if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_proposal->lire)
{
include_once DOL_DOCUMENT_ROOT.'/supplier_proposal/class/supplier_proposal.class.php';
$board=new SupplierProposal($db);
$dashboardlines[$board->element.'_opened'] = $board->load_board($user, "opened");
// Number of commercial proposals CLOSED signed (billed)
$dashboardlines[$board->element.'_signed'] = $board->load_board($user, "signed");
}
if (!empty($conf->supplier_proposal->enabled) && $user->rights->supplier_proposal->lire) {
include_once DOL_DOCUMENT_ROOT . '/supplier_proposal/class/supplier_proposal.class.php';
$board = new SupplierProposal($db);
$dashboardlines[$board->element . '_opened'] = $board->load_board($user, "opened");
// Number of commercial proposals CLOSED signed (billed)
$dashboardlines[$board->element . '_signed'] = $board->load_board($user, "signed");
}
// Number of customer orders a deal
if (! empty($conf->commande->enabled) && $user->rights->commande->lire)
{
include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
$board=new Commande($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
if (!empty($conf->commande->enabled) && $user->rights->commande->lire) {
include_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php';
$board = new Commande($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
// Number of suppliers orders a deal
if (! empty($conf->supplier_order->enabled) && $user->rights->fournisseur->commande->lire)
{
include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
$board=new CommandeFournisseur($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
if (!empty($conf->supplier_order->enabled) && $user->rights->fournisseur->commande->lire) {
include_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.commande.class.php';
$board = new CommandeFournisseur($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
// Number of services enabled (delayed)
if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire)
{
include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
$board=new Contrat($db);
$dashboardlines[$board->element.'_inactive'] = $board->load_board($user, "inactive");
// Number of active services (expired)
$dashboardlines[$board->element.'_active'] = $board->load_board($user, "active");
}
if (!empty($conf->contrat->enabled) && $user->rights->contrat->lire) {
include_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php';
$board = new Contrat($db);
$dashboardlines[$board->element . '_inactive'] = $board->load_board($user, "inactive");
// Number of active services (expired)
$dashboardlines[$board->element . '_active'] = $board->load_board($user, "active");
}
// Number of invoices customers (has paid)
if (! empty($conf->facture->enabled) && $user->rights->facture->lire)
{
include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
$board=new Facture($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
if (!empty($conf->facture->enabled) && $user->rights->facture->lire) {
include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
$board = new Facture($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
// Number of supplier invoices (has paid)
if (! empty($conf->supplier_invoice->enabled) && ! empty($user->rights->fournisseur->facture->lire))
{
include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
$board=new FactureFournisseur($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
if (!empty($conf->supplier_invoice->enabled) && !empty($user->rights->fournisseur->facture->lire)) {
include_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php';
$board = new FactureFournisseur($db);
$dashboardlines[$board->element] = $board->load_board($user);
}
// Number of transactions to conciliate
if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->societe_id)
{
include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
$board=new Account($db);
$nb = $board::countAccountToReconcile(); // Get nb of account to reconciliate
if ($nb > 0)
{
$dashboardlines[$board->element] = $board->load_board($user);
}
}
if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->societe_id) {
include_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php';
$board = new Account($db);
$nb = $board::countAccountToReconcile(); // Get nb of account to reconciliate
if ($nb > 0) {
$dashboardlines[$board->element] = $board->load_board($user);
}
}
// Number of cheque to send
if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->societe_id && empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT))
{
include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php';
$board=new RemiseCheque($db);
$dashboardlines['RemiseCheque'] = $board->load_board($user);
}
if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->societe_id && empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT)) {
include_once DOL_DOCUMENT_ROOT . '/compta/paiement/cheque/class/remisecheque.class.php';
$board = new RemiseCheque($db);
$dashboardlines['RemiseCheque'] = $board->load_board($user);
}
// Number of foundation members
if (! empty($conf->adherent->enabled) && $user->rights->adherent->lire && ! $user->societe_id)
{
include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
$board=new Adherent($db);
$dashboardlines['Adherent'] = $board->load_board($user);
}
if (!empty($conf->adherent->enabled) && $user->rights->adherent->lire && !$user->societe_id) {
include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
$board = new Adherent($db);
$dashboardlines['Adherent'] = $board->load_board($user);
}
// Number of expense reports to approve
if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->approve)
{
include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
$board=new ExpenseReport($db);
$dashboardlines['ExpenseReport'] = $board->load_board($user, 'toapprove');
}
if (!empty($conf->expensereport->enabled) && $user->rights->expensereport->approve) {
include_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
$board = new ExpenseReport($db);
$dashboardlines['ExpenseReport'] = $board->load_board($user, 'toapprove');
}
// Number of expense reports to pay
if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->to_paid)
{
include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
$board=new ExpenseReport($db);
$dashboardlines['ExpenseReport'] = $board->load_board($user, 'topay');
}
if (!empty($conf->expensereport->enabled) && $user->rights->expensereport->to_paid) {
include_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
$board = new ExpenseReport($db);
$dashboardlines['ExpenseReport'] = $board->load_board($user, 'topay');
}
// Number of holidays to approve
if (! empty($conf->holiday->enabled) && $user->rights->holiday->approve)
{
include_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php';
$board=new Holiday($db);
$dashboardlines['Holiday'] = $board->load_board($user);
}
if (!empty($conf->holiday->enabled) && $user->rights->holiday->approve) {
include_once DOL_DOCUMENT_ROOT . '/holiday/class/holiday.class.php';
$board = new Holiday($db);
$dashboardlines['Holiday'] = $board->load_board($user);
}
$object=new stdClass();
$parameters=array();
$action='';
$reshook=$hookmanager->executeHooks('addOpenElementsDashboardLine', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook == 0) {
$dashboardlines = array_merge($dashboardlines, $hookmanager->resArray);
}
$object = new stdClass();
$parameters = array();
$action = '';
$reshook = $hookmanager->executeHooks('addOpenElementsDashboardLine', $parameters, $object,
$action); // Note that $action and $object may have been modified by some hooks
if ($reshook == 0) {
$dashboardlines = array_merge($dashboardlines, $hookmanager->resArray);
}
/* grouping dashboard stats */
$dashboardgroup = array (
'action' =>
array (
'groupName' => 'Agenda',
'stats' => array ('action'),
),
'project' =>
array (
'groupName' => 'Projects',
'stats' => array ('project','project_task'),
),
'propal' =>
array (
'groupName' => 'Proposals',
'stats' =>
array ('propal_opened','propal_signed'),
),
'commande' =>
array (
'groupName' => 'Orders',
'stats' =>
array ('commande'),
),
'facture' =>
array (
'groupName' => 'Invoices',
'stats' =>
array ('facture'),
),
'contrat' =>
array (
'groupName' => 'Contracts',
'stats' =>
array ('contrat_inactive','contrat_active'),
),
'supplier_proposal' =>
array (
'groupName' => 'SupplierProposals',
'stats' =>
array ('supplier_proposal_opened','supplier_proposal_signed'),
),
'order_supplier' =>
array (
'groupName' => 'SuppliersOrders',
'stats' =>
array ('order_supplier'),
),
'invoice_supplier' =>
array (
'groupName' => 'BillsSuppliers',
'stats' =>
array ('invoice_supplier'),
),
'bank_account' =>
array (
'groupName' => 'BankAccount',
'stats' =>
array ('bank_account','RemiseCheque'),
),
'Adherent' =>
array (
'groupName' => 'Members',
'stats' =>
array ('Adherent'),
),
'ExpenseReport' =>
array (
'groupName' => 'ExpenseReport',
'stats' =>
array ('ExpenseReport'),
),
'Holiday' =>
array (
'groupName' => 'Holidays',
'stats' =>
array ('Holiday'),
),
);
/* grouping dashboard stats */
$dashboardgroup = array(
'action' =>
array(
'groupName' => 'Agenda',
'stats' => array('action'),
),
'project' =>
array(
'groupName' => 'Projects',
'stats' => array('project', 'project_task'),
),
'propal' =>
array(
'groupName' => 'Proposals',
'stats' =>
array('propal_opened', 'propal_signed'),
),
'commande' =>
array(
'groupName' => 'Orders',
'stats' =>
array('commande'),
),
'facture' =>
array(
'groupName' => 'Invoices',
'stats' =>
array('facture'),
),
'contrat' =>
array(
'groupName' => 'Contracts',
'stats' =>
array('contrat_inactive', 'contrat_active'),
),
'supplier_proposal' =>
array(
'groupName' => 'SupplierProposals',
'stats' =>
array('supplier_proposal_opened', 'supplier_proposal_signed'),
),
'order_supplier' =>
array(
'groupName' => 'SuppliersOrders',
'stats' =>
array('order_supplier'),
),
'invoice_supplier' =>
array(
'groupName' => 'BillsSuppliers',
'stats' =>
array('invoice_supplier'),
),
'bank_account' =>
array(
'groupName' => 'BankAccount',
'stats' =>
array('bank_account', 'RemiseCheque'),
),
'Adherent' =>
array(
'groupName' => 'Members',
'stats' =>
array('Adherent'),
),
'ExpenseReport' =>
array(
'groupName' => 'ExpenseReport',
'stats' =>
array('ExpenseReport'),
),
'Holiday' =>
array(
'groupName' => 'Holidays',
'stats' =>
array('Holiday'),
),
);
$object=new stdClass();
$parameters=array(
'dashboardgroup' => $dashboardgroup
);
$reshook=$hookmanager->executeHooks('addOpenElementsDashboardGroup', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook == 0) {
$dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray);
}
$object = new stdClass();
$parameters = array(
'dashboardgroup' => $dashboardgroup
);
$reshook = $hookmanager->executeHooks('addOpenElementsDashboardGroup', $parameters, $object,
$action); // Note that $action and $object may have been modified by some hooks
if ($reshook == 0) {
$dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray);
}
// Calculate total nb of late
$totallate=$totaltodo=0;
$totallate = $totaltodo = 0;
//Remove any invalid response
//load_board can return an integer if failed or WorkboardResponse if OK
$valid_dashboardlines=array();
foreach($dashboardlines as $infoKey => $tmp)
{
if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[$infoKey] = $tmp;
}
$valid_dashboardlines = array();
foreach ($dashboardlines as $infoKey => $tmp) {
if ($tmp instanceof WorkboardResponse) {
$valid_dashboardlines[$infoKey] = $tmp;
}
}
// We calculate $totallate. Must be defined before start of next loop because it is show in first fetch on next loop
foreach($valid_dashboardlines as $board)
{
if ($board->nbtodolate > 0) {
$totaltodo += $board->nbtodo;
$totallate += $board->nbtodolate;
foreach ($valid_dashboardlines as $board) {
if ($board->nbtodolate > 0) {
$totaltodo += $board->nbtodo;
$totallate += $board->nbtodolate;
}
}
}
$openedDashBoardSize = 'info-box-sm'; // use sm by default
foreach ($dashboardgroup as $dashbordelement){
if (is_array($dashbordelement['stats']) && count($dashbordelement['stats'])>2){
$openedDashBoardSize = ''; // use default info box size : big
break;
$openedDashBoardSize = 'info-box-sm'; // use sm by default
foreach ($dashboardgroup as $dashbordelement) {
if (is_array($dashbordelement['stats']) && count($dashbordelement['stats']) > 2) {
$openedDashBoardSize = ''; // use default info box size : big
break;
}
}
}
$totalLateNumber = $totallate;
$totallatePercentage = ((! empty($totaltodo)) ? round($totallate / $totaltodo * 100, 2) : 0);
if(! empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) $totallate = $totallatePercentage;
$totalLateNumber = $totallate;
$totallatePercentage = ((!empty($totaltodo)) ? round($totallate / $totaltodo * 100, 2) : 0);
if (!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) {
$totallate = $totallatePercentage;
}
$boxwork='';
$boxwork.='<div class="box">';
$boxwork.='<table summary="'.dol_escape_htmltag($langs->trans("WorkingBoard")).'" class="noborder boxtable boxtablenobottom boxworkingboard" width="100%">'."\n";
$boxwork.='<tr class="liste_titre">';
$boxwork.='<th class="liste_titre"><div class="inline-block valignmiddle">'.$langs->trans("DolibarrWorkBoard").'</div>';
if ($showweather)
{
if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate").' ('.$langs->transnoentitiesnoconv("NActionsLate", $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')).')';
else $text=$langs->transnoentitiesnoconv("NoItemLate");
$text.='. '.$langs->transnoentitiesnoconv("LateDesc");
//$text.=$form->textwithpicto('',$langs->trans("LateDesc"));
$options='height="24px" style="float: right"';
$boxwork.=showWeather($totallate, $text, $options, 'inline-block valignmiddle');
}
$boxwork.='</th>';
$boxwork.='</tr>'."\n";
$boxwork = '';
$boxwork .= '<div class="box">';
$boxwork .= '<table summary="' . dol_escape_htmltag($langs->trans("WorkingBoard")) . '" class="noborder boxtable boxtablenobottom boxworkingboard" width="100%">' . "\n";
$boxwork .= '<tr class="liste_titre">';
$boxwork .= '<th class="liste_titre"><div class="inline-block valignmiddle">' . $langs->trans("DolibarrWorkBoard") . '</div>';
if ($showweather) {
if ($totallate > 0) {
$text = $langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate") . ' (' . $langs->transnoentitiesnoconv("NActionsLate",
$totallate . (!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')) . ')';
} else {
$text = $langs->transnoentitiesnoconv("NoItemLate");
}
$text .= '. ' . $langs->transnoentitiesnoconv("LateDesc");
//$text.=$form->textwithpicto('',$langs->trans("LateDesc"));
$options = 'height="24px" style="float: right"';
$boxwork .= showWeather($totallate, $text, $options, 'inline-block valignmiddle');
}
$boxwork .= '</th>';
$boxwork .= '</tr>' . "\n";
// Show dashboard
$nbworkboardempty=0;
$isIntopOpenedDashBoard = array();
if (!empty($valid_dashboardlines))
{
$openedDashBoard = '';
$nbworkboardempty = 0;
$isIntopOpenedDashBoard = array();
if (!empty($valid_dashboardlines)) {
$openedDashBoard = '';
$boxwork.='<tr class="nobottom nohover"><td class="tdboxstats nohover flexcontainer centpercent"><div style="display: flex: flex-wrap: wrap">';
$boxwork .= '<tr class="nobottom nohover"><td class="tdboxstats nohover flexcontainer centpercent"><div style="display: flex: flex-wrap: wrap">';
foreach($dashboardgroup as $groupKey => $groupElement) {
$boards = array();
foreach ($dashboardgroup as $groupKey => $groupElement) {
$boards = array();
if(!empty($conf->global->MAIN_DISPLAY_NEW_OPENED_DASH_BOARD) || !empty($conf->global->MAIN_FEATURES_LEVEL))
{
foreach ($groupElement['stats'] as $infoKey)
{
if(!empty($valid_dashboardlines[$infoKey]))
{
$boards[] = $valid_dashboardlines[$infoKey];
$isIntopOpenedDashBoard[]=$infoKey;
}
}
}
if (!empty($conf->global->MAIN_DISPLAY_NEW_OPENED_DASH_BOARD) || !empty($conf->global->MAIN_FEATURES_LEVEL)) {
foreach ($groupElement['stats'] as $infoKey) {
if (!empty($valid_dashboardlines[$infoKey])) {
$boards[] = $valid_dashboardlines[$infoKey];
$isIntopOpenedDashBoard[] = $infoKey;
}
}
}
if(!empty($boards))
{
$groupName = $langs->trans($groupElement['groupName']);
$groupKeyLowerCase = strtolower($groupKey);
if (!empty($boards)) {
$groupName = $langs->trans($groupElement['groupName']);
$groupKeyLowerCase = strtolower($groupKey);
$openedDashBoard.= '<div class="box-flex-item">'."\n";
$openedDashBoard.= ' <div class="info-box '.$openedDashBoardSize.'">'."\n";
$openedDashBoard.= ' <span class="info-box-icon bg-infoxbox-'.$groupKeyLowerCase.'"><i class="fa fa-dol-'.$groupKeyLowerCase.'"></i></span>'."\n";
$openedDashBoard.= ' <div class="info-box-content">'."\n";
$openedDashBoard .= ' <span class="info-box-title" title="'.dol_escape_htmltag($groupName).'">'.$groupName.'</span>' . "\n";
$openedDashBoard .= '<div class="box-flex-item">' . "\n";
$openedDashBoard .= ' <div class="info-box ' . $openedDashBoardSize . '">' . "\n";
$openedDashBoard .= ' <span class="info-box-icon bg-infoxbox-' . $groupKeyLowerCase . '"><i class="fa fa-dol-' . $groupKeyLowerCase . '"></i></span>' . "\n";
$openedDashBoard .= ' <div class="info-box-content">' . "\n";
$openedDashBoard .= ' <span class="info-box-title" title="' . dol_escape_htmltag($groupName) . '">' . $groupName . '</span>' . "\n";
foreach($boards as $board) {
if(!empty($board->labelShort)){
$infoName = '<span title="'.$board->label.'">'.$board->labelShort.'</span>';
}
else{
$infoName = $board->label ;
}
foreach ($boards as $board) {
if (!empty($board->labelShort)) {
$infoName = '<span title="' . $board->label . '">' . $board->labelShort . '</span>';
} else {
$infoName = $board->label;
}
$textLateTitle = $langs->trans("NActionsLate", $board->nbtodolate);
$textLateTitle.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')';
$textLateTitle = $langs->trans("NActionsLate", $board->nbtodolate);
$textLateTitle .= ' (' . $langs->trans("Late") . ' = ' . $langs->trans("DateReference") . ' > ' . $langs->trans("DateToday") . ' ' . (ceil($board->warning_delay) >= 0 ? '+' : '') . ceil($board->warning_delay) . ' ' . $langs->trans("days") . ')';
$textLate = '';
if($board->nbtodolate>0)
{
$textLate .= ' <span title="'.dol_htmlentities($textLateTitle).'" class="classfortooltip badge badge-danger">';
$textLate .= '<i class="fa fa-exclamation-triangle"></i> '.$board->nbtodolate;
$textLate .= '</span>';
}
$textLate = '';
if ($board->nbtodolate > 0) {
$textLate .= ' <span title="' . dol_htmlentities($textLateTitle) . '" class="classfortooltip badge badge-danger">';
$textLate .= '<i class="fa fa-exclamation-triangle"></i> ' . $board->nbtodolate;
$textLate .= '</span>';
}
$nbtodClass = '';
if($board->nbtodo>0){
$nbtodClass = 'badge badge-info';
}
$nbtodClass = '';
if ($board->nbtodo > 0) {
$nbtodClass = 'badge badge-info';
}
$openedDashBoard .= ' <a href="'.$board->url.'" class="info-box-text">'.$infoName.' : <span class="'.$nbtodClass.' classfortooltip" title="'.$board->label.'" >'.$board->nbtodo.'</span>'.$textLate.'</a>' . "\n";
$openedDashBoard .= ' <a href="' . $board->url . '" class="info-box-text">' . $infoName . ' : <span class="' . $nbtodClass . ' classfortooltip" title="' . $board->label . '" >' . $board->nbtodo . '</span>' . $textLate . '</a>' . "\n";
if ($board->total > 0 && ! empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)){
$openedDashBoard .= '<a href="'.$board->url.'" class="info-box-text">'.$langs->trans('Total').' : '.price($board->total) .'</a>';
}
}
if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) {
$openedDashBoard .= '<a href="' . $board->url . '" class="info-box-text">' . $langs->trans('Total') . ' : ' . price($board->total) . '</a>';
}
}
$openedDashBoard.= ' </div><!-- /.info-box-content -->'."\n";
$openedDashBoard.= ' </div><!-- /.info-box -->'."\n";
$openedDashBoard.= '</div><!-- /.box-flex-item -->'."\n";
$openedDashBoard.="\n";
}
}
if ($showweather && !empty($isIntopOpenedDashBoard))
{
$appendClass = $conf->global->MAIN_DISABLE_METEO == 2 ?' hideonsmartphone' : '';
$weather = getWeatherStatus($totallate);
$text='';
if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate").' ('.$langs->transnoentitiesnoconv("NActionsLate", $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')).')';
else $text=$langs->transnoentitiesnoconv("NoItemLate");
$text.='. '.$langs->transnoentitiesnoconv("LateDesc");
$weatherDashBoard= '<div class="box-flex-item '.$appendClass.'">'."\n";
$weatherDashBoard.= ' <div class="info-box '.$openedDashBoardSize.' info-box-weather info-box-weather-level'.$weather->level.'">'."\n";
$weatherDashBoard.= ' <span class="info-box-icon">';
$weatherDashBoard.= img_weather('', $weather->level, '', 0, 'valignmiddle width50');
$weatherDashBoard.= ' </span>'."\n";
$weatherDashBoard.= ' <div class="info-box-content">'."\n";
$weatherDashBoard.= ' <span class="info-box-title">'.$langs->trans('GlobalOpenedElemView').'</span>' . "\n";
if($totallatePercentage>0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) {
$weatherDashBoard.= ' <span class="info-box-number">'.$langs->transnoentitiesnoconv("NActionsLate", price($totallatePercentage).'%').'</span>' . "\n";
$weatherDashBoard.= ' <span class="progress-description">'.$langs->trans('NActionsLate', $totalLateNumber).'</span>' . "\n";
}
else{
$weatherDashBoard.= ' <span class="info-box-number">'.$langs->transnoentitiesnoconv("NActionsLate", $totalLateNumber).'</span>' . "\n";
if($totallatePercentage>0) {
$weatherDashBoard.= ' <span class="progress-description">'.$langs->trans('NActionsLate', price($totallatePercentage).'%').'</span>' . "\n";
}
}
$weatherDashBoard.= ' </div><!-- /.info-box-content -->'."\n";
$weatherDashBoard.= ' </div><!-- /.info-box -->'."\n";
$weatherDashBoard.= '</div><!-- /.box-flex-item -->'."\n";
$weatherDashBoard.="\n";
$openedDashBoard=$weatherDashBoard.$openedDashBoard;
}
if(!empty($isIntopOpenedDashBoard))
{
for ($i = 1; $i <= 10; $i++) {
$openedDashBoard .= '<div class="box-flex-item filler"></div>';
}
}
$nbworkboardcount=0;
foreach($valid_dashboardlines as $infoKey => $board)
{
if(in_array($infoKey, $isIntopOpenedDashBoard)) {
// skip if info is present on top
continue;
}
if (empty($board->nbtodo)) $nbworkboardempty++;
$nbworkboardcount++;
$textlate = $langs->trans("NActionsLate", $board->nbtodolate);
$textlate.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')';
$boxwork .='<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats130 boxstatsborder">';
$boxwork .= '<div class="boxstatscontent">';
$boxwork .= '<span class="boxstatstext" title="'.dol_escape_htmltag($board->label).'">'.$board->img.' '.$board->label.'</span><br>';
$boxwork .= '<a class="valignmiddle dashboardlineindicator" href="'.$board->url.'"><span class="dashboardlineindicator'.(($board->nbtodo == 0)?' dashboardlineok':'').'">'.$board->nbtodo.'</span></a>';
if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX))
{
$boxwork .= '&nbsp;/&nbsp;<a class="valignmiddle dashboardlineindicator" href="'.$board->url.'"><span class="dashboardlineindicator'.(($board->nbtodo == 0)?' dashboardlineok':'').'">'.price($board->total) .'</span></a>';
$openedDashBoard .= ' </div><!-- /.info-box-content -->' . "\n";
$openedDashBoard .= ' </div><!-- /.info-box -->' . "\n";
$openedDashBoard .= '</div><!-- /.box-flex-item -->' . "\n";
$openedDashBoard .= "\n";
}
}
$boxwork .= '</div>';
if ($board->nbtodolate > 0)
{
$boxwork .= '<div class="dashboardlinelatecoin nowrap">';
$boxwork .= '<a title="'.dol_escape_htmltag($textlate).'" class="valignmiddle dashboardlineindicatorlate'.($board->nbtodolate>0?' dashboardlineko':' dashboardlineok').'" href="'.((!$board->url_late) ? $board->url : $board->url_late ).'">';
//$boxwork .= img_picto($textlate, "warning_white", 'class="valigntextbottom"').'';
$boxwork .= img_picto($textlate, "warning_white", 'class="inline-block hideonsmartphone valigntextbottom"').'';
$boxwork .= '<span class="dashboardlineindicatorlate'.($board->nbtodolate>0?' dashboardlineko':' dashboardlineok').'">';
$boxwork .= $board->nbtodolate;
$boxwork .= '</span>';
$boxwork .= '</a>';
if ($showweather && !empty($isIntopOpenedDashBoard)) {
$appendClass = $conf->global->MAIN_DISABLE_METEO == 2 ? ' hideonsmartphone' : '';
$weather = getWeatherStatus($totallate);
$text = '';
if ($totallate > 0) {
$text = $langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate") . ' (' . $langs->transnoentitiesnoconv("NActionsLate",
$totallate . (!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')) . ')';
} else {
$text = $langs->transnoentitiesnoconv("NoItemLate");
}
$text .= '. ' . $langs->transnoentitiesnoconv("LateDesc");
$weatherDashBoard = '<div class="box-flex-item ' . $appendClass . '">' . "\n";
$weatherDashBoard .= ' <div class="info-box ' . $openedDashBoardSize . ' info-box-weather info-box-weather-level' . $weather->level . '">' . "\n";
$weatherDashBoard .= ' <span class="info-box-icon">';
$weatherDashBoard .= img_weather('', $weather->level, '', 0, 'valignmiddle width50');
$weatherDashBoard .= ' </span>' . "\n";
$weatherDashBoard .= ' <div class="info-box-content">' . "\n";
$weatherDashBoard .= ' <span class="info-box-title">' . $langs->trans('GlobalOpenedElemView') . '</span>' . "\n";
if ($totallatePercentage > 0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) {
$weatherDashBoard .= ' <span class="info-box-number">' . $langs->transnoentitiesnoconv("NActionsLate",
price($totallatePercentage) . '%') . '</span>' . "\n";
$weatherDashBoard .= ' <span class="progress-description">' . $langs->trans('NActionsLate',
$totalLateNumber) . '</span>' . "\n";
} else {
$weatherDashBoard .= ' <span class="info-box-number">' . $langs->transnoentitiesnoconv("NActionsLate",
$totalLateNumber) . '</span>' . "\n";
if ($totallatePercentage > 0) {
$weatherDashBoard .= ' <span class="progress-description">' . $langs->trans('NActionsLate',
price($totallatePercentage) . '%') . '</span>' . "\n";
}
}
$weatherDashBoard .= ' </div><!-- /.info-box-content -->' . "\n";
$weatherDashBoard .= ' </div><!-- /.info-box -->' . "\n";
$weatherDashBoard .= '</div><!-- /.box-flex-item -->' . "\n";
$weatherDashBoard .= "\n";
$openedDashBoard = $weatherDashBoard . $openedDashBoard;
}
if (!empty($isIntopOpenedDashBoard)) {
for ($i = 1; $i <= 10; $i++) {
$openedDashBoard .= '<div class="box-flex-item filler"></div>';
}
}
$nbworkboardcount = 0;
foreach ($valid_dashboardlines as $infoKey => $board) {
if (in_array($infoKey, $isIntopOpenedDashBoard)) {
// skip if info is present on top
continue;
}
if (empty($board->nbtodo)) {
$nbworkboardempty++;
}
$nbworkboardcount++;
$textlate = $langs->trans("NActionsLate", $board->nbtodolate);
$textlate .= ' (' . $langs->trans("Late") . ' = ' . $langs->trans("DateReference") . ' > ' . $langs->trans("DateToday") . ' ' . (ceil($board->warning_delay) >= 0 ? '+' : '') . ceil($board->warning_delay) . ' ' . $langs->trans("days") . ')';
$boxwork .= '<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats130 boxstatsborder">';
$boxwork .= '<div class="boxstatscontent">';
$boxwork .= '<span class="boxstatstext" title="' . dol_escape_htmltag($board->label) . '">' . $board->img . ' ' . $board->label . '</span><br>';
$boxwork .= '<a class="valignmiddle dashboardlineindicator" href="' . $board->url . '"><span class="dashboardlineindicator' . (($board->nbtodo == 0) ? ' dashboardlineok' : '') . '">' . $board->nbtodo . '</span></a>';
if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) {
$boxwork .= '&nbsp;/&nbsp;<a class="valignmiddle dashboardlineindicator" href="' . $board->url . '"><span class="dashboardlineindicator' . (($board->nbtodo == 0) ? ' dashboardlineok' : '') . '">' . price($board->total) . '</span></a>';
}
$boxwork .= '</div>';
if ($board->nbtodolate > 0) {
$boxwork .= '<div class="dashboardlinelatecoin nowrap">';
$boxwork .= '<a title="' . dol_escape_htmltag($textlate) . '" class="valignmiddle dashboardlineindicatorlate' . ($board->nbtodolate > 0 ? ' dashboardlineko' : ' dashboardlineok') . '" href="' . ((!$board->url_late) ? $board->url : $board->url_late) . '">';
//$boxwork .= img_picto($textlate, "warning_white", 'class="valigntextbottom"').'';
$boxwork .= img_picto($textlate, "warning_white",
'class="inline-block hideonsmartphone valigntextbottom"') . '';
$boxwork .= '<span class="dashboardlineindicatorlate' . ($board->nbtodolate > 0 ? ' dashboardlineko' : ' dashboardlineok') . '">';
$boxwork .= $board->nbtodolate;
$boxwork .= '</span>';
$boxwork .= '</a>';
$boxwork .= '</div>';
}
$boxwork .= '</div></div>';
$boxwork .= "\n";
}
$boxwork.='</div></div>';
$boxwork .="\n";
$boxwork .= '<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
$boxwork .= '<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
$boxwork .= '<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
$boxwork .= '<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
$boxwork .= '</div>';
$boxwork .= '</td></tr>';
} else {
$boxwork .= '<tr class="nohover">';
$boxwork .= '<td class="nohover valignmiddle opacitymedium">';
$boxwork .= $langs->trans("NoOpenedElementToProcess");
$boxwork .= '</td>';
$boxwork .= '</tr>';
}
$boxwork .='<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
$boxwork .='<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
$boxwork .='<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
$boxwork .='<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
$boxwork .= '</td></tr>';
$boxwork .='</div>';
$boxwork .='</td></tr>';
}
else
{
$boxwork.='<tr class="nohover">';
$boxwork.='<td class="nohover valignmiddle opacitymedium">';
$boxwork.=$langs->trans("NoOpenedElementToProcess");
$boxwork.='</td>';
$boxwork.='</tr>';
$boxwork .= '</table>'; // End table array of working board
$boxwork .= '</div>';
if (!empty($isIntopOpenedDashBoard)) {
print '<div class="fichecenter">';
print '<div class="opened-dash-board-wrap"><div class="box-flex-container">' . $openedDashBoard . '</div></div>';
print '</div>';
}
}
$boxwork.='</td></tr>';
$boxwork.='</table>'; // End table array of working board
$boxwork.='</div>';
if(!empty($isIntopOpenedDashBoard)) {
print '<div class="fichecenter">';
print '<div class="opened-dash-board-wrap"><div class="box-flex-container">' . $openedDashBoard . '</div></div>';
print '</div>';
}
print '<div class="clearboth"></div>';

View File

@ -0,0 +1,43 @@
-- Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
-- Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
-- Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
-- Copyright (C) 2004 Guillaume Delecourt <guillaume.delecourt@opensides.be>
-- Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
-- Copyright (C) 2007 Patrick Raguin <patrick.raguin@gmail.com>
-- Copyright (C) 2019 Markus Welters <markus@welters.de>
--
-- 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
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
--
--
-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors
-- de l'install et tous les sigles '--' sont supprimés.
--
-- LIST ON https://fr.wikipedia.org/wiki/Jour_férié
-- A lot of countries
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('NEWYEARDAY1', 0, 0, 0, 1, 1, 1);
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('LABORDAY1', 0, 0, 0, 5, 1, 1);
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('CHRISTMASDAY1', 0, 0, 0, 12, 25, 1);
-- France only
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRVICTORYDAY', 0, 1, 0, 5, 8, 1);
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRNATIONALDAY', 0, 1, 0, 7, 14, 1);
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRASSOMPTION', 0, 1, 0, 8, 15, 1);
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRTOUSSAINT', 0, 1, 0, 11, 1, 1);
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRARMISTICE', 0, 1, 0, 11, 11, 1);

View File

@ -105,3 +105,20 @@ ALTER TABLE llx_societe_contacts ADD UNIQUE INDEX idx_societe_contacts_idx1 (ent
ALTER TABLE llx_societe_contacts ADD CONSTRAINT fk_societe_contacts_fk_c_type_contact FOREIGN KEY (fk_c_type_contact) REFERENCES llx_c_type_contact(rowid);
ALTER TABLE llx_societe_contacts ADD CONSTRAINT fk_societe_contacts_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe(rowid);
ALTER TABLE llx_societe_contacts ADD CONSTRAINT fk_societe_contacts_fk_socpeople FOREIGN KEY (fk_socpeople) REFERENCES llx_socpeople(rowid);
create table llx_c_hrm_public_holiday
(
id integer AUTO_INCREMENT PRIMARY KEY,
entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all
fk_country integer,
code varchar(62),
dayrule varchar(255) DEFAULT 'date', -- 'date', 'xxx', ...
day integer,
month integer,
year integer, -- 0 for all years
active integer DEFAULT 1,
import_key varchar(14)
)ENGINE=innodb;

View File

@ -36,5 +36,4 @@ create table llx_c_field_list
visible tinyint DEFAULT 1 NOT NULL, -- visibility of field. 0=Never visible, 1=Visible on list and forms, 2=Visible on list only
enabled varchar(255) DEFAULT 1, -- Condition to show or hide
rang integer DEFAULT 0
)ENGINE=innodb;

View File

@ -0,0 +1,21 @@
-- ========================================================================
-- Copyright (C) 2019 Laurent Destailleur <eldy@users.sourceforge.net>
--
-- 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
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
--
-- ========================================================================
ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday(entity, code);
ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday2(entity, day, month, year);

View File

@ -0,0 +1,31 @@
-- ========================================================================
-- Copyright (C) 2019 Laurent Destailleur <eldy@users.sourceforge.net>
--
-- 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
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
--
-- ========================================================================
create table llx_c_hrm_public_holiday
(
id integer AUTO_INCREMENT PRIMARY KEY,
entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all
fk_country integer,
code varchar(62),
dayrule varchar(255) DEFAULT 'date', -- 'date', 'xxx', ...
day integer,
month integer,
year integer, -- 0 for all years
active integer DEFAULT 1,
import_key varchar(14)
)ENGINE=innodb;

View File

@ -36,7 +36,7 @@ create table llx_user
pass_encoding varchar(24),
pass varchar(128),
pass_crypted varchar(128),
pass_temp varchar(128), -- temporary password when asked for forget password or 'hashtoallowreset:YYYMMDDHHMMSS' (where date is max date of validaity)
pass_temp varchar(128), -- temporary password when asked for forget password or 'hashtoallowreset:YYYMMDDHHMMSS' (where date is max date of validity)
api_key varchar(128), -- key to use REST API by this user
gender varchar(10),
civility varchar(6),

View File

@ -1,11 +1,7 @@
# Dolibarr language file - Source file is en_US - admin
OldVATRates=Old GST rate
NewVATRates=New GST rate
Module600Name=Notifications on business event
DictionaryVAT=GST Rates or Sales Tax Rates
OptionVatMode=GST due
ListOfNotificationsPerUser=List of automatic notifications per user*
ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact**
ListOfFixedNotifications=List of automatic fixed notifications
LinkColor=Colour of links
OperationParamDesc=Define values to use for action, or how to extract values. For example:<br>objproperty1=SET:abc<br>objproperty1=SET:a value with replacement of __objproperty1__<br>objproperty3=SETIFEMPTY:abc<br>objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)<br>options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)<br>object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)<br><br>Use a ; char as separator to extract or set several properties.

View File

@ -1,2 +0,0 @@
# Dolibarr language file - Source file is en_US - withdrawals
RUM=Unique Mandate Reference (UMR)

View File

@ -1,10 +1,6 @@
# Dolibarr language file - Source file is en_US - admin
Module600Name=Notifications on business event
LocalTax1Management=PST Management
CompanyZip=Postal code
LDAPFieldZip=Postal code
ListOfNotificationsPerUser=List of automatic notifications per user*
ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact**
ListOfFixedNotifications=List of automatic fixed notifications
FormatZip=Postal code
OperationParamDesc=Define values to use for action, or how to extract values. For example:<br>objproperty1=SET:abc<br>objproperty1=SET:a value with replacement of __objproperty1__<br>objproperty3=SETIFEMPTY:abc<br>objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)<br>options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)<br>object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)<br><br>Use a ; char as separator to extract or set several properties.

View File

@ -41,14 +41,10 @@ UMaskExplanation=This parameter allows you to define permissions set by default
ListOfDirectories=List of OpenDocument template directories
ListOfDirectoriesForModelGenODT=List of directories containing template files in OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between each directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
FollowingSubstitutionKeysCanBeUsed=<br>To learn how to create your .odt document templates, before storing them in those directories, read wiki documentation:
Module600Name=Notifications on business event
Module50200Name=PayPal
DictionaryAccountancyJournal=Finance journals
CompanyZip=Postcode
LDAPFieldZip=Postcode
GenbarcodeLocation=Barcode generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".<br>For example: /usr/local/bin/genbarcode
ListOfNotificationsPerUser=List of automatic notifications per user*
ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact**
ListOfFixedNotifications=List of automatic fixed notifications
FormatZip=Postcode
OperationParamDesc=Define values to use for action, or how to extract values. For example:<br>objproperty1=SET:abc<br>objproperty1=SET:a value with replacement of __objproperty1__<br>objproperty3=SETIFEMPTY:abc<br>objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)<br>options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)<br>object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)<br><br>Use a ; char as separator to extract or set several properties.

View File

@ -15,7 +15,6 @@ NotifyCredit=Payment Credit
WithdrawalFileNotCapable=Unable to generate Payment receipt file for your country %s (Your country is not supported)
DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to manage the direct debit payment order. When the payment order is closed, payment on the invoice will be automatically recorded, and the invoice closed if the outstanding balance is null.
WithdrawalFile=Payment file
RUM=Unique Mandate Reference (UMR)
WithdrawRequestAmount=The amount of Direct Debit request:
WithdrawRequestErrorNilAmount=Unable to create a Direct Debit request for an empty amount.
SEPALegalText=By signing this mandate form, you authorise (A) %s to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from %s. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights regarding the above mandate are explained in a statement that you can obtain from your bank.

View File

@ -1,7 +1,6 @@
# Dolibarr language file - Source file is en_US - admin
Module20Name=Quotations
Module20Desc=Management of quotations
Module600Name=Notifications on business event
Permission21=Read quotations
Permission22=Create/modify quotations
Permission24=Validate quotations
@ -14,8 +13,5 @@ ProposalsNumberingModules=Quotation numbering models
ProposalsPDFModules=Quotation documents models
FreeLegalTextOnProposal=Free text on quotations
WatermarkOnDraftProposal=Watermark on draft quotations (none if empty)
ListOfNotificationsPerUser=List of automatic notifications per user*
ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact**
ListOfFixedNotifications=List of automatic fixed notifications
MailToSendProposal=Customer quotations
OperationParamDesc=Define values to use for action, or how to extract values. For example:<br>objproperty1=SET:abc<br>objproperty1=SET:a value with replacement of __objproperty1__<br>objproperty3=SETIFEMPTY:abc<br>objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)<br>options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)<br>object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)<br><br>Use a ; char as separator to extract or set several properties.

View File

@ -1695,7 +1695,7 @@ SuppliersSetup=Vendor module setup
SuppliersCommandModel=Complete template of purchase order (logo...)
SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
SuppliersInvoiceNumberingModel=Vendor invoices numbering models
IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
IfSetToYesDontForgetPermission=If set to a non null value, don't forget to provide permissions to groups or users allowed for the second approval
##### GeoIPMaxmind #####
GeoIPMaxmindSetup=GeoIP Maxmind module setup
PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.<br>Examples:<br>/usr/local/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoLite2-Country.mmdb
@ -1851,7 +1851,7 @@ SeveralLangugeVariatFound=Several language variants found
RemoveSpecialChars=Remove special characters
COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
COMPANY_DIGITARIA_CLEAN_REGEX=Regex filter to clean value (COMPANY_DIGITARIA_CLEAN_REGEX)
COMPANY_DIGITARIA_UNIQUE_CODE=Unauthorized double
COMPANY_DIGITARIA_UNIQUE_CODE=Duplicate not allowed
GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
GDPRContactDesc=If you store data about European companies/citizens, you can name the contact who is responsible for the General Data Protection Regulation here
HelpOnTooltip=Help text to show on tooltip

View File

@ -63,7 +63,7 @@ LT2SupplierES=IRPF purchases
LT2CustomerIN=SGST sales
LT2SupplierIN=SGST purchases
VATCollected=VAT collected
ToPay=To pay
StatusToPay=To pay
SpecialExpensesArea=Area for all special payments
SocialContribution=Social or fiscal tax
SocialContributions=Social or fiscal taxes

View File

@ -9,6 +9,7 @@ ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment?
OpenEtablishment=Open establishment
CloseEtablishment=Close establishment
# Dictionary
DictionaryPublicHolidays=HRM - Public holidays
DictionaryDepartment=HRM - Department list
DictionaryFunction=HRM - Function list
# Module

View File

@ -412,6 +412,7 @@ DefaultTaxRate=Default tax rate
Average=Average
Sum=Sum
Delta=Delta
StatusToPay=To pay
RemainToPay=Remain to pay
Module=Module/Application
Modules=Modules/Applications

View File

@ -154,5 +154,5 @@ CreateOrders=Create orders
ToBillSeveralOrderSelectCustomer=To create an invoice for several orders, click first onto customer, then choose "%s".
OptionToSetOrderBilledNotEnabled=Option (from module Workflow) to set order to 'Billed' automatically when invoice is validated is off, so you will have to set status of order to 'Billed' manually.
IfValidateInvoiceIsNoOrderStayUnbilled=If invoice validation is 'No', the order will remain to status 'Unbilled' until the invoice is validated.
CloseReceivedSupplierOrdersAutomatically=Close order to "%s" automatically if all products are received.
CloseReceivedSupplierOrdersAutomatically=Close order to status "%s" automatically if all products are received.
SetShippingMode=Set shipping mode

View File

@ -11,7 +11,6 @@ YourEMail=Email to receive payment confirmation
Creditor=Creditor
PaymentCode=Payment code
PayBoxDoPayment=Pay with Paybox
ToPay=Do payment
YouWillBeRedirectedOnPayBox=You will be redirected on secured Paybox page to input you credit card information
Continue=Next
ToOfferALinkForOnlinePayment=URL for %s payment

View File

@ -21,6 +21,7 @@ QtyShipped=Qty shipped
QtyShippedShort=Qty ship.
QtyPreparedOrShipped=Qty prepared or shipped
QtyToShip=Qty to ship
QtyToReceive=Qty to receive
QtyReceived=Qty received
QtyInOtherShipments=Qty in other shipments
KeepToShip=Remain to ship
@ -46,6 +47,7 @@ DateDeliveryPlanned=Planned date of delivery
RefDeliveryReceipt=Ref delivery receipt
StatusReceipt=Status delivery receipt
DateReceived=Date delivery received
ClassifyReception=Classify reception
SendShippingByEMail=Send shipment by email
SendShippingRef=Submission of shipment %s
ActionsOnShipping=Events on shipment

View File

@ -55,7 +55,7 @@ PMPValue=Weighted average price
PMPValueShort=WAP
EnhancedValueOfWarehouses=Warehouses value
UserWarehouseAutoCreate=Create a user warehouse automatically when creating a user
AllowAddLimitStockByWarehouse=Manage also values for minimum and desired stock per pairing (product-warehouse) in addition to values per product
AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock per pairing (product-warehouse) in addition to the value for minimum and desired stock per product
IndependantSubProductStock=Product stock and subproduct stock are independent
QtyDispatched=Quantity dispatched
QtyDispatchedShort=Qty dispatched
@ -184,7 +184,7 @@ SelectFournisseur=Vendor filter
inventoryOnDate=Inventory
INVENTORY_DISABLE_VIRTUAL=Virtual product (kit): do not decrement stock of a child product
INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Use the buy price if no last buy price can be found
INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Stock movement has date of inventory
INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT=Stock movements will have the date of inventory (instead of the date of inventory validation)
inventoryChangePMPPermission=Allow to change PMP value for a product
ColumnNewPMP=New unit PMP
OnlyProdsInStock=Do not add product without stock

View File

@ -54,7 +54,6 @@ LT2CustomerES=Ventas de IRPF
LT2SupplierES=Compras de IRPF
LT2CustomerIN=Ventas de SGST
VATCollected=IVA recaudado
ToPay=Pagar
SpecialExpensesArea=Área para todos los pagos especiales
SocialContribution=Impuesto social o fiscal
LabelContrib=Contribución de etiqueta

View File

@ -50,7 +50,6 @@ LT2Supplier=Impuestos 3 compras
LT2CustomerES=Ventas de IRPF
LT2SupplierES=Compras IRPF
VATCollected=IVA recaudado
ToPay=Pagar
SpecialExpensesArea=Área para todos los pagos especiales.
SocialContribution=Impuesto social o fiscal
SocialContributions=Impuestos sociales o fiscales.

View File

@ -16,9 +16,5 @@ FormToTestFileUploadForm=Formulaire pour tester l'upload de fichiers (selon la c
IfModuleEnabled=Note: oui ne fonctionne que si le module <b>%s</b> est activé
Module20Name=Propales
Module30Name=Factures
Module600Name=Notifications on business event
Target=Objectif
ListOfNotificationsPerUser=List of automatic notifications per user*
ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact**
ListOfFixedNotifications=List of automatic fixed notifications
OperationParamDesc=Define values to use for action, or how to extract values. For example:<br>objproperty1=SET:abc<br>objproperty1=SET:a value with replacement of __objproperty1__<br>objproperty3=SETIFEMPTY:abc<br>objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)<br>options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)<br>object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)<br><br>Use a ; char as separator to extract or set several properties.

View File

@ -1,3 +1,2 @@
# Dolibarr language file - Source file is en_US - withdrawals
StatusTrans=Envoyé
RUM=Unique Mandate Reference (UMR)

View File

@ -89,7 +89,6 @@ WatermarkOnDraftExpenseReports=Filigrane sur les projets de rapports de dépense
Module0Desc=Gestion des utilisateurs / employés et des groupes
Module42Desc=Installations de journalisation (fichier, syslog, ...). Ces journaux sont à des fins techniques / de débogage.
Module75Name=Notes de frais et déplacements
Module600Name=Notifications on business event
Module2400Name=Evénements / Agenda
Module2600Name=services API / Web ( serveur SOAP )
Module2600Desc=Active le serveur de Web Services de Dolibarr
@ -199,9 +198,6 @@ DeleteFiscalYear=Supprimer la période comptable
ConfirmDeleteFiscalYear=Êtes-vous sûr de supprimer cette période comptable?
ShowFiscalYear=Afficher la période comptable
SalariesSetup=Configuration du module salariés
ListOfNotificationsPerUser=List of automatic notifications per user*
ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact**
ListOfFixedNotifications=List of automatic fixed notifications
ConfFileMustContainCustom=L'installation ou la construction d'un module externe à partir de l'application doit sauvegarder les fichiers du module dans le répertoire <strong>%s</strong>. Pour que ce répertoire soit traité par Dolibarr, vous devez configurer votre <strong> conf / conf.php </strong> pour ajouter les 2 lignes de directive: <br><strong> $ dolibarr_main_url_root_alt = '/ custom'; </strong><br><strong> $ dolibarr_main_document_root_alt = '%s / custom'; </strong>
HighlightLinesOnMouseHover=Mettez en surbrillance les lignes de table lorsque déplacement de la souris passe au-dessus
PressF5AfterChangingThis=Appuyez sur CTRL + F5 sur le clavier ou effacez votre cache de navigateur après avoir changé cette valeur pour l'avoir efficace

View File

@ -53,7 +53,6 @@ DoStandingOrdersBeforePayments=Cet onglet vous permet de demander une commande d
WithdrawalFile=Fichier de retrait
SetToStatusSent=Définir le statut "Fichier envoyé"
StatisticsByLineStatus=Statistiques par état des lignes
RUM=Unique Mandate Reference (UMR)
RUMLong=Référence de mandat unique
WithdrawMode=Mode de débit direct (FRST ou RECUR)
WithdrawRequestAmount=Montant de la demande de débit direct:

View File

@ -462,7 +462,9 @@ EnableAndSetupModuleCron=Si vous voulez avoir cette facture récurrente génér
ModuleCompanyCodeCustomerAquarium=%s suivi d'un code client tiers pour un code comptable client
ModuleCompanyCodeSupplierAquarium=%s suivi du code fournisseur tiers pour le code comptable fournisseur
ModuleCompanyCodePanicum=Retourne un code comptable vide
ModuleCompanyCodeDigitaria=Renvoie un code comptable composé suivant le code tiers. Le code est composé du caractère 'C' en première position suivi des 5 premiers caractères du code tiers.
ModuleCompanyCodeDigitaria=Renvoie un code de comptabilisation composé en fonction du nom du tiers. Le code consiste en un préfixe pouvant être défini dans la première position, suivi d'un nombre de caractères défini dans le code tiers.
ModuleCompanyCodeCustomerDigitaria=%s suivi du nom de client tronqué du nombre de caractères: %s pour le code comptable client.
ModuleCompanyCodeSupplierDigitaria=%s suivi du nom du fournisseur tronqué du nombre de caractères: %s pour le code comptable fournisseur.
Use3StepsApproval=Par défaut, les commandes fournisseurs nécessitent d'être créées et approuvées par 2 utilisateurs différents (une étape/utilisateur pour créer et une étape/utilisateur pour approuver. Notez que si un utilisateur à les deux permissions, ces deux actions sont effectuées en une seule fois). Cette option ajoute la nécessité d'une approbation par une troisième étape/utilisateur, si le montant de la commande est supérieur au montant d'une valeur définie (soit 3 étapes nécessaire: 1 =Validation, 2=Première approbation et 3=seconde approbation si le montant l'exige).<br>Laissez le champ vide si une seule approbation (2 étapes) est suffisante, placez une valeur très faible (0.1) si une deuxième approbation (3 étapes) est toujours exigée.
UseDoubleApproval=Activer l'approbation en trois étapes si le montant HT est supérieur à...
WarningPHPMail=Attention : Il est préférable de configurer les emails sortant pour utiliser le serveur email de votre fournisseur plutôt que la configuration par défaut. Certains fournisseurs email (comme Yahoo) ne permettent pas l'envoi d'e-mails depuis un autre serveur que le leur si l'adresse d'envoi utilisée est une adresse autre que la leur. Votre configuration actuelle utilise le serveur de l'application pour l'envoi d'e-mails et non le serveur de votre fournisseur de messagerie, aussi certains destinataires (ceux compatibles avec le protocole restrictif DMARC) demanderont au fournisseur d'email si ils peuvent accepter l'email et certains fournisseurs (comme Yahoo) peuvent répondre "non" car le serveur utilisé pour l'envoi n'est pas un serveur appartenant au fournisseur, aussi certains de vos emails envoyés peuvent ne pas etre accepté (faites attention aussi aux quotas de votre fournisseur d'email). <br>SI votre fournisseur d'email (comme Yahoo) impose cette restriction, vous devrez modifier votre configuration et opter pour l'autre méthode d'envoi "SMTP server" et saisir les identifiants SMTP de votre compte fournis par votre fournisseur d'e-mail (à demander à votre fournisseur d'e-mail)
@ -1846,8 +1848,10 @@ NothingToSetup=Aucune configuration particulière n'est requise pour ce module.
SetToYesIfGroupIsComputationOfOtherGroups=Réglez ceci sur Oui si ce groupe est un calcul d'autres groupes
EnterCalculationRuleIfPreviousFieldIsYes=Entrez la règle de calcul si le champ précédent a été défini sur Oui (par exemple, 'CODEGRP1 + CODEGRP2')
SeveralLangugeVariatFound=Plusieurs variantes de langue trouvées
COMPANY_AQUARIUM_REMOVE_SPECIAL=Supprimer les caractères spéciaux
RemoveSpecialChars=Supprimer les caractères spéciaux
COMPANY_AQUARIUM_CLEAN_REGEX=Filtre Regex pour nettoyer la valeur (COMPANY_AQUARIUM_CLEAN_REGEX)
COMPANY_DIGITARIA_CLEAN_REGEX=Filtre de regex pour nettoyer la valeur (COMPANY_DIGITARIA_CLEAN_REGEX)
COMPANY_DIGITARIA_UNIQUE_CODE=Doublons non autorisés
GDPRContact=Responsable de la protection des données (DPO ou contact RGPD)
GDPRContactDesc=Si vous stockez des données sur des entreprises / citoyens européens, vous pouvez stocker ici le contact responsable du RGPD.
HelpOnTooltip=Texte d'aide à afficher dans l'info-bulle

View File

@ -496,9 +496,9 @@ CantRemovePaymentWithOneInvoicePaid=Suppression impossible quand il existe au mo
ExpectedToPay=Paiement attendu
CantRemoveConciliatedPayment=Suppression d'un paiement rapproché impossible
PayedByThisPayment=Règlé par ce paiement
ClosePaidInvoicesAutomatically=Classifiez "Payée" toutes les factures standard, d'acompte ou de remplacement entièrement payées.
ClosePaidCreditNotesAutomatically=Classer automatiquement à "Payé" les factures avoirs entièrement remboursées.
ClosePaidContributionsAutomatically=Classer "payé" toutes les contributions sociales ou fiscales payées entièrement.
ClosePaidInvoicesAutomatically=Classer "Payée" toutes les factures standard, d'acompte ou de remplacement quand le paiement est complet.
ClosePaidCreditNotesAutomatically=Classer automatiquement à "Payé" les factures d'avoirs quand le remboursement est complet.
ClosePaidContributionsAutomatically=Classer automatiquement à "Payé" toutes les contributions sociales ou fiscales quand les sont complets.
AllCompletelyPayedInvoiceWillBeClosed=Toutes les factures avec un reste à payer nul seront automatiquement fermées au statut "Payé".
ToMakePayment=Payer
ToMakePaymentBack=Rembourser

View File

@ -63,7 +63,7 @@ LT2SupplierES=IRPF achats
LT2CustomerIN=TVA sur les ventes
LT2SupplierIN=TVA sur les achats
VATCollected=TVA récupérée
ToPay=A payer
StatusToPay=A payer
SpecialExpensesArea=Espace des paiements particuliers
SocialContribution=Charge sociale ou fiscale
SocialContributions=Charges fiscales ou sociales

View File

@ -76,7 +76,7 @@ CronType_method=Appelle d'une méthode d'une classe Dolibarr
CronType_command=Commande terminal
CronCannotLoadClass=Impossible de charger le fichier %s (pour charger l'objet %s)
CronCannotLoadObject=Le fichier de classe %s a été chargé, mais l'objet %s n'a pas été trouvé dedans
UseMenuModuleToolsToAddCronJobs=Aller à la page "<a href="%s">Accueil - Outils administration - Travaux planifiées</a>" pour voir la listes des travaux programmées et les modifier.
UseMenuModuleToolsToAddCronJobs=Aller à la page "<a href="%s">Accueil - Outils administration - Travaux planifiées</a>" pour voir la listes des travaux programmés et les modifier.
JobDisabled=Travail désactivé
MakeLocalDatabaseDumpShort=Sauvegarde locale de base
MakeLocalDatabaseDump=Créez un fichier dump de base local. Les paramètres sont: compression ('gz' ou 'bz' ou 'none'), type de sauvegarde ('mysql', 'pgsql', 'auto'), 1, 'auto' ou nom du fichier à générer, nombre de fichiers de sauvegarde à garder

View File

@ -332,27 +332,27 @@ PaperFormatCAP6=Format P6 Canadien
ExpAutoCat=Voiture
ExpCycloCat=2 roues
ExpMotoCat=Moto
ExpAuto3CV=3 cv
ExpAuto3CV=3 CV
ExpAuto4CV=4 CV
ExpAuto5CV=5 cv
ExpAuto5CV=5 CV
ExpAuto6CV=6 CV
ExpAuto7CV=7 cv
ExpAuto8CV=8 cv
ExpAuto7CV=7 CV
ExpAuto8CV=8 CV
ExpAuto9CV=9 CV
ExpAuto10CV=10 cv
ExpAuto11CV=11 cv
ExpAuto12CV=12 cv
ExpAuto3PCV=3 cv et plus
ExpAuto10CV=10 CV
ExpAuto11CV=11 CV
ExpAuto12CV=12 CV
ExpAuto3PCV=3 CV et plus
ExpAuto4PCV=4 CV et plus
ExpAuto5PCV=5 cv et plus
ExpAuto6PCV=6 cv et plus
ExpAuto7PCV=7 cv et plus
ExpAuto8PCV=8 cv et plus
ExpAuto9PCV=9 cv et plus
ExpAuto10PCV=10 cv et plus
ExpAuto11PCV=11 cv et plus
ExpAuto12PCV=12 cv et plus
ExpAuto13PCV=13 cv et plus
ExpAuto5PCV=5 CV et plus
ExpAuto6PCV=6 CV et plus
ExpAuto7PCV=7 CV et plus
ExpAuto8PCV=8 CV et plus
ExpAuto9PCV=9 CV et plus
ExpAuto10PCV=10 CV et plus
ExpAuto11PCV=11 CV et plus
ExpAuto12PCV=12 CV et plus
ExpAuto13PCV=13 CV et plus
ExpCyclo=Capacité inférieure à 50 cm3
ExpMoto12CV=2 roues 1 ou 2 cv
ExpMoto345CV=2 roues 3, 4 ou 5 cv

View File

@ -18,6 +18,7 @@ ValidatorCP=Approbateur
ListeCP=Liste des demandes de congés
LeaveId=ID demande de congès
ReviewedByCP=Sera approuvé par
UserID=ID Utilisateur
UserForApprovalID=ID de l'utilisateur d'approbation
UserForApprovalFirstname=Prénom de l'utilisateur d'approbation
UserForApprovalLastname=Nom de l'utilisateur d'approbation

View File

@ -348,8 +348,6 @@ PriceUTTC=P.U TTC
Amount=Montant
AmountInvoice=Montant facture
AmountInvoiced=Montant facturé
AmountInvoicedHT=Montant HT facturé
AmountInvoicedTTC=Montant TTC facturé
AmountPayment=Montant paiement
AmountHTShort=Montant HT
AmountTTCShort=Montant TTC
@ -414,6 +412,7 @@ DefaultTaxRate=Taux de taxe par défaut
Average=Moyenne
Sum=Somme
Delta=Écart
StatusToPay=A payer
RemainToPay=Reste à payer
Module=Module/Application
Modules=Modules/Applications

View File

@ -105,6 +105,7 @@ InitStructureFromExistingTable=Construire la chaîne du tableau de structure d'u
UseAboutPage=Désactiver la page "à propos de"
UseDocFolder=Désactiver le dossier de la documentation
UseSpecificReadme=Utiliser un fichier ReadMe spécifique
ContentOfREADMECustomized=Remarque: le contenu du fichier README.md a été remplacé par la valeur spécifique définie dans la configuration de ModuleBuilder.
RealPathOfModule=Chemin réel du dossier du module
ContentCantBeEmpty=Le contenu du fichier ne peut pas être vide
WidgetDesc=Vous pouvez générer et éditer ici les widgets qui seront intégrés à votre module.

View File

@ -154,5 +154,5 @@ CreateOrders=Créer commandes
ToBillSeveralOrderSelectCustomer=Pour créer une facture pour plusieurs commandes, cliquez d'abord sur le client, puis choisir "%s".
OptionToSetOrderBilledNotEnabled=L'option (issue du module Workflow) pour définir automatiquement les commandes à 'Facturé' que une facture est validée, est désactivée, aussi vous devrez donc définir le statut de la commande sur 'Facturé' manuellement.
IfValidateInvoiceIsNoOrderStayUnbilled=Si la validation de facture est à "Non", la commande restera au statut "Non facturé" jusqu'à ce que la facture soit validée.
CloseReceivedSupplierOrdersAutomatically=Fermer la commande "%s" automatiquement si tous les produits ont été reçus.
CloseReceivedSupplierOrdersAutomatically=Fermer la commande au statut "%s" automatiquement si tous les produits ont été reçus.
SetShippingMode=Définir la méthode d'expédition

View File

@ -11,7 +11,6 @@ YourEMail=Email de confirmation du paiement
Creditor=Bénéficiaire
PaymentCode=Code de paiement
PayBoxDoPayment=Payer avec PayBox
ToPay=Saisir règlement
YouWillBeRedirectedOnPayBox=Vous serez redirigé vers la page sécurisée Paybox de saisie de votre carte bancaire
Continue=Continuer
ToOfferALinkForOnlinePayment=URL de paiement %s

View File

@ -29,10 +29,14 @@ ProductOrService=Produit ou Service
ProductsAndServices=Produits et Services
ProductsOrServices=Produits ou Services
ProductsPipeServices=Produits | Services
ProductsOnSale=Produits en vente
ProductsOnPurchase=Produits en achat
ProductsOnSaleOnly=Produits en vente uniquement
ProductsOnPurchaseOnly=Produits seulement en achat
ProductsNotOnSell=Produits hors vente et hors achat
ProductsOnSellAndOnBuy=Produits en vente et en achat
ServicesOnSale=Services en vente
ServicesOnPurchase=Services en achat
ServicesOnSaleOnly=Services en vente uniquement
ServicesOnPurchaseOnly=Services en achat uniquement
ServicesNotOnSell=Services hors vente et hors achat
@ -340,4 +344,4 @@ ErrorCopyProductCombinations=Une erreur s'est produite lors de la copie des vari
ErrorDestinationProductNotFound=Produit destination non trouvé
ErrorProductCombinationNotFound=Variante du produit non trouvé
ActionAvailableOnVariantProductOnly=Action disponible uniquement sur la variante du produit
ProductsPricePerCustomer=Prix produit par clients
ProductsPricePerCustomer=Prix produit par clients

View File

@ -114,3 +114,7 @@ CSSContentTooltipHelp=Entrez ici le contenu CSS. Pour éviter tout conflit avec
LinkAndScriptsHereAreNotLoadedInEditor=Avertissement: Ce contenu est affiché uniquement lorsque le site est accessible depuis un serveur. Il n'est pas utilisé en mode édition. Par conséquent, si vous devez charger des fichiers javascript également en mode édition, ajoutez simplement la balise 'script src=...' dans la page.
Dynamiccontent=Exemple de page à contenu dynamique
ImportSite=Importer modèle de site web
EditInLineOnOff=Mode 'Modifier en ligne' est %s
ShowSubContainersOnOff=Mode 'exécution dynamique' est %s
GlobalCSSorJS=Fichier CSS/JS/Header global du site Web
BackToHomePage=Retour à la page d'accueil...

View File

@ -1766,7 +1766,7 @@ function top_menu_user(User $user, Translate $langs)
$dropdownBody.= '<br>';
$dropdownBody.= '<br><u>'.$langs->trans("Session").'</u>';
$dropdownBody.= '<br><b>'.$langs->trans("IPAddress").'</b>: '.$_SERVER["REMOTE_ADDR"];
$dropdownBody.= '<br><b>'.$langs->trans("IPAddress").'</b>: '.dol_escape_htmltag($_SERVER["REMOTE_ADDR"]);
if (! empty($conf->global->MAIN_MODULE_MULTICOMPANY)) $dropdownBody.= '<br><b>'.$langs->trans("ConnectedOnMultiCompany").':</b> '.$conf->entity.' (user entity '.$user->entity.')';
$dropdownBody.= '<br><b>'.$langs->trans("AuthenticationMode").':</b> '.$_SESSION["dol_authmode"].(empty($dolibarr_main_demo)?'':' (demo)');
$dropdownBody.= '<br><b>'.$langs->trans("ConnectedSince").':</b> '.dol_print_date($user->datelastlogin, "dayhour", 'tzuser');
@ -1775,7 +1775,7 @@ function top_menu_user(User $user, Translate $langs)
$dropdownBody.= '<br><b>'.$langs->trans("CurrentMenuManager").':</b> '.$menumanager->name;
$langFlag=picto_from_langcode($langs->getDefaultLang());
$dropdownBody.= '<br><b>'.$langs->trans("CurrentUserLanguage").':</b> '.($langFlag?$langFlag.' ':'').$langs->getDefaultLang();
$dropdownBody.= '<br><b>'.$langs->trans("Browser").':</b> '.$conf->browser->name.($conf->browser->version?' '.$conf->browser->version:'').' ('.$_SERVER['HTTP_USER_AGENT'].')';
$dropdownBody.= '<br><b>'.$langs->trans("Browser").':</b> '.$conf->browser->name.($conf->browser->version?' '.$conf->browser->version:'').' ('.dol_escape_htmltag($_SERVER['HTTP_USER_AGENT']).')';
$dropdownBody.= '<br><b>'.$langs->trans("Layout").':</b> '.$conf->browser->layout;
$dropdownBody.= '<br><b>'.$langs->trans("Screen").':</b> '.$_SESSION['dol_screenwidth'].' x '.$_SESSION['dol_screenheight'];
if ($conf->browser->layout == 'phone') $dropdownBody.= '<br><b>'.$langs->trans("Phone").':</b> '.$langs->trans("Yes");

View File

@ -79,5 +79,7 @@ function myobjectPrepareHead($object)
//); // to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'myobject@mymodule');
complete_head_from_modules($conf, $langs, $object, $head, $h, 'myobject@mymodule', 'remove');
return $head;
}

View File

@ -223,7 +223,7 @@ class Productbatch extends CommonObject
$sql.= " batch=".(isset($this->batch)?"'".$this->db->escape($this->batch)."'":"null").",";
$sql.= " qty=".(isset($this->qty)?$this->qty:"null").",";
$sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null")."";
$sql.= " WHERE rowid=".$this->id." AND tms='".$this->db->idate($this->tms)."'";
$sql.= " WHERE rowid=".$this->id;
$this->db->begin();

View File

@ -59,7 +59,7 @@ class Inventory extends CommonObject
* 'type' if the field format.
* 'label' the translation key.
* 'enabled' is a condition when the field must be managed.
* 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only. Using a negative value means field is not shown by default on list but can be selected for viewing)
* 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). Using a negative value means field is not shown by default on list but can be selected for viewing)
* 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0).
* 'index' if we want an index in database.
* 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...).
@ -96,7 +96,7 @@ class Inventory extends CommonObject
//'fk_user_valid' =>array('type'=>'integer', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>512),
'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000),
'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'Todo', 1=>'Done', -1=>'Cancel')),
'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>4, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'ToDo', 1=>'Done', -1=>'Cancel')),
);
/**

View File

@ -50,7 +50,7 @@ function inventoryAdminPrepareHead()
//$this->tabs = array(
// 'entity:-tabname:Title:@inventory:/inventory/mypage.php?id=__ID__'
//); // to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'inventory');
complete_head_from_modules($conf, $langs, null, $head, $h, 'inventory');
return $head;
}

View File

@ -95,20 +95,32 @@ if (empty($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY))
exit;
}
// Check exportkey
if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_GET["exportkey"])
{
$user->getrights();
llxHeaderVierge();
print '<div class="error">Bad value for key.</div>';
llxFooterVierge();
exit;
}
// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks
$hookmanager->initHooks(array('agendaexport'));
$reshook = $hookmanager->executeHooks('doActions', $filters); // Note that $action and $object may have been modified by some
if ($reshook < 0){
llxHeaderVierge();
if(!empty($hookmanager->errors) && is_array($hookmanager->errors)){
print '<div class="error">'.implode('<br/>', $hookmanager->errors).'</div>';
}else{
print '<div class="error">'.$hookmanager->error.'</div>';
}
llxFooterVierge();
}
elseif(empty($reshook)) {
// Check exportkey
if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_GET["exportkey"]) {
$user->getrights();
llxHeaderVierge();
print '<div class="error">Bad value for key.</div>';
llxFooterVierge();
exit;
}
}
// Define filename with prefix on filters predica (each predica set must have on cache file)
$shortfilename='dolibarrcalendar';
$filename=$shortfilename;

View File

@ -11,7 +11,7 @@
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
* Copyright (C) 2016 Ferran Marcet <fmarcet@2byte.es>
* Copyright (C) 2016 Yasser Carreón <yacasia@gmail.com>
* Copyright (C) 2018 Quentin Vial-Gouteyron <quentin.vial-gouteyron@atm-consulting.fr>
* Copyright (C) 2018 Quentin Vial-Gouteyron <quentin.vial-gouteyron@atm-consulting.fr>
*
* 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
@ -56,7 +56,7 @@ if (! empty($conf->projet->enabled)) {
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
}
$langs->loadLangs(array("receptions","companies","bills",'deliveries','orders','stocks','other','propal'));
$langs->loadLangs(array("receptions","companies","bills",'deliveries','orders','stocks','other','propal','sendings'));
if (!empty($conf->incoterm->enabled)) $langs->load('incoterm');
if (! empty($conf->productbatch->enabled)) $langs->load('productbatch');
@ -780,9 +780,10 @@ if ($action == 'create')
}
print '</a></td>';
print "</tr>\n";
// Ref client
print '<tr><td>';
if ($origin == 'supplier_order') print $langs->trans('RefSupplierOrder');
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.'" />';
@ -815,7 +816,7 @@ if ($action == 'create')
print '<td colspan="3">';
//print dol_print_date($object->date_livraison,"day"); // date_livraison come from order and will be stored into date_delivery planed.
$date_delivery = ($date_delivery?$date_delivery:$object->date_livraison); // $date_delivery comes from GETPOST
print $form->select_date($date_delivery?$date_delivery:-1, 'date_delivery', 1, 1, 1);
print $form->selectDate($date_delivery?$date_delivery:-1, 'date_delivery', 1, 1, 1);
print "</td>\n";
print '</tr>';
@ -1163,10 +1164,10 @@ if ($action == 'create')
{
print '<td><input name="batch'.$indiceAsked.'" value="'.$dispatchLines[$indiceAsked]['lot'].'"></td>';
print '<td>';
print $form->select_date($dispatchLines[$indiceAsked]['DLC'], 'dlc' . $indiceAsked, '', '', 1, "");
print $form->selectDate($dispatchLines[$indiceAsked]['DLC'], 'dlc' . $indiceAsked, '', '', 1, "");
print '</td>';
print '<td>';
print $form->select_date($dispatchLines[$indiceAsked]['DLUO'], 'dluo' . $indiceAsked, '', '', 1, "");
print $form->selectDate($dispatchLines[$indiceAsked]['DLUO'], 'dluo' . $indiceAsked, '', '', 1, "");
print '</td>';
}
else {
@ -1398,7 +1399,7 @@ elseif ($id || $ref)
if ($typeobject == 'CommandeFournisseur' && $object->$typeobject->id && ! empty($conf->propal->enabled))
{
print '<tr><td>';
print $langs->trans("RefSupplierOrder").'</td>';
print $langs->trans("SupplierOrder").'</td>';
print '<td colspan="3">';
print $objectsrc->getNomUrl(1, 'reception');
print "</td>\n";
@ -1424,7 +1425,7 @@ elseif ($id || $ref)
print '<form name="setdate_livraison" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="setdate_livraison">';
print $form->select_date($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 0, 1);
print $form->selectDate($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 0);
print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">';
print '</form>';
}
@ -1887,9 +1888,9 @@ elseif ($id || $ref)
{
print '<td> <input name="batch'.$line_id.'" id="batch'.$line_id.'" type="text" value="'.$lines[$i]->batch.'"> </br>';
print $langs->trans('EatByDate').' : ';
print $form->select_date($lines[$i]->eatby, 'dlc' .$line_id, '', '', 1, ""). '</br>';
print $form->selectDate($lines[$i]->eatby, 'dlc' .$line_id, '', '', 1, ""). '</br>';
print $langs->trans('SellByDate').' : ';
print $form->select_date($lines[$i]->sellby, 'dluo' .$line_id, '', '', 1, "");
print $form->selectDate($lines[$i]->sellby, 'dluo' .$line_id, '', '', 1, "");
print '</td>';
}
print '</tr>';

View File

@ -566,7 +566,7 @@ if ($resql)
print $langs->trans('DateInvoice');
print '</td>';
print '<td>';
print $form->select_date('', '', '', '', '', '', 1, 1);
print $form->selectDate('', '', '', '', '', '', 1, 1);
print '</td>';
print '</tr>';
print '<tr>';

View File

@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php';
$langs->loadLangs(array("companies", "commercial", "bills", "cashdesk"));
$langs->loadLangs(array("companies", "commercial", "bills", "cashdesk", "stocks"));
$id = GETPOST('id', 'int');
$action = GETPOST('action', 'alpha');

View File

@ -52,7 +52,9 @@ function takeposAdminPrepareHead()
//$this->tabs = array(
// 'entity:-tabname:Title:@takepos:/takepos/mypage.php?id=__ID__'
//); // to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'takepos');
complete_head_from_modules($conf, $langs, null, $head, $h, 'takepos');
complete_head_from_modules($conf, $langs, null, $head, $h, 'takepos', 'remove');
return $head;
}

View File

@ -47,6 +47,8 @@ if ($setterminal>0)
$_SESSION["takeposterminal"]=$setterminal;
}
$_SESSION["urlfrom"]='/takepos/takepos.php';
$langs->loadLangs(array("bills","orders","commercial","cashdesk","receiptprinter"));
$categorie = new Categorie($db);
@ -156,7 +158,7 @@ if(localStorage.hasKeyboard) {
function ClearSearch() {
console.log("ClearSearch");
$("#search").val('');
<?php if ($conf->browser->layer == 'classic') { ?>
<?php if ($conf->browser->layout == 'classic') { ?>
setFocusOnSearchField();
<?php } ?>
}
@ -356,6 +358,7 @@ function deleteline() {
$("#poslines").load("invoice.php?action=deleteline&place="+place+"&idline="+selectedline, function() {
//$('#poslines').scrollTop($('#poslines')[0].scrollHeight);
});
ClearSearch();
}
function Customer() {
@ -405,6 +408,7 @@ function New() {
$("#poslines").load("invoice.php?action=delete&place="+place, function() {
//$('#poslines').scrollTop($('#poslines')[0].scrollHeight);
});
ClearSearch();
}
}

View File

@ -2242,6 +2242,9 @@ img.toolbarbutton {
height: 30px;
}
li.expanded > a.fmdirlia.jqft.ecmjqft {
font-weight: bold !important;
}

Some files were not shown because too many files have changed in this diff Show More