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

This commit is contained in:
Maxime Kohlhaas 2015-03-11 08:52:09 +01:00
commit 3578ca8baa
47 changed files with 2344 additions and 666 deletions

View File

@ -18,10 +18,15 @@ services:
language: php language: php
php: php:
# - "5.2" is not supported because pyrus to install PHP_Codesniffer is not available # - "5.2" is not supported because pyrus to install PHP_Codesniffer is not available
- "5.3" - 5.3
- "5.4" - 5.4
- "5.5" - 5.5
- "5.6" - 5.6
- 7.0
matrix:
allow_failures:
- php: 7.0
env: env:
- DB=mysql - DB=mysql

View File

@ -226,6 +226,7 @@ Dolibarr better:
- Fix: [ bug #1827 ] Tax reports gives incorrect amounts when using external modules that create lines with special codes - Fix: [ bug #1827 ] Tax reports gives incorrect amounts when using external modules that create lines with special codes
- Fix: [ bug #1822 ] SQL error in clientfourn.php report with PostgreSQL - Fix: [ bug #1822 ] SQL error in clientfourn.php report with PostgreSQL
- Fix: [ bug #1832 ] SQL error when adding a product with no price defined to an object - Fix: [ bug #1832 ] SQL error when adding a product with no price defined to an object
- Fix: [ bug #1833 ] user permissions in contact/note.php not working
- Fix: [ bug #1826 ] Supplier payment types are not translated into fourn/facture/paiement.php - Fix: [ bug #1826 ] Supplier payment types are not translated into fourn/facture/paiement.php
- Fix: [ bug #1830 ] Salaries payment only allows checking accounts - Fix: [ bug #1830 ] Salaries payment only allows checking accounts
- Fix: [ bug #1825 ] External agenda: hide/show checkbox doesn't work - Fix: [ bug #1825 ] External agenda: hide/show checkbox doesn't work

View File

@ -8,7 +8,7 @@
* Copyright (C) 2011 Remy Younes <ryounes@gmail.com> * Copyright (C) 2011 Remy Younes <ryounes@gmail.com>
* Copyright (C) 2012-2013 Marcos García <marcosgdf@gmail.com> * Copyright (C) 2012-2013 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2012 Christophe Battarel <christophe.battarel@ltairis.fr> * Copyright (C) 2012 Christophe Battarel <christophe.battarel@ltairis.fr>
* Copyright (C) 2011-2014 Alexandre Spangaro <alexandre.spangaro@gmail.com> * Copyright (C) 2011-2015 Alexandre Spangaro <alexandre.spangaro@gmail.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -316,7 +316,7 @@ $tabcond[13]= (! empty($conf->commande->enabled) || ! empty($conf->propal->enabl
$tabcond[14]= (! empty($conf->product->enabled) && ! empty($conf->ecotax->enabled)); $tabcond[14]= (! empty($conf->product->enabled) && ! empty($conf->ecotax->enabled));
$tabcond[15]= true; $tabcond[15]= true;
$tabcond[16]= (! empty($conf->societe->enabled) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)); $tabcond[16]= (! empty($conf->societe->enabled) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS));
$tabcond[17]= ! empty($conf->deplacement->enabled); $tabcond[17]= (! empty($conf->deplacement->enabled) || ! empty($conf->expensereport->enabled));
$tabcond[18]= ! empty($conf->expedition->enabled); $tabcond[18]= ! empty($conf->expedition->enabled);
$tabcond[19]= ! empty($conf->societe->enabled); $tabcond[19]= ! empty($conf->societe->enabled);
$tabcond[20]= ! empty($conf->fournisseur->enabled); $tabcond[20]= ! empty($conf->fournisseur->enabled);

View File

@ -66,6 +66,11 @@ else if ($conf->db->type == 'mssql')
//$sqls[0] = ""; //$sqls[0] = "";
//$base=3; //$base=3;
} }
else if ($conf->db->type == 'sqlite' || $conf->db->type == 'sqlite3')
{
//$sql = "SELECT name, type FROM sqlite_master";
$base = 4;
}
if (! $base) if (! $base)
@ -169,6 +174,40 @@ else
} }
print '</table>'; print '</table>';
} }
if ($base == 4)
{
// Sqlite by PDO or by Sqlite3
print '<table class="noborder">';
print '<tr class="liste_titre">';
print '<td>'.$langs->trans("TableName").'</td>';
print '<td>'.$langs->trans("NbOfRecord").'</td>';
print "</tr>\n";
$sql = "SELECT name, type FROM sqlite_master where type='table' and name not like 'sqlite%' ORDER BY name";
$resql = $db->query($sql);
if ($resql)
{
$var=True;
while ($row = $db->fetch_row($resql)) {
$rescount = $db->query("SELECT COUNT(*) FROM " . $row[0]);
if ($rescount) {
$row_count = $db->fetch_row($rescount);
$count = $row_count[0];
} else {
$count = '?';
}
print "<tr ".$bc[$var].">";
print '<td>'.$row[0].'</td>';
print '<td>'.$count.'</td>';
print '</tr>';
}
}
}
} }
llxFooter(); llxFooter();

View File

@ -5,6 +5,7 @@
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr> * Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr>
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -347,7 +348,6 @@ if (! empty($conf->use_javascript_ajax))
$s=''; $s='';
$s.='<script type="text/javascript">' . "\n"; $s.='<script type="text/javascript">' . "\n";
$s.='jQuery(document).ready(function () {' . "\n"; $s.='jQuery(document).ready(function () {' . "\n";
$s.='jQuery("#check_mytasks").click(function() { jQuery(".family_mytasks").toggle(); jQuery(".family_other").toggle(); });' . "\n";
$s.='jQuery("#check_birthday").click(function() { jQuery(".family_birthday").toggle(); });' . "\n"; $s.='jQuery("#check_birthday").click(function() { jQuery(".family_birthday").toggle(); });' . "\n";
$s.='jQuery(".family_birthday").toggle();' . "\n"; $s.='jQuery(".family_birthday").toggle();' . "\n";
if ($action=="show_week" || $action=="show_month" || empty($action)) if ($action=="show_week" || $action=="show_month" || empty($action))
@ -361,18 +361,20 @@ if (! empty($conf->use_javascript_ajax))
$s.='<div class="nowrap clear float"><input type="checkbox" id="check_mytasks" name="check_mytasks" checked="true" disabled="disabled"> ' . $langs->trans("LocalAgenda").' &nbsp; </div>'; $s.='<div class="nowrap clear float"><input type="checkbox" id="check_mytasks" name="check_mytasks" checked="true" disabled="disabled"> ' . $langs->trans("LocalAgenda").' &nbsp; </div>';
if (is_array($showextcals) && count($showextcals) > 0) if (is_array($showextcals) && count($showextcals) > 0)
{ {
$s.='<script type="text/javascript">' . "\n";
$s.='jQuery(document).ready(function () {
jQuery("table input[name^=\"check_ext\"]").click(function() {
var name = $(this).attr("name");
jQuery(".family_ext" + name.replace("check_ext", "")).toggle();
});
});' . "\n";
$s.='</script>' . "\n";
foreach ($showextcals as $val) foreach ($showextcals as $val)
{ {
$htmlname = md5($val['name']); $htmlname = md5($val['name']);
$s.='<script type="text/javascript">' . "\n"; $s.='<div class="nowrap float"><input type="checkbox" id="check_ext' . $htmlname . '" name="check_ext' . $htmlname . '" checked="true"> ' . $val['name'] . ' &nbsp; </div>';
$s.='jQuery(document).ready(function () {' . "\n";
$s.=' jQuery("#check_ext' . $htmlname . '").click(function() {';
$s.=' /* alert("'.$htmlname.'"); */';
$s.=' jQuery(".family_ext' . $htmlname . '").toggle();';
$s.=' });' . "\n";
$s.='});' . "\n";
$s.='</script>' . "\n";
$s.='<div class="nowrap float"><input type="checkbox" id="check_ext' . $htmlname . '" name="check_ext' . $htmlname . '" checked="true"> ' . $val ['name'] . ' &nbsp; </div>';
} }
} }
$s.='<div class="nowrap float"><input type="checkbox" id="check_birthday" name="check_birthday"> '.$langs->trans("AgendaShowBirthdayEvents").' &nbsp; </div>'; $s.='<div class="nowrap float"><input type="checkbox" id="check_birthday" name="check_birthday"> '.$langs->trans("AgendaShowBirthdayEvents").' &nbsp; </div>';

View File

@ -2003,8 +2003,7 @@ if ($action == 'create')
// Amount HT // Amount HT
print '<tr><td height="10" width="25%">' . $langs->trans('AmountHT') . '</td>'; print '<tr><td height="10" width="25%">' . $langs->trans('AmountHT') . '</td>';
print '<td align="right" class="nowrap"><b>' . price($object->total_ht, '', $langs, 0, - 1, - 1, $conf->currency) . '</b></td>'; print '<td align="right" class="nowrap" colspan="2"><b>' . price($object->total_ht, '', $langs, 0, - 1, - 1, $conf->currency) . '</b></td>';
print '<td></td>';
// Margin Infos // Margin Infos
if (! empty($conf->margin->enabled)) { if (! empty($conf->margin->enabled)) {
@ -2016,27 +2015,27 @@ if ($action == 'create')
// Amount VAT // Amount VAT
print '<tr><td height="10">' . $langs->trans('AmountVAT') . '</td>'; print '<tr><td height="10">' . $langs->trans('AmountVAT') . '</td>';
print '<td align="right" class="nowrap">' . price($object->total_tva, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>'; print '<td align="right" class="nowrap" colspan="2">' . price($object->total_tva, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>';
print '<td></td></tr>'; print '</tr>';
// Amount Local Taxes // Amount Local Taxes
if ($mysoc->localtax1_assuj == "1" || $object->total_localtax1 != 0) // Localtax1 if ($mysoc->localtax1_assuj == "1" || $object->total_localtax1 != 0) // Localtax1
{ {
print '<tr><td height="10">' . $langs->transcountry("AmountLT1", $mysoc->country_code) . '</td>'; print '<tr><td height="10">' . $langs->transcountry("AmountLT1", $mysoc->country_code) . '</td>';
print '<td align="right" class="nowrap">' . price($object->total_localtax1, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>'; print '<td align="right" class="nowrap" colspan="2">' . price($object->total_localtax1, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>';
print '<td></td></tr>'; print '<td></td></tr>';
} }
if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) // Localtax2 if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) // Localtax2
{ {
print '<tr><td height="10">' . $langs->transcountry("AmountLT2", $mysoc->country_code) . '</td>'; print '<tr><td height="10">' . $langs->transcountry("AmountLT2", $mysoc->country_code) . '</td>';
print '<td align="right" class="nowrap">' . price($object->total_localtax2, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>'; print '<td align="right" class="nowrap" colspan="2">' . price($object->total_localtax2, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>';
print '<td></td></tr>'; print '</tr>';
} }
// Amount TTC // Amount TTC
print '<tr><td height="10">' . $langs->trans('AmountTTC') . '</td>'; print '<tr><td height="10">' . $langs->trans('AmountTTC') . '</td>';
print '<td align="right" class="nowrap">' . price($object->total_ttc, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>'; print '<td align="right" class="nowrap" colspan="2">' . price($object->total_ttc, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>';
print '<td></td></tr>'; print '</tr>';
// Statut // Statut
print '<tr><td height="10">' . $langs->trans('Status') . '</td><td align="left" colspan="2">' . $object->getLibStatut(4) . '</td></tr>'; print '<tr><td height="10">' . $langs->trans('Status') . '</td><td align="left" colspan="2">' . $object->getLibStatut(4) . '</td></tr>';

View File

@ -196,7 +196,7 @@ if (! empty($conf->deplacement->enabled) && $user->rights->deplacement->lire)
if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire) if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire)
{ {
$sql = "SELECT u.rowid as uid, u.lastname, u.firstname, x.rowid, x.date_debut as date, x.tms as dm, x.total_ttc"; $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, x.rowid, x.date_debut as date, x.tms as dm, x.total_ttc, x.fk_statut as status";
$sql.= " FROM ".MAIN_DB_PREFIX."expensereport as x, ".MAIN_DB_PREFIX."user as u"; $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as x, ".MAIN_DB_PREFIX."user as u";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= " WHERE u.rowid = x.fk_user_author"; $sql.= " WHERE u.rowid = x.fk_user_author";
@ -218,7 +218,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td colspan="2">'.$langs->trans("BoxTitleLastModifiedExpenses",min($max,$num)).'</td>'; print '<td colspan="2">'.$langs->trans("BoxTitleLastModifiedExpenses",min($max,$num)).'</td>';
print '<td align="right">'.$langs->trans("FeesAmount").'</td>'; print '<td align="right">'.$langs->trans("TotalTTC").'</td>';
print '<td align="right">'.$langs->trans("DateModificationShort").'</td>'; print '<td align="right">'.$langs->trans("DateModificationShort").'</td>';
print '<td width="16">&nbsp;</td>'; print '<td width="16">&nbsp;</td>';
print '</tr>'; print '</tr>';
@ -239,9 +239,9 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire
print '<tr '.$bc[$var].'>'; print '<tr '.$bc[$var].'>';
print '<td>'.$expensereportstatic->getNomUrl(1).'</td>'; print '<td>'.$expensereportstatic->getNomUrl(1).'</td>';
print '<td>'.$userstatic->getNomUrl(1).'</td>'; print '<td>'.$userstatic->getNomUrl(1).'</td>';
print '<td align="right">'.$obj->total_ttc.'</td>'; print '<td align="right">'.price($obj->total_ttc).'</td>';
print '<td align="right">'.dol_print_date($db->jdate($obj->dm),'day').'</td>'; print '<td align="right">'.dol_print_date($db->jdate($obj->dm),'day').'</td>';
//print '<td>'.$expensereportstatic->LibStatut($obj->fk_statut,3).'</td>'; print '<td>'.$expensereportstatic->LibStatut($obj->status,3).'</td>';
print '</tr>'; print '</tr>';
$var=!$var; $var=!$var;
$i++; $i++;

View File

@ -1294,7 +1294,7 @@ class BonPrelevement extends CommonObject
while ($i < $num) while ($i < $num)
{ {
$obj = $this->db->fetch_object($resql); $obj = $this->db->fetch_object($resql);
$fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $ListOfFactures, $obj->idfac, $obj->iban, $obj->bic, $obj->datec, $obj->drum); $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $ListOfFactures, $obj->idfac, $obj->iban, $obj->bic, $this->db->jdate($obj->datec), $obj->drum);
$this->total = $this->total + $obj->somme; $this->total = $this->total + $obj->somme;
$i++; $i++;
} }
@ -1496,6 +1496,20 @@ class BonPrelevement extends CommonObject
} }
/**
* Build RUM number for a customer bank account
*
* @param string $row_code_client Customer code (soc.code_client)
* @param int $row_datec Creation date of bank account (rib.datec)
* @param string $row_drum Id of customer bank account (rib.rowid)
* @return string RUM number
*/
static function buildRumNumber($row_code_client, $row_datec, $row_drum)
{
$pre = ($row_datec > 1359673200) ? 'Rum' : '++R';
return $pre.$row_code_client.'-'.$row_drum.'-'.date('U', $row_datec);
}
/** /**
* Write recipient of request (customer) * Write recipient of request (customer)
* *
@ -1514,7 +1528,7 @@ class BonPrelevement extends CommonObject
* @param string $row_iban rib.iban_prefix AS iban, * @param string $row_iban rib.iban_prefix AS iban,
* @param string $row_bic rib.bic AS bic, * @param string $row_bic rib.bic AS bic,
* @param string $row_datec rib.datec, * @param string $row_datec rib.datec,
* @param string $row_drum rib.rowid AS drum * @param string $row_drum rib.rowid used to generate rum
* @return string Return string with SEPA part DrctDbtTxInf * @return string Return string with SEPA part DrctDbtTxInf
*/ */
function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_facnumber, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum) function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_facnumber, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum)
@ -1524,10 +1538,11 @@ class BonPrelevement extends CommonObject
// Define value for RUM // Define value for RUM
// Example: RUMCustomerCode-CustomerBankAccountId-01424448606 (note: Date is date of creation of CustomerBankAccountId) // Example: RUMCustomerCode-CustomerBankAccountId-01424448606 (note: Date is date of creation of CustomerBankAccountId)
$Date_Rum = strtotime($row_datec); $Rum = $this->buildRumNumber($row_code_client, $row_datec, $row_drum);
// Define date of RUM signature
$DtOfSgntr = dol_print_date($row_datec, '%Y-%m-%d'); $DtOfSgntr = dol_print_date($row_datec, '%Y-%m-%d');
$pre = ($date_Rum > 1359673200) ? 'Rum' : '++R';
$Rum = $pre.$row_code_client.$row_drum.'-0'.date('U', $Date_Rum);
$XML_DEBITOR =''; $XML_DEBITOR ='';
$XML_DEBITOR .=' <DrctDbtTxInf>'.$CrLf; $XML_DEBITOR .=' <DrctDbtTxInf>'.$CrLf;
$XML_DEBITOR .=' <PmtId>'.$CrLf; $XML_DEBITOR .=' <PmtId>'.$CrLf;

View File

