Merge branch '10.0' of git@github.com:Dolibarr/dolibarr.git into develop
Conflicts: ChangeLog
This commit is contained in:
commit
51a1550dbb
50
ChangeLog
50
ChangeLog
@ -16,6 +16,7 @@ Following changes may create regressions for some external modules, but were nec
|
|||||||
* Properties ->libelle_incoterms were renamed into ->label_incoterms
|
* Properties ->libelle_incoterms were renamed into ->label_incoterms
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 10.0.0 compared to 9.0.0 *****
|
***** ChangeLog for 10.0.0 compared to 9.0.0 *****
|
||||||
For Users:
|
For Users:
|
||||||
NEW: Module "Ticket" is available as a stable module.
|
NEW: Module "Ticket" is available as a stable module.
|
||||||
@ -195,6 +196,55 @@ Following changes may create regressions for some external modules, but were nec
|
|||||||
called $dolibarr_main_instance_unique_id is now generated at each installation. It will be used by some future features.
|
called $dolibarr_main_instance_unique_id is now generated at each installation. It will be used by some future features.
|
||||||
|
|
||||||
|
|
||||||
|
***** ChangeLog for 9.0.4 compared to 9.0.3 *****
|
||||||
|
FIX: #5249
|
||||||
|
FIX: #11025
|
||||||
|
FIX: #11032
|
||||||
|
FIX: #11097
|
||||||
|
FIX: #11169
|
||||||
|
FIX: #11202
|
||||||
|
FIX: #11244
|
||||||
|
FIX: #11296
|
||||||
|
FIX: #11316
|
||||||
|
FIX: #11335
|
||||||
|
FIX: Add missing end date of subscription in export
|
||||||
|
FIX: A user may read holiday and expense report without permissions
|
||||||
|
FIX: better syntax
|
||||||
|
FIX: condition
|
||||||
|
FIX: confirmation of mass email sending + option MAILING_NO_USING_PHPMAIL
|
||||||
|
FIX: crabe pdf: bad detailed VAT for situation invoices, in situations S2 and above
|
||||||
|
FIX: default value for duration of validity can be set from generic
|
||||||
|
FIX: do not include tpl from disabled modules
|
||||||
|
FIX: Error management when MAILING_NO_USING_PHPMAIL is set
|
||||||
|
FIX: Even with permission, can't validate leave once validator defined.
|
||||||
|
FIX: extrafield list search: SQL error when field is multiselect
|
||||||
|
FIX: if last char of customercode is accent making the truncate of first
|
||||||
|
FIX: Import of chart of account
|
||||||
|
FIX: in edit mode, dictionary inputs do not escape the string inside the 'value' attribute, causing errors if there are any double quotes
|
||||||
|
FIX: invalid link on user.fk_user
|
||||||
|
FIX: invoice class: bad SQL request if product type not set
|
||||||
|
FIX: javascript error when ckeditor module not enabled
|
||||||
|
FIX: mail presend: can overwrite a file previously uploaded (Issue #11056)
|
||||||
|
FIX: mass send mail
|
||||||
|
FIX: missing compatibility with multicompany transverse mode
|
||||||
|
FIX: missing llx_const encrypt
|
||||||
|
FIX: modulebuilder: hardcoded llx_
|
||||||
|
FIX: Not showing Contract and Project columns on ficheinter list
|
||||||
|
FIX: only profid1 to 4 were editable for pdf option to show. Not 5 and 6.
|
||||||
|
FIX: productaccount buylist with pages
|
||||||
|
FIX: remove isolated transaction commit
|
||||||
|
FIX: security (a user can read leave or holiday of other without perm.
|
||||||
|
FIX: situation invoices: bad detailed VAT in situations following the first one
|
||||||
|
FIX: situation invoices: block progress percentage change for discount lines
|
||||||
|
FIX: syntax error
|
||||||
|
FIX: the id was not loaded in fetch of accounting system
|
||||||
|
FIX: try to use WHERE EXISTS instead of DISTINCT
|
||||||
|
FIX: use dol_sanitizeFileName() function to remove double spaces in filenames, as well as done on document.php when we want to download pdf
|
||||||
|
FIX: Use of cron with multicompany
|
||||||
|
FIX: var name
|
||||||
|
FIX: we need to fetch fourn invoice with ref in current entity
|
||||||
|
FIX: Wrong stock movement on supplier credit notes
|
||||||
|
FIX: Import of record in ledger
|
||||||
|
|
||||||
***** ChangeLog for 9.0.3 compared to 9.0.2 *****
|
***** ChangeLog for 9.0.3 compared to 9.0.2 *****
|
||||||
FIX: #11013
|
FIX: #11013
|
||||||
|
|||||||
@ -106,6 +106,7 @@ if (empty($includecustom)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
print "Release : ".$release."\n";
|
print "Release : ".$release."\n";
|
||||||
|
print "Working on files into : ".DOL_DOCUMENT_ROOT."\n";
|
||||||
print "Include custom in signature : ".$includecustom."\n";
|
print "Include custom in signature : ".$includecustom."\n";
|
||||||
print "Include constants in signature : ";
|
print "Include constants in signature : ";
|
||||||
foreach ($includeconstants as $countrycode => $tmp) {
|
foreach ($includeconstants as $countrycode => $tmp) {
|
||||||
|
|||||||
@ -50,33 +50,36 @@ class Utils
|
|||||||
* Purge files into directory of data files.
|
* Purge files into directory of data files.
|
||||||
* CAN BE A CRON TASK
|
* CAN BE A CRON TASK
|
||||||
*
|
*
|
||||||
* @param string $choice Choice of purge mode ('tempfiles', '' or 'tempfilesold' to purge temp older than 24h, 'allfiles', 'logfile')
|
* @param string $choice Choice of purge mode ('tempfiles', '' or 'tempfilesold' to purge temp older than $nbsecondsold seconds, 'allfiles', 'logfile')
|
||||||
* @return int 0 if OK, < 0 if KO (this function is used also by cron so only 0 is OK)
|
* @param int $nbsecondsold Nb of seconds old to accept deletion of a directory if $choice is 'tempfilesold'
|
||||||
|
* @return int 0 if OK, < 0 if KO (this function is used also by cron so only 0 is OK)
|
||||||
*/
|
*/
|
||||||
public function purgeFiles($choice = 'tempfilesold')
|
public function purgeFiles($choice = 'tempfilesold', $nbsecondsold = 86400)
|
||||||
{
|
{
|
||||||
global $conf, $langs, $dolibarr_main_data_root;
|
global $conf, $langs, $dolibarr_main_data_root;
|
||||||
|
|
||||||
$langs->load("admin");
|
$langs->load("admin");
|
||||||
|
|
||||||
dol_syslog("Utils::purgeFiles choice=".$choice, LOG_DEBUG);
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
|
|
||||||
$filesarray=array();
|
$filesarray=array();
|
||||||
if (empty($choice)) $choice='tempfilesold';
|
if (empty($choice)) $choice='tempfilesold';
|
||||||
|
|
||||||
|
dol_syslog("Utils::purgeFiles choice=".$choice, LOG_DEBUG);
|
||||||
|
|
||||||
if ($choice=='tempfiles' || $choice=='tempfilesold')
|
if ($choice=='tempfiles' || $choice=='tempfilesold')
|
||||||
{
|
{
|
||||||
// Delete temporary files
|
// Delete temporary files
|
||||||
if ($dolibarr_main_data_root)
|
if ($dolibarr_main_data_root)
|
||||||
{
|
{
|
||||||
$filesarray=dol_dir_list($dolibarr_main_data_root, "directories", 1, '^temp$', '', 'name', SORT_ASC, 2, 0, '', 1); // Do not follow symlinks
|
$filesarray=dol_dir_list($dolibarr_main_data_root, "directories", 1, '^temp$', '', 'name', SORT_ASC, 2, 0, '', 1); // Do not follow symlinks
|
||||||
if ($choice == 'tempfilesold')
|
|
||||||
|
if ($choice == 'tempfilesold')
|
||||||
{
|
{
|
||||||
$now = dol_now();
|
$now = dol_now();
|
||||||
foreach($filesarray as $key => $val)
|
foreach($filesarray as $key => $val)
|
||||||
{
|
{
|
||||||
if ($val['date'] > ($now - (24 * 3600))) unset($filesarray[$key]); // Discard files not older than 24h
|
if ($val['date'] > ($now - ($nbsecondsold))) unset($filesarray[$key]); // Discard temp dir not older than $nbsecondsold
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -119,13 +122,14 @@ class Utils
|
|||||||
$counterror=0;
|
$counterror=0;
|
||||||
if (count($filesarray))
|
if (count($filesarray))
|
||||||
{
|
{
|
||||||
foreach($filesarray as $key => $value)
|
foreach($filesarray as $key => $value)
|
||||||
{
|
{
|
||||||
//print "x ".$filesarray[$key]['fullname']."-".$filesarray[$key]['type']."<br>\n";
|
//print "x ".$filesarray[$key]['fullname']."-".$filesarray[$key]['type']."<br>\n";
|
||||||
if ($filesarray[$key]['type'] == 'dir')
|
if ($filesarray[$key]['type'] == 'dir')
|
||||||
{
|
{
|
||||||
$startcount=0;
|
$startcount=0;
|
||||||
$tmpcountdeleted=0;
|
$tmpcountdeleted=0;
|
||||||
|
|
||||||
$result=dol_delete_dir_recursive($filesarray[$key]['fullname'], $startcount, 1, 0, $tmpcountdeleted);
|
$result=dol_delete_dir_recursive($filesarray[$key]['fullname'], $startcount, 1, 0, $tmpcountdeleted);
|
||||||
$count+=$result;
|
$count+=$result;
|
||||||
$countdeleted+=$tmpcountdeleted;
|
$countdeleted+=$tmpcountdeleted;
|
||||||
@ -165,6 +169,13 @@ class Utils
|
|||||||
}
|
}
|
||||||
else $this->output=$langs->trans("PurgeNothingToDelete").($choice == 'tempfilesold' ? ' (older than 24h)':'');
|
else $this->output=$langs->trans("PurgeNothingToDelete").($choice == 'tempfilesold' ? ' (older than 24h)':'');
|
||||||
|
|
||||||
|
// Recreate temp dir that are not automatically recreated by core code for performance purpose, we need them
|
||||||
|
if (! empty($conf->api->enabled))
|
||||||
|
{
|
||||||
|
dol_mkdir($conf->api->dir_temp);
|
||||||
|
}
|
||||||
|
dol_mkdir($conf->user->dir_temp);
|
||||||
|
|
||||||
//return $count;
|
//return $count;
|
||||||
return 0; // This function can be called by cron so must return 0 if OK
|
return 0; // This function can be called by cron so must return 0 if OK
|
||||||
}
|
}
|
||||||
|
|||||||
@ -669,18 +669,30 @@ class ImportCsv extends ModeleImports
|
|||||||
if (! preg_match('/^'.preg_quote($alias).'\./', $key)) continue; // Not a field of current table
|
if (! preg_match('/^'.preg_quote($alias).'\./', $key)) continue; // Not a field of current table
|
||||||
if ($val == 'user->id')
|
if ($val == 'user->id')
|
||||||
{
|
{
|
||||||
$listfields[] = preg_replace('/^'.preg_quote($alias).'\./', '', $key);
|
$listfields[] = preg_replace('/^'.preg_quote($alias, '/').'\./', '', $key);
|
||||||
$listvalues[] = $user->id;
|
$listvalues[] = $user->id;
|
||||||
}
|
}
|
||||||
elseif (preg_match('/^lastrowid-/', $val))
|
elseif (preg_match('/^lastrowid-/', $val))
|
||||||
{
|
{
|
||||||
$tmp=explode('-', $val);
|
$tmp=explode('-', $val);
|
||||||
$lastinsertid=(isset($last_insert_id_array[$tmp[1]]))?$last_insert_id_array[$tmp[1]]:0;
|
$lastinsertid=(isset($last_insert_id_array[$tmp[1]]))?$last_insert_id_array[$tmp[1]]:0;
|
||||||
$keyfield = preg_replace('/^'.preg_quote($alias).'\./', '', $key);
|
$keyfield = preg_replace('/^'.preg_quote($alias, '/').'\./', '', $key);
|
||||||
$listfields[] = $keyfield;
|
$listfields[] = $keyfield;
|
||||||
$listvalues[] = $lastinsertid;
|
$listvalues[] = $lastinsertid;
|
||||||
//print $key."-".$val."-".$listfields."-".$listvalues."<br>";exit;
|
//print $key."-".$val."-".$listfields."-".$listvalues."<br>";exit;
|
||||||
}
|
}
|
||||||
|
elseif (preg_match('/^const-/', $val))
|
||||||
|
{
|
||||||
|
$tmp=explode('-', $val, 2);
|
||||||
|
$listfields[] = preg_replace('/^'.preg_quote($alias, '/').'\./', '', $key);
|
||||||
|
$listvalues[] = "'".$tmp[1]."'";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errors[$error]['lib']='Bad value of profile setup '.$val.' for array_import_fieldshidden';
|
||||||
|
$this->errors[$error]['type']='Import profile setup';
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//print 'listfields='.$listfields.'<br>listvalues='.$listvalues.'<br>';
|
//print 'listfields='.$listfields.'<br>listvalues='.$listvalues.'<br>';
|
||||||
|
|||||||
@ -688,21 +688,33 @@ class ImportXlsx extends ModeleImports
|
|||||||
// Loop on each hidden fields to add them into listfields/listvalues
|
// Loop on each hidden fields to add them into listfields/listvalues
|
||||||
foreach($objimport->array_import_fieldshidden[0] as $key => $val)
|
foreach($objimport->array_import_fieldshidden[0] as $key => $val)
|
||||||
{
|
{
|
||||||
if (! preg_match('/^'.preg_quote($alias).'\./', $key)) continue; // Not a field of current table
|
if (! preg_match('/^'.preg_quote($alias, '/').'\./', $key)) continue; // Not a field of current table
|
||||||
if ($val == 'user->id')
|
if ($val == 'user->id')
|
||||||
{
|
{
|
||||||
$listfields[] = preg_replace('/^'.preg_quote($alias).'\./', '', $key);
|
$listfields[] = preg_replace('/^'.preg_quote($alias, '/').'\./', '', $key);
|
||||||
$listvalues[] = $user->id;
|
$listvalues[] = $user->id;
|
||||||
}
|
}
|
||||||
elseif (preg_match('/^lastrowid-/', $val))
|
elseif (preg_match('/^lastrowid-/', $val))
|
||||||
{
|
{
|
||||||
$tmp=explode('-', $val);
|
$tmp=explode('-', $val);
|
||||||
$lastinsertid=(isset($last_insert_id_array[$tmp[1]]))?$last_insert_id_array[$tmp[1]]:0;
|
$lastinsertid=(isset($last_insert_id_array[$tmp[1]]))?$last_insert_id_array[$tmp[1]]:0;
|
||||||
$keyfield = preg_replace('/^'.preg_quote($alias).'\./', '', $key);
|
$keyfield = preg_replace('/^'.preg_quote($alias, '/').'\./', '', $key);
|
||||||
$listfields[] = $keyfield;
|
$listfields[] = $keyfield;
|
||||||
$listvalues[] = $lastinsertid;
|
$listvalues[] = $lastinsertid;
|
||||||
//print $key."-".$val."-".$listfields."-".$listvalues."<br>";exit;
|
//print $key."-".$val."-".$listfields."-".$listvalues."<br>";exit;
|
||||||
}
|
}
|
||||||
|
elseif (preg_match('/^const-/', $val))
|
||||||
|
{
|
||||||
|
$tmp=explode('-', $val, 2);
|
||||||
|
$listfields[] = preg_replace('/^'.preg_quote($alias, '/').'\./', '', $key);
|
||||||
|
$listvalues[] = "'".$tmp[1]."'";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errors[$error]['lib']='Bad value of profile setup '.$val.' for array_import_fieldshidden';
|
||||||
|
$this->errors[$error]['type']='Import profile setup';
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//print 'listfields='.$listfields.'<br>listvalues='.$listvalues.'<br>';
|
//print 'listfields='.$listfields.'<br>listvalues='.$listvalues.'<br>';
|
||||||
|
|||||||
@ -288,32 +288,36 @@ class modAccounting extends DolibarrModules
|
|||||||
$this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon
|
$this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon
|
||||||
$this->import_tables_array[$r]=array('b'=>MAIN_DB_PREFIX.'accounting_bookkeeping'); // List of tables to insert into (insert done in same order)
|
$this->import_tables_array[$r]=array('b'=>MAIN_DB_PREFIX.'accounting_bookkeeping'); // List of tables to insert into (insert done in same order)
|
||||||
$this->import_fields_array[$r]=array(
|
$this->import_fields_array[$r]=array(
|
||||||
'b.doc_date'=>"Docdate",
|
'b.piece_num'=>"TransactionNumShort",
|
||||||
'b.piece_num'=>"TransactionNumShort",
|
'b.doc_date'=>"Docdate",
|
||||||
|
//'b.doc_type'=>'Doctype',
|
||||||
|
'b.doc_ref'=>'Piece',
|
||||||
'b.code_journal'=>'Codejournal',
|
'b.code_journal'=>'Codejournal',
|
||||||
'b.journal_label'=>'JournalLabel',
|
//'b.journal_label'=>'JournalLabel',
|
||||||
'b.numero_compte'=>'AccountAccounting',
|
'b.numero_compte'=>'AccountAccounting',
|
||||||
'b.label_compte'=>'LabelAccount',
|
//'b.label_compte'=>'LabelAccount',
|
||||||
'b.subledger_account'=>'SubledgerAccount',
|
'b.subledger_account'=>'SubledgerAccount',
|
||||||
'b.subledger_label'=>'SubledgerAccountLabel',
|
'b.subledger_label'=>'SubledgerAccountLabel',
|
||||||
'b.label_operation'=>'LabelOperation',
|
'b.label_operation'=>'LabelOperation',
|
||||||
'b.debit'=>"Debit",
|
'b.debit'=>"Debit",
|
||||||
'b.credit'=>"Credit"
|
'b.credit'=>"Credit"
|
||||||
);
|
);
|
||||||
$this->import_fieldshidden_array[$r]=array('b.fk_user_author'=>'user->id'); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent)
|
$this->import_fieldshidden_array[$r]=array('b.doc_type'=>'const-import_from_external', 'b.fk_doc'=>'const-0', 'b.fk_docdet'=>'const-0', 'b.fk_user_author'=>'user->id', 'b.date_creation'=>'const-'.dol_print_date(dol_now(), 'standard')); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent)
|
||||||
$this->import_regex_array[$r]=array('b.doc_date'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$');
|
$this->import_regex_array[$r]=array('b.doc_date'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$');
|
||||||
$this->import_examplevalues_array[$r]=array(
|
$this->import_examplevalues_array[$r]=array(
|
||||||
'b.doc_date'=>'formatted as \'.dol_print_date(dol_now(),\'%Y-%m-%d\')',
|
'b.piece_num'=>'123 (!!! use next value not already used)',
|
||||||
'b.piece_num'=>'1',
|
'b.doc_date'=>dol_print_date(dol_now(), "%Y-%m-%d"),
|
||||||
|
//'b.doc_type'=>'import',
|
||||||
|
'b.doc_ref'=>'My document ABC',
|
||||||
'b.code_journal'=>"VTE",
|
'b.code_journal'=>"VTE",
|
||||||
'b.journal_label'=>"Journal des ventes",
|
//'b.journal_label'=>"Sale journal",
|
||||||
'b.numero_compte'=>"707",
|
'b.numero_compte'=>"707",
|
||||||
'b.label_compte'=>'Ventes',
|
//'b.label_compte'=>'Product account 707',
|
||||||
'b.subledger_account'=>'',
|
'b.subledger_account'=>'',
|
||||||
'b.subledger_label'=>'',
|
'b.subledger_label'=>'',
|
||||||
'b.label_operation'=>"Ventes services",
|
'b.label_operation'=>"Sale of ABC",
|
||||||
'b.debit'=>"0,00",
|
'b.debit'=>"0",
|
||||||
'b.credit'=>"100,00"
|
'b.credit'=>"100"
|
||||||
);
|
);
|
||||||
|
|
||||||
// Chart of accounts
|
// Chart of accounts
|
||||||
|
|||||||
@ -343,7 +343,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$sql.= ", '".$this->db->escape($this->ref_supplier)."'";
|
$sql.= ", '".$this->db->escape($this->ref_supplier)."'";
|
||||||
$sql.= ", ".$conf->entity;
|
$sql.= ", ".$conf->entity;
|
||||||
$sql.= ", '".$this->db->escape($this->type)."'";
|
$sql.= ", '".$this->db->escape($this->type)."'";
|
||||||
$sql.= ", '".$this->db->escape($this->libelle)."'";
|
$sql.= ", '".$this->db->escape($this->label?$this->label:$this->libelle)."'";
|
||||||
$sql.= ", ".$this->socid;
|
$sql.= ", ".$this->socid;
|
||||||
$sql.= ", '".$this->db->idate($now)."'";
|
$sql.= ", '".$this->db->idate($now)."'";
|
||||||
$sql.= ", '".$this->db->idate($this->date)."'";
|
$sql.= ", '".$this->db->idate($this->date)."'";
|
||||||
@ -484,7 +484,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
{
|
{
|
||||||
$idligne = $this->db->last_insert_id(MAIN_DB_PREFIX.'facture_fourn_det');
|
$idligne = $this->db->last_insert_id(MAIN_DB_PREFIX.'facture_fourn_det');
|
||||||
|
|
||||||
$this->updateline(
|
$this->updateline(
|
||||||
$idligne,
|
$idligne,
|
||||||
$line->description,
|
$line->description,
|
||||||
$line->pu_ht,
|
$line->pu_ht,
|
||||||
@ -511,8 +511,6 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$result=$this->update_price();
|
$result=$this->update_price();
|
||||||
if ($result > 0)
|
if ($result > 0)
|
||||||
{
|
{
|
||||||
$action='create';
|
|
||||||
|
|
||||||
// Actions on extra fields
|
// Actions on extra fields
|
||||||
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
|
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
|
||||||
{
|
{
|
||||||
@ -587,7 +585,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$sql.= " t.datec,";
|
$sql.= " t.datec,";
|
||||||
$sql.= " t.datef,";
|
$sql.= " t.datef,";
|
||||||
$sql.= " t.tms,";
|
$sql.= " t.tms,";
|
||||||
$sql.= " t.libelle,";
|
$sql.= " t.libelle as label,";
|
||||||
$sql.= " t.paye,";
|
$sql.= " t.paye,";
|
||||||
$sql.= " t.amount,";
|
$sql.= " t.amount,";
|
||||||
$sql.= " t.remise,";
|
$sql.= " t.remise,";
|
||||||
@ -646,8 +644,8 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$this->date = $this->db->jdate($obj->datef);
|
$this->date = $this->db->jdate($obj->datef);
|
||||||
$this->datep = $this->db->jdate($obj->datef);
|
$this->datep = $this->db->jdate($obj->datef);
|
||||||
$this->tms = $this->db->jdate($obj->tms);
|
$this->tms = $this->db->jdate($obj->tms);
|
||||||
$this->libelle = $obj->libelle; // deprecated
|
$this->libelle = $obj->label; // deprecated
|
||||||
$this->label = $obj->libelle;
|
$this->label = $obj->label;
|
||||||
$this->paye = $obj->paye;
|
$this->paye = $obj->paye;
|
||||||
$this->amount = $obj->amount;
|
$this->amount = $obj->amount;
|
||||||
$this->remise = $obj->remise;
|
$this->remise = $obj->remise;
|
||||||
@ -2847,7 +2845,7 @@ class SupplierInvoiceLine extends CommonObjectLine
|
|||||||
*/
|
*/
|
||||||
public function fetch($rowid)
|
public function fetch($rowid)
|
||||||
{
|
{
|
||||||
$sql = 'SELECT f.rowid, f.ref as ref_supplier, f.libelle as label, f.description, f.date_start, f.date_end, f.pu_ht, f.pu_ttc, f.qty, f.remise_percent, f.tva_tx';
|
$sql = 'SELECT f.rowid, f.ref as ref_supplier, f.description, f.date_start, f.date_end, f.pu_ht, f.pu_ttc, f.qty, f.remise_percent, f.tva_tx';
|
||||||
$sql.= ', f.localtax1_type, f.localtax2_type, f.localtax1_tx, f.localtax2_tx, f.total_localtax1, f.total_localtax2 ';
|
$sql.= ', f.localtax1_type, f.localtax2_type, f.localtax1_tx, f.localtax2_tx, f.total_localtax1, f.total_localtax2 ';
|
||||||
$sql.= ', f.total_ht, f.tva as total_tva, f.total_ttc, f.fk_facture_fourn, f.fk_product, f.product_type, f.info_bits, f.rang, f.special_code, f.fk_parent_line, f.fk_unit';
|
$sql.= ', f.total_ht, f.tva as total_tva, f.total_ttc, f.fk_facture_fourn, f.fk_product, f.product_type, f.info_bits, f.rang, f.special_code, f.fk_parent_line, f.fk_unit';
|
||||||
$sql.= ', p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.description as product_desc';
|
$sql.= ', p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.description as product_desc';
|
||||||
|
|||||||
@ -21,8 +21,9 @@ CREATE TABLE llx_accounting_bookkeeping
|
|||||||
(
|
(
|
||||||
rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
entity integer DEFAULT 1 NOT NULL, -- | multi company id
|
entity integer DEFAULT 1 NOT NULL, -- | multi company id
|
||||||
doc_date date NOT NULL, -- FEC:PieceDate
|
piece_num integer NOT NULL, -- FEC:EcritureNum | accounting transaction id
|
||||||
doc_type varchar(30) NOT NULL, -- | facture_client/reglement_client/facture_fournisseur/reglement_fournisseur
|
doc_date date NOT NULL, -- FEC:PieceDate | date of source document
|
||||||
|
doc_type varchar(30) NOT NULL, -- | facture_client/reglement_client/facture_fournisseur/reglement_fournisseur/import
|
||||||
doc_ref varchar(300) NOT NULL, -- FEC:PieceRef | facture_client/reglement_client/... reference number
|
doc_ref varchar(300) NOT NULL, -- FEC:PieceRef | facture_client/reglement_client/... reference number
|
||||||
fk_doc integer NOT NULL, -- | facture_client/reglement_client/... rowid
|
fk_doc integer NOT NULL, -- | facture_client/reglement_client/... rowid
|
||||||
fk_docdet integer NOT NULL, -- | facture_client/reglement_client/... line rowid
|
fk_docdet integer NOT NULL, -- | facture_client/reglement_client/... line rowid
|
||||||
@ -48,7 +49,6 @@ CREATE TABLE llx_accounting_bookkeeping
|
|||||||
fk_user integer NULL, -- The id of user that validate the accounting source document
|
fk_user integer NULL, -- The id of user that validate the accounting source document
|
||||||
code_journal varchar(32) NOT NULL, -- FEC:JournalCode
|
code_journal varchar(32) NOT NULL, -- FEC:JournalCode
|
||||||
journal_label varchar(255), -- FEC:JournalLib
|
journal_label varchar(255), -- FEC:JournalLib
|
||||||
piece_num integer NOT NULL, -- FEC:EcritureNum | accounting source document
|
|
||||||
date_validated datetime, -- FEC:ValidDate | if empty: movement not validated / if not empty: movement validated (No deleting / No modification)
|
date_validated datetime, -- FEC:ValidDate | if empty: movement not validated / if not empty: movement validated (No deleting / No modification)
|
||||||
date_export datetime DEFAULT NULL, --
|
date_export datetime DEFAULT NULL, --
|
||||||
import_key varchar(14),
|
import_key varchar(14),
|
||||||
|
|||||||
@ -149,7 +149,7 @@ SystemToolsAreaDesc=This area provides administration functions. Use the menu to
|
|||||||
Purge=Purge
|
Purge=Purge
|
||||||
PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in <b>%s</b> directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server.
|
PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in <b>%s</b> directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server.
|
||||||
PurgeDeleteLogFile=Delete log files, including <b>%s</b> defined for Syslog module (no risk of losing data)
|
PurgeDeleteLogFile=Delete log files, including <b>%s</b> defined for Syslog module (no risk of losing data)
|
||||||
PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data)
|
PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago.
|
||||||
PurgeDeleteTemporaryFilesShort=Delete temporary files
|
PurgeDeleteTemporaryFilesShort=Delete temporary files
|
||||||
PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: <b>%s</b>.<br>This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files.
|
PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: <b>%s</b>.<br>This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files.
|
||||||
PurgeRunNow=Purge now
|
PurgeRunNow=Purge now
|
||||||
@ -1110,7 +1110,7 @@ AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
|
|||||||
SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
|
SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
|
||||||
SystemAreaForAdminOnly=This area is available to administrator users only. Dolibarr user permissions cannot change this restriction.
|
SystemAreaForAdminOnly=This area is available to administrator users only. Dolibarr user permissions cannot change this restriction.
|
||||||
CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
|
CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
|
||||||
AccountantDesc=Edit the details of your accountant/bookkeeper
|
AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information.
|
||||||
AccountantFileNumber=Accountant code
|
AccountantFileNumber=Accountant code
|
||||||
DisplayDesc=Parameters affecting the look and behaviour of Dolibarr can be modified here.
|
DisplayDesc=Parameters affecting the look and behaviour of Dolibarr can be modified here.
|
||||||
AvailableModules=Available app/modules
|
AvailableModules=Available app/modules
|
||||||
|
|||||||
@ -106,13 +106,13 @@ if (empty($reshook))
|
|||||||
|
|
||||||
// Visible
|
// Visible
|
||||||
$alwayscheckedmodules=array('barcode','bookmark','categorie','externalrss','fckeditor','geoipmaxmind','gravatar','memcached','syslog','user','webservices'); // Technical module we always want
|
$alwayscheckedmodules=array('barcode','bookmark','categorie','externalrss','fckeditor','geoipmaxmind','gravatar','memcached','syslog','user','webservices'); // Technical module we always want
|
||||||
$alwaysuncheckedmodules=array('dynamicprices','incoterm','loan','multicurrency','paybox','paypal','stripe','google','printing','scanner','skype','workflow'); // Module we dont want by default
|
$alwaysuncheckedmodules=array('dav','dynamicprices','incoterm','loan','multicurrency','paybox','paypal','stripe','google','printing','scanner','skype','takepos','workflow','website'); // Module we dont want by default
|
||||||
// Not visible
|
// Not visible
|
||||||
$alwayshiddencheckedmodules=array('accounting','api','barcode','blockedlog','bookmark','clicktodial','comptabilite','cron','document','domain','externalrss','externalsite','fckeditor','geoipmaxmind','gravatar','label','ldap',
|
$alwayshiddencheckedmodules=array('accounting','api','barcode','blockedlog','bookmark','clicktodial','comptabilite','cron','document','domain','externalrss','externalsite','fckeditor','geoipmaxmind','gravatar','label','ldap',
|
||||||
'mailmanspip','notification','oauth','syslog','user','webservices',
|
'mailmanspip','notification','oauth','syslog','user','webservices',
|
||||||
// Extended modules
|
// Extended modules
|
||||||
'memcached','numberwords','zipautofillfr');
|
'memcached','numberwords','zipautofillfr');
|
||||||
$alwayshiddenuncheckedmodules=array('ftp','hrm','webservicesclient','websites',
|
$alwayshiddenuncheckedmodules=array('debugbar','emailcollector','ftp','hrm','modulebuilder','webservicesclient','websites',
|
||||||
// Extended modules
|
// Extended modules
|
||||||
'awstats','bittorrent','bootstrap','cabinetmed','cmcic','concatpdf','customfield','deplacement','dolicloud','filemanager','lightbox','mantis','monitoring','moretemplates','multicompany','nltechno','numberingpack','openstreetmap',
|
'awstats','bittorrent','bootstrap','cabinetmed','cmcic','concatpdf','customfield','deplacement','dolicloud','filemanager','lightbox','mantis','monitoring','moretemplates','multicompany','nltechno','numberingpack','openstreetmap',
|
||||||
'ovh','phenix','phpsysinfo','pibarcode','postnuke','selectbank','skincoloreditor','submiteverywhere','survey','thomsonphonebook','topten','tvacerfa','voyage','webcalendar','webmail');
|
'ovh','phenix','phpsysinfo','pibarcode','postnuke','selectbank','skincoloreditor','submiteverywhere','survey','thomsonphonebook','topten','tvacerfa','voyage','webcalendar','webmail');
|
||||||
|
|||||||
@ -135,7 +135,7 @@ class FactureFournisseurTest extends PHPUnit_Framework_TestCase
|
|||||||
$localobject->initAsSpecimen();
|
$localobject->initAsSpecimen();
|
||||||
$result=$localobject->create($user);
|
$result=$localobject->create($user);
|
||||||
|
|
||||||
$this->assertLessThan($result, 0);
|
$this->assertLessThan($result, 0, $localobject->errorsToString());
|
||||||
print __METHOD__." result=".$result."\n";
|
print __METHOD__." result=".$result."\n";
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
@ -160,7 +160,7 @@ class FactureFournisseurTest extends PHPUnit_Framework_TestCase
|
|||||||
$localobject=new FactureFournisseur($this->savdb);
|
$localobject=new FactureFournisseur($this->savdb);
|
||||||
$result=$localobject->fetch($id);
|
$result=$localobject->fetch($id);
|
||||||
|
|
||||||
$this->assertLessThan($result, 0);
|
$this->assertLessThan($result, 0, $localobject->errorsToString());
|
||||||
print __METHOD__." id=".$id." result=".$result."\n";
|
print __METHOD__." id=".$id." result=".$result."\n";
|
||||||
return $localobject;
|
return $localobject;
|
||||||
}
|
}
|
||||||
@ -186,7 +186,7 @@ class FactureFournisseurTest extends PHPUnit_Framework_TestCase
|
|||||||
$result=$localobject->update($user);
|
$result=$localobject->update($user);
|
||||||
|
|
||||||
print __METHOD__." id=".$localobject->id." result=".$result."\n";
|
print __METHOD__." id=".$localobject->id." result=".$result."\n";
|
||||||
$this->assertLessThan($result, 0);
|
$this->assertLessThan($result, 0, $localobject->errorsToString());
|
||||||
return $localobject;
|
return $localobject;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ class FactureFournisseurTest extends PHPUnit_Framework_TestCase
|
|||||||
$result=$localobject->validate($user);
|
$result=$localobject->validate($user);
|
||||||
print __METHOD__." id=".$localobject->id." result=".$result."\n";
|
print __METHOD__." id=".$localobject->id." result=".$result."\n";
|
||||||
|
|
||||||
$this->assertLessThan($result, 0);
|
$this->assertLessThan($result, 0, $localobject->errorsToString());
|
||||||
return $localobject;
|
return $localobject;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +265,7 @@ class FactureFournisseurTest extends PHPUnit_Framework_TestCase
|
|||||||
$result=$localobject->delete($user);
|
$result=$localobject->delete($user);
|
||||||
|
|
||||||
print __METHOD__." id=".$id." result=".$result."\n";
|
print __METHOD__." id=".$id." result=".$result."\n";
|
||||||
$this->assertLessThan($result, 0);
|
$this->assertLessThan($result, 0, $localobject->errorsToString());
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user