From 0acb391b361fcbc0889db9806e804af6b6a8a0ea Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 3 Oct 2017 05:27:08 +0200 Subject: [PATCH 01/14] Fix : label_operation on general ledger --- htdocs/accountancy/bookkeeping/list.php | 130 ++++++++++----------- htdocs/accountancy/journal/bankjournal.php | 37 +++--- 2 files changed, 86 insertions(+), 81 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index c87b906f45e..30db29db927 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -98,8 +98,8 @@ $form = new Form($db); if ($action != 'export_file' && ! isset($_POST['begin']) && ! isset($_GET['begin']) && ! isset($_POST['formfilteraction']) && empty($page)) { - $search_date_start = dol_mktime(0, 0, 0, 1, 1, dol_print_date(dol_now(), '%Y')); - $search_date_end = dol_mktime(0, 0, 0, 12, 31, dol_print_date(dol_now(), '%Y')); + $search_date_start = dol_mktime(0, 0, 0, 1, 1, dol_print_date(dol_now(), '%Y')); + $search_date_end = dol_mktime(0, 0, 0, 12, 31, dol_print_date(dol_now(), '%Y')); } @@ -134,67 +134,67 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x', $param = ''; $filter = array (); if (! empty($search_date_start)) { - $filter['t.doc_date>='] = $search_date_start; - $tmp=dol_getdate($search_date_start); - $param .= '&date_startmonth=' . $tmp['mon'] . '&date_startday=' . $tmp['mday'] . '&date_startyear=' . $tmp['year']; + $filter['t.doc_date>='] = $search_date_start; + $tmp=dol_getdate($search_date_start); + $param .= '&date_startmonth=' . $tmp['mon'] . '&date_startday=' . $tmp['mday'] . '&date_startyear=' . $tmp['year']; } if (! empty($search_date_end)) { - $filter['t.doc_date<='] = $search_date_end; - $tmp=dol_getdate($search_date_end); - $param .= '&date_endmonth=' . $tmp['mon'] . '&date_endday=' . $tmp['mday'] . '&date_endyear=' . $tmp['year']; + $filter['t.doc_date<='] = $search_date_end; + $tmp=dol_getdate($search_date_end); + $param .= '&date_endmonth=' . $tmp['mon'] . '&date_endday=' . $tmp['mday'] . '&date_endyear=' . $tmp['year']; } if (! empty($search_doc_date)) { - $filter['t.doc_date'] = $search_doc_date; - $tmp=dol_getdate($search_doc_date); - $param .= '&doc_datemonth=' . $tmp['mon'] . '&doc_dateday=' . $tmp['mday'] . '&doc_dateyear=' . $tmp['year']; + $filter['t.doc_date'] = $search_doc_date; + $tmp=dol_getdate($search_doc_date); + $param .= '&doc_datemonth=' . $tmp['mon'] . '&doc_dateday=' . $tmp['mday'] . '&doc_dateyear=' . $tmp['year']; } if (! empty($search_doc_type)) { - $filter['t.doc_type'] = $search_doc_type; - $param .= '&search_doc_type=' . $search_doc_type; + $filter['t.doc_type'] = $search_doc_type; + $param .= '&search_doc_type=' . $search_doc_type; } if (! empty($search_doc_ref)) { - $filter['t.doc_ref'] = $search_doc_ref; - $param .= '&search_doc_ref=' . $search_doc_ref; + $filter['t.doc_ref'] = $search_doc_ref; + $param .= '&search_doc_ref=' . $search_doc_ref; } if (! empty($search_accountancy_code)) { - $filter['t.numero_compte'] = $search_accountancy_code; - $param .= '&search_accountancy_code=' . $search_accountancy_code; + $filter['t.numero_compte'] = $search_accountancy_code; + $param .= '&search_accountancy_code=' . $search_accountancy_code; } if (! empty($search_accountancy_code_start)) { - $filter['t.numero_compte>='] = $search_accountancy_code_start; - $param .= '&search_accountancy_code_start=' . $search_accountancy_code_start; + $filter['t.numero_compte>='] = $search_accountancy_code_start; + $param .= '&search_accountancy_code_start=' . $search_accountancy_code_start; } if (! empty($search_accountancy_code_end)) { - $filter['t.numero_compte<='] = $search_accountancy_code_end; - $param .= '&search_accountancy_code_end=' . $search_accountancy_code_end; + $filter['t.numero_compte<='] = $search_accountancy_code_end; + $param .= '&search_accountancy_code_end=' . $search_accountancy_code_end; } if (! empty($search_accountancy_aux_code)) { - $filter['t.subledger_account'] = $search_accountancy_aux_code; - $param .= '&search_accountancy_aux_code=' . $search_accountancy_aux_code; + $filter['t.subledger_account'] = $search_accountancy_aux_code; + $param .= '&search_accountancy_aux_code=' . $search_accountancy_aux_code; } if (! empty($search_accountancy_aux_code_start)) { - $filter['t.subledger_account>='] = $search_accountancy_aux_code_start; - $param .= '&search_accountancy_aux_code_start=' . $search_accountancy_aux_code_start; + $filter['t.subledger_account>='] = $search_accountancy_aux_code_start; + $param .= '&search_accountancy_aux_code_start=' . $search_accountancy_aux_code_start; } if (! empty($search_accountancy_aux_code_end)) { - $filter['t.subledger_account<='] = $search_accountancy_aux_code_end; - $param .= '&search_accountancy_aux_code_end=' . $search_accountancy_aux_code_end; + $filter['t.subledger_account<='] = $search_accountancy_aux_code_end; + $param .= '&search_accountancy_aux_code_end=' . $search_accountancy_aux_code_end; } if (! empty($search_mvt_label)) { - $filter['t.label_operation'] = $search_mvt_label; - $param .= '&search_mvt_label=' . $search_mvt_label; + $filter['t.label_operation'] = $search_mvt_label; + $param .= '&search_mvt_label=' . $search_mvt_label; } if (! empty($search_direction)) { - $filter['t.sens'] = $search_direction; - $param .= '&search_direction=' . $search_direction; + $filter['t.sens'] = $search_direction; + $param .= '&search_direction=' . $search_direction; } if (! empty($search_ledger_code)) { - $filter['t.code_journal'] = $search_ledger_code; - $param .= '&search_ledger_code=' . $search_ledger_code; + $filter['t.code_journal'] = $search_ledger_code; + $param .= '&search_ledger_code=' . $search_ledger_code; } if (! empty($search_mvt_num)) { - $filter['t.piece_num'] = $search_mvt_num; - $param .= '&search_mvt_num=' . $search_mvt_num; + $filter['t.piece_num'] = $search_mvt_num; + $param .= '&search_mvt_num=' . $search_mvt_num; } if ($action == 'delbookkeeping') { @@ -229,16 +229,16 @@ if ($action == 'delbookkeepingyearconfirm') { } else { - setEventMessages("RecordDeleted", null, 'mesgs'); + setEventMessages("RecordDeleted", null, 'mesgs'); } Header("Location: list.php"); exit; } else { - setEventMessages("NoRecordDeleted", null, 'warnings'); - Header("Location: list.php"); - exit; + setEventMessages("NoRecordDeleted", null, 'warnings'); + Header("Location: list.php"); + exit; } } if ($action == 'delmouvconfirm') { @@ -248,11 +248,11 @@ if ($action == 'delmouvconfirm') { if (! empty($mvt_num)) { $result = $object->deleteMvtNum($mvt_num); if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } else { - setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); + setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); } Header("Location: list.php"); exit; @@ -262,21 +262,21 @@ if ($action == 'delmouvconfirm') { // Export into a file with format defined into setup if ($action == 'export_file') { - $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter); + $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter); - if ($result < 0) - { - setEventMessages($object->error, $object->errors, 'errors'); - } - else - { - $accountancyexport = new AccountancyExport($db); - $accountancyexport->export($object->lines); - if (!empty($accountancyexport->errors)) { - setEventMessages('', $accountancyexport->errors, 'errors'); - } - exit; - } + if ($result < 0) + { + setEventMessages($object->error, $object->errors, 'errors'); + } + else + { + $accountancyexport = new AccountancyExport($db); + $accountancyexport->export($object->lines); + if (!empty($accountancyexport->errors)) { + setEventMessages('', $accountancyexport->errors, 'errors'); + } + exit; + } } @@ -330,7 +330,7 @@ if ($action == 'delbookkeepingyear') { ); $form_question['deljournal'] = array ( 'name' => 'deljournal', - 'type' => 'other', // We don't use select here, the journal_array is already a select html component + 'type' => 'other', // We don't use select here, the journal_array is already a select html component 'label' => $langs->trans('DelJournal'), 'value' => $journal_array, 'default' => $deljournal @@ -340,7 +340,7 @@ if ($action == 'delbookkeepingyear') { print $formconfirm; } -//$param=''; param started before +//$param=''; param started before if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; @@ -399,28 +399,28 @@ print ''; print ''; print '
'; print $langs->trans('From').' '; -// TODO For the moment we keep a fre input text instead of a combo. The select_auxaccount has problem because it does not +// TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because it does not // use setup of keypress to select thirdparty and this hang browser on large database. if (! empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) { - print $formaccounting->select_auxaccount($search_accountancy_aux_code_start, 'search_accountancy_aux_code_start', 1); + print $formaccounting->select_auxaccount($search_accountancy_aux_code_start, 'search_accountancy_aux_code_start', 1); } else { - print ''; + print ''; } print '
'; print '
'; print $langs->trans('to').' '; -// TODO For the moment we keep a fre input text instead of a combo. The select_auxaccount has problem because it does not +// TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because it does not // use setup of keypress to select thirdparty and this hang browser on large database. if (! empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) { - print $formaccounting->select_auxaccount($search_accountancy_aux_code_end, 'search_accountancy_aux_code_end', 1); + print $formaccounting->select_auxaccount($search_accountancy_aux_code_end, 'search_accountancy_aux_code_end', 1); } else { - print ''; + print ''; } print '
'; print ''; @@ -489,8 +489,8 @@ while ($i < min($num, $limit)) } print ''; -if ($num < $limit) print ''.$langs->trans("Total").''; -else print ''.$langs->trans("Totalforthispage").''; +if ($num < $limit) print ''.$langs->trans("Total").''; +else print ''.$langs->trans("Totalforthispage").''; print ''; print ''; print price($total_debit); diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index bfa0c342245..0470fe83cb1 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -422,7 +422,6 @@ if (! $error && $action == 'writebookkeeping') { $bookkeeping->fk_doc = $key; $bookkeeping->fk_docdet = $val["fk_bank"]; $bookkeeping->numero_compte = $k; - $bookkeeping->label_operation = $val["label"]; $bookkeeping->label_compte = $langs->trans("Bank"); $bookkeeping->montant = $mt; $bookkeeping->sens = ($mt >= 0) ? 'D' : 'C'; @@ -433,21 +432,28 @@ if (! $error && $action == 'writebookkeeping') { $bookkeeping->fk_user_author = $user->id; $bookkeeping->date_create = $now; - // No subledger_account value for the bank line + // No subledger_account value for the bank line but add a specific label_operation if ($tabtype[$key] == 'payment') { $bookkeeping->subledger_account = ''; + $bookkeeping->label_operation = $tabcompany[$key]['name'] . ' - ' . $ref; } else if ($tabtype[$key] == 'payment_supplier') { $bookkeeping->subledger_account = ''; + $bookkeeping->label_operation = $tabcompany[$key]['name'] . ' - ' . $ref; } else if ($tabtype[$key] == 'payment_expensereport') { $bookkeeping->subledger_account = ''; + $bookkeeping->label_operation = $tabuser[$key]['name'] . ' - ' . $ref; } else if ($tabtype[$key] == 'payment_salary') { $bookkeeping->subledger_account = ''; + $bookkeeping->label_operation = $tabuser[$key]['name'] . ' - ' . $ref; } else if ($tabtype[$key] == 'payment_vat') { $bookkeeping->subledger_account = ''; + $bookkeeping->label_operation = $ref; } else if ($tabtype[$key] == 'payment_donation') { $bookkeeping->subledger_account = ''; + $bookkeeping->label_operation = $ref; } else if ($tabtype[$key] == 'payment_various') { $bookkeeping->subledger_account = ''; + $bookkeeping->label_operation = $ref; } else if ($tabtype[$key] == 'unknown') { // ??? $bookkeeping->subledger_account = ''; @@ -484,7 +490,6 @@ if (! $error && $action == 'writebookkeeping') { $bookkeeping->doc_type = 'bank'; $bookkeeping->fk_doc = $key; $bookkeeping->fk_docdet = $val["fk_bank"]; - $bookkeeping->label_operation = $tabcompany[$key]['name']; $bookkeeping->montant = $mt; $bookkeeping->sens = ($mt < 0) ? 'D' : 'C'; $bookkeeping->debit = ($mt < 0 ? - $mt : 0); @@ -495,55 +500,55 @@ if (! $error && $action == 'writebookkeeping') { $bookkeeping->date_create = $now; if ($tabtype[$key] == 'payment') { // If payment is payment of customer invoice, we get ref of invoice - $bookkeeping->label_operation = ''; + $bookkeeping->label_operation = $tabcompany[$key]['name'] . ' - ' . $ref; $bookkeeping->subledger_account = $tabcompany[$key]['code_compta']; $bookkeeping->subledger_label = $tabcompany[$key]['name']; $bookkeeping->numero_compte = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER; $bookkeeping->label_compte = ''; } else if ($tabtype[$key] == 'payment_supplier') { // If payment is payment of supplier invoice, we get ref of invoice - $bookkeeping->label_operation = ''; + $bookkeeping->label_operation = $tabcompany[$key]['name'] . ' - ' . $ref; $bookkeeping->subledger_account = $tabcompany[$key]['code_compta']; $bookkeeping->subledger_label = $tabcompany[$key]['name']; $bookkeeping->numero_compte = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER; $bookkeeping->label_compte = ''; } else if ($tabtype[$key] == 'payment_expensereport') { - $bookkeeping->label_operation = $tabuser[$key]['name']; + $bookkeeping->label_operation = $tabuser[$key]['name'] . ' - ' . $ref; $bookkeeping->subledger_account = $tabuser[$key]['accountancy_code']; $bookkeeping->subledger_label = $tabuser[$key]['name']; $bookkeeping->numero_compte = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT; $bookkeeping->label_compte = ''; } else if ($tabtype[$key] == 'payment_salary') { - $bookkeeping->label_operation = $tabuser[$key]['name']; + $bookkeeping->label_operation = $tabuser[$key]['name'] . ' - ' . $ref; $bookkeeping->subledger_account = $tabuser[$key]['accountancy_code']; $bookkeeping->subledger_label = $tabuser[$key]['name']; $bookkeeping->numero_compte = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT; $bookkeeping->label_compte = ''; } else if (in_array($tabtype[$key], array('sc', 'payment_sc'))) { // If payment is payment of social contribution - $bookkeeping->label_operation = ''; + $bookkeeping->label_operation = $ref; $bookkeeping->subledger_account = ''; $bookkeeping->subledger_label = ''; $bookkeeping->numero_compte = $k; $bookkeeping->label_compte = $objmid->labelc; } else if ($tabtype[$key] == 'payment_vat') { - $bookkeeping->label_operation = ''; + $bookkeeping->label_operation = $ref; $bookkeeping->subledger_account = ''; $bookkeeping->subledger_label = ''; $bookkeeping->numero_compte = $k; $bookkeeping->label_compte = ''; } else if ($tabtype[$key] == 'payment_donation') { - $bookkeeping->label_operation = ''; + $bookkeeping->label_operation = $ref; $bookkeeping->subledger_account = ''; $bookkeeping->subledger_label = ''; $bookkeeping->numero_compte = $k; $bookkeeping->label_compte = ''; } else if ($tabtype[$key] == 'payment_various') { - $bookkeeping->label_operation = ''; + $bookkeeping->label_operation = $ref; $bookkeeping->subledger_account = ''; $bookkeeping->subledger_label = ''; $bookkeeping->numero_compte = $k; $bookkeeping->label_compte = ''; } else if ($tabtype[$key] == 'banktransfert') { - $bookkeeping->label_operation = ''; + $bookkeeping->label_operation = $ref; $bookkeeping->subledger_account = ''; $bookkeeping->subledger_label = ''; $bookkeeping->numero_compte = $k; @@ -676,9 +681,9 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; print " " . $sep; if ($companystatic->name == '') { - print '"' . $langs->trans('Bank') . " - " . utf8_decode($reflabel) . '"' . $sep; + print '"' . $val['bank_account_ref'] . " - " . utf8_decode($reflabel) . '"' . $sep; } else { - print '"' . $langs->trans("Bank") . ' - ' . utf8_decode($companystatic->name) . '"' . $sep; + print '"' . $val['bank_account_ref'] . ' - ' . utf8_decode($companystatic->name) . '"' . $sep; } print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; print '"' . ($mt < 0 ? price(- $mt) : '') . '"'; @@ -720,9 +725,9 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! print '"' . length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE) . '"' . $sep; print " " . $sep; if ($companystatic->name == '') { - print '"' . $langs->trans("Bank") . ' - ' . utf8_decode($reflabel) . '"' . $sep; + print '"' . $val['bank_account_ref'] . ' - ' . utf8_decode($reflabel) . '"' . $sep; } else { - print '"' . $langs->trans("Bank") . ' - ' . utf8_decode($companystatic->name) . '"' . $sep; + print '"' . $val['bank_account_ref'] . ' - ' . utf8_decode($companystatic->name) . '"' . $sep; } print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; print '"' . ($mt >= 0 ? price($mt) : '') . '"'; From a3096b4e9daabed148baa54a075dcfeb60fd0f40 Mon Sep 17 00:00:00 2001 From: Neil Orley Date: Wed, 4 Oct 2017 15:59:54 +0200 Subject: [PATCH 02/14] NEW Generates the document before downloading using REST API Generates the document before downloading using REST API --- htdocs/api/class/api_documents.class.php | 26 +++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index 4d0efb63d62..d1c544d4cb8 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -23,6 +23,7 @@ use Luracast\Restler\Format\UploadFormat; require_once DOL_DOCUMENT_ROOT.'/main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; /** * API class for receive files @@ -51,19 +52,22 @@ class Documents extends DolibarrApi /** - * Return list of documents. + * Returns a document. * * @param string $module_part Name of module or area concerned by file download ('facture', ...) * @param string $ref Reference of object (This will define subdir automatically) * @param string $subdir NOT YET AVAILABLE : Subdirectory (Only if ref not provided) * @return array List of documents * + * @throws 500 + * @throws 501 * @throws 400 * @throws 401 - * @throws 200 OK + * @throws 200 */ public function index($module_part, $ref='', $subdir='') { global $conf; + $this->invoice = new Facture($this->db); if (empty($module_part)) { throw new RestException(400, 'bad value for parameter modulepart'); @@ -72,12 +76,28 @@ class Documents extends DolibarrApi throw new RestException(400, 'bad value for parameter ref or subdir'); } if (empty($ref)) { - throw new RestException(404, 'FeatureNotYetAvailable'); + throw new RestException(501, 'FeatureNotYetAvailable'); } if (!DolibarrApiAccess::$user->rights->ecm->read) { throw new RestException(401); } + + //--- Generates the document + $hidedetails = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 0 : 1; + $hidedesc = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 0 : 1; + $hideref = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 0 : 1; + $result = $this->invoice->fetch(0, $ref); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } + $result = $this->invoice->generateDocument($this->invoice->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); + if( $result <= 0 ) { + throw new RestException(500, 'Error generating document'); + } + + + //--- Finds and returns the document $original_file = str_replace("../","/", $ref.'/'.$ref.'.pdf'); $refname=basename(dirname($original_file)."/"); $entity=$conf->entity; From 1cee16a8021860c4f2bb7d24d07bb035a9a8d3c6 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 4 Oct 2017 18:32:52 +0200 Subject: [PATCH 03/14] Fix: minimal num, maj and special character with value 0 not work --- .../security/generate/modGeneratePassPerso.class.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php index af08ae53392..96041bcac2c 100644 --- a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php +++ b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php @@ -1,6 +1,7 @@ - * Copyright (C) 2014 Teddy Andreotti <125155@supinfo.com> +/* Copyright (C) 2006-2011 Laurent Destailleur + * Copyright (C) 2014 Teddy Andreotti <125155@supinfo.com> + * Copyright (C) 2017 Regis Houssin * * 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 @@ -98,7 +99,10 @@ class modGeneratePassPerso extends ModeleGenPassword $this->Spe = str_replace($this->Ambi,"",$this->Spe); } - $this->All = str_shuffle($this->Maj. $this->Min. $this->Nb. $this->Spe); + $pattern = $this->Min . (! empty($this->NbMaj)?$this->Maj:'') . (! empty($this->NbNum)?$this->Nb:'') . (! empty($this->NbSpe)?$this->Spe:''); + $this->All = str_shuffle($pattern); + + //$this->All = str_shuffle($this->Maj. $this->Min. $this->Nb. $this->Spe); //$this->All = $this->Maj. $this->Min. $this->Nb. $this->Spe; //$this->All = $this->Spe; From 6540bc0061761e2a96ae5782b90aee822ee39da1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Oct 2017 19:48:11 +0200 Subject: [PATCH 04/14] Fix doxygen --- htdocs/categories/class/categorie.class.php | 2 +- htdocs/core/class/comment.class.php | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index 6027f76ec58..6242691d1f1 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -882,7 +882,7 @@ class Categorie extends CommonObject /** * List categories of an element id * - * @param int $item Id of element + * @param int $id Id of element * @param string $type Type of category ('member', 'customer', 'supplier', 'product', 'contact') * @param string $sortfield Sort field * @param string $sortorder Sort order diff --git a/htdocs/core/class/comment.class.php b/htdocs/core/class/comment.class.php index 0ec77405721..4a0f4154844 100644 --- a/htdocs/core/class/comment.class.php +++ b/htdocs/core/class/comment.class.php @@ -1,4 +1,4 @@ -db = $db; } - + /** * Create into database @@ -280,12 +280,14 @@ class Comment extends CommonObject return 1; } } - - + + /** * Load comments linked with current task * - * @return array Comment array + * @param string $element_type Element type + * @param int $fk_element Id of element + * @return array Comment array */ public static function fetchAllFor($element_type, $fk_element) { @@ -299,7 +301,7 @@ class Comment extends CommonObject $sql.= " AND c.element_type = '".$element_type."'"; $sql.= " AND c.entity = ".$conf->entity; $sql.= " ORDER BY c.tms DESC"; - + dol_syslog("Comment::fetchAllFor", LOG_DEBUG); $resql=$db->query($sql); if ($resql) From f1b7b36a11a6abf55a3a1f418dd638914bd83b3c Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Thu, 5 Oct 2017 05:38:02 +0200 Subject: [PATCH 05/14] Fix : problem on column in customer to bind index --- htdocs/accountancy/customer/index.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index 4aad88df54d..86327b27636 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -1,9 +1,9 @@ - * Copyright (C) 2013-2014 Florian Henry - * Copyright (C) 2013-2016 Alexandre Spangaro - * Copyright (C) 2014 Juanjo Menent - * Copyright (C) 2015 Jean-François Ferry +/* Copyright (C) 2013 Olivier Geffroy + * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013-2017 Alexandre Spangaro + * Copyright (C) 2014 Juanjo Menent + * Copyright (C) 2015 Jean-François Ferry * * 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 @@ -310,6 +310,7 @@ if ($resql) { } else print length_accountg($row[0]); print ''; + print ''; if ($row[0] == 'tobind') { @@ -317,7 +318,7 @@ if ($resql) { } else print $row[1]; print ''; - print '' . $row[1] . ''; + for($i = 2; $i <= 12; $i ++) { print '' . price($row[$i]) . ''; } From 2f49b00f6c42017acc9f8f909afe6a289e9d111c Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Thu, 5 Oct 2017 06:56:13 +0200 Subject: [PATCH 06/14] Fix : some small problems on accountancy --- htdocs/accountancy/bookkeeping/card.php | 2 +- .../bookkeeping/thirdparty_lettrage.php | 2 +- .../thirdparty_lettrage_supplier.php | 2 +- htdocs/accountancy/journal/bankjournal.php | 18 ++++---- .../journal/expensereportsjournal.php | 20 ++++----- .../accountancy/journal/purchasesjournal.php | 45 ++++++++++--------- htdocs/accountancy/journal/sellsjournal.php | 27 ++++++----- htdocs/langs/en_US/accountancy.lang | 3 +- 8 files changed, 60 insertions(+), 59 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index d3252b01a18..81adbcb266b 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -569,7 +569,7 @@ if ($action == 'create') { print_liste_field_titre("AccountAccountingShort"); print_liste_field_titre("SubledgerAccount"); - print_liste_field_titre("Labelcompte"); + print_liste_field_titre("LabelAccount"); print_liste_field_titre("Label"); print_liste_field_titre("Debit", "", "", "", "", 'align="right"'); print_liste_field_titre("Credit", "", "", "", "", 'align="right"'); diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettrage.php b/htdocs/accountancy/bookkeeping/thirdparty_lettrage.php index 5f621a55186..f2cce5bee91 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettrage.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettrage.php @@ -196,7 +196,7 @@ llxHeader ( '', 'Compta - Grand Livre' ); print_liste_field_titre("Docref", "liste.php", "bk.doc_ref" ); // print_liste_field_titre("Numerocompte", "liste.php", "bk.numero_compte" ); // print_liste_field_titre("Code_tiers", "liste.php", "bk.code_tiers" ); - print_liste_field_titre("Labelcompte", "liste.php", "bk_label_compte" ); + print_liste_field_titre("LabelAccount", "liste.php", "bk_label_compte" ); print_liste_field_titre("Debit", "liste.php", "bk.debit" ); print_liste_field_titre("Credit", "liste.php", "bk.credit" ); // print_liste_field_titre("Amount", "liste.php", "bk.montant" ); diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php b/htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php index 623e54f71fb..f98cb74a456 100644 --- a/htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php @@ -205,7 +205,7 @@ llxHeader ( '', 'Compta - Grand Livre' ); print_liste_field_titre("Docref", "liste.php", "bk.doc_ref" ); // print_liste_field_titre("Numerocompte", "liste.php", "bk.numero_compte" ); // print_liste_field_titre("Code_tiers", "liste.php", "bk.code_tiers" ); - print_liste_field_titre("Labelcompte", "liste.php", "bk_label_compte" ); + print_liste_field_titre("LabelAccount", "liste.php", "bk_label_compte" ); print_liste_field_titre("Debit", "liste.php", "bk.debit" ); print_liste_field_titre("Credit", "liste.php", "bk.credit" ); print_liste_field_titre("Amount", "liste.php", "bk.montant" ); diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 0470fe83cb1..8f17fad4e17 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -1,12 +1,12 @@ - * Copyright (C) 2007-2010 Jean Heimburger - * Copyright (C) 2011 Juanjo Menent - * Copyright (C) 2012 Regis Houssin - * Copyright (C) 2013 Christophe Battarel - * Copyright (C) 2013-2017 Alexandre Spangaro - * Copyright (C) 2013-2014 Florian Henry - * Copyright (C) 2013-2014 Olivier Geffroy +/* Copyright (C) 2007-2010 Laurent Destailleur + * Copyright (C) 2007-2010 Jean Heimburger + * Copyright (C) 2011 Juanjo Menent + * Copyright (C) 2012 Regis Houssin + * Copyright (C) 2013 Christophe Battarel + * Copyright (C) 2013-2017 Alexandre Spangaro + * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013-2014 Olivier Geffroy * * 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 @@ -828,7 +828,7 @@ if (empty($action) || $action == 'view') { print "" . $langs->trans("Piece") . ' (' . $langs->trans("ObjectsRef") . ")"; print "" . $langs->trans("AccountAccounting") . ""; print "" . $langs->trans("SubledgerAccount") . ""; - print "" . $langs->trans("Label") . ""; + print "" . $langs->trans("LabelOperation") . ""; print "" . $langs->trans("PaymentMode") . ""; print "" . $langs->trans("Debit") . ""; print "" . $langs->trans("Credit") . ""; diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index f5ad584399e..c73286a8bdd 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -1,11 +1,11 @@ - * Copyright (C) 2007-2010 Jean Heimburger - * Copyright (C) 2011 Juanjo Menent - * Copyright (C) 2012 Regis Houssin - * Copyright (C) 2013-2017 Alexandre Spangaro - * Copyright (C) 2013-2016 Olivier Geffroy - * Copyright (C) 2013-2016 Florian Henry +/* Copyright (C) 2007-2010 Laurent Destailleur + * Copyright (C) 2007-2010 Jean Heimburger + * Copyright (C) 2011 Juanjo Menent + * Copyright (C) 2012 Regis Houssin + * Copyright (C) 2013-2017 Alexandre Spangaro + * Copyright (C) 2013-2016 Olivier Geffroy + * Copyright (C) 2013-2016 Florian Henry * * 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 @@ -298,7 +298,7 @@ if ($action == 'writebookkeeping') { $bookkeeping->subledger_account = ''; $bookkeeping->subledger_label = ''; $bookkeeping->numero_compte = $k; - $bookkeeping->label_operation = $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]); + $bookkeeping->label_operation = $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]).' %'; $bookkeeping->montant = $mt; $bookkeeping->sens = ($mt < 0) ? 'C' : 'D'; $bookkeeping->debit = ($mt > 0) ? $mt : 0; @@ -552,7 +552,7 @@ if (empty($action) || $action == 'view') { print "" . $langs->trans("Piece") . ' (' . $langs->trans("ExpenseReportRef") . ")"; print "" . $langs->trans("AccountAccounting") . ""; print "" . $langs->trans("SubledgerAccount") . ""; - print "" . $langs->trans("Label") . ""; + print "" . $langs->trans("LabelOperation") . ""; print "" . $langs->trans("Debit") . ""; print "" . $langs->trans("Credit") . ""; print "\n"; @@ -659,7 +659,7 @@ if (empty($action) || $action == 'view') { // Subledger account print ""; print ''; - print "" . $userstatic->getNomUrl(0, 'user', 16) . ' - ' . $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]).($numtax?' - Localtax '.$numtax:''); + print "" . $userstatic->getNomUrl(0, 'user', 16) . ' - ' . $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print ""; print '' . ($mt >= 0 ? price($mt) : '') . ""; print '' . ($mt < 0 ? price(- $mt) : '') . ""; diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 4838e1814bd..8a1c704f87b 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -151,7 +151,7 @@ if ($result) { // Define array to display all VAT rates that use this accounting account $compta_tva if (price2num($obj->tva_tx) || ! empty($obj->vat_src_code)) { - $def_tva[$obj->rowid][$compta_tva][vatrate($obj->tva_tx).($obj->vat_src_code?' ('.$obj->vat_src_code.')':'')]=(vatrate($obj->tva_tx).($obj->vat_src_code?' ('.$obj->vat_src_code.')':'')); + $def_tva[$obj->rowid][$compta_tva][vatrate($obj->tva_tx).($obj->vat_src_code?' ('.$obj->vat_src_code.')':'')]=(vatrate($obj->tva_tx).($obj->vat_src_code?' ('.$obj->vat_src_code.')':'')); } $tabfac[$obj->rowid]["date"] = $db->jdate($obj->df); @@ -224,7 +224,7 @@ if ($action == 'writebookkeeping') { $bookkeeping = new BookKeeping($db); $bookkeeping->doc_date = $val["date"]; $bookkeeping->date_lim_reglement = $val["datereg"]; - $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->doc_ref = $val["refsologest"]; $bookkeeping->date_create = $now; $bookkeeping->doc_type = 'supplier_invoice'; $bookkeeping->fk_doc = $key; @@ -272,7 +272,7 @@ if ($action == 'writebookkeeping') { $bookkeeping = new BookKeeping($db); $bookkeeping->doc_date = $val["date"]; $bookkeeping->date_lim_reglement = $val["datereg"]; - $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->doc_ref = $val["refsologest"]; $bookkeeping->date_create = $now; $bookkeeping->doc_type = 'supplier_invoice'; $bookkeeping->fk_doc = $key; @@ -326,7 +326,7 @@ if ($action == 'writebookkeeping') { $bookkeeping = new BookKeeping($db); $bookkeeping->doc_date = $val["date"]; $bookkeeping->date_lim_reglement = $val["datereg"]; - $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->doc_ref = $val["refsologest"]; $bookkeeping->date_create = $now; $bookkeeping->doc_type = 'supplier_invoice'; $bookkeeping->fk_doc = $key; @@ -335,7 +335,7 @@ if ($action == 'writebookkeeping') { $bookkeeping->subledger_account = ''; $bookkeeping->subledger_label = ''; $bookkeeping->numero_compte = $k; - $bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->refsupplier . ' - ' . $langs->trans("VAT").' '.join(', ',$def_tva[$key][$k]) . ($numtax?' - Localtax '.$numtax:''); + $bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->refsupplier . ' - ' . $langs->trans("VAT").' '.join(', ',$def_tva[$key][$k]) .' %' . ($numtax?' - Localtax '.$numtax:''); $bookkeeping->montant = $mt; $bookkeeping->sens = ($mt < 0) ? 'C' : 'D'; $bookkeeping->debit = ($mt > 0) ? $mt : 0; @@ -374,8 +374,8 @@ if ($action == 'writebookkeeping') { if ($error >= 10) { - setEventMessages($langs->trans("ErrorTooManyErrorsProcessStopped"), null, 'errors'); - break; // Break in the foreach + setEventMessages($langs->trans("ErrorTooManyErrorsProcessStopped"), null, 'errors'); + break; // Break in the foreach } } } @@ -419,7 +419,6 @@ $form = new Form($db); // Export if ($action == 'exportcsv') { $sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV; - $journal = $conf->global->ACCOUNTING_PURCHASE_JOURNAL; include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php'; @@ -445,7 +444,7 @@ if ($action == 'exportcsv') { foreach ( $tabttc[$key] as $k => $mt ) { print '"' . $key . '"' . $sep; print '"' . $date . '"' . $sep; - print '"' . $val["refsuppliersologest"] . '"' . $sep; + print '"' . $val["refsologest"] . '"' . $sep; print '"' . utf8_decode ( dol_trunc($companystatic->name, 32) ). '"' . $sep; print '"' . length_accounta(html_entity_decode($k)) . '"' . $sep; print '"' . $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER . '"' . $sep; @@ -465,11 +464,11 @@ if ($action == 'exportcsv') { if ($mt) { print '"' . $key . '"' . $sep; print '"' . $date . '"' . $sep; - print '"' . $val["refsuppliersologest"] . '"' . $sep; + print '"' . $val["refsologest"] . '"' . $sep; print '"' . utf8_decode ( dol_trunc($companystatic->name, 32) ) . '"' . $sep; print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; - print " " . $sep; + print '""' . $sep; print '"' . utf8_decode ( dol_trunc($accountingaccount->label, 32) ) . '"' . $sep; print '"' . utf8_decode ( dol_trunc($companystatic->name, 16) ) . ' - ' . $val["refsuppliersologest"] . ' - ' . dol_trunc($accountingaccount->label, 32) . '"' . $sep; print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; @@ -478,6 +477,7 @@ if ($action == 'exportcsv') { print "\n"; } } + // VAT $listoftax = array(0, 1, 2); foreach ($listoftax as $numtax) { @@ -489,13 +489,13 @@ if ($action == 'exportcsv') { if ($mt) { print '"' . $key . '"' . $sep; print '"' . $date . '"' . $sep; - print '"' . $val["refsuppliersologest"] . '"' . $sep; + print '"' . $val["refsologest"] . '"' . $sep; print '"' . utf8_decode ( dol_trunc($companystatic->name, 32) ) . '"' . $sep; print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; - print " " . $sep; + print '""' . $sep; print '"' . $langs->trans("VAT") . ' - ' . $def_tva[$key] . '"' . $sep; - print '"' . utf8_decode(dol_trunc($companystatic->name, 16) ) . ' - ' . $val["refsuppliersologest"] . ' - ' . $langs->trans("VAT") . join(', ',$def_tva[$key][$k]) . ($numtax?' - Localtax '.$numtax:'') . '"' . $sep; + print '"' . utf8_decode(dol_trunc($companystatic->name, 16) ) . ' - ' . $val["refsuppliersologest"] . ' - ' . $langs->trans("VAT") . join(', ',$def_tva[$key][$k]) .' %' . ($numtax?' - Localtax '.$numtax:'') . '"' . $sep; print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; print '"' . ($mt < 0 ? price(- $mt) : '') . '"'. $sep; print '"' . $journal . '"' ; @@ -531,15 +531,15 @@ if (empty($action) || $action == 'view') { // Button to write into Ledger if (empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { - print img_warning().' '.$langs->trans("SomeMandatoryStepsOfSetupWereNotDone"); - print ' : '.$langs->trans("AccountancyAreaDescMisc", 4, ''.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuDefaultAccounts").''); + print img_warning().' '.$langs->trans("SomeMandatoryStepsOfSetupWereNotDone"); + print ' : '.$langs->trans("AccountancyAreaDescMisc", 4, ''.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuDefaultAccounts").''); } print '
'; if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { - print ''; + print ''; } else { - print ''; + print ''; } print ''; print '
'; @@ -565,7 +565,7 @@ if (empty($action) || $action == 'view') { print '
'; $i = 0; - print '
'; + print '
'; print ""; print ""; print ""; @@ -573,7 +573,7 @@ if (empty($action) || $action == 'view') { print ""; print ""; print ""; - print ""; + print ""; print ""; print ""; print "\n"; @@ -625,8 +625,9 @@ if (empty($action) || $action == 'view') { print ""; print '"; print '"; - print ""; + print ""; } + // Product / Service foreach ( $tabht[$key] as $k => $mt ) { $accountingaccount = new AccountingAccount($db); @@ -683,7 +684,7 @@ if (empty($action) || $action == 'view') { // Subledger account print "'; - print ""; print '"; print '"; diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index c5cd4f53910..32a29177a37 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -156,7 +156,7 @@ if ($result) { $compta_localtax2 = (! empty($vatdata['accountancy_code_sell']) ? $vatdata['accountancy_code_sell'] : $cpttva); // Define array to display all VAT rates that use this accounting account $compta_tva - if (price2num($obj->tva_tx) || ! empty($obj->vat_src_code)) + if (price2num($obj->tva_tx) || ! empty($obj->vat_src_code)) { $def_tva[$obj->rowid][$compta_tva][vatrate($obj->tva_tx).($obj->vat_src_code?' ('.$obj->vat_src_code.')':'')]=(vatrate($obj->tva_tx).($obj->vat_src_code?' ('.$obj->vat_src_code.')':'')); } @@ -353,7 +353,7 @@ if ($action == 'writebookkeeping') { $bookkeeping->subledger_account = ''; $bookkeeping->subledger_label = ''; $bookkeeping->numero_compte = $k; - $bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT").' '.join(', ',$def_tva[$key][$k]) . ($numtax?' - Localtax '.$numtax:''); + $bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT").' '.join(', ',$def_tva[$key][$k]) .' %' . ($numtax?' - Localtax '.$numtax:''); $bookkeeping->montant = $mt; $bookkeeping->sens = ($mt < 0) ? 'D' : 'C'; $bookkeeping->debit = ($mt < 0) ? -$mt : 0; @@ -392,8 +392,8 @@ if ($action == 'writebookkeeping') { if ($error >= 10) { - setEventMessages($langs->trans("ErrorTooManyErrorsProcessStopped"), null, 'errors'); - break; // Break in the foreach + setEventMessages($langs->trans("ErrorTooManyErrorsProcessStopped"), null, 'errors'); + break; // Break in the foreach } } @@ -441,7 +441,6 @@ $form = new Form($db); if ($action == 'exportcsv') { $sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV; - $sell_journal = $conf->global->ACCOUNTING_SELL_JOURNAL; include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php'; @@ -472,7 +471,7 @@ if ($action == 'exportcsv') { print '"' . utf8_decode(dol_trunc($companystatic->name, 16)) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("Code_tiers") . '"' . $sep; print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; - print '"' . $sell_journal . '"'; + print '"' . $journal . '"'; print "\n"; } @@ -487,12 +486,12 @@ if ($action == 'exportcsv') { print '"' . utf8_decode(dol_trunc($companystatic->name, 32)) . '"' . $sep; print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; - print " " . $sep; + print '""' . $sep; print '"' . utf8_decode(dol_trunc($accountingaccount->label, 32)) . '"' . $sep; print '"' . utf8_decode(dol_trunc($companystatic->name, 16)) . ' - ' . dol_trunc($accountingaccount->label, 32) . '"' . $sep; print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; - print '"' . $sell_journal . '"'; + print '"' . $journal . '"'; print "\n"; } } @@ -512,12 +511,12 @@ if ($action == 'exportcsv') { print '"' . utf8_decode(dol_trunc($companystatic->name, 32)) . '"' . $sep; print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; - print " " . $sep; - print '"' . $langs->trans("VAT") . ' - ' . $def_tva[$key] . '"' . $sep; - print '"' . utf8_decode(dol_trunc($companystatic->name, 16)) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT") . join(', ',$def_tva[$key][$k]) . ($numtax?' - Localtax '.$numtax:'') . '"' . $sep; + print '""' . $sep; + print '"' . $langs->trans("VAT") . ' - ' . $def_tva[$key] . ' %"' . $sep; + print '"' . utf8_decode(dol_trunc($companystatic->name, 16)) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT") . join(', ',$def_tva[$key][$k]) .' %' . ($numtax?' - Localtax '.$numtax:'') . '"' . $sep; print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; - print '"' . $sell_journal . '"'; + print '"' . $journal . '"'; print "\n"; } } @@ -593,7 +592,7 @@ if (empty($action) || $action == 'view') { print ""; print ""; print ""; - print ""; + print ""; print ""; print ""; print "\n"; @@ -699,7 +698,7 @@ if (empty($action) || $action == 'view') { // Subledger account print "'; - print ""; print '"; print '"; diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 8ab0ddc018c..eacfe4fc2aa 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -148,7 +148,8 @@ Doctype=Type of document Docdate=Date Docref=Reference Code_tiers=Thirdparty -Labelcompte=Label account +LabelAccount=Label account +LabelOperation=Label operation Sens=Sens Codejournal=Journal NumPiece=Piece number From 04a56d4bd9ce8d7ed8a4ce4d6543e7836ea91466 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Oct 2017 09:34:09 +0200 Subject: [PATCH 07/14] Fix phpunit --- htdocs/install/mysql/migration/6.0.0-7.0.0.sql | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql index fb9e5f8749f..5d87f42faed 100644 --- a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql +++ b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql @@ -253,7 +253,7 @@ CREATE TABLE llx_expensereport_rules ( code_expense_rules_type varchar(50) NOT NULL, is_for_all tinyint DEFAULT '0', entity integer DEFAULT 1 -); +)ENGINE=innodb; ALTER TABLE llx_expensereport_det ADD COLUMN rule_warning_message text; ALTER TABLE llx_expensereport_det ADD COLUMN fk_c_exp_tax_cat integer; @@ -302,8 +302,9 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_CLOSE_SIGNED','Price request closed signed','Executed when a customer proposal is closed signed','proposal_supplier',10); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_CLOSE_REFUSED','Price request closed refused','Executed when a customer proposal is closed refused','proposal_supplier',10); -DROP TABLE `llx_projet_task_comment`; -CREATE TABLE IF NOT EXISTS llx_comment ( +DROP TABLE llx_projet_task_comment; + +CREATE TABLE llx_comment ( rowid integer AUTO_INCREMENT PRIMARY KEY, datec datetime DEFAULT NULL, tms timestamp, From 47306113331448283e24bedd8fd814b07f59b178 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Oct 2017 09:54:48 +0200 Subject: [PATCH 08/14] Add language file button --- htdocs/langs/en_US/modulebuilder.lang | 6 +++--- htdocs/modulebuilder/index.php | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index 73ff04221ef..233e4339bca 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -12,7 +12,7 @@ ObjectKey=Object key ModuleInitialized=Module initialized FilesForObjectInitialized=Files for new object '%s' initialized FilesForObjectUpdated=Files for object '%s' updated (.sql files and .class.php file) -ModuleBuilderDescdescription=Enter here all general information that describe your module +ModuleBuilderDescdescription=Enter here all general information that describe your module. ModuleBuilderDescspecifications=You can enter here a long text to describe the specifications of your module that is not already structured into other tabs. So you have within easy reach all the rules to develop. Also this text content will be included into the generated documentation (see last tab). You can use Markdown format, but it is recommanded to use Asciidoc format (Comparison between .md and .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown) ModuleBuilderDescobjects=Define here the objects you want to manage with your module. A CRUD DAO class, SQL files, page to list record of objects, to create/edit/view a record and an API will be generated. ModuleBuilderDescmenus=This tab is dedicated to define menu entries provided by your module. @@ -77,7 +77,7 @@ SpecDefDesc=Enter here all documentation you want to provide with your module th LanguageDefDesc=Enter in this files, all the key and the translation for each language file. MenusDefDesc=Define here the menus provided by your module (once defined, they are visible into the menu editor %s) PermissionsDefDesc=Define here the new permissions provided by your module (once defined, they are visible into the default permissions setup %s) -HooksDefDesc=Define in the module_parts['hooks'] property in the module descriptor the context of hooks you want to manage (list of contexts can be found by a search on 'initHooks(' in core code).
Edit the hook file to add code of your hooked functions (hookable functions can be found by a search on 'executeHooks' in core code). -TriggerDefDesc=Define in the trigger file the code you want to execute for each business event executed +HooksDefDesc=Define in the module_parts['hooks'] property, in the module descriptor, the context of hooks you want to manage (list of contexts can be found by a search on 'initHooks(' in core code).
Edit the hook file to add code of your hooked functions (hookable functions can be found by a search on 'executeHooks' in core code). +TriggerDefDesc=Define in the trigger file the code you want to execute for each business event executed. SeeIDsInUse=See IDs in use in your installation SeeReservedIDsRangeHere=See range of reserved IDs \ No newline at end of file diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 1e7826ebf16..767370786c1 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -28,6 +28,7 @@ if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION','1'); require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/modulebuilder.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; @@ -764,6 +765,7 @@ if ($action == 'reset' && $user->admin) */ $form = new Form($db); +$formadmin = new FormAdmin($db); // Set dir where external modules are installed if (! dol_is_dir($dirins)) @@ -1252,6 +1254,20 @@ elseif (! empty($module)) print $langs->trans("LanguageDefDesc").'
'; print '
'; + + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT, 'MAIN_LANG_DEFAULT', 1, 0, 0, 0, 0, 'minwidth300', 1); + print '
'; + print ''; + + print '
'; + print '
'; + $langfiles=dol_dir_list(dol_buildpath($modulelowercase.'/langs', 0), 'files', 1, '\.lang$'); foreach ($langfiles as $langfile) From 2a2cd30e1950edb20195b17863c669c172393d2c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Oct 2017 10:00:43 +0200 Subject: [PATCH 09/14] Fix code --- htdocs/core/class/comment.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/comment.class.php b/htdocs/core/class/comment.class.php index 4a0f4154844..870c4f4bccd 100644 --- a/htdocs/core/class/comment.class.php +++ b/htdocs/core/class/comment.class.php @@ -190,7 +190,7 @@ class Comment extends CommonObject $sql.= " description=".(isset($this->description)?"'".$this->db->escape($this->description)."'":"null").","; $sql.= " datec=".($this->datec!=''?"'".$this->db->idate($this->datec)."'":'null').","; $sql.= " fk_element=".(isset($this->fk_element)?$this->fk_element:"null").","; - $sql.= " element_type='".$this->element_type."',"; + $sql.= " element_type='".$this->db->escape($this->element_type)."',"; $sql.= " fk_user_author=".(isset($this->fk_user_author)?$this->fk_user_author:"null").","; $sql.= " entity=".(!empty($this->entity)?$this->entity:'1').","; $sql.= " import_key=".(!empty($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null"); From f0b314dfd721a237dc9364fc1a1a7d5545f8e8d1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Oct 2017 10:21:52 +0200 Subject: [PATCH 10/14] Change signature of file to match other urls to link/download files. --- htdocs/api/class/api_documents.class.php | 149 +++++++++++------------ htdocs/document.php | 1 + 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index d1c544d4cb8..670d47ba3ee 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -23,7 +23,6 @@ use Luracast\Restler\Format\UploadFormat; require_once DOL_DOCUMENT_ROOT.'/main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; /** * API class for receive files @@ -50,13 +49,15 @@ class Documents extends DolibarrApi $this->db = $db; } - + /** - * Returns a document. + * Returns a document. Note that, this API is similar to using the wrapper link "documents.php" to download + * a file (used for internal HTML links of documents into application), but with no need to be into a logged session (no need to post the session cookie). * * @param string $module_part Name of module or area concerned by file download ('facture', ...) - * @param string $ref Reference of object (This will define subdir automatically) - * @param string $subdir NOT YET AVAILABLE : Subdirectory (Only if ref not provided) + * @param string $original_file Relative path with filename, relative to modulepart (for example: IN201701-999/IN201701-999.pdf) + * @param int $regeneratedoc If requested document is the main document of an object, setting this to 1 ask API to regenerate document before returning it (supported for some module_part only). It is no effect in other cases. + * Also, note that setting this to 1 nead write access on object. * @return array List of documents * * @throws 500 @@ -65,70 +66,68 @@ class Documents extends DolibarrApi * @throws 401 * @throws 200 */ - public function index($module_part, $ref='', $subdir='') { - global $conf; - $this->invoice = new Facture($this->db); + public function index($module_part, $original_file='', $regeneratedoc=0) + { + global $conf; - if (empty($module_part)) { - throw new RestException(400, 'bad value for parameter modulepart'); - } - if (empty($ref) && empty($subdir)) { + if (empty($module_part)) { + throw new RestException(400, 'bad value for parameter modulepart'); + } + if (empty($original_file)) { throw new RestException(400, 'bad value for parameter ref or subdir'); } - if (empty($ref)) { - throw new RestException(501, 'FeatureNotYetAvailable'); - } - if (!DolibarrApiAccess::$user->rights->ecm->read) { - throw new RestException(401); - } - - //--- Generates the document - $hidedetails = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 0 : 1; - $hidedesc = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 0 : 1; - $hideref = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 0 : 1; - $result = $this->invoice->fetch(0, $ref); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } - $result = $this->invoice->generateDocument($this->invoice->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); - if( $result <= 0 ) { - throw new RestException(500, 'Error generating document'); + + //--- Finds and returns the document + $entity=$conf->entity; + + $check_access = dol_check_secure_access_document($module_part, $original_file, $entity, DolibarrApiAccess::$user, '', ($regeneratedoc ? 'write' : 'read')); + $accessallowed = $check_access['accessallowed']; + $sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals']; + $original_file = $check_access['original_file']; + + if (preg_match('/\.\./',$original_file) || preg_match('/[<>|]/',$original_file)) + { + throw new RestException(401); + } + if (!$accessallowed) { + throw new RestException(401); + } + + // --- Generates the document + if ($regeneratedoc) + { + $hidedetails = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 0 : 1; + $hidedesc = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 0 : 1; + $hideref = empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 0 : 1; + + if ($module_part == 'facture' || $module_part == 'invoice') + { + require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; + $this->invoice = new Facture($this->db); + $result = $this->invoice->fetch(0, $ref); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } + $result = $this->invoice->generateDocument($this->invoice->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); + if( $result <= 0 ) { + throw new RestException(500, 'Error generating document'); + } + } } + $filename = basename($original_file); + $original_file_osencoded=dol_osencode($original_file); // New file name encoded in OS encoding charset + if (! file_exists($original_file_osencoded)) + { + throw new RestException(404, 'File not found'); + } - //--- Finds and returns the document - $original_file = str_replace("../","/", $ref.'/'.$ref.'.pdf'); - $refname=basename(dirname($original_file)."/"); - $entity=$conf->entity; - - $check_access = dol_check_secure_access_document($module_part,$original_file,$entity,DolibarrApiAccess::$user); - $accessallowed = $check_access['accessallowed']; - $sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals']; - $original_file = $check_access['original_file']; - - if (preg_match('/\.\./',$original_file) || preg_match('/[<>|]/',$original_file)) - { - throw new RestException(401); - } - if (!$accessallowed) { - throw new RestException(401); - } - - - $filename = basename($original_file); - $original_file_osencoded=dol_osencode($original_file); // New file name encoded in OS encoding charset - - if (! file_exists($original_file_osencoded)) - { - throw new RestException(404, 'File not found'); - } - - $file_content=file_get_contents($original_file_osencoded); + $file_content=file_get_contents($original_file_osencoded); return array('filename'=>$filename, 'content'=>base64_encode($file_content), 'encoding'=>'MIME base64 (base64_encode php function, http://php.net/manual/en/function.base64-encode.php)' ); } - - + + /** * Return a document. * @@ -141,10 +140,10 @@ class Documents extends DolibarrApi public function get($id) { return array('note'=>'xxx'); }*/ - - + + /** - * Push a file. + * Push a file. * Test sample 1: { "filename": "mynewfile.txt", "modulepart": "facture", "ref": "FA1701-001", "subdir": "", "filecontent": "content text", "fileencoding": "", "overwriteifexists": "0" }. * Test sample 2: { "filename": "mynewfile.txt", "modulepart": "medias", "ref": "", "subdir": "mysubdir1/mysubdir2", "filecontent": "content text", "fileencoding": "", "overwriteifexists": "0" }. * @@ -161,12 +160,12 @@ class Documents extends DolibarrApi public function post($filename, $modulepart, $ref='', $subdir='', $filecontent='', $fileencoding='', $overwriteifexists=0) { global $db, $conf; - + /*var_dump($modulepart); var_dump($filename); var_dump($filecontent); exit;*/ - + require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; if (!DolibarrApiAccess::$user->rights->ecm->upload) { @@ -190,7 +189,7 @@ class Documents extends DolibarrApi $object=new Facture($db); $result = $object->fetch('', $ref); } - + if (! ($object->id > 0)) { throw new RestException(500, 'The object '.$modulepart." with ref '".$ref."' was not found."); @@ -198,7 +197,7 @@ class Documents extends DolibarrApi $tmp = dol_check_secure_access_document($modulepart, $tmpreldir.$object->ref, $entity, DolibarrApiAccess::$user, $ref, 'write'); $upload_dir = $tmp['original_file']; - + if (empty($upload_dir) || $upload_dir == '/') { throw new RestException(500, 'This value of modulepart does not support yet usage of ref. Check modulepart parameter or try to use subdir parameter instead of ref.'); @@ -207,7 +206,7 @@ class Documents extends DolibarrApi else { if ($modulepart == 'invoice') $modulepart ='facture'; - + $tmp = dol_check_secure_access_document($modulepart, $subdir, $entity, DolibarrApiAccess::$user, '', 'write'); $upload_dir = $tmp['original_file']; @@ -216,14 +215,14 @@ class Documents extends DolibarrApi throw new RestException(500, 'This value of modulepart does not support yet usage of ref. Check modulepart parameter or try to use subdir parameter instead of ref.'); } } - - + + $upload_dir = dol_sanitizePathName($upload_dir); - + $destfile = $upload_dir . '/' . $original_file; $destfiletmp = DOL_DATA_ROOT.'/admin/temp/' . $original_file; dol_delete_file($destfiletmp); - + if (!dol_is_dir($upload_dir)) { throw new RestException(401,'Directory not exists : '.$upload_dir); } @@ -232,7 +231,7 @@ class Documents extends DolibarrApi { throw new RestException(500, "File with name '".$original_file."' already exists."); } - + $fhandle = @fopen($destfiletmp, 'w'); if ($fhandle) { @@ -244,9 +243,9 @@ class Documents extends DolibarrApi { throw new RestException(500, "Failed to open file '".$destfiletmp."' for write"); } - + $result = dol_move($destfiletmp, $destfile, 0, $overwriteifexists, 1); - + return $result; } diff --git a/htdocs/document.php b/htdocs/document.php index 0b2db2323cd..a0b764882f8 100644 --- a/htdocs/document.php +++ b/htdocs/document.php @@ -27,6 +27,7 @@ * \remarks Call of this wrapper is made with URL: * document.php?modulepart=repfichierconcerne&file=relativepathoffile * document.php?modulepart=logs&file=dolibarr.log + * document.php?modulepart=logs&hashp=sharekey */ define('NOTOKENRENEWAL',1); // Disables token renewal From 801a5180d64bd4d9e38db9c962c161d9cf802b24 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Oct 2017 00:26:24 +0200 Subject: [PATCH 11/14] Fix scrutinizer bug reports --- htdocs/adherents/class/adherent.class.php | 7 ++----- htdocs/adherents/class/adherent_type.class.php | 4 ++-- htdocs/admin/dict.php | 4 ++-- htdocs/api/class/api_documents.class.php | 2 +- htdocs/core/class/extrafields.class.php | 2 +- htdocs/core/modules/DolibarrModules.class.php | 4 ++-- htdocs/ecm/class/ecmfiles.class.php | 11 +++++------ htdocs/expedition/class/expedition.class.php | 4 ++-- htdocs/fichinter/class/fichinter.class.php | 10 +++++----- htdocs/holiday/class/holiday.class.php | 3 ++- htdocs/user/class/user.class.php | 4 ++-- htdocs/websites/index.php | 16 ++++++---------- 12 files changed, 32 insertions(+), 39 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 513a99d843f..037d27ea852 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -1562,7 +1562,7 @@ class Adherent extends CommonObject * * @param int $withpictoimg 0=No picto, 1=Include picto into link, 2=Only picto, -1=Include photo into link, -2=Only picto photo, -3=Only photo very small) * @param int $maxlen length max label - * @param string $option Page for link + * @param string $option Page for link ('card', 'category', 'subscription', ...) * @param string $mode ''=Show firstname and lastname, 'firstname'=Show only firstname, 'login'=Show login, 'ref'=Show ref * @param string $morecss Add more css on link * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking @@ -1592,10 +1592,7 @@ class Adherent extends CommonObject $label.= '
' . $langs->trans('Name') . ': ' . $this->getFullName($langs); $label.=''; - if (empty($option) || $option == 'card' || $option == 'category') - { - $url = DOL_URL_ROOT.'/adherents/card.php?rowid='.$this->id; - } + $url = DOL_URL_ROOT.'/adherents/card.php?rowid='.$this->id; if ($option == 'subscription') { $url = DOL_URL_ROOT.'/adherents/subscription.php?rowid='.$this->id; diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index 30c85618bfa..5537730e678 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -59,7 +59,7 @@ class AdherentType extends CommonObject public $note; /** @var bool Can vote*/ public $vote; - /** @var bool Email sent during validation */ + /** @var string Email sent during validation */ public $mail_valid; /** @var array Array of members */ public $members=array(); @@ -481,7 +481,7 @@ class AdherentType extends CommonObject // Initialise parametres $this->id = 0; - $this->ref = 0; + $this->ref = 'MTSPEC'; $this->specimen=1; $this->label='MEMBERS TYPE SPECIMEN'; diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 673ce2f2d24..068513b245c 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1749,7 +1749,7 @@ $db->close(); * @param Object $obj If we show a particular record, obj is filled with record fields * @param string $tabname Name of SQL table * @param string $context 'add'=Output field for the "add form", 'edit'=Output field for the "edit form", 'hide'=Output field for the "add form" but we dont want it to be rendered - * @return void + * @return string '' or value of entity into table */ function fieldList($fieldlist, $obj='', $tabname='', $context='') { @@ -1763,7 +1763,7 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') $formcompany = new FormCompany($db); if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($db); - $withentity=null; + $withentity=''; foreach ($fieldlist as $field => $value) { diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index 670d47ba3ee..123b5f50bd8 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -104,7 +104,7 @@ class Documents extends DolibarrApi { require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $this->invoice = new Facture($this->db); - $result = $this->invoice->fetch(0, $ref); + $result = $this->invoice->fetch(0, preg_replace('/\.[^\.]+$/', '', basename($original_file))); if( ! $result ) { throw new RestException(404, 'Invoice not found'); } diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index b4381349aec..73634f0d5e8 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -930,7 +930,7 @@ class ExtraFields if (!empty($value)) { // $value in memory is a php numeric, we format it into user number format. $value=price($value); } - $out.=' '.$langs->getCurrencySymbol($conf->currency); + $out=' '.$langs->getCurrencySymbol($conf->currency); } elseif ($type == 'double') { diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index b11389905a4..11f8b70f26b 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -328,14 +328,14 @@ class DolibarrModules // Can not be abstract, because we need to insta public $langfiles; /** - * @var string[] Array of warnings to show when we activate the module + * @var array Array of warnings to show when we activate the module * * array('always'='text') or array('FR'='text') */ public $warnings_activation; /** - * @var string[] Array of warnings to show when we activate an external module + * @var array Array of warnings to show when we activate an external module * * array('always'='text') or array('FR'='text') */ diff --git a/htdocs/ecm/class/ecmfiles.class.php b/htdocs/ecm/class/ecmfiles.class.php index 0035b18d3c7..7af07c8675b 100644 --- a/htdocs/ecm/class/ecmfiles.class.php +++ b/htdocs/ecm/class/ecmfiles.class.php @@ -82,10 +82,9 @@ class EcmFiles //extends CommonObject /** * Create object into database * - * @param User $user User that creates - * @param bool $notrigger false=launch triggers after, true=disable triggers - * - * @return int <0 if KO, Id of created object if OK + * @param User $user User that creates + * @param bool $notrigger false=launch triggers after, true=disable triggers + * @return int <0 if KO, Id of created object if OK */ public function create(User $user, $notrigger = false) { @@ -144,8 +143,8 @@ class EcmFiles //extends CommonObject if (empty($this->date_c)) $this->date_c = dol_now(); // If ref not defined - if (empty($ref)) $ref = dol_hash($this->filepath.'/'.$this->filename, 3); - + $ref = dol_hash($this->filepath.'/'.$this->filename, 3); + if (! empty($this->ref)) $ref=$this->ref; $maxposition=0; if (empty($this->position)) // Get max used diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 014c9de3a19..f26efeadc4a 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1487,14 +1487,14 @@ class Expedition extends CommonObject * Return clicable link of object (with eventually picto) * * @param int $withpicto Add picto into link - * @param int $option Where point the link + * @param string $option Where the link point to * @param int $max Max length to show * @param int $short Use short labels * @param int $notooltip 1=No tooltip * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking * @return string String with URL */ - function getNomUrl($withpicto=0, $option=0, $max=0, $short=0, $notooltip=0, $save_lastsearch_value=-1) + function getNomUrl($withpicto=0, $option='', $max=0, $short=0, $notooltip=0, $save_lastsearch_value=-1) { global $langs; diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index bdbb03492f7..b67e5073144 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -663,7 +663,7 @@ class Fichinter extends CommonObject */ function getNomUrl($withpicto=0, $option='', $notooltip=0, $save_lastsearch_value=-1) { - global $langs; + global $conf, $langs; $result=''; @@ -674,13 +674,13 @@ class Fichinter extends CommonObject $picto='intervention'; $url = DOL_URL_ROOT.'/fichinter/card.php?id='.$this->id; - //if ($option !== 'nolink') - //{ - // Add param to save lastsearch_values or not + if ($option !== 'nolink') + { + // Add param to save lastsearch_values or not $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0); if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1; if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1'; - //} + } $linkclose=''; if (empty($notooltip)) diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 70d00bd2f01..382530225fd 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -781,12 +781,13 @@ class Holiday extends CommonObject $num_rows = $this->db->num_rows($resql); // Note, we can have 2 records if on is morning and the other one is afternoon if ($num_rows > 0) { + $arrayofrecord=array(); $i=0; while ($i < $num_rows) { $obj = $this->db->fetch_object($resql); - // Note: $obj->halday is 0:Full days, 2:Sart afternoon end morning, -1:Start afternoon, 1:End morning + // Note: $obj->halfday is 0:Full days, 2:Sart afternoon end morning, -1:Start afternoon, 1:End morning $arrayofrecord[$obj->rowid]=array('date_start'=>$this->db->jdate($obj->date_start), 'date_end'=>$this->db->jdate($obj->date_end), 'halfday'=>$obj->halfday); $i++; } diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index a7c2d0f1a6b..980faafc028 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -2109,8 +2109,8 @@ class User extends CommonObject if (! empty($_SESSION["disablemodules"])) $label.= '
'.$langs->trans("DisabledModules").':
'.join(', ',explode(',',$_SESSION["disablemodules"])); } - if ($option == 'leave') $url.= DOL_URL_ROOT.'/holiday/list.php?id='.$this->id; - else $link.= $url.= DOL_URL_ROOT.'/user/card.php?id='.$this->id; + $url = DOL_URL_ROOT.'/user/card.php?id='.$this->id; + if ($option == 'leave') $url = DOL_URL_ROOT.'/holiday/list.php?id='.$this->id; if ($option != 'nolink') { diff --git a/htdocs/websites/index.php b/htdocs/websites/index.php index a6de8c15c65..f2b94ff5705 100644 --- a/htdocs/websites/index.php +++ b/htdocs/websites/index.php @@ -1861,7 +1861,6 @@ function dolSaveHtmlHeader($filehtmlheader, $htmlheadercontent) if (! $result) { - $error++; setEventMessages('Failed to write file '.$filehtmlheader, null, 'errors'); return false; } @@ -1887,14 +1886,13 @@ function dolSaveCssFile($filecss, $csscontent) if (! empty($conf->global->MAIN_UMASK)) @chmod($filecss, octdec($conf->global->MAIN_UMASK)); - if (! $result) - { - $error++; - setEventMessages('Failed to write file '.$filecss, null, 'errors'); - return false; - } + if (! $result) + { + setEventMessages('Failed to write file '.$filecss, null, 'errors'); + return false; + } - return true; + return true; } /** @@ -1917,7 +1915,6 @@ function dolSaveRobotFile($filerobot, $robotcontent) if (! $result) { - $error++; setEventMessages('Failed to write file '.$filerobot, null, 'errors'); return false; } @@ -1945,7 +1942,6 @@ function dolSaveHtaccessFile($filehtaccess, $htaccess) if (! $result) { - $error++; setEventMessages('Failed to write file '.$filehtaccess, null, 'errors'); return false; } From c06a78145cedb8d74fe4c7f0b3a3700f5e49cc11 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Oct 2017 01:27:41 +0200 Subject: [PATCH 12/14] Rename function to avoid duplicate --- scripts/members/sync_members_types_ldap2dolibarr.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/members/sync_members_types_ldap2dolibarr.php b/scripts/members/sync_members_types_ldap2dolibarr.php index fb8fb160d36..55d5606cd30 100755 --- a/scripts/members/sync_members_types_ldap2dolibarr.php +++ b/scripts/members/sync_members_types_ldap2dolibarr.php @@ -69,7 +69,7 @@ $required_fields = array( ); // Remove from required_fields all entries not configured in LDAP (empty) and duplicated -$required_fields=array_unique(array_values(array_filter($required_fields, "dolValidElement"))); +$required_fields=array_unique(array_values(array_filter($required_fields, "dolValidElementType"))); if (! isset($argv[1])) { @@ -214,7 +214,7 @@ exit($error); * @param string $element Value to test * @return boolean True of false */ -function dolValidElement($element) +function dolValidElementType($element) { return (trim($element) != ''); } From e644d9d53f59e5443f292f9bfd91c91a1168ad9e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Oct 2017 01:46:48 +0200 Subject: [PATCH 13/14] Fix syntax code --- htdocs/core/login/functions_ldap.php | 2 +- htdocs/core/modules/dons/html_cerfafr.modules.php | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/login/functions_ldap.php b/htdocs/core/login/functions_ldap.php index 129bbcedf38..247dc4ac6ae 100644 --- a/htdocs/core/login/functions_ldap.php +++ b/htdocs/core/login/functions_ldap.php @@ -138,7 +138,7 @@ function check_user_password_ldap($usertotest,$passwordtotest,$entitytotest) $ldap->searchUser=$ldapuserattr."=".$usertotest.",".$ldapdn; // Default dn (will work if LDAP accept a dn with login value inside) // But if LDAP need a dn with name like "cn=Jhon Bloggs,ou=People,dc=foo,dc=com", previous part must have been executed to have // dn detected into ldapUserDN. - if ($resultFetchLdapUser AND !empty($ldap->ldapUserDN)) $ldap->searchUser = $ldap->ldapUserDN; + if ($resultFetchLdapUser && !empty($ldap->ldapUserDN)) $ldap->searchUser = $ldap->ldapUserDN; $ldap->searchPassword=$passwordtotest; // Test with this->seachUser and this->searchPassword diff --git a/htdocs/core/modules/dons/html_cerfafr.modules.php b/htdocs/core/modules/dons/html_cerfafr.modules.php index 24027375528..f3e0146a719 100644 --- a/htdocs/core/modules/dons/html_cerfafr.modules.php +++ b/htdocs/core/modules/dons/html_cerfafr.modules.php @@ -136,27 +136,27 @@ class html_cerfafr extends ModeleDon else $paymentmode = ''; if ($don->modepaiementid==7){ - $ModePaiement = '
'; + $ModePaiement = ''; } else if ($don->modepaiementid==4){ - $ModePaiement = ''; + $ModePaiement = ''; } - else if ($don->modepaiementid==2 OR $don->modepaiementid==3 OR $don->modepaiementid==6){ - $ModePaiement = ''; + else if ($don->modepaiementid==2 || $don->modepaiementid==3 || $don->modepaiementid==6){ + $ModePaiement = ''; } else { - $ModePaiement = ''; + $ModePaiement = ''; } /* if (empty($don->societe)) { - $CodeDon = ''; + $CodeDon = ''; } else { - $CodeDon = ''; + $CodeDon = ''; } */ From 67c571f9527fc80f6569748a35ee52181205965b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Oct 2017 01:59:26 +0200 Subject: [PATCH 14/14] Increase cyclomatic complexity threshold --- dev/setup/codesniffer/ruleset.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index 32a938662e6..b8cb751fe9e 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -126,7 +126,7 @@ - +
" . $langs->trans("Piece") . ' (' . $langs->trans("InvoiceRef") . ")" . $langs->trans("AccountAccounting") . "" . $langs->trans("SubledgerAccount") . "" . $langs->trans("Label") . "" . $langs->trans("LabelOperation") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->refsupplier . ' - ' . $langs->trans("SubledgerAccount") . "' . ($mt < 0 ? - price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "
"; print '" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->refsupplier . ' - ' . $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]).($numtax?' - Localtax '.$numtax:''); + print "" . $companystatic->getNomUrl(0, 'supplier', 16) . ' - ' . $invoicestatic->refsupplier . ' - ' . $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "" . $langs->trans("Piece") . ' (' . $langs->trans("InvoiceRef") . ")" . $langs->trans("AccountAccounting") . "" . $langs->trans("SubledgerAccount") . "" . $langs->trans("Label") . "" . $langs->trans("LabelOperation") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
"; print '" . $companystatic->getNomUrl(0, 'customer', 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]).($numtax?' - Localtax '.$numtax:''); + print "" . $companystatic->getNomUrl(0, 'customer', 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]).' %'.($numtax?' - Localtax '.$numtax:''); print "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . " Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire Remise d\'espèces Chèque Virement, prélèvement, carte bancaire 200 du CGI 238 bis du CGI 885-0 V bis A du CGI 200 du CGI 238 bis du CGI 885-0 V bis A du CGI 200 du CGI 238 bis du CGI 885-0 V bis A du CGI 200 du CGI 238 bis du CGI 885-0 V bis A du CGI