@ -373,7 +373,7 @@ if ($id)
print "<div class=\"tabsAction\">\n"; print "<div class=\"tabsAction\">\n";
if ($salpayment->rappro == 0) if ($salpayment->rappro == 0)
{ {
if (! empty($user->rights->tax->charges->supprimer)) if (! empty($user->rights->salaries->delete))
{ {
print '<a class="butActionDelete" href="card.php?id='.$salpayment->id.'&action=delete">'.$langs->trans("Delete").'</a>'; print '<a class="butActionDelete" href="card.php?id='.$salpayment->id.'&action=delete">'.$langs->trans("Delete").'</a>';
} }

5
htdocs/conf/phpinfo.php Normal file
View File

@ -0,0 +1,5 @@
<a href="index.php">Go back to index</a>
| <a href="<?php echo $_SERVER["REQUEST_URI"];?>">Refresh</a>
<br><br>
<?php phpinfo(); ?>

View File

@ -73,7 +73,7 @@ $object = new Contrat($db);
$extrafields = new ExtraFields($db); $extrafields = new ExtraFields($db);
// Load object // Load object
if ($id > 0 || ! empty($ref)) { if ($id > 0 || ! empty($ref) && $action!='add') {
$ret = $object->fetch($id, $ref); $ret = $object->fetch($id, $ref);
if ($ret > 0) if ($ret > 0)
$ret = $object->fetch_thirdparty(); $ret = $object->fetch_thirdparty();
@ -207,6 +207,13 @@ if ($action == 'add' && $user->rights->contrat->creer)
$error++; $error++;
} }
// Fill array 'array_options' with data from add form
$ret = $extrafields->setOptionalsFromPost($extralabels, $object);
if ($ret < 0) {
$error ++;
$action = 'create';
}
if (! $error) if (! $error)
{ {
$object->socid = $socid; $object->socid = $socid;
@ -356,11 +363,6 @@ if ($action == 'add' && $user->rights->contrat->creer)
} }
else else
{ {
// Fill array 'array_options' with data from add form
$ret = $extrafields->setOptionalsFromPost($extralabels, $object);
if ($ret < 0) $error++;
$result = $object->create($user); $result = $object->create($user);
if ($result > 0) if ($result > 0)
{ {
@ -726,20 +728,19 @@ else if ($action == 'confirm_move' && $confirm == 'yes' && $user->rights->contra
// Fill array 'array_options' with data from update form // Fill array 'array_options' with data from update form
$extralabels = $extrafields->fetch_name_optionals_label($object->table_element); $extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
$ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute')); $ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute'));
if ($ret < 0) $error++; if ($ret < 0)
$error ++;
if (! $error) if (! $error) {
{
$result = $object->insertExtraFields();
if ($result < 0)
{
$error++;
}
}
else if ($reshook < 0) $error++;
if ($error) $result = $object->insertExtraFields();
{ if ($result < 0) {
$error ++;
}
} else if ($reshook < 0)
$error ++;
if ($error) {
$action = 'edit_extras'; $action = 'edit_extras';
setEventMessage($object->error,'errors'); setEventMessage($object->error,'errors');
} }

View File

View File

@ -2140,7 +2140,7 @@ abstract class CommonObject
$fieldstatus="fk_statut"; $fieldstatus="fk_statut";
if ($elementTable == 'user') $fieldstatus="statut"; if ($elementTable == 'user') $fieldstatus="statut";
if ($elementTable == 'expensereport') $fieldstatus="fk_c_expensereport_statuts"; if ($elementTable == 'expensereport') $fieldstatus="fk_statut";
if ($elementTable == 'commande_fournisseur_dispatch') $fieldstatus="status"; if ($elementTable == 'commande_fournisseur_dispatch') $fieldstatus="status";
$sql = "UPDATE ".MAIN_DB_PREFIX.$elementTable; $sql = "UPDATE ".MAIN_DB_PREFIX.$elementTable;

View File

@ -65,7 +65,7 @@ class DolGraph
var $bgcolorgrid=array(255,255,255); // array(R,G,B) var $bgcolorgrid=array(255,255,255); // array(R,G,B)
var $datacolor; // array(array(R,G,B),...) var $datacolor; // array(array(R,G,B),...)
private $_stringtoshow; // To store string to output graph into HTML page protected $stringtoshow; // To store string to output graph into HTML page
/** /**
@ -774,7 +774,7 @@ class DolGraph
// Generate file // Generate file
$graph->draw($file); $graph->draw($file);
$this->_stringtoshow='<!-- Build using '.$this->_library.' --><img src="'.$fileurl.'" title="'.dol_escape_htmltag($this->title?$this->title:$this->YLabel).'" alt="'.dol_escape_htmltag($this->title?$this->title:$this->YLabel).'">'; $this->stringtoshow='<!-- Build using '.$this->_library.' --><img src="'.$fileurl.'" title="'.dol_escape_htmltag($this->title?$this->title:$this->YLabel).'" alt="'.dol_escape_htmltag($this->title?$this->title:$this->YLabel).'">';
} }
@ -847,18 +847,18 @@ class DolGraph
} }
$tag=dol_escape_htmltag(dol_string_unaccent(dol_string_nospecial(basename($file),'_',array('-','.')))); $tag=dol_escape_htmltag(dol_string_unaccent(dol_string_nospecial(basename($file),'_',array('-','.'))));
$this->_stringtoshow ='<!-- Build using '.$this->_library.' -->'."\n"; $this->stringtoshow ='<!-- Build using '.$this->_library.' -->'."\n";
if (! empty($this->title)) $this->_stringtoshow.='<div align="center" class="dolgraphtitle'.(empty($this->cssprefix)?'':' dolgraphtitle'.$this->cssprefix).'">'.$this->title.'</div>'; if (! empty($this->title)) $this->stringtoshow.='<div align="center" class="dolgraphtitle'.(empty($this->cssprefix)?'':' dolgraphtitle'.$this->cssprefix).'">'.$this->title.'</div>';
$this->_stringtoshow.='<div id="placeholder_'.$tag.'" style="width:'.$this->width.'px;height:'.$this->height.'px;" class="dolgraph'.(empty($this->cssprefix)?'':' dolgraph'.$this->cssprefix).'"></div>'."\n"; $this->stringtoshow.='<div id="placeholder_'.$tag.'" style="width:'.$this->width.'px;height:'.$this->height.'px;" class="dolgraph'.(empty($this->cssprefix)?'':' dolgraph'.$this->cssprefix).'"></div>'."\n";
$this->_stringtoshow.='<script id="'.$tag.'">'."\n"; $this->stringtoshow.='<script id="'.$tag.'">'."\n";
$this->_stringtoshow.='$(function () {'."\n"; $this->stringtoshow.='$(function () {'."\n";
$i=$firstlot; $i=$firstlot;
while ($i < $nblot) while ($i < $nblot)
{ {
$this->_stringtoshow.=$serie[$i]; $this->stringtoshow.=$serie[$i];
$i++; $i++;
} }
$this->_stringtoshow.="\n"; $this->stringtoshow.="\n";
// Special case for Graph of type 'pie' // Special case for Graph of type 'pie'
if (isset($this->type[$firstlot]) && $this->type[$firstlot] == 'pie') if (isset($this->type[$firstlot]) && $this->type[$firstlot] == 'pie')
@ -871,7 +871,7 @@ class DolGraph
$showpointvalue=$this->showpointvalue; $showpointvalue=$this->showpointvalue;
$showpercent=$this->showpercent; $showpercent=$this->showpercent;
$this->_stringtoshow.= ' $this->stringtoshow.= '
function plotWithOptions_'.$tag.'() { function plotWithOptions_'.$tag.'() {
$.plot($("#placeholder_'.$tag.'"), d0, $.plot($("#placeholder_'.$tag.'"), d0,
{ {
@ -886,15 +886,15 @@ class DolGraph
var percent=Math.round(series.percent); var percent=Math.round(series.percent);
var number=series.data[0][1]; var number=series.data[0][1];
return \''; return \'';
$this->_stringtoshow.='<div style="font-size:8pt;text-align:center;padding:2px;color:white;">'; $this->stringtoshow.='<div style="font-size:8pt;text-align:center;padding:2px;color:white;">';
if ($urltemp) $this->_stringtoshow.='<a style="color: #FFFFFF;" border="0" href="'.$urltemp.'">'; if ($urltemp) $this->stringtoshow.='<a style="color: #FFFFFF;" border="0" href="'.$urltemp.'">';
$this->_stringtoshow.='\'+'; $this->stringtoshow.='\'+';
$this->_stringtoshow.=($showlegend?'':'label+\'<br/>\'+'); // Hide label if already shown in legend $this->stringtoshow.=($showlegend?'':'label+\'<br/>\'+'); // Hide label if already shown in legend
$this->_stringtoshow.=($showpointvalue?'number+':''); $this->stringtoshow.=($showpointvalue?'number+':'');
$this->_stringtoshow.=($showpercent?'\'<br/>\'+percent+\'%\'+':''); $this->stringtoshow.=($showpercent?'\'<br/>\'+percent+\'%\'+':'');
$this->_stringtoshow.='\''; $this->stringtoshow.='\'';
if ($urltemp) $this->_stringtoshow.='</a>'; if ($urltemp) $this->stringtoshow.='</a>';
$this->_stringtoshow.='</div>\'; $this->stringtoshow.='</div>\';
}, },
background: { background: {
opacity: 0.5, opacity: 0.5,
@ -911,9 +911,9 @@ class DolGraph
},'; },';
if (count($datacolor)) if (count($datacolor))
{ {
$this->_stringtoshow.='colors: '.(! empty($data['seriescolor']) ? json_encode($data['seriescolor']) : json_encode($datacolor)).','; $this->stringtoshow.='colors: '.(! empty($data['seriescolor']) ? json_encode($data['seriescolor']) : json_encode($datacolor)).',';
} }
$this->_stringtoshow.='legend: {show: '.($showlegend?'true':'false').', position: \'ne\' } $this->stringtoshow.='legend: {show: '.($showlegend?'true':'false').', position: \'ne\' }
}); });
}'."\n"; }'."\n";
} }
@ -921,7 +921,7 @@ class DolGraph
else else
{ {
// Add code to support tooltips // Add code to support tooltips
$this->_stringtoshow.=' $this->stringtoshow.='
function showTooltip_'.$tag.'(x, y, contents) { function showTooltip_'.$tag.'(x, y, contents) {
$(\'<div id="tooltip_'.$tag.'">\' + contents + \'</div>\').css({ $(\'<div id="tooltip_'.$tag.'">\' + contents + \'</div>\').css({
position: \'absolute\', position: \'absolute\',
@ -935,26 +935,26 @@ class DolGraph
opacity: 0.80 opacity: 0.80
}).appendTo("body").fadeIn(20); }).appendTo("body").fadeIn(20);
} }
var previousPoint = null; var previousPoint = null;
$("#placeholder_'.$tag.'").bind("plothover", function (event, pos, item) { $("#placeholder_'.$tag.'").bind("plothover", function (event, pos, item) {
$("#x").text(pos.x.toFixed(2)); $("#x").text(pos.x.toFixed(2));
$("#y").text(pos.y.toFixed(2)); $("#y").text(pos.y.toFixed(2));
if (item) { if (item) {
if (previousPoint != item.dataIndex) { if (previousPoint != item.dataIndex) {
previousPoint = item.dataIndex; previousPoint = item.dataIndex;
$("#tooltip").remove(); $("#tooltip").remove();
/* console.log(item); */ /* console.log(item); */
var x = item.datapoint[0].toFixed(2); var x = item.datapoint[0].toFixed(2);
var y = item.datapoint[1].toFixed(2); var y = item.datapoint[1].toFixed(2);
var z = item.series.xaxis.ticks[item.dataIndex].label; var z = item.series.xaxis.ticks[item.dataIndex].label;
'; ';
if ($this->showpointvalue > 0) $this->_stringtoshow.=' if ($this->showpointvalue > 0) $this->stringtoshow.='
showTooltip_'.$tag.'(item.pageX, item.pageY, item.series.label + "<br>" + z + " => " + y); showTooltip_'.$tag.'(item.pageX, item.pageY, item.series.label + "<br>" + z + " => " + y);
'; ';
$this->_stringtoshow.=' $this->stringtoshow.='
} }
} }
else { else {
@ -964,50 +964,50 @@ class DolGraph
}); });
'; ';
$this->_stringtoshow.='var stack = null, steps = false;'."\n"; $this->stringtoshow.='var stack = null, steps = false;'."\n";
$this->_stringtoshow.='function plotWithOptions_'.$tag.'() {'."\n"; $this->stringtoshow.='function plotWithOptions_'.$tag.'() {'."\n";
$this->_stringtoshow.='$.plot($("#placeholder_'.$tag.'"), [ '."\n"; $this->stringtoshow.='$.plot($("#placeholder_'.$tag.'"), [ '."\n";
$i=$firstlot; $i=$firstlot;
while ($i < $nblot) while ($i < $nblot)
{ {
if ($i > $firstlot) $this->_stringtoshow.=', '."\n"; if ($i > $firstlot) $this->stringtoshow.=', '."\n";
$color=sprintf("%02x%02x%02x",$this->datacolor[$i][0],$this->datacolor[$i][1],$this->datacolor[$i][2]); $color=sprintf("%02x%02x%02x",$this->datacolor[$i][0],$this->datacolor[$i][1],$this->datacolor[$i][2]);
$this->_stringtoshow.='{ '; $this->stringtoshow.='{ ';
if (! isset($this->type[$i]) || $this->type[$i] == 'bars') $this->_stringtoshow.='bars: { show: true, align: "'.($i==$firstlot?'center':'left').'", barWidth: 0.5 }, '; if (! isset($this->type[$i]) || $this->type[$i] == 'bars') $this->stringtoshow.='bars: { show: true, align: "'.($i==$firstlot?'center':'left').'", barWidth: 0.5 }, ';
if (isset($this->type[$i]) && $this->type[$i] == 'lines') $this->_stringtoshow.='lines: { show: true, fill: false }, '; if (isset($this->type[$i]) && $this->type[$i] == 'lines') $this->stringtoshow.='lines: { show: true, fill: false }, ';
$this->_stringtoshow.='color: "#'.$color.'", label: "'.(isset($this->Legend[$i]) ? dol_escape_js($this->Legend[$i]) : '').'", data: d'.$i.' }'; $this->stringtoshow.='color: "#'.$color.'", label: "'.(isset($this->Legend[$i]) ? dol_escape_js($this->Legend[$i]) : '').'", data: d'.$i.' }';
$i++; $i++;
} }
$this->_stringtoshow.="\n".' ], { series: { stack: stack, lines: { fill: false, steps: steps }, bars: { barWidth: 0.6 } }'."\n"; $this->stringtoshow.="\n".' ], { series: { stack: stack, lines: { fill: false, steps: steps }, bars: { barWidth: 0.6 } }'."\n";
// Xaxis // Xaxis
$this->_stringtoshow.=', xaxis: { ticks: ['."\n"; $this->stringtoshow.=', xaxis: { ticks: ['."\n";
$x=0; $x=0;
foreach($this->data as $key => $valarray) foreach($this->data as $key => $valarray)
{ {
if ($x > 0) $this->_stringtoshow.=', '."\n"; if ($x > 0) $this->stringtoshow.=', '."\n";
$this->_stringtoshow.= ' ['.$x.', "'.$valarray[0].'"]'; $this->stringtoshow.= ' ['.$x.', "'.$valarray[0].'"]';
$x++; $x++;
} }
$this->_stringtoshow.='] }'."\n"; $this->stringtoshow.='] }'."\n";
// Yaxis // Yaxis
$this->_stringtoshow.=', yaxis: { min: '.$this->MinValue.', max: '.($this->MaxValue).' }'."\n"; $this->stringtoshow.=', yaxis: { min: '.$this->MinValue.', max: '.($this->MaxValue).' }'."\n";
// Background color // Background color
$color1=sprintf("%02x%02x%02x",$this->bgcolorgrid[0],$this->bgcolorgrid[0],$this->bgcolorgrid[2]); $color1=sprintf("%02x%02x%02x",$this->bgcolorgrid[0],$this->bgcolorgrid[0],$this->bgcolorgrid[2]);
$color2=sprintf("%02x%02x%02x",$this->bgcolorgrid[0],$this->bgcolorgrid[1],$this->bgcolorgrid[2]); $color2=sprintf("%02x%02x%02x",$this->bgcolorgrid[0],$this->bgcolorgrid[1],$this->bgcolorgrid[2]);
$this->_stringtoshow.=', grid: { hoverable: true, backgroundColor: { colors: ["#'.$color1.'", "#'.$color2.'"] } }'."\n"; $this->stringtoshow.=', grid: { hoverable: true, backgroundColor: { colors: ["#'.$color1.'", "#'.$color2.'"] } }'."\n";
//$this->_stringtoshow.=', shadowSize: 20'."\n"; TODO Uncommet this //$this->stringtoshow.=', shadowSize: 20'."\n"; TODO Uncommet this
$this->_stringtoshow.='});'."\n"; $this->stringtoshow.='});'."\n";
$this->_stringtoshow.='}'."\n"; $this->stringtoshow.='}'."\n";
} }
$this->_stringtoshow.='plotWithOptions_'.$tag.'();'."\n"; $this->stringtoshow.='plotWithOptions_'.$tag.'();'."\n";
$this->_stringtoshow.='});'."\n"; $this->stringtoshow.='});'."\n";
$this->_stringtoshow.='</script>'."\n"; $this->stringtoshow.='</script>'."\n";
} }
@ -1019,10 +1019,10 @@ class DolGraph
*/ */
function show() function show()
{ {
return $this->_stringtoshow; return $this->stringtoshow;
} }
/** /**
* getDefaultGraphSizeForStats * getDefaultGraphSizeForStats
* *
@ -1033,18 +1033,18 @@ class DolGraph
static function getDefaultGraphSizeForStats($direction,$defaultsize='') static function getDefaultGraphSizeForStats($direction,$defaultsize='')
{ {
global $conf; global $conf;
if ($direction == 'width') if ($direction == 'width')
{ {
if (empty($conf->dol_optimize_smallscreen)) return ($defaultsize ? $defaultsize : '500'); if (empty($conf->dol_optimize_smallscreen)) return ($defaultsize ? $defaultsize : '500');
else return (empty($_SESSION['dol_screen_width']) ? '280' : ($_SESSION['dol_screen_width']-40)); else return (empty($_SESSION['dol_screen_width']) ? '280' : ($_SESSION['dol_screen_width']-40));
} }
if ($direction == 'height') if ($direction == 'height')
{ {
return (empty($conf->dol_optimize_smallscreen)?($defaultsize?$defaultsize:'200'):'160'); return (empty($conf->dol_optimize_smallscreen)?($defaultsize?$defaultsize:'200'):'160');
} }
return 0; return 0;
} }
} }

View File

@ -54,7 +54,9 @@ class ExtraFields
var $attribute_alwayseditable; var $attribute_alwayseditable;
// Array to store permission to check // Array to store permission to check
var $attribute_perms; var $attribute_perms;
// Array to store permission to check
var $attribute_list;
var $error; var $error;
var $errno; var $errno;
@ -93,6 +95,7 @@ class ExtraFields
$this->attribute_unique = array(); $this->attribute_unique = array();
$this->attribute_required = array(); $this->attribute_required = array();
$this->attribute_perms = array(); $this->attribute_perms = array();
$this->attribute_list = array();
} }
/** /**
@ -110,9 +113,10 @@ class ExtraFields
* @param array $param Params for field * @param array $param Params for field
* @param int $alwayseditable Is attribute always editable regardless of the document status * @param int $alwayseditable Is attribute always editable regardless of the document status
* @param string $perms Permission to check * @param string $perms Permission to check
* @param int $list Into list view by default
* @return int <=0 if KO, >0 if OK * @return int <=0 if KO, >0 if OK
*/ */
function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique=0, $required=0, $default_value='', $param=0, $alwayseditable=0, $perms='') function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique=0, $required=0, $default_value='', $param=0, $alwayseditable=0, $perms='', $list=0)
{ {
if (empty($attrname)) return -1; if (empty($attrname)) return -1;
if (empty($label)) return -1; if (empty($label)) return -1;
@ -122,13 +126,13 @@ class ExtraFields
// Create field into database except for separator type which is not stored in database // Create field into database except for separator type which is not stored in database
if ($type != 'separate') if ($type != 'separate')
{ {
$result=$this->create($attrname,$type,$size,$elementtype, $unique, $required, $default_value,$param); $result=$this->create($attrname,$type,$size,$elementtype, $unique, $required, $default_value, $param, $perms, $list);
} }
$err1=$this->errno; $err1=$this->errno;
if ($result > 0 || $err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' || $type == 'separate') if ($result > 0 || $err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' || $type == 'separate')
{ {
// Add declaration of field into table // Add declaration of field into table
$result2=$this->create_label($attrname,$label,$type,$pos,$size,$elementtype, $unique, $required, $param, $alwayseditable, $perms); $result2=$this->create_label($attrname,$label,$type,$pos,$size,$elementtype, $unique, $required, $param, $alwayseditable, $perms, $list);
$err2=$this->errno; $err2=$this->errno;
if ($result2 > 0 || ($err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' && $err2 == 'DB_ERROR_RECORD_ALREADY_EXISTS')) if ($result2 > 0 || ($err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' && $err2 == 'DB_ERROR_RECORD_ALREADY_EXISTS'))
{ {
@ -156,10 +160,11 @@ class ExtraFields
* @param int $required Is field required or not * @param int $required Is field required or not
* @param string $default_value Default value for field * @param string $default_value Default value for field
* @param array $param Params for field (ex for select list : array('options'=>array('value'=>'label of option')) * @param array $param Params for field (ex for select list : array('options'=>array('value'=>'label of option'))
* * @param string $perms Permission
* @param int $list Into list view by default
* @return int <=0 if KO, >0 if OK * @return int <=0 if KO, >0 if OK
*/ */
private function create($attrname, $type='varchar', $length=255, $elementtype='member', $unique=0, $required=0, $default_value='',$param='') private function create($attrname, $type='varchar', $length=255, $elementtype='member', $unique=0, $required=0, $default_value='',$param='', $perms='', $list=0)
{ {
if ($elementtype == 'thirdparty') $elementtype='societe'; if ($elementtype == 'thirdparty') $elementtype='societe';
@ -230,9 +235,10 @@ class ExtraFields
* @param array||string $param Params for field (ex for select list : array('options' => array(value'=>'label of option')) ) * @param array||string $param Params for field (ex for select list : array('options' => array(value'=>'label of option')) )
* @param int $alwayseditable Is attribute always editable regardless of the document status * @param int $alwayseditable Is attribute always editable regardless of the document status
* @param string $perms Permission to check * @param string $perms Permission to check
* @param int $list Into list view by default
* @return int <=0 if KO, >0 if OK * @return int <=0 if KO, >0 if OK
*/ */
private function create_label($attrname, $label='', $type='', $pos=0, $size=0, $elementtype='member', $unique=0, $required=0, $param='', $alwayseditable=0, $perms='') private function create_label($attrname, $label='', $type='', $pos=0, $size=0, $elementtype='member', $unique=0, $required=0, $param='', $alwayseditable=0, $perms='', $list=0)
{ {
global $conf; global $conf;
@ -240,6 +246,7 @@ class ExtraFields
// Clean parameters // Clean parameters
if (empty($pos)) $pos=0; if (empty($pos)) $pos=0;
if (empty($list)) $list=0;
if (! empty($attrname) && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname) && ! is_numeric($attrname)) if (! empty($attrname) && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname) && ! is_numeric($attrname))
{ {
@ -256,7 +263,7 @@ class ExtraFields
$params=''; $params='';
} }
$sql = "INSERT INTO ".MAIN_DB_PREFIX."extrafields(name, label, type, pos, size, entity, elementtype, fieldunique, fieldrequired, param, alwayseditable, perms)"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."extrafields(name, label, type, pos, size, entity, elementtype, fieldunique, fieldrequired, param, alwayseditable, perms, list)";
$sql.= " VALUES('".$attrname."',"; $sql.= " VALUES('".$attrname."',";
$sql.= " '".$this->db->escape($label)."',"; $sql.= " '".$this->db->escape($label)."',";
$sql.= " '".$type."',"; $sql.= " '".$type."',";
@ -267,8 +274,9 @@ class ExtraFields
$sql.= " '".$unique."',"; $sql.= " '".$unique."',";
$sql.= " '".$required."',"; $sql.= " '".$required."',";
$sql.= " '".$params."',"; $sql.= " '".$params."',";
$sql.= " '".$alwayseditable."'"; $sql.= " '".$alwayseditable."',";
$sql.= " ".($perms?"'".$this->db->escape($perms)."'":"null"); $sql.= " ".($perms?"'".$this->db->escape($perms)."'":"null").",";
$sql.= " ".$list;
$sql.=')'; $sql.=')';
dol_syslog(get_class($this)."::create_label", LOG_DEBUG); dol_syslog(get_class($this)."::create_label", LOG_DEBUG);
@ -370,9 +378,10 @@ class ExtraFields
* @param array $param Params for field (ex for select list : array('options' => array(value'=>'label of option')) ) * @param array $param Params for field (ex for select list : array('options' => array(value'=>'label of option')) )
* @param int $alwayseditable Is attribute always editable regardless of the document status * @param int $alwayseditable Is attribute always editable regardless of the document status
* @param string $perms Permission to check * @param string $perms Permission to check
* @param int $list Into list view by default
* @return int >0 if OK, <=0 if KO * @return int >0 if OK, <=0 if KO
*/ */
function update($attrname,$label,$type,$length,$elementtype,$unique=0,$required=0,$pos=0,$param='',$alwayseditable=0, $perms='') function update($attrname,$label,$type,$length,$elementtype,$unique=0,$required=0,$pos=0,$param='',$alwayseditable=0, $perms='',$list='')
{ {
if ($elementtype == 'thirdparty') $elementtype='societe'; if ($elementtype == 'thirdparty') $elementtype='societe';
@ -409,7 +418,7 @@ class ExtraFields
{ {
if ($label) if ($label)
{ {
$result=$this->update_label($attrname,$label,$type,$length,$elementtype,$unique,$required,$pos,$param,$alwayseditable,$perms); $result=$this->update_label($attrname,$label,$type,$length,$elementtype,$unique,$required,$pos,$param,$alwayseditable,$perms,$list);
} }
if ($result > 0) if ($result > 0)
{ {
@ -459,14 +468,17 @@ class ExtraFields
* @param array $param Params for field (ex for select list : array('options' => array(value'=>'label of option')) ) * @param array $param Params for field (ex for select list : array('options' => array(value'=>'label of option')) )
* @param int $alwayseditable Is attribute always editable regardless of the document status * @param int $alwayseditable Is attribute always editable regardless of the document status
* @param string $perms Permission to check * @param string $perms Permission to check
* @param int $list Into list view by default
* @return int <=0 if KO, >0 if OK * @return int <=0 if KO, >0 if OK
*/ */
private function update_label($attrname,$label,$type,$size,$elementtype,$unique=0,$required=0,$pos=0,$param='',$alwayseditable=0,$perms='') private function update_label($attrname,$label,$type,$size,$elementtype,$unique=0,$required=0,$pos=0,$param='',$alwayseditable=0,$perms='',$list=0)
{ {
global $conf; global $conf;
dol_syslog(get_class($this)."::update_label ".$attrname.", ".$label.", ".$type.", ".$size.", ".$elementtype.", ".$unique.", ".$required.", ".$pos.", ".$alwayseditable.", ".$perms); dol_syslog(get_class($this)."::update_label ".$attrname.", ".$label.", ".$type.", ".$size.", ".$elementtype.", ".$unique.", ".$required.", ".$pos.", ".$alwayseditable.", ".$perms.", ".$list);
// Clean parameters
if ($elementtype == 'thirdparty') $elementtype='societe'; if ($elementtype == 'thirdparty') $elementtype='societe';
if (empty($list)) $list=0;
if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname)) if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname))
{ {
@ -496,7 +508,8 @@ class ExtraFields
$sql.= " perms,"; $sql.= " perms,";
$sql.= " pos,"; $sql.= " pos,";
$sql.= " alwayseditable,"; $sql.= " alwayseditable,";
$sql.= " param"; $sql.= " param,";
$sql.= " list";
$sql.= ") VALUES ("; $sql.= ") VALUES (";
$sql.= "'".$attrname."',"; $sql.= "'".$attrname."',";
$sql.= " ".$conf->entity.","; $sql.= " ".$conf->entity.",";
@ -506,10 +519,11 @@ class ExtraFields
$sql.= " '".$elementtype."',"; $sql.= " '".$elementtype."',";
$sql.= " '".$unique."',"; $sql.= " '".$unique."',";
$sql.= " '".$required."',"; $sql.= " '".$required."',";
$sql.= " ".($perms?"'".$this->db->escape($perms)."'":"null"); $sql.= " ".($perms?"'".$this->db->escape($perms)."'":"null").",";
$sql.= " '".$pos."',"; $sql.= " '".$pos."',";
$sql.= " '".$alwayseditable."',"; $sql.= " '".$alwayseditable."',";
$sql.= " '".$param."'"; $sql.= " '".$param."'";
$sql.= " ".$list;
$sql.= ")"; $sql.= ")";
dol_syslog(get_class($this)."::update_label", LOG_DEBUG); dol_syslog(get_class($this)."::update_label", LOG_DEBUG);
$resql2=$this->db->query($sql); $resql2=$this->db->query($sql);
@ -552,7 +566,7 @@ class ExtraFields
// For avoid conflicts with external modules // For avoid conflicts with external modules
if (!$forceload && !empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) return $array_name_label; if (!$forceload && !empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) return $array_name_label;
$sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos,alwayseditable,perms"; $sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos,alwayseditable,perms,list";
$sql.= " FROM ".MAIN_DB_PREFIX."extrafields"; $sql.= " FROM ".MAIN_DB_PREFIX."extrafields";
$sql.= " WHERE entity IN (0,".$conf->entity.")"; $sql.= " WHERE entity IN (0,".$conf->entity.")";
if ($elementtype) $sql.= " AND elementtype = '".$elementtype."'"; if ($elementtype) $sql.= " AND elementtype = '".$elementtype."'";
@ -582,6 +596,7 @@ class ExtraFields
$this->attribute_pos[$tab->name]=$tab->pos; $this->attribute_pos[$tab->name]=$tab->pos;
$this->attribute_alwayseditable[$tab->name]=$tab->alwayseditable; $this->attribute_alwayseditable[$tab->name]=$tab->alwayseditable;
$this->attribute_perms[$tab->name]=$tab->perms; $this->attribute_perms[$tab->name]=$tab->perms;
$this->attribute_perms[$tab->name]=$tab->list;
} }
} }
} }
@ -615,6 +630,8 @@ class ExtraFields
$required=$this->attribute_required[$key]; $required=$this->attribute_required[$key];
$param=$this->attribute_param[$key]; $param=$this->attribute_param[$key];
$perms=$this->attribute_perms[$key]; $perms=$this->attribute_perms[$key];
$list=$this->attribute_list[$key];
if ($type == 'date') if ($type == 'date')
{ {
$showsize=10; $showsize=10;
@ -895,7 +912,7 @@ class ExtraFields
elseif ($type == 'chkbxlst') elseif ($type == 'chkbxlst')
{ {
$value_arr = explode(',', $value); $value_arr = explode(',', $value);
if (is_array($param['options'])) { if (is_array($param['options'])) {
$param_list = array_keys($param['options']); $param_list = array_keys($param['options']);
$InfoFieldList = explode(":", $param_list[0]); $InfoFieldList = explode(":", $param_list[0]);
@ -905,7 +922,7 @@ class ExtraFields
// 3 : key field parent (for dependent lists) // 3 : key field parent (for dependent lists)
// 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value // 4 : where clause filter on column or table extrafield, syntax field='value' or extra.field=value
$keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2] . ' as rowid'); $keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2] . ' as rowid');
if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3])) { if (count($InfoFieldList) > 3 && ! empty($InfoFieldList[3])) {
list ( $parentName, $parentField ) = explode('|', $InfoFieldList[3]); list ( $parentName, $parentField ) = explode('|', $InfoFieldList[3]);
$keyList .= ', ' . $parentField; $keyList .= ', ' . $parentField;
@ -917,13 +934,13 @@ class ExtraFields
$keyList = $InfoFieldList[2] . ' as rowid'; $keyList = $InfoFieldList[2] . ' as rowid';
} }
} }
$fields_label = explode('|', $InfoFieldList[1]); $fields_label = explode('|', $InfoFieldList[1]);
if (is_array($fields_label)) { if (is_array($fields_label)) {
$keyList .= ', '; $keyList .= ', ';
$keyList .= implode(', ', $fields_label); $keyList .= implode(', ', $fields_label);
} }
$sqlwhere = ''; $sqlwhere = '';
$sql = 'SELECT ' . $keyList; $sql = 'SELECT ' . $keyList;
$sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0]; $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
@ -939,7 +956,7 @@ class ExtraFields
$sqlwhere .= ' WHERE 1'; $sqlwhere .= ' WHERE 1';
} }
if (in_array($InfoFieldList[0], array ( if (in_array($InfoFieldList[0], array (
'tablewithentity' 'tablewithentity'
))) )))
$sqlwhere .= ' AND entity = ' . $conf->entity; // Some tables may have field, some other not. For the moment we disable it. $sqlwhere .= ' AND entity = ' . $conf->entity; // Some tables may have field, some other not. For the moment we disable it.
// $sql.=preg_replace('/^ AND /','',$sqlwhere); // $sql.=preg_replace('/^ AND /','',$sqlwhere);
@ -953,7 +970,7 @@ class ExtraFields
while ( $i < $num ) { while ( $i < $num ) {
$labeltoshow = ''; $labeltoshow = '';
$obj = $this->db->fetch_object($resql); $obj = $this->db->fetch_object($resql);
// Several field into label (eq table:code|libelle:rowid) // Several field into label (eq table:code|libelle:rowid)
$fields_label = explode('|', $InfoFieldList[1]); $fields_label = explode('|', $InfoFieldList[1]);
if (is_array($fields_label)) { if (is_array($fields_label)) {
@ -965,7 +982,7 @@ class ExtraFields
$labeltoshow = $obj->$InfoFieldList[1]; $labeltoshow = $obj->$InfoFieldList[1];
} }
$labeltoshow = dol_trunc($labeltoshow, 45); $labeltoshow = dol_trunc($labeltoshow, 45);
if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) { if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
foreach ( $fields_label as $field_toshow ) { foreach ( $fields_label as $field_toshow ) {
$translabel = $langs->trans($obj->$field_toshow); $translabel = $langs->trans($obj->$field_toshow);
@ -977,9 +994,9 @@ class ExtraFields
} }
$out .= '<input class="flat" type="checkbox" name="options_' . $key . $keyprefix . '[]" ' . ($moreparam ? $moreparam : ''); $out .= '<input class="flat" type="checkbox" name="options_' . $key . $keyprefix . '[]" ' . ($moreparam ? $moreparam : '');
$out .= ' value="' . $obj->rowid . '"'; $out .= ' value="' . $obj->rowid . '"';
$out .= 'checked="checked"'; $out .= 'checked="checked"';
$out .= '/>' . $labeltoshow . '<br>'; $out .= '/>' . $labeltoshow . '<br>';
} else { } else {
if (! $notrans) { if (! $notrans) {
@ -992,31 +1009,31 @@ class ExtraFields
} }
if (empty($labeltoshow)) if (empty($labeltoshow))
$labeltoshow = '(not defined)'; $labeltoshow = '(not defined)';
if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) { if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
$out .= '<input class="flat" type="checkbox" name="options_' . $key . $keyprefix . '[]" ' . ($moreparam ? $moreparam : ''); $out .= '<input class="flat" type="checkbox" name="options_' . $key . $keyprefix . '[]" ' . ($moreparam ? $moreparam : '');
$out .= ' value="' . $obj->rowid . '"'; $out .= ' value="' . $obj->rowid . '"';
$out .= 'checked="checked"'; $out .= 'checked="checked"';
$out .= ''; $out .= '';
$out .= '/>' . $labeltoshow . '<br>'; $out .= '/>' . $labeltoshow . '<br>';
} }
if (! empty($InfoFieldList[3])) { if (! empty($InfoFieldList[3])) {
$parent = $parentName . ':' . $obj->{$parentField}; $parent = $parentName . ':' . $obj->{$parentField};
} }
$out .= '<input class="flat" type="checkbox" name="options_' . $key . $keyprefix . '[]" ' . ($moreparam ? $moreparam : ''); $out .= '<input class="flat" type="checkbox" name="options_' . $key . $keyprefix . '[]" ' . ($moreparam ? $moreparam : '');
$out .= ' value="' . $obj->rowid . '"'; $out .= ' value="' . $obj->rowid . '"';
$out .= ((is_array($value_arr) && in_array($obj->rowid, $value_arr)) ? ' checked="checked" ' : ''); $out .= ((is_array($value_arr) && in_array($obj->rowid, $value_arr)) ? ' checked="checked" ' : '');
; ;
$out .= ''; $out .= '';
$out .= '/>' . $labeltoshow . '<br>'; $out .= '/>' . $labeltoshow . '<br>';
} }
$i ++; $i ++;
} }
$this->db->free($resql); $this->db->free($resql);
@ -1053,6 +1070,8 @@ class ExtraFields
$required=$this->attribute_required[$key]; $required=$this->attribute_required[$key];
$params=$this->attribute_param[$key]; $params=$this->attribute_param[$key];
$perms=$this->attribute_perms[$key]; $perms=$this->attribute_perms[$key];
$list=$this->attribute_list[$key];
if ($type == 'date') if ($type == 'date')
{ {
$showsize=10; $showsize=10;
@ -1185,24 +1204,24 @@ class ExtraFields
elseif ($type == 'chkbxlst') elseif ($type == 'chkbxlst')
{ {
$value_arr = explode(',', $value); $value_arr = explode(',', $value);
$param_list = array_keys($params['options']); $param_list = array_keys($params['options']);
$InfoFieldList = explode(":", $param_list[0]); $InfoFieldList = explode(":", $param_list[0]);
$selectkey = "rowid"; $selectkey = "rowid";
$keyList = 'rowid'; $keyList = 'rowid';
if (count($InfoFieldList) >= 3) { if (count($InfoFieldList) >= 3) {
$selectkey = $InfoFieldList[2]; $selectkey = $InfoFieldList[2];
$keyList = $InfoFieldList[2] . ' as rowid'; $keyList = $InfoFieldList[2] . ' as rowid';
} }
$fields_label = explode('|', $InfoFieldList[1]); $fields_label = explode('|', $InfoFieldList[1]);
if (is_array($fields_label)) { if (is_array($fields_label)) {
$keyList .= ', '; $keyList .= ', ';
$keyList .= implode(', ', $fields_label); $keyList .= implode(', ', $fields_label);
} }
$sql = 'SELECT ' . $keyList; $sql = 'SELECT ' . $keyList;
$sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0]; $sql .= ' FROM ' . MAIN_DB_PREFIX . $InfoFieldList[0];
if (strpos($InfoFieldList[4], 'extra') !== false) { if (strpos($InfoFieldList[4], 'extra') !== false) {
@ -1210,14 +1229,14 @@ class ExtraFields
} }
// $sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'"; // $sql.= " WHERE ".$selectkey."='".$this->db->escape($value)."'";
// $sql.= ' AND entity = '.$conf->entity; // $sql.= ' AND entity = '.$conf->entity;
dol_syslog(get_class($this) . ':showOutputField:$type=chkbxlst',LOG_DEBUG); dol_syslog(get_class($this) . ':showOutputField:$type=chkbxlst',LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) { if ($resql) {
$value = ''; // value was used, so now we reste it to use it to build final output $value = ''; // value was used, so now we reste it to use it to build final output
while ( $obj = $this->db->fetch_object($resql) ) { while ( $obj = $this->db->fetch_object($resql) ) {
// Several field into label (eq table:code|libelle:rowid) // Several field into label (eq table:code|libelle:rowid)
$fields_label = explode('|', $InfoFieldList[1]); $fields_label = explode('|', $InfoFieldList[1]);
if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) { if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {

View File

@ -275,6 +275,7 @@ abstract class DoliDB implements Database
*/ */
function jdate($string, $gm=false) function jdate($string, $gm=false)
{ {
if ($string==0 || $string=="0000-00-00 00:00:00") return '';
$string=preg_replace('/([^0-9])/i','',$string); $string=preg_replace('/([^0-9])/i','',$string);
$tmp=$string.'000000'; $tmp=$string.'000000';
$date=dol_mktime(substr($tmp,8,2),substr($tmp,10,2),substr($tmp,12,2),substr($tmp,4,2),substr($tmp,6,2),substr($tmp,0,4),$gm); $date=dol_mktime(substr($tmp,8,2),substr($tmp,10,2),substr($tmp,12,2),substr($tmp,4,2),substr($tmp,6,2),substr($tmp,0,4),$gm);

View File

@ -50,6 +50,7 @@ class DoliDBSqlite extends DoliDB
* @param string $pass Mot de passe * @param string $pass Mot de passe
* @param string $name Nom de la database * @param string $name Nom de la database
* @param int $port Port of database server * @param int $port Port of database server
* @return int 1 if OK, 0 if not
*/ */
function __construct($type, $host, $user, $pass, $name='', $port=0) function __construct($type, $host, $user, $pass, $name='', $port=0)
{ {

File diff suppressed because it is too large Load Diff

View File

@ -39,166 +39,166 @@ abstract class DolibarrModules
*/ */
public $db; public $db;
/** /**
* @var string Relative path to module style sheet * @var string Relative path to module style sheet
* @deprecated * @deprecated
*/ */
public $style_sheet = ''; public $style_sheet = '';
/** /**
* @var array Paths to create when module is activated * @var array Paths to create when module is activated
*/ */
public $dirs = array(); public $dirs = array();
/** /**
* @var array Module boxes * @var array Module boxes
*/ */
public $boxes = array(); public $boxes = array();
/** /**
* @var array Module constants * @var array Module constants
*/ */
public $const = array(); public $const = array();
/** /**
* @var array Module access rights * @var array Module access rights
*/ */
public $rights; public $rights;
/** /**
* @var string Module access rights family * @var string Module access rights family
*/ */
public $rights_class; public $rights_class;
/** /**
* @var array Module menu entries * @var array Module menu entries
*/ */
public $menu = array(); public $menu = array();
/** /**
* @var array Module parts * @var array Module parts
* array( * array(
* // Set this to 1 if module has its own trigger directory (/mymodule/core/triggers) * // Set this to 1 if module has its own trigger directory (/mymodule/core/triggers)
* 'triggers' => 0, * 'triggers' => 0,
* // Set this to 1 if module has its own login method directory (/mymodule/core/login) * // Set this to 1 if module has its own login method directory (/mymodule/core/login)
* 'login' => 0, * 'login' => 0,
* // Set this to 1 if module has its own substitution function file (/mymodule/core/substitutions) * // Set this to 1 if module has its own substitution function file (/mymodule/core/substitutions)
* 'substitutions' => 0, * 'substitutions' => 0,
* // Set this to 1 if module has its own menus handler directory (/mymodule/core/menus) * // Set this to 1 if module has its own menus handler directory (/mymodule/core/menus)
* 'menus' => 0, * 'menus' => 0,
* // Set this to 1 if module has its own theme directory (/mymodule/theme) * // Set this to 1 if module has its own theme directory (/mymodule/theme)
* 'theme' => 0, * 'theme' => 0,
* // Set this to 1 if module overwrite template dir (/mymodule/core/tpl) * // Set this to 1 if module overwrite template dir (/mymodule/core/tpl)
* 'tpl' => 0, * 'tpl' => 0,
* // Set this to 1 if module has its own barcode directory (/mymodule/core/modules/barcode) * // Set this to 1 if module has its own barcode directory (/mymodule/core/modules/barcode)
* 'barcode' => 0, * 'barcode' => 0,
* // Set this to 1 if module has its own models directory (/mymodule/core/modules/xxx) * // Set this to 1 if module has its own models directory (/mymodule/core/modules/xxx)
* 'models' => 0, * 'models' => 0,
* // Set this to relative path of css file if module has its own css file * // Set this to relative path of css file if module has its own css file
* 'css' => '/mymodule/css/mymodule.css.php', * 'css' => '/mymodule/css/mymodule.css.php',
* // Set this to relative path of js file if module must load a js on all pages * // Set this to relative path of js file if module must load a js on all pages
* 'js' => '/mymodule/js/mymodule.js', * 'js' => '/mymodule/js/mymodule.js',
* // Set here all hooks context managed by module * // Set here all hooks context managed by module
* 'hooks' => array('hookcontext1','hookcontext2'), * 'hooks' => array('hookcontext1','hookcontext2'),
* // Set here all workflow context managed by module * // Set here all workflow context managed by module
* 'workflow' => array( * 'workflow' => array(
* 'WORKFLOW_MODULE1_YOURACTIONTYPE_MODULE2' = >array( * 'WORKFLOW_MODULE1_YOURACTIONTYPE_MODULE2' = >array(
* 'enabled' => '! empty($conf->module1->enabled) && ! empty($conf->module2->enabled)', * 'enabled' => '! empty($conf->module1->enabled) && ! empty($conf->module2->enabled)',
* 'picto'=>'yourpicto@mymodule' * 'picto'=>'yourpicto@mymodule'
* ) * )
* ) * )
* ) * )
*/ */
public $module_parts = array(); public $module_parts = array();
/** /**
* @var string Module documents ? * @var string Module documents ?
* @deprecated Seems unused anywhere * @deprecated Seems unused anywhere
*/ */
public $docs; public $docs;
/** /**
* @var string ? * @var string ?
* @deprecated Seems unused anywhere * @deprecated Seems unused anywhere
*/ */
public $dbversion = "-"; public $dbversion = "-";
/** /**
* @var string Error message * @var string Error message
*/ */
public $error; public $error;
/** /**
* @var int Module unique ID * @var int Module unique ID
*/ */
public $numero; public $numero;
/** /**
* @var string Module name * @var string Module name
*/ */
public $name; public $name;
/** /**
* @var string Module version * @var string Module version
*/ */
public $version; public $version;
/** /**
* @var string Module description * @var string Module description
*/ */
public $description; public $description;
/** /**
* @var string[] Module language files * @var string[] Module language files
*/ */
public $langfiles; public $langfiles;
/** /**
* @var string Module export code * @var string Module export code
*/ */
public $export_code; public $export_code;
/** /**
* @var string Module export label * @var string Module export label
*/ */
public $export_label; public $export_label;
/** /**
* @var string Module import code * @var string Module import code
*/ */
public $import_code; public $import_code;
/** /**
* @var string Module import label * @var string Module import label
*/ */
public $import_label; public $import_label;
/** /**
* @var string Module constant name * @var string Module constant name
*/ */
public $const_name; public $const_name;
/** /**
* @var bool Module can't be disabled * @var bool Module can't be disabled
*/ */
public $always_enabled; public $always_enabled;
/** /**
* @var bool Module is enabled globally (Multicompany support) * @var bool Module is enabled globally (Multicompany support)
*/ */
public $core_enabled; public $core_enabled;
/** /**
* Enables a module. * Enables a module.
* Inserts all informations into database * Inserts all informations into database
* *
* @param array $array_sql SQL requests to be executed when enabling module * @param array $array_sql SQL requests to be executed when enabling module
* @param string $options String with options when disabling module: * @param string $options String with options when disabling module:
* 'noboxes' = Do not insert boxes * 'noboxes' = Do not insert boxes
* 'newboxdefonly' = For boxes, insert def of boxes only and not boxes activation * 'newboxdefonly' = For boxes, insert def of boxes only and not boxes activation
* *
* @return int 1 if OK, 0 if KO * @return int 1 if OK, 0 if KO
*/ */
function _init($array_sql, $options='') function _init($array_sql, $options='')
{ {
global $conf; global $conf;
@ -232,12 +232,12 @@ abstract class DolibarrModules
// Execute addons requests // Execute addons requests
$num=count($array_sql); $num=count($array_sql);
for ($i = 0; $i < $num; $i++) for ($i = 0; $i < $num; $i++)
{ {
if (! $err) if (! $err)
{ {
$val=$array_sql[$i]; $val=$array_sql[$i];
$sql=$val; $sql=$val;
$ignoreerror=0; $ignoreerror=0;
if (is_array($val)) if (is_array($val))
{ {
@ -367,12 +367,12 @@ abstract class DolibarrModules
// If module name translation using it's unique id does not exists, we take use its name to find translation // If module name translation using it's unique id does not exists, we take use its name to find translation
if (is_array($this->langfiles)) if (is_array($this->langfiles))
{ {
foreach($this->langfiles as $val) foreach($this->langfiles as $val)
{ {
if ($val) $langs->load($val); if ($val) $langs->load($val);
} }
} }
return $langs->trans($this->name); return $langs->trans($this->name);
} }
} }
@ -389,20 +389,20 @@ abstract class DolibarrModules
if ($langs->trans("Module".$this->numero."Desc") != ("Module".$this->numero."Desc")) if ($langs->trans("Module".$this->numero."Desc") != ("Module".$this->numero."Desc"))
{ {
// If module description translation exists // If module description translation exists
return $langs->trans("Module".$this->numero."Desc"); return $langs->trans("Module".$this->numero."Desc");
} }
else else
{ {
// If module description translation using it's unique id does not exists, we take use its name to find translation // If module description translation using it's unique id does not exists, we take use its name to find translation
if (is_array($this->langfiles)) if (is_array($this->langfiles))
{ {
foreach($this->langfiles as $val) foreach($this->langfiles as $val)
{ {
if ($val) $langs->load($val); if ($val) $langs->load($val);
} }
} }
return $langs->trans($this->description); return $langs->trans($this->description);
} }
} }
@ -429,7 +429,7 @@ abstract class DolibarrModules
else $ret=$langs->trans("VersionUnknown"); else $ret=$langs->trans("VersionUnknown");
if (preg_match('/_deprecated/',$this->version)) $ret.=' ('.$langs->trans("Deprecated").')'; if (preg_match('/_deprecated/',$this->version)) $ret.=' ('.$langs->trans("Deprecated").')';
return $ret; return $ret;
} }
@ -582,9 +582,9 @@ abstract class DolibarrModules
global $conf; global $conf;
$error=0; $error=0;
$dirfound=0; $dirfound=0;
if (empty($reldir)) return 1; if (empty($reldir)) return 1;
include_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; include_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
@ -599,10 +599,10 @@ abstract class DolibarrModules
$handle=@opendir($dir); // Dir may not exists $handle=@opendir($dir); // Dir may not exists
if (is_resource($handle)) if (is_resource($handle))
{ {
$dirfound++; $dirfound++;
// Run llx_mytable.sql files // Run llx_mytable.sql files
while (($file = readdir($handle))!==false) while (($file = readdir($handle))!==false)
{ {
if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'llx_' && substr($file,0,4) != 'data') if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'llx_' && substr($file,0,4) != 'data')
{ {
@ -613,8 +613,8 @@ abstract class DolibarrModules
rewinddir($handle); rewinddir($handle);
// Run llx_mytable.key.sql files (Must be done after llx_mytable.sql) // Run llx_mytable.key.sql files (Must be done after llx_mytable.sql)
while (($file = readdir($handle))!==false) while (($file = readdir($handle))!==false)
{ {
if (preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'llx_' && substr($file,0,4) != 'data') if (preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'llx_' && substr($file,0,4) != 'data')
{ {
@ -626,7 +626,7 @@ abstract class DolibarrModules
rewinddir($handle); rewinddir($handle);
// Run data_xxx.sql files (Must be done after llx_mytable.key.sql) // Run data_xxx.sql files (Must be done after llx_mytable.key.sql)
while (($file = readdir($handle))!==false) while (($file = readdir($handle))!==false)
{ {
if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'data') if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'data')
{ {
@ -638,7 +638,7 @@ abstract class DolibarrModules
rewinddir($handle); rewinddir($handle);
// Run update_xxx.sql files // Run update_xxx.sql files
while (($file = readdir($handle))!==false) while (($file = readdir($handle))!==false)
{ {
if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,6) == 'update') if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,6) == 'update')
{ {
@ -671,9 +671,9 @@ abstract class DolibarrModules
*/ */
function insert_boxes($option='') function insert_boxes($option='')
{ {
require_once DOL_DOCUMENT_ROOT . '/core/class/infobox.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/infobox.class.php';
global $conf; global $conf;
$err=0; $err=0;
@ -681,8 +681,8 @@ abstract class DolibarrModules
{ {
$pos_name = InfoBox::getListOfPagesForBoxes(); $pos_name = InfoBox::getListOfPagesForBoxes();
foreach ($this->boxes as $key => $value) foreach ($this->boxes as $key => $value)
{ {
$file = isset($this->boxes[$key]['file'])?$this->boxes[$key]['file']:''; $file = isset($this->boxes[$key]['file'])?$this->boxes[$key]['file']:'';
$note = isset($this->boxes[$key]['note'])?$this->boxes[$key]['note']:''; $note = isset($this->boxes[$key]['note'])?$this->boxes[$key]['note']:'';
$enabledbydefaulton = isset($this->boxes[$key]['enabledbydefaulton'])?$this->boxes[$key]['enabledbydefaulton']:'Home'; $enabledbydefaulton = isset($this->boxes[$key]['enabledbydefaulton'])?$this->boxes[$key]['enabledbydefaulton']:'Home';
@ -724,15 +724,15 @@ abstract class DolibarrModules
foreach ($pos_name as $key2 => $val2) foreach ($pos_name as $key2 => $val2)
{ {
//print 'key2='.$key2.'-val2='.$val2."<br>\n"; //print 'key2='.$key2.'-val2='.$val2."<br>\n";
if ($enabledbydefaulton && $val2 != $enabledbydefaulton) continue; // Not enabled by default onto this page. if ($enabledbydefaulton && $val2 != $enabledbydefaulton) continue; // Not enabled by default onto this page.
$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id,position,box_order,fk_user,entity)"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id,position,box_order,fk_user,entity)";
$sql.= " VALUES (".$lastid.", ".$key2.", '0', 0, ".$conf->entity.")"; $sql.= " VALUES (".$lastid.", ".$key2.", '0', 0, ".$conf->entity.")";
dol_syslog(get_class($this)."::insert_boxes onto page ".$key2."=".$val2."", LOG_DEBUG); dol_syslog(get_class($this)."::insert_boxes onto page ".$key2."=".$val2."", LOG_DEBUG);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
if (! $resql) $err++; if (! $resql) $err++;
} }
} }
@ -741,7 +741,7 @@ abstract class DolibarrModules
$this->db->commit(); $this->db->commit();
} }
else else
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
$this->db->rollback(); $this->db->rollback();
} }
@ -781,11 +781,22 @@ abstract class DolibarrModules
if (empty($file)) $file = isset($this->boxes[$key][1])?$this->boxes[$key][1]:''; // For backward compatibility if (empty($file)) $file = isset($this->boxes[$key][1])?$this->boxes[$key][1]:''; // For backward compatibility
$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes"; if ($this->db->type == 'sqlite3') {
$sql.= " USING ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def"; // sqlite doesn't support "USING" syntax.
$sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid"; // TODO: remove this dependency.
$sql.= " AND ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."'"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes ";
$sql.= " AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity; $sql .= "WHERE ".MAIN_DB_PREFIX."boxes.box_id IN (";
$sql .= "SELECT ".MAIN_DB_PREFIX."boxes_def.rowid ";
$sql .= "FROM ".MAIN_DB_PREFIX."boxes_def ";
$sql .= "WHERE ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."') ";
$sql .= "AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity;
} else {
$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
$sql.= " USING ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def";
$sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid";
$sql.= " AND ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."'";
$sql.= " AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity;
}
dol_syslog(get_class($this)."::delete_boxes", LOG_DEBUG); dol_syslog(get_class($this)."::delete_boxes", LOG_DEBUG);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
@ -1012,7 +1023,7 @@ abstract class DolibarrModules
if ($resql) if ($resql)
{ {
$obj=$this->db->fetch_object($resql); $obj=$this->db->fetch_object($resql);
if (! empty($obj->value) && ! empty($this->rights)) if ($obj !== null && ! empty($obj->value) && ! empty($this->rights))
{ {
// Si module actif // Si module actif
foreach ($this->rights as $key => $value) foreach ($this->rights as $key => $value)
@ -1027,54 +1038,54 @@ abstract class DolibarrModules
if (empty($r_type)) $r_type='w'; if (empty($r_type)) $r_type='w';
// Search if perm already present // Search if perm already present
$sql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."rights_def"; $sql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."rights_def";
$sql.= " WHERE id = ".$r_id." AND entity = ".$entity; $sql.= " WHERE id = ".$r_id." AND entity = ".$entity;
$resqlselect=$this->db->query($sql); $resqlselect=$this->db->query($sql);
$obj = $this->db->fetch_object($resqlselect); $obj = $this->db->fetch_object($resqlselect);
if ($obj->nb == 0) if ($obj->nb == 0)
{ {
if (dol_strlen($r_perms) ) if (dol_strlen($r_perms) )
{ {
if (dol_strlen($r_subperms) ) if (dol_strlen($r_subperms) )
{ {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def";
$sql.= " (id, entity, libelle, module, type, bydefault, perms, subperms)"; $sql.= " (id, entity, libelle, module, type, bydefault, perms, subperms)";
$sql.= " VALUES "; $sql.= " VALUES ";
$sql.= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."','".$r_subperms."')"; $sql.= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."','".$r_subperms."')";
} }
else else
{ {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def";
$sql.= " (id, entity, libelle, module, type, bydefault, perms)"; $sql.= " (id, entity, libelle, module, type, bydefault, perms)";
$sql.= " VALUES "; $sql.= " VALUES ";
$sql.= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."')"; $sql.= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."')";
} }
} }
else else
{ {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def "; $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
$sql .= " (id, entity, libelle, module, type, bydefault)"; $sql .= " (id, entity, libelle, module, type, bydefault)";
$sql .= " VALUES "; $sql .= " VALUES ";
$sql .= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.")"; $sql .= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.")";
} }
$resqlinsert=$this->db->query($sql,1); $resqlinsert=$this->db->query($sql,1);
if (! $resqlinsert) if (! $resqlinsert)
{ {
if ($this->db->errno() != "DB_ERROR_RECORD_ALREADY_EXISTS") if ($this->db->errno() != "DB_ERROR_RECORD_ALREADY_EXISTS")
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
$err++; $err++;
break; break;
} }
else dol_syslog(get_class($this)."::insert_permissions record already exists", LOG_INFO); else dol_syslog(get_class($this)."::insert_permissions record already exists", LOG_INFO);
} }
$this->db->free($resqlinsert); $this->db->free($resqlinsert);
} }
$this->db->free($resqlselect); $this->db->free($resqlselect);
@ -1082,9 +1093,9 @@ abstract class DolibarrModules
// If we want to init permissions on admin users // If we want to init permissions on admin users
if ($reinitadminperms) if ($reinitadminperms)
{ {
if (! class_exists('User')) { if (! class_exists('User')) {
require DOL_DOCUMENT_ROOT . '/user/class/user.class.php'; require DOL_DOCUMENT_ROOT . '/user/class/user.class.php';
} }
$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."user WHERE admin = 1"; $sql="SELECT rowid FROM ".MAIN_DB_PREFIX."user WHERE admin = 1";
dol_syslog(get_class($this)."::insert_permissions Search all admin users", LOG_DEBUG); dol_syslog(get_class($this)."::insert_permissions Search all admin users", LOG_DEBUG);
$resqlseladmin=$this->db->query($sql,1); $resqlseladmin=$this->db->query($sql,1);
@ -1099,7 +1110,7 @@ abstract class DolibarrModules
$tmpuser=new User($this->db); $tmpuser=new User($this->db);
$tmpuser->fetch($obj2->rowid); $tmpuser->fetch($obj2->rowid);
if (!empty($tmpuser->id)) { if (!empty($tmpuser->id)) {
$tmpuser->addrights($r_id); $tmpuser->addrights($r_id);
} }
$i++; $i++;
} }
@ -1158,7 +1169,7 @@ abstract class DolibarrModules
*/ */
function insert_menus() function insert_menus()
{ {
global $user; global $user;
require_once DOL_DOCUMENT_ROOT . '/core/class/menubase.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/menubase.class.php';
@ -1415,68 +1426,68 @@ abstract class DolibarrModules
*/ */
function insert_module_parts() function insert_module_parts()
{ {
global $conf; global $conf;
$error=0; $error=0;
$entity=$conf->entity; $entity=$conf->entity;
if (is_array($this->module_parts) && ! empty($this->module_parts)) if (is_array($this->module_parts) && ! empty($this->module_parts))
{ {
foreach($this->module_parts as $key => $value) foreach($this->module_parts as $key => $value)
{ {
if (is_array($value) && count($value) == 0) continue; // Discard empty arrays if (is_array($value) && count($value) == 0) continue; // Discard empty arrays
$newvalue = $value; $newvalue = $value;
// Serialize array parameters // Serialize array parameters
if (is_array($value)) if (is_array($value))
{ {
// Can defined other parameters // Can defined other parameters
if (is_array($value['data']) && ! empty($value['data'])) if (is_array($value['data']) && ! empty($value['data']))
{ {
$newvalue = json_encode($value['data']); $newvalue = json_encode($value['data']);
if (isset($value['entity'])) $entity = $value['entity']; if (isset($value['entity'])) $entity = $value['entity'];
} }
else else
{ {
$newvalue = json_encode($value); $newvalue = json_encode($value);
} }
} }
$sql = "INSERT INTO ".MAIN_DB_PREFIX."const ("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (";
$sql.= "name"; $sql.= "name";
$sql.= ", type"; $sql.= ", type";
$sql.= ", value"; $sql.= ", value";
$sql.= ", note"; $sql.= ", note";
$sql.= ", visible"; $sql.= ", visible";
$sql.= ", entity"; $sql.= ", entity";
$sql.= ")"; $sql.= ")";
$sql.= " VALUES ("; $sql.= " VALUES (";
$sql.= $this->db->encrypt($this->const_name."_".strtoupper($key), 1); $sql.= $this->db->encrypt($this->const_name."_".strtoupper($key), 1);
$sql.= ", 'chaine'"; $sql.= ", 'chaine'";
$sql.= ", ".$this->db->encrypt($newvalue, 1); $sql.= ", ".$this->db->encrypt($newvalue, 1);
$sql.= ", null"; $sql.= ", null";
$sql.= ", '0'"; $sql.= ", '0'";
$sql.= ", ".$entity; $sql.= ", ".$entity;
$sql.= ")"; $sql.= ")";
dol_syslog(get_class($this)."::insert_const_".$key."", LOG_DEBUG); dol_syslog(get_class($this)."::insert_const_".$key."", LOG_DEBUG);
$resql=$this->db->query($sql,1); $resql=$this->db->query($sql,1);
if (! $resql) if (! $resql)
{ {
if ($this->db->lasterrno() != 'DB_ERROR_RECORD_ALREADY_EXISTS') if ($this->db->lasterrno() != 'DB_ERROR_RECORD_ALREADY_EXISTS')
{ {
$error++; $error++;
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
} }
else else
{ {
dol_syslog(get_class($this)."::insert_const_".$key." Record already exists.", LOG_WARNING); dol_syslog(get_class($this)."::insert_const_".$key." Record already exists.", LOG_WARNING);
} }
} }
} }
} }
return $error; return $error;
} }
/** /**
@ -1486,31 +1497,31 @@ abstract class DolibarrModules
*/ */
function delete_module_parts() function delete_module_parts()
{ {
global $conf; global $conf;
$err=0; $err=0;
$entity=$conf->entity; $entity=$conf->entity;
if (is_array($this->module_parts) && ! empty($this->module_parts)) if (is_array($this->module_parts) && ! empty($this->module_parts))
{ {
foreach($this->module_parts as $key => $value) foreach($this->module_parts as $key => $value)
{ {
// If entity is defined // If entity is defined
if (is_array($value) && isset($value['entity'])) $entity = $value['entity']; if (is_array($value) && isset($value['entity'])) $entity = $value['entity'];
$sql = "DELETE FROM ".MAIN_DB_PREFIX."const"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
$sql.= " WHERE ".$this->db->decrypt('name')." LIKE '".$this->const_name."_".strtoupper($key)."'"; $sql.= " WHERE ".$this->db->decrypt('name')." LIKE '".$this->const_name."_".strtoupper($key)."'";
$sql.= " AND entity = ".$entity; $sql.= " AND entity = ".$entity;
dol_syslog(get_class($this)."::delete_const_".$key."", LOG_DEBUG); dol_syslog(get_class($this)."::delete_const_".$key."", LOG_DEBUG);
if (! $this->db->query($sql)) if (! $this->db->query($sql))
{ {
$this->error=$this->db->lasterror(); $this->error=$this->db->lasterror();
$err++; $err++;
} }
} }
} }
return $err; return $err;
} }
} }

View File

@ -508,7 +508,7 @@ class pdf_standard extends ModeleExpenseReport
*/ */
// Filligrane brouillon // Filligrane brouillon
if ($object->fk_c_expensereport_statuts==1 && ! empty($conf->global->EXPENSEREPORT_FREE_TEXT)) if ($object->fk_statut==1 && ! empty($conf->global->EXPENSEREPORT_FREE_TEXT))
{ {
pdf_watermark($pdf,$outputlangs,$this->page_hauteur,$this->page_largeur,'mm',$conf->global->EXPENSEREPORT_FREE_TEXT); pdf_watermark($pdf,$outputlangs,$this->page_hauteur,$this->page_largeur,'mm',$conf->global->EXPENSEREPORT_FREE_TEXT);
} }
@ -640,7 +640,7 @@ class pdf_standard extends ModeleExpenseReport
$pdf->MultiCell(96,4,$outputlangs->transnoentities("DateCreation")." : ".dol_print_date($object->date_create,"day",false,$outpulangs),0,'L'); $pdf->MultiCell(96,4,$outputlangs->transnoentities("DateCreation")." : ".dol_print_date($object->date_create,"day",false,$outpulangs),0,'L');
} }
if ($object->fk_c_expensereport_statuts==99) if ($object->fk_statut==99)
{ {
if ($object->fk_user_refuse > 0) if ($object->fk_user_refuse > 0)
{ {
@ -656,7 +656,7 @@ class pdf_standard extends ModeleExpenseReport
$pdf->MultiCell(96,4,$outputlangs->transnoentities("DATE_REFUS")." : ".dol_print_date($object->date_refuse,"day",false,$outpulangs),0,'L'); $pdf->MultiCell(96,4,$outputlangs->transnoentities("DATE_REFUS")." : ".dol_print_date($object->date_refuse,"day",false,$outpulangs),0,'L');
} }
} }
else if($object->fk_c_expensereport_statuts==4) else if($object->fk_statut==4)
{ {
if ($object->fk_user_cancel > 0) if ($object->fk_user_cancel > 0)
{ {
@ -686,7 +686,7 @@ class pdf_standard extends ModeleExpenseReport
} }
} }
if($object->fk_c_expensereport_statuts==6) if($object->fk_statut==6)
{ {
if ($object->fk_user_paid > 0) if ($object->fk_user_paid > 0)
{ {

View File

@ -84,7 +84,7 @@ class modExpenseReport extends DolibarrModules
// Dependencies // Dependencies
$this->depends = array(); // List of modules id that must be enabled if this module is enabled $this->depends = array(); // List of modules id that must be enabled if this module is enabled
$this->conflictwith = array("modDeplacement"); // $this->conflictwith = array("modDeplacement"); // Deactivate for access on old information
$this->requiredby = array(); // List of modules id to disable if this one is disabled $this->requiredby = array(); // List of modules id to disable if this one is disabled
$this->phpmin = array(4,3); // Minimum version of PHP required by module $this->phpmin = array(4,3); // Minimum version of PHP required by module
$this->need_dolibarr_version = array(3,7); // Minimum version of Dolibarr required by module $this->need_dolibarr_version = array(3,7); // Minimum version of Dolibarr required by module
@ -270,7 +270,7 @@ class modExpenseReport extends DolibarrModules
'titre'=>'ListToApprove', 'titre'=>'ListToApprove',
'mainmenu'=>'hrm', 'mainmenu'=>'hrm',
'leftmenu'=>'expensereport_detaillist_approve', 'leftmenu'=>'expensereport_detaillist_approve',
'url'=>'/expensereport/list.php?search_state=2', 'url'=>'/expensereport/list.php?search_status=2',
'langs'=>'trips', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. 'langs'=>'trips', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position'=>100, 'position'=>100,
'enabled'=>'$conf->expensereport->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. 'enabled'=>'$conf->expensereport->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled.

View File

@ -65,7 +65,7 @@ if (empty($reshook) && ! empty($extrafields->attribute_label))
print '<td align="right"><a href="' . $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=edit_extras&attribute=' . $key . '">' . img_edit().'</a></td>'; print '<td align="right"><a href="' . $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&action=edit_extras&attribute=' . $key . '">' . img_edit().'</a></td>';
print '</tr></table>'; print '</tr></table>';
print '<td colspan="5">'; print '<td colspan="'.$cols.'">';
// Convert date into timestamp format // Convert date into timestamp format
if (in_array($extrafields->attribute_type[$key], array('date','datetime'))) { if (in_array($extrafields->attribute_type[$key], array('date','datetime'))) {

View File

@ -52,7 +52,7 @@ if (empty($usemargins)) $usemargins=0;
<?php if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { ?> <?php if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { ?>
<td align="center"><?php $coldisplay++; ?><?php echo ($i+1); ?></td> <td align="center"><?php $coldisplay++; ?><?php echo ($i+1); ?></td>
<?php } ?> <?php } ?>
<td><?php $coldisplay++; ?><div id="row-<?php echo $line->id; ?>"></div> <td><?php $coldisplay++; ?><div id="line_<?php echo $line->id; ?>"></div>
<?php if (($line->info_bits & 2) == 2) { ?> <?php if (($line->info_bits & 2) == 2) { ?>
<a href="<?php echo DOL_URL_ROOT.'/comm/remx.php?id='.$this->socid; ?>"> <a href="<?php echo DOL_URL_ROOT.'/comm/remx.php?id='.$this->socid; ?>">
<?php <?php
@ -183,7 +183,7 @@ if (empty($usemargins)) $usemargins=0;
<td align="center"><?php $coldisplay++; ?> <td align="center"><?php $coldisplay++; ?>
<?php if (($line->info_bits & 2) == 2) { ?> <?php if (($line->info_bits & 2) == 2) { ?>
<?php } else { ?> <?php } else { ?>
<a href="<?php echo $_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=editline&amp;lineid='.$line->id.'#'.$line->id; ?>"> <a href="<?php echo $_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=editline&amp;lineid='.$line->id.'#line_'.$line->id; ?>">
<?php echo img_edit(); ?> <?php echo img_edit(); ?>
</a> </a>
<?php } ?> <?php } ?>

View File

View File

@ -109,7 +109,7 @@ if ($action == 'add' && $user->rights->expensereport->creer)
$object->date_debut = $date_start; $object->date_debut = $date_start;
$object->date_fin = $date_end; $object->date_fin = $date_end;
$object->fk_c_expensereport_statuts = 1; $object->fk_statut = 1;
$object->fk_c_paiement = GETPOST('fk_c_paiement','int'); $object->fk_c_paiement = GETPOST('fk_c_paiement','int');
$object->fk_user_validator = GETPOST('fk_user_validator','int'); $object->fk_user_validator = GETPOST('fk_user_validator','int');
$object->note_public = GETPOST('note_public'); $object->note_public = GETPOST('note_public');
@ -151,7 +151,7 @@ if ($action == 'update' && $user->rights->expensereport->creer)
$object->date_debut = $date_start; $object->date_debut = $date_start;
$object->date_fin = $date_end; $object->date_fin = $date_end;
if($object->fk_c_expensereport_statuts < 3) if($object->fk_statut < 3)
{ {
$object->fk_user_validator = GETPOST('fk_user_validator','int'); $object->fk_user_validator = GETPOST('fk_user_validator','int');
} }
@ -733,12 +733,12 @@ if ($action == "confirm_paid" && GETPOST('confirm')=="yes" && $id > 0 && $user->
$insertid = $acct->addline($dateop, $operation, $label, $amount, $num_chq, $cat1, $user); $insertid = $acct->addline($dateop, $operation, $label, $amount, $num_chq, $cat1, $user);
if ($insertid > 0): if ($insertid > 0):
$sql = " UPDATE ".MAIN_DB_PREFIX."expensereport d"; $sql = " UPDATE ".MAIN_DB_PREFIX."expensereport as d";
$sql.= " SET integration_compta = 1, fk_bank_account = $idAccount"; $sql.= " SET integration_compta = 1, fk_bank_account = $idAccount";
$sql.= " WHERE rowid = $idTrip"; $sql.= " WHERE rowid = $idTrip";
$resql=$db->query($sql); $resql=$db->query($sql);
if($result): if($result):
Header("Location: ".$_SEVER["PHP_SELF"]."?id=".$id); Header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
exit; exit;
else: else:
dol_print_error($db); dol_print_error($db);
@ -1197,7 +1197,7 @@ else
$head = expensereport_prepare_head($object); $head = expensereport_prepare_head($object);
if ($action == 'edit' && ($object->fk_c_expensereport_statuts < 3 || $object->fk_c_expensereport_statuts==99)) if ($action == 'edit' && ($object->fk_statut < 3 || $object->fk_statut==99))
{ {
print "<form name='update' action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">\n"; print "<form name='update' action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">\n";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@ -1205,7 +1205,7 @@ else
dol_fiche_head($head, 'card', $langs->trans("TripCard"), 0, 'trip'); dol_fiche_head($head, 'card', $langs->trans("TripCard"), 0, 'trip');
if($object->fk_c_expensereport_statuts==99) if($object->fk_statut==99)
{ {
print '<input type="hidden" name="action" value="updateFromRefuse">'; print '<input type="hidden" name="action" value="updateFromRefuse">';
} }
@ -1246,7 +1246,7 @@ else
print '</tr>'; print '</tr>';
} }
if($object->fk_c_expensereport_statuts<3) if($object->fk_statut<3)
{ {
print '<tr>'; print '<tr>';
print '<td>'.$langs->trans("VALIDATOR").'</td>'; // Approbator print '<td>'.$langs->trans("VALIDATOR").'</td>'; // Approbator
@ -1275,7 +1275,7 @@ else
$userfee->fetch($object->fk_user_author); $userfee->fetch($object->fk_user_author);
print $userfee->getNomUrl(1); print $userfee->getNomUrl(1);
print '</td></tr>'; print '</td></tr>';
if ($object->fk_c_expensereport_statuts==6) if ($object->fk_statut==6)
{ {
print '<tr>'; print '<tr>';
print '<td>'.$langs->trans("AUTHORPAIEMENT").'</td>'; print '<td>'.$langs->trans("AUTHORPAIEMENT").'</td>';
@ -1437,7 +1437,7 @@ else
print '<td>'.$langs->trans("DATE_SAVE").'</td>'; print '<td>'.$langs->trans("DATE_SAVE").'</td>';
print '<td>'.dol_print_date($object->date_create,'dayhour').'</td></tr>'; print '<td>'.dol_print_date($object->date_create,'dayhour').'</td></tr>';
print '</tr>'; print '</tr>';
if($object->fk_c_expensereport_statuts==6) if($object->fk_statut==6)
{ {
print '<tr>'; print '<tr>';
print '<td>'.$langs->trans("AUTHORPAIEMENT").'</td>'; print '<td>'.$langs->trans("AUTHORPAIEMENT").'</td>';
@ -1452,7 +1452,7 @@ else
print '</tr>'; print '</tr>';
} }
if($object->fk_c_expensereport_statuts<3) // informed if($object->fk_statut<3) // informed
{ {
print '<tr>'; print '<tr>';
print '<td>'.$langs->trans("VALIDATOR").'</td>'; print '<td>'.$langs->trans("VALIDATOR").'</td>';
@ -1465,7 +1465,7 @@ else
} }
print '</td></tr>'; print '</td></tr>';
} }
elseif($object->fk_c_expensereport_statuts==4) elseif($object->fk_statut==4)
{ {
print '<tr>'; print '<tr>';
print '<td>'.$langs->trans("CANCEL_USER").'</span></td>'; print '<td>'.$langs->trans("CANCEL_USER").'</span></td>';
@ -1504,7 +1504,7 @@ else
print '</tr>'; print '</tr>';
} }
if($object->fk_c_expensereport_statuts==99 || !empty($object->detail_refuse)) if($object->fk_statut==99 || !empty($object->detail_refuse))
{ {
print '<tr>'; print '<tr>';
print '<td>'.$langs->trans("REFUSEUR").'</td>'; print '<td>'.$langs->trans("REFUSEUR").'</td>';
@ -1529,9 +1529,9 @@ else
$sql.= ' fde.fk_c_tva as vatrate, fde.comments, fde.qty, fde.value_unit, fde.total_ht, fde.total_tva, fde.total_ttc,'; $sql.= ' fde.fk_c_tva as vatrate, fde.comments, fde.qty, fde.value_unit, fde.total_ht, fde.total_tva, fde.total_ttc,';
$sql.= ' ctf.code as type_fees_code, ctf.label as type_fees_libelle,'; $sql.= ' ctf.code as type_fees_code, ctf.label as type_fees_libelle,';
$sql.= ' pjt.rowid as projet_id, pjt.title as projet_title, pjt.ref as projet_ref'; $sql.= ' pjt.rowid as projet_id, pjt.title as projet_title, pjt.ref as projet_ref';
$sql.= ' FROM '.MAIN_DB_PREFIX.'expensereport_det fde'; $sql.= ' FROM '.MAIN_DB_PREFIX.'expensereport_det as fde';
$sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_fees ctf ON fde.fk_c_type_fees=ctf.id'; $sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_fees as ctf ON fde.fk_c_type_fees=ctf.id';
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet pjt ON fde.fk_projet=pjt.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet as pjt ON fde.fk_projet=pjt.rowid';
$sql.= ' WHERE fde.fk_expensereport = '.$id; $sql.= ' WHERE fde.fk_expensereport = '.$id;
$resql = $db->query($sql); $resql = $db->query($sql);
@ -1566,7 +1566,7 @@ else
print '<td style="text-align:right;">'.$langs->trans('AmountTTC').'</td>'; print '<td style="text-align:right;">'.$langs->trans('AmountTTC').'</td>';
} }
// Ajout des boutons de modification/suppression // Ajout des boutons de modification/suppression
if ($object->fk_c_expensereport_statuts < 2 || $object->fk_c_expensereport_statuts==99) if ($object->fk_statut < 2 || $object->fk_statut==99)
{ {
print '<td style="text-align:right;"></td>'; print '<td style="text-align:right;"></td>';
} }
@ -1609,7 +1609,7 @@ else
} }
// Ajout des boutons de modification/suppression // Ajout des boutons de modification/suppression
if($object->fk_c_expensereport_statuts<2 OR $object->fk_c_expensereport_statuts==99) if($object->fk_statut<2 OR $object->fk_statut==99)
{ {
print '<td style="text-align:right;" class="nowrap">'; print '<td style="text-align:right;" class="nowrap">';
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=editline&amp;rowid='.$objp->rowid.'#'.$objp->rowid.'">'; print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=editline&amp;rowid='.$objp->rowid.'#'.$objp->rowid.'">';
@ -1689,7 +1689,7 @@ else
//print '</div>'; //print '</div>';
// Add a line // Add a line
if (($object->fk_c_expensereport_statuts==0 || $object->fk_c_expensereport_statuts==99) && $action != 'editline') if (($object->fk_statut==0 || $object->fk_statut==99) && $action != 'editline')
{ {
print_fiche_titre($langs->trans("AddLine"),'',''); print_fiche_titre($langs->trans("AddLine"),'','');
@ -1712,17 +1712,17 @@ else
print '<tr>'; print '<tr>';
// Sélection date // Select date
print '<td style="text-align:center;">'; print '<td style="text-align:center;">';
$form->select_date($date?$date:-1,'date'); $form->select_date($date?$date:-1,'date');
print '</td>'; print '</td>';
// Sélection projet // Select project
print '<td>'; print '<td>';
$formproject->select_projects(-1, GETPOST('fk_projet'), 'fk_projet', 0, 0, 1, 1); $formproject->select_projects(-1, GETPOST('fk_projet'), 'fk_projet', 0, 0, 1, 1);
print '</td>'; print '</td>';
// Sélection type // Select type
print '<td>'; print '<td>';
select_type_fees_id(GETPOST('fk_c_type_fees'),'fk_c_type_fees',1); select_type_fees_id(GETPOST('fk_c_type_fees'),'fk_c_type_fees',1);
print '</td>'; print '</td>';
@ -1732,7 +1732,7 @@ else
print '<textarea class="flat_ndf centpercent" name="comments">'.GETPOST('comments').'</textarea>'; print '<textarea class="flat_ndf centpercent" name="comments">'.GETPOST('comments').'</textarea>';
print '</td>'; print '</td>';
// Sélection TVA // Select VAT
print '<td style="text-align:right;">'; print '<td style="text-align:right;">';
$defaultvat=-1; $defaultvat=-1;
if (! empty($conf->global->EXPENSEREPORT_NO_DEFAULT_VAT)) $conf->global->MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS = 'none'; if (! empty($conf->global->EXPENSEREPORT_NO_DEFAULT_VAT)) $conf->global->MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS = 'none';
@ -1747,7 +1747,7 @@ else
print '<input type="text" size="6" name="value_unit" value="'.GETPOST('value_unit').'">'; print '<input type="text" size="6" name="value_unit" value="'.GETPOST('value_unit').'">';
print '</td>'; print '</td>';
// Quantité // Quantity
print '<td style="text-align:right;">'; print '<td style="text-align:right;">';
print '<input type="text" size="4" name="qty" value="'.GETPOST('qty').'">'; print '<input type="text" size="4" name="qty" value="'.GETPOST('qty').'">';
print '</td>'; print '</td>';
@ -1799,7 +1799,7 @@ if ($action != 'create' && $action != 'edit')
* ET fk_user_author == user courant * ET fk_user_author == user courant
* Afficher : "Enregistrer" / "Modifier" / "Supprimer" * Afficher : "Enregistrer" / "Modifier" / "Supprimer"
*/ */
if ($user->rights->expensereport->creer && $object->fk_c_expensereport_statuts==0) if ($user->rights->expensereport->creer && $object->fk_statut==0)
{ {
if ($object->fk_user_author == $user->id) if ($object->fk_user_author == $user->id)
{ {
@ -1825,7 +1825,7 @@ if ($action != 'create' && $action != 'edit')
* ET fk_user_author == user courant * ET fk_user_author == user courant
* Afficher : "Enregistrer" / "Modifier" / "Supprimer" * Afficher : "Enregistrer" / "Modifier" / "Supprimer"
*/ */
if($user->rights->expensereport->creer && $object->fk_c_expensereport_statuts==99) if($user->rights->expensereport->creer && $object->fk_statut==99)
{ {
if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid) if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid)
{ {
@ -1845,7 +1845,7 @@ if ($action != 'create' && $action != 'edit')
} }
} }
if ($user->rights->expensereport->to_paid && $object->fk_c_expensereport_statuts==5) if ($user->rights->expensereport->to_paid && $object->fk_statut==5)
{ {
if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid) if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid)
{ {
@ -1859,7 +1859,7 @@ if ($action != 'create' && $action != 'edit')
* ET fk_user_validator == user courant * ET fk_user_validator == user courant
* Afficher : "Valider" / "Refuser" / "Supprimer" * Afficher : "Valider" / "Refuser" / "Supprimer"
*/ */
if ($object->fk_c_expensereport_statuts == 2) if ($object->fk_statut == 2)
{ {
if ($object->fk_user_author == $user->id) if ($object->fk_user_author == $user->id)
{ {
@ -1868,7 +1868,7 @@ if ($action != 'create' && $action != 'edit')
} }
} }
if ($user->rights->expensereport->approve && $object->fk_c_expensereport_statuts == 2) if ($user->rights->expensereport->approve && $object->fk_statut == 2)
{ {
//if($object->fk_user_validator==$user->id) //if($object->fk_user_validator==$user->id)
//{ //{
@ -1895,7 +1895,7 @@ if ($action != 'create' && $action != 'edit')
* ET user à droit de "to_paid" * ET user à droit de "to_paid"
* Afficher : "Annuler" / "Payer" / "Supprimer" * Afficher : "Annuler" / "Payer" / "Supprimer"
*/ */
if ($user->rights->expensereport->to_paid && $object->fk_c_expensereport_statuts == 5) if ($user->rights->expensereport->to_paid && $object->fk_statut == 5)
{ {
// Payer // Payer
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=paid&id='.$id.'">'.$langs->trans('TO_PAID').'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=paid&id='.$id.'">'.$langs->trans('TO_PAID').'</a>';
@ -1918,7 +1918,7 @@ if ($action != 'create' && $action != 'edit')
* ET user à droit "to_paid" * ET user à droit "to_paid"
* Afficher : "Annuler" * Afficher : "Annuler"
*/ */
if ($user->rights->expensereport->approve && $user->rights->expensereport->to_paid && $object->fk_c_expensereport_statuts==6) if ($user->rights->expensereport->approve && $user->rights->expensereport->to_paid && $object->fk_statut==6)
{ {
// Annuler // Annuler
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=cancel&id='.$id.'">'.$langs->trans('Cancel').'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=cancel&id='.$id.'">'.$langs->trans('Cancel').'</a>';
@ -1933,7 +1933,7 @@ if ($action != 'create' && $action != 'edit')
* ET user à droit "supprimer" * ET user à droit "supprimer"
* Afficher : "Supprimer" * Afficher : "Supprimer"
*/ */
if ($user->rights->expensereport->supprimer && $object->fk_c_expensereport_statuts==4) if ($user->rights->expensereport->supprimer && $object->fk_statut==4)
{ {
if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid) if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid)
@ -1959,7 +1959,7 @@ print '<div style="width:50%">';
/* /*
* Documents generes * Documents generes
*/ */
if($user->rights->expensereport->export && $object->fk_c_expensereport_statuts>0 && $action != 'edit') if($user->rights->expensereport->export && $object->fk_statut>0 && $action != 'edit')
{ {
$filename = dol_sanitizeFileName($object->ref); $filename = dol_sanitizeFileName($object->ref);
$filedir = $conf->expensereport->dir_output . "/" . dol_sanitizeFileName($object->ref); $filedir = $conf->expensereport->dir_output . "/" . dol_sanitizeFileName($object->ref);

View File

@ -1,5 +1,22 @@
<?php <?php
require_once(DOL_DOCUMENT_ROOT ."/core/class/commonobject.class.php"); /* Copyright (C) 2011 Dimitri Mouillard <dmouillard@teclib.com>
* Copyright (C) 2015 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/>.
*/
require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
/** /**
* Class to manage Trips and Expenses * Class to manage Trips and Expenses
@ -26,7 +43,7 @@ class ExpenseReport extends CommonObject
var $fk_user_validator; var $fk_user_validator;
var $status; var $status;
var $fk_c_expensereport_statuts; // -- 1=draft, 2=validated (attente approb), 4=canceled, 5=approved, 6=payed, 99=denied var $fk_statut; // -- 1=draft, 2=validated (attente approb), 4=canceled, 5=approved, 6=payed, 99=denied
var $fk_c_paiement; var $fk_c_paiement;
var $user_author_infos; var $user_author_infos;
@ -133,7 +150,7 @@ class ExpenseReport extends CommonObject
$sql.= ",date_create"; $sql.= ",date_create";
$sql.= ",fk_user_author"; $sql.= ",fk_user_author";
$sql.= ",fk_user_validator"; $sql.= ",fk_user_validator";
$sql.= ",fk_c_expensereport_statuts"; $sql.= ",fk_statut";
$sql.= ",fk_c_paiement"; $sql.= ",fk_c_paiement";
$sql.= ",note_public"; $sql.= ",note_public";
$sql.= ",note_private"; $sql.= ",note_private";
@ -147,7 +164,7 @@ class ExpenseReport extends CommonObject
$sql.= ", '".$this->db->idate($now)."'"; $sql.= ", '".$this->db->idate($now)."'";
$sql.= ", ".($user->id > 0 ? $user->id:"null"); $sql.= ", ".($user->id > 0 ? $user->id:"null");
$sql.= ", ".($this->fk_user_validator > 0 ? $this->fk_user_validator:"null"); $sql.= ", ".($this->fk_user_validator > 0 ? $this->fk_user_validator:"null");
$sql.= ", ".($this->fk_c_expensereport_statuts > 1 ? $this->fk_c_expensereport_statuts:0); $sql.= ", ".($this->fk_statut > 1 ? $this->fk_statut:0);
$sql.= ", ".($this->fk_c_paiement > 0 ? $this->fk_c_paiement:"null"); $sql.= ", ".($this->fk_c_paiement > 0 ? $this->fk_c_paiement:"null");
$sql.= ", ".($this->note_public?"'".$this->db->escape($this->note_public)."'":"null"); $sql.= ", ".($this->note_public?"'".$this->db->escape($this->note_public)."'":"null");
$sql.= ", ".($this->note_private?"'".$this->db->escape($this->note_private)."'":"null"); $sql.= ", ".($this->note_private?"'".$this->db->escape($this->note_private)."'":"null");
@ -231,7 +248,7 @@ class ExpenseReport extends CommonObject
$sql.= " , fk_user_validator = ".($this->fk_user_validator > 0 ? $this->fk_user_validator:"null"); $sql.= " , fk_user_validator = ".($this->fk_user_validator > 0 ? $this->fk_user_validator:"null");
$sql.= " , fk_user_valid = ".($this->fk_user_valid > 0 ? $this->fk_user_valid:"null"); $sql.= " , fk_user_valid = ".($this->fk_user_valid > 0 ? $this->fk_user_valid:"null");
$sql.= " , fk_user_paid = ".($this->fk_user_paid > 0 ? $this->fk_user_paid:"null"); $sql.= " , fk_user_paid = ".($this->fk_user_paid > 0 ? $this->fk_user_paid:"null");
$sql.= " , fk_c_expensereport_statuts = ".($this->fk_c_expensereport_statuts >= 0 ? $this->fk_c_expensereport_statuts:'0'); $sql.= " , fk_statut = ".($this->fk_statut >= 0 ? $this->fk_statut:'0');
$sql.= " , fk_c_paiement = ".($this->fk_c_paiement > 0 ? $this->fk_c_paiement:"null"); $sql.= " , fk_c_paiement = ".($this->fk_c_paiement > 0 ? $this->fk_c_paiement:"null");
$sql.= " , note_public = ".(!empty($this->note_public)?"'".$this->db->escape($this->note_public)."'":"''"); $sql.= " , note_public = ".(!empty($this->note_public)?"'".$this->db->escape($this->note_public)."'":"''");
$sql.= " , note_private = ".(!empty($this->note_private)?"'".$this->db->escape($this->note_private)."'":"''"); $sql.= " , note_private = ".(!empty($this->note_private)?"'".$this->db->escape($this->note_private)."'":"''");
@ -267,10 +284,10 @@ class ExpenseReport extends CommonObject
$sql.= " d.date_refuse, d.date_cancel,"; // ACTIONS $sql.= " d.date_refuse, d.date_cancel,"; // ACTIONS
$sql.= " d.total_ht, d.total_ttc, d.total_tva,"; // TOTAUX (int) $sql.= " d.total_ht, d.total_ttc, d.total_tva,"; // TOTAUX (int)
$sql.= " d.date_debut, d.date_fin, d.date_create, d.date_valid, d.date_approve, d.date_paiement,"; // DATES (datetime) $sql.= " d.date_debut, d.date_fin, d.date_create, d.date_valid, d.date_approve, d.date_paiement,"; // DATES (datetime)
$sql.= " d.fk_user_author, d.fk_user_validator, d.fk_c_expensereport_statuts as status, d.fk_c_paiement,"; $sql.= " d.fk_user_author, d.fk_user_validator, d.fk_statut as status, d.fk_c_paiement,";
$sql.= " d.fk_user_valid, d.fk_user_approve, d.fk_user_paid,"; $sql.= " d.fk_user_valid, d.fk_user_approve, d.fk_user_paid,";
$sql.= " dp.libelle as libelle_paiement, dp.code as code_paiement"; // INNER JOIN paiement $sql.= " dp.libelle as libelle_paiement, dp.code as code_paiement"; // INNER JOIN paiement
$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." d LEFT JOIN ".MAIN_DB_PREFIX."c_paiement dp ON d.fk_c_paiement = dp.id"; $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as d LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as dp ON d.fk_c_paiement = dp.id";
if ($ref) $sql.= " WHERE d.ref = '".$this->db->escape($ref)."'"; if ($ref) $sql.= " WHERE d.ref = '".$this->db->escape($ref)."'";
else $sql.= " WHERE d.rowid = ".$id; else $sql.= " WHERE d.rowid = ".$id;
$sql.= $restrict; $sql.= $restrict;
@ -318,18 +335,18 @@ class ExpenseReport extends CommonObject
if ($this->fk_user_validator > 0) $user_approver->fetch($this->fk_user_validator); if ($this->fk_user_validator > 0) $user_approver->fetch($this->fk_user_validator);
$this->user_validator_infos = dolGetFirstLastname($user_approver->firstname, $user_approver->lastname); $this->user_validator_infos = dolGetFirstLastname($user_approver->firstname, $user_approver->lastname);
$this->fk_c_expensereport_statuts = $obj->status; $this->fk_statut = $obj->status;
$this->status = $obj->status; $this->status = $obj->status;
$this->fk_c_paiement = $obj->fk_c_paiement; $this->fk_c_paiement = $obj->fk_c_paiement;
if ($this->fk_c_expensereport_statuts==5 || $this->fk_c_expensereport_statuts==6) if ($this->fk_statut==5 || $this->fk_statut==6)
{ {
$user_valid = new User($this->db); $user_valid = new User($this->db);
if ($this->fk_user_valid > 0) $user_valid->fetch($this->fk_user_valid); if ($this->fk_user_valid > 0) $user_valid->fetch($this->fk_user_valid);
$this->user_valid_infos = dolGetFirstLastname($user_valid->firstname, $user_valid->lastname); $this->user_valid_infos = dolGetFirstLastname($user_valid->firstname, $user_valid->lastname);
} }
if ($this->fk_c_expensereport_statuts==6) if ($this->fk_statut==6)
{ {
$user_paid = new User($this->db); $user_paid = new User($this->db);
if ($this->fk_user_paid > 0) $user_paid->fetch($this->fk_user_paid); if ($this->fk_user_paid > 0) $user_paid->fetch($this->fk_user_paid);
@ -497,7 +514,7 @@ class ExpenseReport extends CommonObject
$this->date_approve = $now; $this->date_approve = $now;
$this->status = 5; $this->status = 5;
$this->fk_c_expensereport_statuts = 5; $this->fk_statut = 5;
$this->fk_user_author = $user->id; $this->fk_user_author = $user->id;
$this->fk_user_valid = $user->id; $this->fk_user_valid = $user->id;
@ -567,7 +584,7 @@ class ExpenseReport extends CommonObject
$objp = $db->fetch_object($result); $objp = $db->fetch_object($result);
$sql2 = "SELECT d.rowid, d.fk_user_author, d.ref, d.fk_c_expensereport_statuts"; $sql2 = "SELECT d.rowid, d.fk_user_author, d.ref, d.fk_statut";
$sql2.= " FROM ".MAIN_DB_PREFIX."expensereport as d"; $sql2.= " FROM ".MAIN_DB_PREFIX."expensereport as d";
$sql2.= " WHERE d.rowid = '".$objp->fk_expensereport."'"; $sql2.= " WHERE d.rowid = '".$objp->fk_expensereport."'";
@ -576,7 +593,7 @@ class ExpenseReport extends CommonObject
$objp->fk_user_author = $obj->fk_user_author; $objp->fk_user_author = $obj->fk_user_author;
$objp->ref = $obj->ref; $objp->ref = $obj->ref;
$objp->fk_c_expensereport_status = $obj->fk_c_expensereport_statuts; $objp->fk_c_expensereport_status = $obj->fk_statut;
$objp->rowid = $obj->rowid; $objp->rowid = $obj->rowid;
$total_HT = $total_HT + $objp->total_ht; $total_HT = $total_HT + $objp->total_ht;
@ -707,8 +724,8 @@ class ExpenseReport extends CommonObject
$sql.= ' ctf.code as code_type_fees, ctf.label as libelle_type_fees,'; $sql.= ' ctf.code as code_type_fees, ctf.label as libelle_type_fees,';
$sql.= ' p.ref as ref_projet, p.title as title_projet'; $sql.= ' p.ref as ref_projet, p.title as title_projet';
$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line.' as de'; $sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line.' as de';
$sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_fees ctf ON de.fk_c_type_fees = ctf.id'; $sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_fees as ctf ON de.fk_c_type_fees = ctf.id';
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet p ON de.fk_projet = p.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet as p ON de.fk_projet = p.rowid';
$sql.= ' WHERE de.'.$this->fk_element.' = '.$this->id; $sql.= ' WHERE de.'.$this->fk_element.' = '.$this->id;
dol_syslog('ExpenseReport::fetch_lines sql='.$sql, LOG_DEBUG); dol_syslog('ExpenseReport::fetch_lines sql='.$sql, LOG_DEBUG);
@ -831,10 +848,10 @@ class ExpenseReport extends CommonObject
$this->ref = strtoupper($user->login).$expld_car.$prefix.$this->ref.$expld_car.dol_print_date($this->date_debut,'%y%m%d'); $this->ref = strtoupper($user->login).$expld_car.$prefix.$this->ref.$expld_car.dol_print_date($this->date_debut,'%y%m%d');
} }
if ($this->fk_c_expensereport_statuts != 2) if ($this->fk_statut != 2)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
$sql.= " SET ref = '".$this->ref."', fk_c_expensereport_statuts = 2, fk_user_valid = ".$user->id.","; $sql.= " SET ref = '".$this->ref."', fk_statut = 2, fk_user_valid = ".$user->id.",";
$sql.= " ref_number_int = ".$ref_number_int; $sql.= " ref_number_int = ".$ref_number_int;
$sql.= ' WHERE rowid = '.$this->id; $sql.= ' WHERE rowid = '.$this->id;
@ -877,10 +894,10 @@ class ExpenseReport extends CommonObject
$this->date_debut = $this->db->jdate($objp->date_debut); $this->date_debut = $this->db->jdate($objp->date_debut);
if ($this->fk_c_expensereport_statuts != 2) if ($this->fk_statut != 2)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
$sql.= " SET fk_c_expensereport_statuts = 2"; $sql.= " SET fk_statut = 2";
$sql.= ' WHERE rowid = '.$this->id; $sql.= ' WHERE rowid = '.$this->id;
dol_syslog(get_class($this)."::set_save_from_refuse sql=".$sql, LOG_DEBUG); dol_syslog(get_class($this)."::set_save_from_refuse sql=".$sql, LOG_DEBUG);
@ -913,10 +930,10 @@ class ExpenseReport extends CommonObject
// date approval // date approval
$this->date_approve = $this->db->idate($now); $this->date_approve = $this->db->idate($now);
if ($this->fk_c_expensereport_statuts != 5) if ($this->fk_statut != 5)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
$sql.= " SET ref = '".$this->ref."', fk_c_expensereport_statuts = 5, fk_user_approve = ".$user->id.","; $sql.= " SET ref = '".$this->ref."', fk_statut = 5, fk_user_approve = ".$user->id.",";
$sql.= " date_approve='".$this->date_approve."'"; $sql.= " date_approve='".$this->date_approve."'";
$sql.= ' WHERE rowid = '.$this->id; $sql.= ' WHERE rowid = '.$this->id;
if ($this->db->query($sql)) if ($this->db->query($sql))
@ -946,17 +963,17 @@ class ExpenseReport extends CommonObject
$now = dol_now(); $now = dol_now();
// date de refus // date de refus
if ($this->fk_c_expensereport_statuts != 99) if ($this->fk_statut != 99)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
$sql.= " SET ref = '".$this->ref."', fk_c_expensereport_statuts = 99, fk_user_refuse = ".$user->id.","; $sql.= " SET ref = '".$this->ref."', fk_statut = 99, fk_user_refuse = ".$user->id.",";
$sql.= " date_refuse='".$this->db->idate($now)."',"; $sql.= " date_refuse='".$this->db->idate($now)."',";
$sql.= " detail_refuse='".$this->db->escape($details)."'"; $sql.= " detail_refuse='".$this->db->escape($details)."'";
$sql.= " fk_user_approve=NULL,"; $sql.= " fk_user_approve=NULL,";
$sql.= ' WHERE rowid = '.$this->id; $sql.= ' WHERE rowid = '.$this->id;
if ($this->db->query($sql)) if ($this->db->query($sql))
{ {
$this->fk_c_expensereport_statuts = 99; $this->fk_statut = 99;
$this->fk_user_refuse = $user->id; $this->fk_user_refuse = $user->id;
$this->detail_refuse = $details; $this->detail_refuse = $details;
$this->date_refuse = $now; $this->date_refuse = $now;
@ -985,10 +1002,10 @@ class ExpenseReport extends CommonObject
$now= dol_now(); $now= dol_now();
$this->date_paiement = $this->db->idate($now); $this->date_paiement = $this->db->idate($now);
if ($this->fk_c_expensereport_statuts != 6) if ($this->fk_statut != 6)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
$sql.= " SET fk_c_expensereport_statuts = 6, fk_user_paid = ".$user->id.","; $sql.= " SET fk_statut = 6, fk_user_paid = ".$user->id.",";
$sql.= " date_paiement='".$this->db->idate($this->date_paiement)."'"; $sql.= " date_paiement='".$this->db->idate($this->date_paiement)."'";
$sql.= ' WHERE rowid = '.$this->id; $sql.= ' WHERE rowid = '.$this->id;
@ -1020,7 +1037,7 @@ class ExpenseReport extends CommonObject
if ($this->fk_c_deplacement_statuts != 5) if ($this->fk_c_deplacement_statuts != 5)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
$sql.= " SET fk_c_expensereport_statuts = 5"; $sql.= " SET fk_statut = 5";
$sql.= ' WHERE rowid = '.$this->id; $sql.= ' WHERE rowid = '.$this->id;
dol_syslog(get_class($this)."::set_unpaid sql=".$sql, LOG_DEBUG); dol_syslog(get_class($this)."::set_unpaid sql=".$sql, LOG_DEBUG);
@ -1048,10 +1065,10 @@ class ExpenseReport extends CommonObject
function set_cancel($user,$detail) function set_cancel($user,$detail)
{ {
$this->date_cancel = $this->db->idate(gmmktime()); $this->date_cancel = $this->db->idate(gmmktime());
if ($this->fk_c_expensereport_statuts != 4) if ($this->fk_statut != 4)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
$sql.= " SET fk_c_expensereport_statuts = 4, fk_user_cancel = ".$user->id; $sql.= " SET fk_statut = 4, fk_user_cancel = ".$user->id;
$sql.= ", date_cancel='".$this->date_cancel."'"; $sql.= ", date_cancel='".$this->date_cancel."'";
$sql.= " ,detail_cancel='".$this->db->escape($detail)."'"; $sql.= " ,detail_cancel='".$this->db->escape($detail)."'";
$sql.= ' WHERE rowid = '.$this->id; $sql.= ' WHERE rowid = '.$this->id;
@ -1180,13 +1197,13 @@ class ExpenseReport extends CommonObject
function updateline($rowid, $type_fees_id, $projet_id, $c_tva, $comments, $qty, $value_unit, $date, $expensereport_id) function updateline($rowid, $type_fees_id, $projet_id, $c_tva, $comments, $qty, $value_unit, $date, $expensereport_id)
{ {
if ($this->fk_c_expensereport_statuts==0 || $this->fk_c_expensereport_statuts==99) if ($this->fk_statut==0 || $this->fk_statut==99)
{ {
$this->db->begin(); $this->db->begin();
// Select du taux de tva par rapport au code // Select du taux de tva par rapport au code
$sql = "SELECT t.taux as taux_tva"; $sql = "SELECT t.taux as taux_tva";
$sql.= " FROM ".MAIN_DB_PREFIX."c_tva t"; $sql.= " FROM ".MAIN_DB_PREFIX."c_tva as t";
$sql.= " WHERE t.rowid = ".$c_tva; $sql.= " WHERE t.rowid = ".$c_tva;
$result = $this->db->query($sql); $result = $this->db->query($sql);
$objp_tva = $this->db->fetch_object($result); $objp_tva = $this->db->fetch_object($result);
@ -1222,7 +1239,7 @@ class ExpenseReport extends CommonObject
// Select des infos sur le type fees // Select des infos sur le type fees
$sql = "SELECT c.code as code_type_fees, c.label as libelle_type_fees"; $sql = "SELECT c.code as code_type_fees, c.label as libelle_type_fees";
$sql.= " FROM ".MAIN_DB_PREFIX."c_type_fees c"; $sql.= " FROM ".MAIN_DB_PREFIX."c_type_fees as c";
$sql.= " WHERE c.id = ".$type_fees_id; $sql.= " WHERE c.id = ".$type_fees_id;
$result = $this->db->query($sql); $result = $this->db->query($sql);
$objp_fees = $this->db->fetch_object($result); $objp_fees = $this->db->fetch_object($result);
@ -1231,7 +1248,7 @@ class ExpenseReport extends CommonObject
// Select des informations du projet // Select des informations du projet
$sql = "SELECT p.ref as ref_projet, p.title as title_projet"; $sql = "SELECT p.ref as ref_projet, p.title as title_projet";
$sql.= " FROM ".MAIN_DB_PREFIX."projet p"; $sql.= " FROM ".MAIN_DB_PREFIX."projet as p";
$sql.= " WHERE p.rowid = ".$projet_id; $sql.= " WHERE p.rowid = ".$projet_id;
$result = $this->db->query($sql); $result = $this->db->query($sql);
$objp_projet = $this->db->fetch_object($result); $objp_projet = $this->db->fetch_object($result);
@ -1403,6 +1420,39 @@ class ExpenseReport extends CommonObject
return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref); return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
} }
/**
* List of types
*
* @param int $active Active or not
* @return array
*/
function listOfTypes($active=1)
{
global $langs;
$ret=array();
$sql = "SELECT id, code, label";
$sql.= " FROM ".MAIN_DB_PREFIX."c_type_fees";
$sql.= " WHERE active = ".$active;
dol_syslog(get_class($this)."::listOfTypes", LOG_DEBUG);
$result = $this->db->query($sql);
if ( $result )
{
$num = $this->db->num_rows($result);
$i=0;
while ($i < $num)
{
$obj = $this->db->fetch_object($result);
$ret[$obj->code]=(($langs->trans($obj->code)!=$obj->code)?$langs->trans($obj->code):$obj->label);
$i++;
}
}
else
{
dol_print_error($this->db);
}
return $ret;
}
} }
@ -1460,9 +1510,9 @@ class ExpenseReportLine
$sql.= ' fde.fk_c_tva as tva_taux, fde.comments, fde.qty, fde.value_unit, fde.total_ht, fde.total_tva, fde.total_ttc,'; $sql.= ' fde.fk_c_tva as tva_taux, fde.comments, fde.qty, fde.value_unit, fde.total_ht, fde.total_tva, fde.total_ttc,';
$sql.= ' ctf.code as type_fees_code, ctf.label as type_fees_libelle,'; $sql.= ' ctf.code as type_fees_code, ctf.label as type_fees_libelle,';
$sql.= ' pjt.rowid as projet_id, pjt.title as projet_title, pjt.ref as projet_ref'; $sql.= ' pjt.rowid as projet_id, pjt.title as projet_title, pjt.ref as projet_ref';
$sql.= ' FROM '.MAIN_DB_PREFIX.'expensereport_det fde'; $sql.= ' FROM '.MAIN_DB_PREFIX.'expensereport_det as fde';
$sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_fees ctf ON fde.fk_c_type_fees=ctf.id'; $sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_fees as ctf ON fde.fk_c_type_fees=ctf.id';
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet pjt ON fde.fk_projet=pjt.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet as pjt ON fde.fk_projet=pjt.rowid';
$sql.= ' WHERE fde.rowid = '.$rowid; $sql.= ' WHERE fde.rowid = '.$rowid;
$result = $this->db->query($sql); $result = $this->db->query($sql);
@ -1643,7 +1693,7 @@ class ExpenseReportLine
* @param int $useempty 1=Add empty line * @param int $useempty 1=Add empty line
* @return string HTML select with sattus * @return string HTML select with sattus
*/ */
function select_expensereport_statut($selected='',$htmlname='fk_c_expensereport_statuts',$useempty=1) function select_expensereport_statut($selected='',$htmlname='fk_statut',$useempty=1)
{ {
global $db; global $db;
@ -1708,4 +1758,4 @@ function select_type_fees_id($selected='',$htmlname='type',$showempty=0)
} }
} }
print '</select>'; print '</select>';
} }

View File

@ -19,11 +19,11 @@
/** /**
* \file htdocs/expensereport/class/expensereportstats.class.php * \file htdocs/expensereport/class/expensereportstats.class.php
* \ingroup factures * \ingroup ExpenseReport
* \brief Fichier de la classe de gestion des stats des expensereport et notes de frais * \brief Fichier de la classe de gestion des stats des expensereport et notes de frais
*/ */
include_once DOL_DOCUMENT_ROOT . '/core/class/stats.class.php'; include_once DOL_DOCUMENT_ROOT . '/core/class/stats.class.php';
dol_include_once('/expensereport/class/expensereport.class.php'); include_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
/** /**
* Classe permettant la gestion des stats des expensereports et notes de frais * Classe permettant la gestion des stats des expensereports et notes de frais
@ -59,7 +59,7 @@ class ExpenseReportStats extends Stats
$this->from = MAIN_DB_PREFIX.$object->table_element; $this->from = MAIN_DB_PREFIX.$object->table_element;
$this->field='total_ht'; $this->field='total_ht';
$this->where = " fk_c_expensereport_statuts > 0 and date_valid > '2000-01-01'"; $this->where = " fk_statut > 0 and date_valid > '2000-01-01'";
//$this->where.= " AND entity = ".$conf->entity; //$this->where.= " AND entity = ".$conf->entity;
if ($this->socid) if ($this->socid)
{ {

View File

View File

@ -21,8 +21,8 @@
*/ */
require '../main.inc.php'; require '../main.inc.php';
require_once(DOL_DOCUMENT_ROOT."/core/class/html.formfile.class.php"); require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php';
dol_include_once("/expensereport/class/expensereport.class.php"); require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
$langs->load("users"); $langs->load("users");
$langs->load("trips"); $langs->load("trips");

View File

View File

@ -25,8 +25,8 @@
*/ */
require '../main.inc.php'; require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php';
dol_include_once("/expensereport/class/expensereport.class.php"); require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
$langs->load("companies"); $langs->load("companies");
$langs->load("users"); $langs->load("users");
@ -111,8 +111,7 @@ print '<tr class="liste_titre">';
print '<td colspan="4">'.$langs->trans("Statistics").'</td>'; print '<td colspan="4">'.$langs->trans("Statistics").'</td>';
print "</tr>\n"; print "</tr>\n";
//$listoftype=$tripandexpense_static->listOfTypes(); $listoftype=$tripandexpense_static->listOfTypes();
$listoftype=$label;
foreach ($listoftype as $code => $label) foreach ($listoftype as $code => $label)
{ {
$dataseries[]=array('label'=>$label,'data'=>(isset($somme[$code])?(int) $somme[$code]:0)); $dataseries[]=array('label'=>$label,'data'=>(isset($somme[$code])?(int) $somme[$code]:0));
@ -143,7 +142,7 @@ $max=10;
$langs->load("boxes"); $langs->load("boxes");
$sql = "SELECT u.rowid as uid, u.lastname, u.firstname, d.rowid, d.date_debut as dated, d.date_fin as datef, d.date_create as dm, d.total_ht, d.total_ttc, d.fk_c_expensereport_statuts as fk_status"; $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, d.rowid, d.date_debut as dated, d.date_fin as datef, d.date_create as dm, d.total_ht, d.total_ttc, d.fk_statut as fk_status";
$sql.= " FROM ".MAIN_DB_PREFIX."expensereport as d, ".MAIN_DB_PREFIX."user as u"; $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as d, ".MAIN_DB_PREFIX."user as u";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc"; if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= " WHERE u.rowid = d.fk_user_author"; $sql.= " WHERE u.rowid = d.fk_user_author";
@ -187,8 +186,8 @@ if ($result)
print '<tr '.$bc[$var].'>'; print '<tr '.$bc[$var].'>';
print '<td>'.$expensereportstatic->getNomUrl(1).'</td>'; print '<td>'.$expensereportstatic->getNomUrl(1).'</td>';
print '<td>'.$userstatic->getNomUrl(1).'</td>'; print '<td>'.$userstatic->getNomUrl(1).'</td>';
print '<td align="right">'.$obj->total_ht.'</td>'; print '<td align="right">'.price($obj->total_ht).'</td>';
print '<td align="right">'.$obj->total_ttc.'</td>'; print '<td align="right">'.price($obj->total_ttc).'</td>';
print '<td align="right">'.dol_print_date($db->jdate($obj->dm),'day').'</td>'; print '<td align="right">'.dol_print_date($db->jdate($obj->dm),'day').'</td>';
print '<td align="right">'; print '<td align="right">';
//print $obj->libelle; //print $obj->libelle;

View File

@ -21,12 +21,13 @@
/** /**
* \file htdocs/expensereport/index.php * \file htdocs/expensereport/index.php
* \brief Page liste des expensereports * \brief list of expense reports
*/ */
require "../main.inc.php"; require "../main.inc.php";
dol_include_once("/expensereport/class/expensereport.class.php"); require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
$langs->load("companies"); $langs->load("companies");
$langs->load("users"); $langs->load("users");
@ -39,7 +40,7 @@ $result = restrictedArea($user, 'expensereport','','');
$search_ref = GETPOST('search_ref'); $search_ref = GETPOST('search_ref');
$search_user = GETPOST('search_user','int'); $search_user = GETPOST('search_user','int');
$search_state = GETPOST('search_state','int'); $search_status = GETPOST('search_status','int');
$month_start = GETPOST("month_start","int"); $month_start = GETPOST("month_start","int");
$year_start = GETPOST("year_start","int"); $year_start = GETPOST("year_start","int");
$month_end = GETPOST("month_end","int"); $month_end = GETPOST("month_end","int");
@ -49,7 +50,7 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both
{ {
$search_ref=""; $search_ref="";
$search_user=""; $search_user="";
$search_state=""; $search_status="";
$month_start=""; $month_start="";
$year_start=""; $year_start="";
$month_end=""; $month_end="";
@ -69,13 +70,12 @@ llxHeader('', $langs->trans("ListOfTrips"));
$max_year = 5; $max_year = 5;
$min_year = 5; $min_year = 5;
$sortorder = $_GET["sortorder"]; $sortorder = GETPOST("sortorder");
$sortfield = $_GET["sortfield"]; $sortfield = GETPOST("sortfield");
$page = $_GET["page"]; $page = GETPOST("page");
if (!$sortorder) $sortorder="DESC"; if (!$sortorder) $sortorder="DESC";
if (!$sortfield) $sortfield="d.date_debut"; if (!$sortfield) $sortfield="d.date_debut";
if ($page == -1) { if ($page == -1) {
$page = 0 ; $page = 0 ;
} }
@ -85,79 +85,53 @@ $offset = $limit * $page;
$pageprev = $page - 1; $pageprev = $page - 1;
$pagenext = $page + 1; $pagenext = $page + 1;
$sql = "SELECT d.rowid, d.ref, d.total_ht, d.total_tva, d.total_ttc, d.fk_c_expensereport_statuts as status,"; $sql = "SELECT d.rowid, d.ref, d.total_ht, d.total_tva, d.total_ttc, d.fk_statut as status,";
$sql.= " d.date_debut, d.date_fin,"; $sql.= " d.date_debut, d.date_fin,";
$sql.= " u.rowid as id_user, u.firstname, u.lastname"; $sql.= " u.rowid as id_user, u.firstname, u.lastname";
$sql.= " FROM ".MAIN_DB_PREFIX."expensereport d\n"; $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as d";
$sql.= " INNER JOIN ".MAIN_DB_PREFIX."user u ON d.fk_user_author = u.rowid\n"; $sql.= " INNER JOIN ".MAIN_DB_PREFIX."user as u ON d.fk_user_author = u.rowid";
// Where
// WHERE
if(!empty($search_ref)){ if(!empty($search_ref)){
$sql.= " WHERE d.ref LIKE '%".$db->escape($search_ref)."%'\n"; $sql.= " WHERE d.ref LIKE '%".$db->escape($search_ref)."%'";
}else{ }else{
$sql.= " WHERE 1 = 1\n"; $sql.= " WHERE 1 = 1";
} }
// DATE START // Date Start
if ($month_start > 0) { if ($month_start > 0)
if ($year_start > 0) { {
if($month_end > 0) { if ($year_start > 0 && empty($day))
if($year_end > 0) { $sql.= " AND d.date_debut BETWEEN '".$db->idate(dol_get_first_day($year_start,$month_start,false))."' AND '".$db->idate(dol_get_last_day($year_start,$month_start,false))."'";
$sql.= " AND date_format(d.date_debut, '%Y-%m') >= '$year_start-$month_start'"; else if ($year_start > 0 && ! empty($day))
$sql.= " AND date_format(d.date_fin, '%Y-%m') <= '$year_end-$month_end'"; $sql.= " AND d.date_debut BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month_start, $day, $year_start))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month_start, $day, $year_start))."'";
} else { else
$sql.= " AND date_format(d.date_debut, '%Y-%m') >= '$year_start-$month_start'"; $sql.= " AND date_format(d.date_debut, '%m') = '".$month_start."'";
$sql.= " AND date_format(d.date_fin, '%m') <= '$month_end'";
}
} else {
if($year_end > 0) {
$sql.= " AND date_format(d.date_debut, '%Y-%m') >= '$year_start-$month_start'";
$sql.= " AND date_format(d.date_fin, '%Y') <= '$year_end'";
} else {
$sql.= " AND date_format(d.date_debut, '%Y-%m') >= '$year_start-$month_start'";
}
}
} else {
$sql.= " AND date_format(d.date_debut, '%m') >= '$month_start'";
}
} else {
if ($year_start > 0) {
if($month_end > 0) {
if($year_end > 0) {
$sql.= " AND date_format(d.date_debut, '%Y') >= '$year_start'";
$sql.= " AND date_format(d.date_fin, '%Y-%m') <= '$year_end-$month_end'";
} else {
$sql.= " AND date_format(d.date_debut, '%Y') >= '$year_start'";
$sql.= " AND date_format(d.date_fin, '%m') <= '$month_end'";
}
} else {
if($year_end > 0) {
$sql.= " AND date_format(d.date_debut, '%Y') >= '$year_start'";
$sql.= " AND date_format(d.date_fin, '%Y') <= '$year_end'";
} else {
$sql.= " AND date_format(d.date_debut, '%Y') >= '$year_start'";
}
}
} else {
if($month_end > 0) {
if($year_end > 0) {
$sql.= " AND date_format(d.date_debut, '%Y') >= '$year_start'";
$sql.= " AND date_format(d.date_fin, '%Y-%m') <= '$year_end-$month_end'";
} else {
$sql.= " AND date_format(d.date_debut, '%Y') >= '$year_start'";
$sql.= " AND date_format(d.date_fin, '%m') <= '$month_end'";
}
} else {
if($year_end > 0) {
$sql.= " AND date_format(d.date_debut, '%Y') >= '$year_start'";
$sql.= " AND date_format(d.date_fin, '%Y') <= '$year_end'";
}
}
}
} }
if (!empty($search_user) && $search_user > 0) $sql.= " AND d.fk_user_author = ".$search_user."\n"; else if ($year_start > 0)
if($search_state != '') $sql.= " AND d.fk_c_expensereport_statuts = '$search_state'\n"; {
$sql.= " AND d.date_debut BETWEEN '".$db->idate(dol_get_first_day($year_start,1,false))."' AND '".$db->idate(dol_get_last_day($year_start,12,false))."'";
}
// Date Start
if ($month_end > 0)
{
if ($year_end > 0 && empty($day))
$sql.= " AND d.date_fin BETWEEN '".$db->idate(dol_get_first_day($year_end,$month_end,false))."' AND '".$db->idate(dol_get_last_day($year_end,$month_end,false))."'";
else if ($year_end > 0 && ! empty($day))
$sql.= " AND d.date_fin BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month_end, $day, $year_end))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month_end, $day, $year_end))."'";
else
$sql.= " AND date_format(d.date_fin, '%m') = '".$month_end."'";
}
else if ($year_end > 0)
{
$sql.= " AND d.date_fin BETWEEN '".$db->idate(dol_get_first_day($year_end,1,false))."' AND '".$db->idate(dol_get_last_day($year_end,12,false))."'";
}
// User
if ($search_name)
{
$sql .= natural_search('u.lastname', $search_name);
}
// Status
if($search_status != '') $sql.= " AND d.fk_statut = '".$search_status."'";
// RESTRICT RIGHTS // RESTRICT RIGHTS
if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous)) if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous))
@ -219,17 +193,13 @@ if ($resql)
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
} }
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre" align="right">';
print "</td>";
// Status // Status
print '<td class="liste_titre" align="right">'; print '<td class="liste_titre" align="right">';
select_expensereport_statut($search_state,'search_state'); select_expensereport_statut($search_status,'search_status');
print '</td>'; print '</td>';
print '<td class="liste_titre" align="right">'; print '<td class="liste_titre" align="right">';
@ -257,10 +227,6 @@ if ($resql)
print '<td align="center">'.($objp->date_debut > 0 ? dol_print_date($objp->date_debut, 'day') : '').'</td>'; print '<td align="center">'.($objp->date_debut > 0 ? dol_print_date($objp->date_debut, 'day') : '').'</td>';
print '<td align="center">'.($objp->date_fin > 0 ? dol_print_date($objp->date_fin, 'day') : '').'</td>'; print '<td align="center">'.($objp->date_fin > 0 ? dol_print_date($objp->date_fin, 'day') : '').'</td>';
print '<td align="left"><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$objp->id_user.'">'.img_object($langs->trans("ShowUser"),"user").' '.dolGetFirstLastname($objp->firstname, $objp->lastname).'</a></td>'; print '<td align="left"><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$objp->id_user.'">'.img_object($langs->trans("ShowUser"),"user").' '.dolGetFirstLastname($objp->firstname, $objp->lastname).'</a></td>';
/*print '<td align="right">'.price($objp->total_tva, '', $langs, 0, 'MT', 0, $conf->currency).'</td>';
print '<td align="right">'.price($objp->total_ht, '', $langs, 0, 'MT', 0, $conf->currency).'</td>';
print '<td align="right">'.price($objp->total_ttc, '', $langs, 0, 'MT', 0, $conf->currency).'</td>';
*/
print '<td align="right">'.price($objp->total_ht).'</td>'; print '<td align="right">'.price($objp->total_ht).'</td>';
print '<td align="right">'.price($objp->total_tva).'</td>'; print '<td align="right">'.price($objp->total_tva).'</td>';
print '<td align="right">'.price($objp->total_ttc).'</td>'; print '<td align="right">'.price($objp->total_ttc).'</td>';
@ -281,11 +247,7 @@ if ($resql)
print '<tr class="liste_total">'; print '<tr class="liste_total">';
print '<td colspan="4">'.$langs->trans("Total").'</td>'; print '<td colspan="4">'.$langs->trans("Total").'</td>';
/*
print '<td style="text-align:right;">'.price($total_total_tva, '', $langs, 0, 'MT', 0, $conf->currency).'</td>';
print '<td style="text-align:right;">'.price($total_total_ht, '', $langs, 0, 'MT', 0, $conf->currency).'</td>';
print '<td style="text-align:right;">'.price($total_total_ttc, '', $langs, 0, 'MT', 0, $conf->currency).'</td>';
*/
print '<td style="text-align:right;">'.$total_total_ht.'</td>'; print '<td style="text-align:right;">'.$total_total_ht.'</td>';
print '<td style="text-align:right;">'.$total_total_tva.'</td>'; print '<td style="text-align:right;">'.$total_total_tva.'</td>';
print '<td style="text-align:right;">'.$total_total_ttc.'</td>'; print '<td style="text-align:right;">'.$total_total_ttc.'</td>';

View File

View File

@ -16,8 +16,8 @@
*/ */
require '../main.inc.php'; require '../main.inc.php';
require_once(DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'); require_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php';
dol_include_once("/expensereport/class/expensereport.class.php"); require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
$langs->load("companies"); $langs->load("companies");
$langs->load("users"); $langs->load("users");
@ -49,12 +49,12 @@ if ($_GET["action"] == 'confirm_ndf_to_account' && $_GET["confirm"] == "yes"):
$insertid = $acct->addline($dateop, $operation, $label, $amount, $num_chq, $cat1, $user); $insertid = $acct->addline($dateop, $operation, $label, $amount, $num_chq, $cat1, $user);
if ($insertid > 0): if ($insertid > 0):
$sql = " UPDATE ".MAIN_DB_PREFIX."expensereport d"; $sql = " UPDATE ".MAIN_DB_PREFIX."expensereport as d";
$sql.= " SET integration_compta = 1, fk_bank_account = $idAccount"; $sql.= " SET integration_compta = 1, fk_bank_account = $idAccount";
$sql.= " WHERE rowid = $idTrip"; $sql.= " WHERE rowid = $idTrip";
$resql=$db->query($sql); $resql=$db->query($sql);
if($result): if($result):
Header("Location: synchro_compta.php?account=".$idAccount); Header("Location: ".$_SERVER["PHP_SELF"]."?account=".$idAccount);
exit; exit;
else: else:
dol_print_error($db); dol_print_error($db);
@ -75,12 +75,12 @@ if ($_GET["action"] == 'confirm_account_to_ndf' && $_GET["confirm"] == "yes"):
$sql.= " WHERE label LIKE '%".$expensereport->ref."%'"; $sql.= " WHERE label LIKE '%".$expensereport->ref."%'";
$resql=$db->query($sql); $resql=$db->query($sql);
if ($resql > 0): if ($resql > 0):
$sql = " UPDATE ".MAIN_DB_PREFIX."expensereport d"; $sql = " UPDATE ".MAIN_DB_PREFIX."expensereport as d";
$sql.= " SET integration_compta = 0, fk_bank_account = 0"; $sql.= " SET integration_compta = 0, fk_bank_account = 0";
$sql.= " WHERE rowid = $idTrip"; $sql.= " WHERE rowid = $idTrip";
$resql=$db->query($sql); $resql=$db->query($sql);
if($result): if($result):
Header("Location: synchro_compta.php?account=".$idAccount); Header("Location: ".$_SERVER["PHP_SELF"]."?account=".$idAccount);
exit; exit;
else: else:
dol_print_error($db); dol_print_error($db);
@ -110,13 +110,13 @@ dol_fiche_head('');
if ($_GET["action"] == 'ndfTOaccount'): if ($_GET["action"] == 'ndfTOaccount'):
$idTrip = $_GET['idTrip']; $idTrip = $_GET['idTrip'];
$ret=$html->form_confirm("synchro_compta.php?idTrip=".$idTrip."&account=".$idAccount,$langs->trans("ndfToAccount"),$langs->trans("ConfirmNdfToAccount"),"confirm_ndf_to_account","","",1); $ret=$html->form_confirm($_SERVER["PHP_SELF"]."?idTrip=".$idTrip."&account=".$idAccount,$langs->trans("ndfToAccount"),$langs->trans("ConfirmNdfToAccount"),"confirm_ndf_to_account","","",1);
if ($ret == 'html') print '<br />'; if ($ret == 'html') print '<br />';
endif; endif;
if ($_GET["action"] == 'accountTOndf'): if ($_GET["action"] == 'accountTOndf'):
$idTrip = $_GET['idTrip']; $idTrip = $_GET['idTrip'];
$ret=$html->form_confirm("synchro_compta.php?idTrip=".$idTrip."&account=".$idAccount,$langs->trans("AccountToNdf"),$langs->trans("ConfirmAccountToNdf"),"confirm_account_to_ndf","","",1); $ret=$html->form_confirm($_SERVER["PHP_SELF"]."?idTrip=".$idTrip."&account=".$idAccount,$langs->trans("AccountToNdf"),$langs->trans("ConfirmAccountToNdf"),"confirm_account_to_ndf","","",1);
if ($ret == 'html') print '<br />'; if ($ret == 'html') print '<br />';
endif; endif;
@ -136,11 +136,11 @@ else:
print '&nbsp;<input type="submit" class="button" value="'.$langs->trans("ViewAccountSynch").'">'; print '&nbsp;<input type="submit" class="button" value="'.$langs->trans("ViewAccountSynch").'">';
print "</form>"; print "</form>";
$sql = "SELECT d.fk_bank_account, d.ref, d.rowid, d.date_valid, d.fk_user_author, d.total_ttc, d.integration_compta, d.fk_c_expensereport_statuts"; $sql = "SELECT d.fk_bank_account, d.ref, d.rowid, d.date_valid, d.fk_user_author, d.total_ttc, d.integration_compta, d.fk_statut";
$sql.= " ,CONCAT(u.firstname,' ',u.lastname) as declarant_NDF"; $sql.= " ,CONCAT(u.firstname,' ',u.lastname) as declarant_NDF";
$sql.= " FROM ".MAIN_DB_PREFIX."expensereport d"; $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as d";
$sql.= " INNER JOIN ".MAIN_DB_PREFIX."user u ON d.fk_user_author = u.rowid"; $sql.= " INNER JOIN ".MAIN_DB_PREFIX."user as u ON d.fk_user_author = u.rowid";
$sql.= " WHERE d.fk_c_expensereport_statuts = 6"; $sql.= " WHERE d.fk_statut = 6";
$sql.= " ORDER BY d.date_valid DESC"; $sql.= " ORDER BY d.date_valid DESC";
$resql=$db->query($sql); $resql=$db->query($sql);
@ -200,7 +200,7 @@ else:
print "</table>"; print "</table>";
else: else:
print '<div class="error">'.$langs->trans("AucuneTripToSynch").'</div>'; print '<div class="error">'.$langs->trans("NoTripToSync").'</div>';
endif; endif;
$db->free($resql); $db->free($resql);

View File

@ -1947,28 +1947,28 @@ elseif (! empty($object->id))
// Ligne de 3 colonnes // Ligne de 3 colonnes
print '<tr><td>'.$langs->trans("AmountHT").'</td>'; print '<tr><td>'.$langs->trans("AmountHT").'</td>';
print '<td align="right"><b>'.price($object->total_ht).'</b></td>'; print '<td colspan="2">'.price($object->total_ht,'',$langs,1,-1,-1,$conf->currency).'</td>';
print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; print '</tr>';
print '<tr><td>'.$langs->trans("AmountVAT").'</td><td align="right">'.price($object->total_tva).'</td>'; print '<tr><td>'.$langs->trans("AmountVAT").'</td><td colspan="2">'.price($object->total_tva,'',$langs,1,-1,-1,$conf->currency).'</td>';
print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; print '</tr>';
// Amount Local Taxes // Amount Local Taxes
if ($mysoc->localtax1_assuj=="1" || $object->total_localtax1 != 0) //Localtax1 if ($mysoc->localtax1_assuj=="1" || $object->total_localtax1 != 0) //Localtax1
{ {
print '<tr><td>'.$langs->transcountry("AmountLT1",$mysoc->country_code).'</td>'; print '<tr><td>'.$langs->transcountry("AmountLT1",$mysoc->country_code).'</td>';
print '<td align="right">'.price($object->total_localtax1).'</td>'; print '<td colspan="2">'.price($object->total_localtax1,'',$langs,1,-1,-1,$conf->currency).'</td>';
print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; print '</tr>';
} }
if ($mysoc->localtax2_assuj=="1" || $object->total_localtax2 != 0) //Localtax2 if ($mysoc->localtax2_assuj=="1" || $object->total_localtax2 != 0) //Localtax2
{ {
print '<tr><td>'.$langs->transcountry("AmountLT2",$mysoc->country_code).'</td>'; print '<tr><td>'.$langs->transcountry("AmountLT2",$mysoc->country_code).'</td>';
print '<td align="right">'.price($object->total_localtax2).'</td>'; print '<td colspan="2">'.price($object->total_localtax2,'',$langs,1,-1,-1,$conf->currency).'</td>';
print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; print '</tr>';
} }
print '<tr><td>'.$langs->trans("AmountTTC").'</td><td align="right">'.price($object->total_ttc).'</td>'; print '<tr><td>'.$langs->trans("AmountTTC").'</td><td colspan="2">'.price($object->total_ttc,'',$langs,1,-1,-1,$conf->currency).'</td>';
print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; print '</tr>';
print "</table><br>"; print "</table><br>";
@ -2610,7 +2610,7 @@ elseif (! empty($object->id))
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=reopen">'.$langs->trans("ReOpen").'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=reopen">'.$langs->trans("ReOpen").'</a>';
} }
} }
// Create bill // Create bill
if (! empty($conf->fournisseur->enabled) && $object->statut >= 2) // 2 means accepted if (! empty($conf->fournisseur->enabled) && $object->statut >= 2) // 2 means accepted
{ {

View File

@ -86,12 +86,15 @@ if (! is_writable($conffile))
// Check parameters // Check parameters
$is_sqlite = false;
if (empty($db_type)) if (empty($db_type))
{ {
print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("DatabaseType")).'</div>'; print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("DatabaseType")).'</div>';
$error++; $error++;
} else {
$is_sqlite = ($db_type === 'sqlite' || $db_type === 'sqlite3' );
} }
if (empty($db_host)) if (empty($db_host) && ! $is_sqlite)
{ {
print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Server")).'</div>'; print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Server")).'</div>';
$error++; $error++;
@ -101,7 +104,7 @@ if (empty($db_name))
print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("DatabaseName")).'</div>'; print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("DatabaseName")).'</div>';
$error++; $error++;
} }
if (empty($db_user)) if (empty($db_user) && ! $is_sqlite)
{ {
print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Login")).'</div>'; print '<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Login")).'</div>';
$error++; $error++;

View File

@ -51,6 +51,9 @@ if ($dolibarr_main_db_type == "mysql") $choix=1;
if ($dolibarr_main_db_type == "mysqli") $choix=1; if ($dolibarr_main_db_type == "mysqli") $choix=1;
if ($dolibarr_main_db_type == "pgsql") $choix=2; if ($dolibarr_main_db_type == "pgsql") $choix=2;
if ($dolibarr_main_db_type == "mssql") $choix=3; if ($dolibarr_main_db_type == "mssql") $choix=3;
if ($dolibarr_main_db_type == "sqlite") $choix=4;
if ($dolibarr_main_db_type == "sqlite3") $choix=5;
//if (empty($choix)) dol_print_error('','Database type '.$dolibarr_main_db_type.' not supported into etape2.php page'); //if (empty($choix)) dol_print_error('','Database type '.$dolibarr_main_db_type.' not supported into etape2.php page');
// Now we load forced value from install.forced.php file. // Now we load forced value from install.forced.php file.
@ -411,6 +414,7 @@ if ($action == "set")
if ($choix==1) $dir = "mysql/functions/"; if ($choix==1) $dir = "mysql/functions/";
elseif ($choix==2) $dir = "pgsql/functions/"; elseif ($choix==2) $dir = "pgsql/functions/";
elseif ($choix==3) $dir = "mssql/functions/"; elseif ($choix==3) $dir = "mssql/functions/";
elseif ($choix==4) { $dir = "sqlite3/functions/"; }
// Creation donnees // Creation donnees
$file = "functions.sql"; $file = "functions.sql";

View File

@ -306,7 +306,7 @@ if (! empty($force_install_message))
$class='DoliDB'.ucfirst($type); $class='DoliDB'.ucfirst($type);
include_once $dir."/".$file; include_once $dir."/".$file;
if ($type == 'sqlite') continue; // We hide sqlite because support can't be complete unti sqlit does not manage foreign key creation after table creation if ($type == 'sqlite') continue; // We hide sqlite because support can't be complete until sqlite does not manage foreign key creation after table creation
// Version min of database // Version min of database
$versionbasemin=explode('.',$class::VERSIONMIN); $versionbasemin=explode('.',$class::VERSIONMIN);
@ -320,7 +320,8 @@ if (! empty($force_install_message))
if ($type=='mysqli') { $testfunction='mysqli_connect'; $testclass=''; } if ($type=='mysqli') { $testfunction='mysqli_connect'; $testclass=''; }
if ($type=='pgsql') { $testfunction='pg_connect'; $testclass=''; } if ($type=='pgsql') { $testfunction='pg_connect'; $testclass=''; }
if ($type=='mssql') { $testfunction='mssql_connect'; $testclass=''; } if ($type=='mssql') { $testfunction='mssql_connect'; $testclass=''; }
if ($type=='sqlite') { $testfunction=''; $testclass='PDO'; } if ($type=='sqlite') { $testfunction=''; $testclass='PDO'; }
if ($type=='sqlite3') { $testfunction=''; $testclass='SQLite3'; }
$option.='<option value="'.$type.'"'.($defaultype == $type?' selected="selected"':''); $option.='<option value="'.$type.'"'.($defaultype == $type?' selected="selected"':'');
if ($testfunction && ! function_exists($testfunction)) $option.=' disabled="disabled"'; if ($testfunction && ! function_exists($testfunction)) $option.=' disabled="disabled"';
if ($testclass && ! class_exists($testclass)) $option.=' disabled="disabled"'; if ($testclass && ! class_exists($testclass)) $option.=' disabled="disabled"';
@ -330,6 +331,7 @@ if (! empty($force_install_message))
// Experimental // Experimental
if ($type=='mssql') $option.=' '.$langs->trans("Experimental"); if ($type=='mssql') $option.=' '.$langs->trans("Experimental");
elseif ($type=='sqlite') $option.=' '.$langs->trans("Experimental"); elseif ($type=='sqlite') $option.=' '.$langs->trans("Experimental");
elseif ($type=='sqlite3') $option.=' '.$langs->trans("Experimental");
// No available // No available
elseif (! function_exists($testfunction)) $option.=' - '.$langs->trans("FunctionNotAvailableInThisPHP"); elseif (! function_exists($testfunction)) $option.=' - '.$langs->trans("FunctionNotAvailableInThisPHP");
$option.='</option>'; $option.='</option>';
@ -479,7 +481,7 @@ if (! empty($force_install_message))
jQuery(document).ready(function() { jQuery(document).ready(function() {
jQuery("#db_type").change(function() { jQuery("#db_type").change(function() {
if (jQuery("#db_type").val()=='sqlite') { jQuery(".hidesqlite").hide(); } if (jQuery("#db_type").val()=='sqlite' || jQuery("#db_type").val()=='sqlite3') { jQuery(".hidesqlite").hide(); }
else { jQuery(".hidesqlite").show(); } else { jQuery(".hidesqlite").show(); }
}); });

View File

@ -20,6 +20,7 @@
ALTER TABLE llx_extrafields ADD COLUMN perms varchar(255) after fieldrequired; ALTER TABLE llx_extrafields ADD COLUMN perms varchar(255) after fieldrequired;
ALTER TABLE llx_extrafields ADD COLUMN list integer DEFAULT 0 after perms;
ALTER TABLE llx_payment_salary ADD COLUMN salary real after datev; ALTER TABLE llx_payment_salary ADD COLUMN salary real after datev;
@ -161,7 +162,7 @@ CREATE TABLE llx_expensereport (
fk_user_refuse integer DEFAULT NULL, fk_user_refuse integer DEFAULT NULL,
fk_user_cancel integer DEFAULT NULL, fk_user_cancel integer DEFAULT NULL,
fk_user_paid integer DEFAULT NULL, fk_user_paid integer DEFAULT NULL,
fk_c_expensereport_statuts integer NOT NULL, -- 1=brouillon, 2=validé (attente approb), 4=annulé, 5=approuvé, 6=payed, 99=refusé fk_statut integer NOT NULL, -- 1=brouillon, 2=validé (attente approb), 4=annulé, 5=approuvé, 6=payed, 99=refusé
fk_c_paiement integer DEFAULT NULL, fk_c_paiement integer DEFAULT NULL,
note_public text, note_public text,
note_private text, note_private text,

View File

@ -44,7 +44,7 @@ CREATE TABLE llx_expensereport (
fk_user_refuse integer DEFAULT NULL, fk_user_refuse integer DEFAULT NULL,
fk_user_cancel integer DEFAULT NULL, fk_user_cancel integer DEFAULT NULL,
fk_user_paid integer DEFAULT NULL, fk_user_paid integer DEFAULT NULL,
fk_c_expensereport_statuts integer NOT NULL, -- 1=brouillon, 2=validé (attente approb), 4=annulé, 5=approuvé, 6=payed, 99=refusé fk_statut integer NOT NULL, -- 1=brouillon, 2=validé (attente approb), 4=annulé, 5=approuvé, 6=payed, 99=refusé
fk_c_paiement integer DEFAULT NULL, fk_c_paiement integer DEFAULT NULL,
note_public text, note_public text,
note_private text, note_private text,

View File

@ -32,5 +32,6 @@ create table llx_extrafields
perms varchar(255), perms varchar(255),
pos integer DEFAULT 0, pos integer DEFAULT 0,
alwayseditable integer DEFAULT 0, alwayseditable integer DEFAULT 0,
param text param text,
list integer DEFAULT 0
)ENGINE=innodb; )ENGINE=innodb;

View File

View File

@ -553,11 +553,11 @@ foreach ($listofreferent as $key => $value)
{ {
if ($key == 'order_supplier' && ! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->commande->creer) if ($key == 'order_supplier' && ! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->commande->creer)
{ {
print '<a class="butAction" href="'.DOL_URL_ROOT.'/fourn/facture/card.php?socid='.$object->thirdparty->id.'&amp;action=create&amp;origin='.$object->element.'&amp;originid='.$object->id.'">'.$langs->trans("AddSupplierInvoice").'</a>'; print '<a class="butAction" href="'.DOL_URL_ROOT.'/fourn/commande/card.php?socid='.$project->thirdparty->id.'&amp;action=create&amp;origin='.$project->element.'&amp;originid='.$project->id.'">'.$langs->trans("AddSupplierOrder").'</a>';
} }
if ($key == 'invoice_supplier' && ! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture->creer) if ($key == 'invoice_supplier' && ! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture->creer)
{ {
print '<a class="butAction" href="'.DOL_URL_ROOT.'/fourn/commande/card.php?socid='.$object->thirdparty->id.'&amp;action=create&amp;origin='.$object->element.'&amp;originid='.$object->id.'">'.$langs->trans("AddSupplierOrder").'</a>'; print '<a class="butAction" href="'.DOL_URL_ROOT.'/fourn/facture/card.php?socid='.$project->thirdparty->id.'&amp;action=create&amp;origin='.$project->element.'&amp;originid='.$project->id.'">'.$langs->trans("AddSupplierInvoice").'</a>';
} }
} }
} }

View File

@ -49,6 +49,10 @@ class CompanyBankAccount extends Account
var $owner_address; var $owner_address;
var $default_rib; var $default_rib;
var $datec;
var $datem;
/** /**
* Constructor * Constructor
* *
@ -174,7 +178,7 @@ class CompanyBankAccount extends Account
{ {
if (empty($id) && empty($socid)) return -1; if (empty($id) && empty($socid)) return -1;
$sql = "SELECT rowid, fk_soc, bank, number, code_banque, code_guichet, cle_rib, bic, iban_prefix as iban, domiciliation, proprio, owner_address, default_rib, label"; $sql = "SELECT rowid, fk_soc, bank, number, code_banque, code_guichet, cle_rib, bic, iban_prefix as iban, domiciliation, proprio, owner_address, default_rib, label, datec, tms as datem";
$sql.= " FROM ".MAIN_DB_PREFIX."societe_rib"; $sql.= " FROM ".MAIN_DB_PREFIX."societe_rib";
if ($id) $sql.= " WHERE rowid = ".$id; if ($id) $sql.= " WHERE rowid = ".$id;
if ($socid) $sql.= " WHERE fk_soc = ".$socid." AND default_rib = 1"; if ($socid) $sql.= " WHERE fk_soc = ".$socid." AND default_rib = 1";
@ -200,6 +204,8 @@ class CompanyBankAccount extends Account
$this->owner_address = $obj->owner_address; $this->owner_address = $obj->owner_address;
$this->label = $obj->label; $this->label = $obj->label;
$this->default_rib = $obj->default_rib; $this->default_rib = $obj->default_rib;
$this->datec = $this->db->jdate($obj->datec);
$this->datem = $this->db->jdate($obj->datem);
} }
$this->db->free($resql); $this->db->free($resql);

View File

@ -968,7 +968,7 @@ class Societe extends CommonObject
* @param string $idprof2 Prof id 2 of third party (Warning, this can return several records) * @param string $idprof2 Prof id 2 of third party (Warning, this can return several records)
* @param string $idprof3 Prof id 3 of third party (Warning, this can return several records) * @param string $idprof3 Prof id 3 of third party (Warning, this can return several records)
* @param string $idprof4 Prof id 4 of third party (Warning, this can return several records) * @param string $idprof4 Prof id 4 of third party (Warning, this can return several records)
* @return int >0 if OK, <0 if KO or if two records found for same ref or idprof. * @return int >0 if OK, <0 if KO or if two records found for same ref or idprof, 0 if not found.
*/ */
function fetch($rowid, $ref='', $ref_ext='', $ref_int='', $idprof1='',$idprof2='',$idprof3='',$idprof4='') function fetch($rowid, $ref='', $ref_ext='', $ref_int='', $idprof1='',$idprof2='',$idprof3='',$idprof4='')
{ {
@ -1025,7 +1025,7 @@ class Societe extends CommonObject
{ {
$this->error='Fetch several records found for ref='.$ref; $this->error='Fetch several records found for ref='.$ref;
dol_syslog($this->error, LOG_ERR); dol_syslog($this->error, LOG_ERR);
$result = -1; $result = -2;
} }
if ($num) if ($num)
{ {
@ -1150,17 +1150,15 @@ class Societe extends CommonObject
$this->fetch_optionals($this->id,$extralabels); $this->fetch_optionals($this->id,$extralabels);
} }
else else
{ {
$this->error='Fetch no third party found for id='.$rowid; $result = 0;
dol_syslog($this->error, LOG_ERR);
$result = -2;
} }
$this->db->free($resql); $this->db->free($resql);
} }
else else
{ {
$this->error=$this->db->error(); $this->error=$this->db->lasterror();
$result = -3; $result = -3;
} }
@ -1180,12 +1178,21 @@ class Societe extends CommonObject
* @param boolean $case Case sensitive (true/false) * @param boolean $case Case sensitive (true/false)
* @param boolean $similar Add test if string inside name into database, or name into database inside string. Do not use this: Not compatible with other database. * @param boolean $similar Add test if string inside name into database, or name into database inside string. Do not use this: Not compatible with other database.
* @param string $clause Clause for filters * @param string $clause Clause for filters
* @return array Array of thirdparties object * @return array|int <0 if KO, array of thirdparties object if OK
*/ */
function searchByName($name, $type='0', $filters = array(), $exact = false, $case = false, $similar = false, $clause = 'AND') function searchByName($name, $type='0', $filters = array(), $exact = false, $case = false, $similar = false, $clause = 'AND')
{ {
$thirdparties = array(); $thirdparties = array();
dol_syslog("searchByName name=".$name." type=".$type." exact=".$exact);
// Check parameter
if (empty($name))
{
$this->errors[]='ErrorBadValueForParameter';
return -1;
}
// Generation requete recherche // Generation requete recherche
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe"; $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe";
$sql.= " WHERE entity IN (".getEntity('category',1).")"; $sql.= " WHERE entity IN (".getEntity('category',1).")";
@ -1264,7 +1271,7 @@ class Societe extends CommonObject
} }
else else
{ {
$this->error=$this->db->error().' sql='.$sql; $this->error=$this->db->lasterror();
return -1; return -1;
} }
} }

View File

@ -29,6 +29,7 @@ require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
$langs->load("companies"); $langs->load("companies");
$langs->load("commercial"); $langs->load("commercial");
@ -191,6 +192,7 @@ if ($action == 'confirm_delete' && $_GET['confirm'] == 'yes')
*/ */
$form = new Form($db); $form = new Form($db);
$prelevement = new BonPrelevement($db);
llxHeader(); llxHeader();
@ -336,11 +338,11 @@ if ($socid && $action != 'edit' && $action != "create")
print "<br>"; print "<br>";
/* /*
* List of bank accounts * List of bank accounts
*/ */
print_titre($langs->trans("AllRIB")); print_titre($langs->trans("AllRIB"));
$rib_list = $soc->get_all_rib(); $rib_list = $soc->get_all_rib();
@ -355,6 +357,10 @@ if ($socid && $action != 'edit' && $action != "create")
print_liste_field_titre($langs->trans("RIB")); print_liste_field_titre($langs->trans("RIB"));
print_liste_field_titre($langs->trans("IBAN")); print_liste_field_titre($langs->trans("IBAN"));
print_liste_field_titre($langs->trans("BIC")); print_liste_field_titre($langs->trans("BIC"));
if (! empty($conf->prelevement->enabled))
{
print '<td>RUM</td>';
}
print_liste_field_titre($langs->trans("DefaultRIB"), '', '', '', '', 'align="center"'); print_liste_field_titre($langs->trans("DefaultRIB"), '', '', '', '', 'align="center"');
print '<td width="40"></td>'; print '<td width="40"></td>';
print '</tr>'; print '</tr>';
@ -372,6 +378,12 @@ if ($socid && $action != 'edit' && $action != "create")
print '<td>'.$rib->iban.'</td>'; print '<td>'.$rib->iban.'</td>';
// BIC // BIC
print '<td>'.$rib->bic.'</td>'; print '<td>'.$rib->bic.'</td>';
if (! empty($conf->prelevement->enabled))
{
print '<td>'.$prelevement->buildRumNumber($soc->code_client, $rib->datec, $rib->id).'</td>';
}
// Default // Default
print '<td align="center" width="70">'; print '<td align="center" width="70">';
if (!$rib->default_rib) { if (!$rib->default_rib) {