diff --git a/.codeclimate.yml b/.codeclimate.yml
new file mode 100644
index 00000000000..a84e6c1fdd0
--- /dev/null
+++ b/.codeclimate.yml
@@ -0,0 +1,13 @@
+# Save as .codeclimate.yml (note leading .) in project root directory
+languages:
+ Ruby: false
+ JavaScript: true
+ PHP: true
+engines:
+ phpcodesniffer: true
+exclude_paths:
+ - 'build/*'
+ - 'dev/*'
+ - 'doc/*'
+ - 'test/*'
+ - 'htdocs/includes/*'
\ No newline at end of file
diff --git a/COPYRIGHT b/COPYRIGHT
index df0ba8b3e90..40822059ab0 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -26,6 +26,7 @@ php-iban 1.4.6 LGPL-3+ Yes
PHPPrintIPP 1.3 GPL-2+ Yes Library to send print IPP requests
Restler 3.0 LGPL-3+ Yes Library to develop REST Web services
TCPDF 6.2.6 LGPL-3+ Yes PDF generation
+EvalMath 1.0 BSD Yes Safe math expressions evaluation
JS libraries:
jQuery 1.11.3 MIT License Yes JS library
diff --git a/ChangeLog b/ChangeLog
index 8bc845021b6..960bc09756b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -237,6 +237,7 @@ FIX [ bug #3198 ] Trigger LINECONTRACT_INSERT passes Contrat as $object instead
FIX: Not showing delivery date on rouget pdf
FIX: Not showing task extrafields when creating from left menu
FIX [ bug #3288 ] Tasks box is not properly drawn
+FIX [ bug #3211 ] Outstading bill amount of a client showed wrong amounts
NEW: Created new ContratLigne::insert function
@@ -684,6 +685,9 @@ Fix: [ bug #2570 ] [Contacts] Page should not process if ID is invalid
Fix: [ bug #3268 ] SQL error when accessing thirdparty log page without a socid parameter
Fix: [ bug #3180 ] formObjectOptions hook when editing thirdparty card does not print result
Fix: [ bug #1791 ] Margin menu not available if any Finance module is not enabled
+Fix: [ bug #3310 ] OrderLine::fetch, FactureLigne::fetch and PropaleLigne::fetch do not return anything
+Fix: [ bug #3206 ] PropaleLigne, OrderLine and FactureLigne given to triggers through update function does not contain all the information
+Fix: [ bug #3313 ] Error enabling module with PostgreSQL database
***** ChangeLog for 3.5.6 compared to 3.5.5 *****
Fix: Avoid missing class error for fetch_thirdparty method #1973
diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php
index accbd6111c7..bff9dbe4265 100644
--- a/htdocs/accountancy/admin/account.php
+++ b/htdocs/accountancy/admin/account.php
@@ -145,6 +145,7 @@ if ($result) {
print '' . $langs->trans("Addanaccount") . ' ';
print '' . $langs->trans("ImportAccount") . ' ';
+ print '' . $langs->trans("CheckProductAccountancyCode") . ' ';
print ' ';
print '
';
diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php
index 43b8150d2f6..315c9f55325 100644
--- a/htdocs/accountancy/admin/productaccount.php
+++ b/htdocs/accountancy/admin/productaccount.php
@@ -1,10 +1,9 @@
+/* Copyright (C) 2013-2014 Olivier Geffroy
* Copyright (C) 2013-2014 Alexandre Spangaro
- * Copyright (C) 2014 Florian Henry
- * Copyright (C) 2015 Ari Elbaz (elarifr)
-
+ * Copyright (C) 2014 Florian Henry
+ * Copyright (C) 2014 Juanjo Menent
+ * Copyright (C) 2015 Ari Elbaz (elarifr)
*
* 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
@@ -21,19 +20,19 @@
*/
/**
- * \file htdocs/accountancy/admin/productaccount.php
- * \ingroup Accounting Expert
- * \brief Onglet de gestion de parametrages des ventilations
+ * \file htdocs/accountancy/admin/productaccount.php
+ * \ingroup Accounting Expert
+ * \brief Onglet de gestion de parametrages des ventilations
*/
-
require '../../main.inc.php';
// Class
-require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
-require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
-require_once DOL_DOCUMENT_ROOT.'/accountancy/class/html.formventilation.class.php';
-require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
-require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
+require_once DOL_DOCUMENT_ROOT . '/core/lib/report.lib.php';
+require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
+require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
+require_once DOL_DOCUMENT_ROOT . '/accountancy/class/html.formventilation.class.php';
+require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php';
+require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
// Langs
$langs->load("companies");
@@ -41,383 +40,355 @@ $langs->load("compta");
$langs->load("main");
$langs->load("accountancy");
-// Search & action GETPOST
+// search & action GETPOST
$action = GETPOST('action');
$codeventil_buy = GETPOST('codeventil_buy', 'array');
$codeventil_sell = GETPOST('codeventil_sell', 'array');
-$mesCasesCochees = GETPOST('mesCasesCochees', 'array');
-$account_number_buy = GETPOST('account_number_buy');
+$chk_prod = GETPOST('chk_prod', 'array');
+$account_number_buy = GETPOST('account_number_buy');
$account_number_sell = GETPOST('account_number_sell');
-$changeaccount = GETPOST('changeaccount','array');
-$changeaccount_buy = GETPOST('changeaccount_buy','array');
-$changeaccount_sell = GETPOST('changeaccount_sell','array');
-$search_ref = GETPOST('search_ref','alpha');
-$search_label = GETPOST('search_label','alpha');
-$search_desc = GETPOST('search_desc','alpha');
+$changeaccount = GETPOST('changeaccount', 'array');
+$changeaccount_buy = GETPOST('changeaccount_buy', 'array');
+$changeaccount_sell = GETPOST('changeaccount_sell', 'array');
+$search_ref = GETPOST('search_ref', 'alpha');
+$search_label = GETPOST('search_label', 'alpha');
+$search_desc = GETPOST('search_desc', 'alpha');
+$accounting_product_mode = GETPOST('accounting_product_mode', 'alpha');
+$btn_changeaccount = GETPOST('changeaccount');
+$btn_changetype = GETPOST('changetype');
-$sortfield = GETPOST('sortfield','alpha');
-$sortorder = GETPOST('sortorder','alpha');
-$page = GETPOST('page','int');
-if ($page < 0) $page = 0;
+$sortfield = GETPOST('sortfield', 'alpha');
+$sortorder = GETPOST('sortorder', 'alpha');
+$page = GETPOST('page', 'int');
+if ($page < 0)
+ $page = 0;
$pageprev = $page - 1;
$pagenext = $page + 1;
-//bug in page limit if ACCOUNTING_LIMIT_LIST_VENTILATION < $conf->liste_limit there is no pagination displayed !
+// bug in page limit if ACCOUNTING_LIMIT_LIST_VENTILATION < $conf->liste_limit there is no pagination displayed !
if (! empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION) && $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION >= $conf->liste_limit) {
- $limit = $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION;
-//} else if ($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION <= 0) {
-// $limit = $conf->liste_limit;
+ $limit = $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION;
+ // } else if ($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION <= 0) {
+ // $limit = $conf->liste_limit;
} else {
- $limit = $conf->liste_limit;
+ $limit = $conf->liste_limit;
}
$offset = $limit * $page;
-if (! $sortfield) $sortfield="p.ref";
-if (! $sortorder) $sortorder="ASC";
+if (! $sortfield)
+ $sortfield = "p.ref";
+if (! $sortorder)
+ $sortorder = "ASC";
+
+ // sales or purchase
+if ($action == 'update') {
+ if (! empty($btn_changetype)) {
+ $error = 0;
+
+ $accounting_product_modes = array (
+ 'ACCOUNTANCY_SELL',
+ 'ACCOUNTANCY_BUY'
+ );
+
+ $accounting_product_mode = GETPOST('accounting_product_mode', 'alpha');
+
+ if (in_array($accounting_product_mode, $accounting_product_modes)) {
+
+ if (! dolibarr_set_const($db, 'ACCOUNTING_PRODUCT_MODE', $accounting_product_mode, 'chaine', 0, '', $conf->entity)) {
+ $error ++;
+ }
+ } else {
+ $error ++;
+ }
+ }
+
+ if (! empty($btn_changeaccount)) {
+ $msg = '' . $langs->trans("Processing") . '...
';
+ if (! empty($chk_prod)) {
+
+ $accounting = new AccountingAccount($db);
+
+ $msg .= '' . count($chk_prod) . ' ' . $langs->trans("SelectedLines") . '
';
+
+ $cpt = 0;
+ foreach ( $chk_prod as $productid ) {
+
+ $accounting_account_id=GETPOST('codeventil_'.$productid);
+
+ $result=$accounting->fetch($accounting_account_id,null,1);
+ if ($result<0) {
+ //setEventMessage(null, $accounting->errors,'errors');
+ $msg .= '' . $langs->trans("ErrorDB") . ' : ' . $langs->trans("Product") . ' ' . $productid . ' ' . $langs->trans("NotVentilatedinAccount") . ' : id=' . $accounting_account_id . ' ' . $sql . ' ';
+ } else {
+
+ $sql = " UPDATE " . MAIN_DB_PREFIX . "product";
+ if ($accounting_product_mode == 'ACCOUNTANCY_BUY') {
+ $sql .= " SET accountancy_code_buy = " . $accounting->account_number;
+ }
+ if ($accounting_product_mode == 'ACCOUNTANCY_SELL') {
+ $sql .= " SET accountancy_code_sell = " . $accounting->account_number;
+ }
+ $sql .= " WHERE rowid = " . $productid;
+
+ dol_syslog("/accountancy/admin/productaccount.php sql=" . $sql, LOG_DEBUG);
+ if ($db->query($sql)) {
+ $msg .= '' . $langs->trans("Product") . ' ' . $productid . ' ' . $langs->trans("VentilatedinAccount") . ' : ' . $monCompte . '
';
+ } else {
+ $msg .= '' . $langs->trans("ErrorDB") . ' : ' . $langs->trans("Product") . ' ' . $productid . ' ' . $langs->trans("NotVentilatedinAccount") . ' : ' . $accounting->account_number . ' ' . $sql . ' ';
+ }
+ }
+
+ $cpt ++;
+ }
+ } else {
+ $msg .= '' . $langs->trans("AnyLineVentilate") . '
';
+ }
+ $msg .= '' . $langs->trans("EndProcessing") . '
';
+
+ }
+}
// Security check
if ($user->societe_id > 0)
- accessforbidden();
-// TODO after adding menu
-// if (! $user->rights->accounting->ventilation->dispatch)
-// accessforbidden();
+ accessforbidden();
+ // TODO after adding menu
+ // if (! $user->rights->accounting->ventilation->dispatch)
+ // accessforbidden();
$form = new FormVentilation($db);
-//Defaut AccountingAccount RowId Product / Service
-//at this time ACCOUNTING_SERVICE_SOLD_ACCOUNT & ACCOUNTING_PRODUCT_SOLD_ACCOUNT are account number not accountingacount rowid
-//so we need to get those default value rowid first
+// Defaut AccountingAccount RowId Product / Service
+// at this time ACCOUNTING_SERVICE_SOLD_ACCOUNT & ACCOUNTING_PRODUCT_SOLD_ACCOUNT are account number not accountingacount rowid
+// so we need to get those default value rowid first
$accounting = new AccountingAccount($db);
-//TODO: we should need to check if result is a really exist accountaccount rowid.....
-$aarowid_servbuy = $accounting->fetch('', ACCOUNTING_SERVICE_BUY_ACCOUNT);
-$aarowid_prodbuy = $accounting->fetch('', ACCOUNTING_PRODUCT_BUY_ACCOUNT);
-$aarowid_servsell = $accounting->fetch('', ACCOUNTING_SERVICE_SOLD_ACCOUNT);
-$aarowid_prodsell = $accounting->fetch('', ACCOUNTING_PRODUCT_SOLD_ACCOUNT);
+// TODO: we should need to check if result is a really exist accountaccount rowid.....
+$aarowid_servbuy = $accounting->fetch('', $conf->global->ACCOUNTING_SERVICE_BUY_ACCOUNT, 1);
+$aarowid_prodbuy = $accounting->fetch('', $conf->global->ACCOUNTING_PRODUCT_BUY_ACCOUNT, 1);
+$aarowid_servsell = $accounting->fetch('', $conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT, 1);
+$aarowid_prodsell = $accounting->fetch('', $conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT, 1);
-$aacompta_servbuy = (! empty($conf->global->ACCOUNTING_SERVICE_BUY_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_BUY_ACCOUNT : $langs->trans("CodeNotDef"));
-$aacompta_prodbuy = (! empty($conf->global->ACCOUNTING_PRODUCT_BUY_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_BUY_ACCOUNT : $langs->trans("CodeNotDef"));
+$aacompta_servbuy = (! empty($conf->global->ACCOUNTING_SERVICE_BUY_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_BUY_ACCOUNT : $langs->trans("CodeNotDef"));
+$aacompta_prodbuy = (! empty($conf->global->ACCOUNTING_PRODUCT_BUY_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_BUY_ACCOUNT : $langs->trans("CodeNotDef"));
$aacompta_servsell = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT : $langs->trans("CodeNotDef"));
$aacompta_prodsell = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT : $langs->trans("CodeNotDef"));
// Purge search criteria
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
{
- $search_ref='';
- $search_label='';
- $search_desc='';
+ $search_ref = '';
+ $search_label = '';
+ $search_desc = '';
}
-//TODO: modify to update all selected product with a sell account
-if (is_array($changeaccount) && count($changeaccount) > 0 && $action == $langs->trans("Accountancy_code_sell")) {
- $error = 0;
-
- $db->begin();
-
- $sql1 = "UPDATE " . MAIN_DB_PREFIX . "product as p";
- $sql1 .= " SET p.accountancy_code_sell=" . $account_number_sell;
- $sql1 .= ' WHERE p.rowid IN (' . implode(',', $changeaccount) . ')';
-
- // Debug
- // print_r ($sql1);
-
- dol_syslog('accountancy/customer/lines.php::changeaccount product sell sql= ' . $sql1);
-
- $resql1 = $db->query($sql1);
- if (! $resql1) {
- $error ++;
- setEventMessage($db->lasterror(), 'errors');
- }
- if (! $error) {
- $db->commit();
- setEventMessage($langs->trans('Save'), 'mesgs');
- } else {
- $db->rollback();
- setEventMessage($db->lasterror(), 'errors');
- }
-}
-
-//TODO: modify to update all selected product with a buy account
-if (is_array($changeaccount) && count($changeaccount) > 0 && $action == $langs->trans("Accountancy_code_buy")) {
- $error = 0;
-
- $db->begin();
-
- $sql1 = "UPDATE " . MAIN_DB_PREFIX . "product as p";
- $sql1 .= " SET p.accountancy_code_buy=" . $account_number_buy;
- $sql1 .= ' WHERE p.rowid IN (' . implode(',', $changeaccount) . ')';
-
- // Debug
- // print_r ($sql1);
-
- dol_syslog('accountancy/customer/lines.php::changeaccount product buy sql= ' . $sql1);
-
- $resql1 = $db->query($sql1);
- if (! $resql1) {
- $error ++;
- setEventMessage($db->lasterror(), 'errors');
- }
- if (! $error) {
- $db->commit();
- setEventMessage($langs->trans('Save'), 'mesgs');
- } else {
- $db->rollback();
- setEventMessage($db->lasterror(), 'errors');
- }
-}
+// debug move header to top
+llxHeader('', $langs->trans("Accounts"));
/*
* View
*/
-llxHeader('', $langs->trans("Accounts"));
-// For updating account export
print '';
+ $(function () {
+ $(\'#select-all\').click(function(event) {
+ // Iterate each checkbox
+ $(\':checkbox\').each(function() {
+ this.checked = true;
+ });
+ });
+ $(\'#unselect-all\').click(function(event) {
+ // Iterate each checkbox
+ $(\':checkbox\').each(function() {
+ this.checked = false;
+ });
+ });
+ });
+ ';
-//TODO For select box
-print '';
-
-/*
- * Action
- */
-//TODO
-/*
-if ($action == 'ventil') {
- print '' . $langs->trans("Processing") . '...
';
- if (! empty($codeventil_buy) && ! empty($mesCasesCochees)) {
- if (! empty($codeventil_sell) && ! empty($mesCasesCochees)) {
-
- } else {
- print '' . $langs->trans("AnyLineVentilate") . '
';
- }
- print '' . $langs->trans("EndProcessing") . '
';
-}
-*/
-//do we really need to exclude old product not tosell / tobuy ?
-//$sql = "SELECT p.rowid, p.ref , p.label, p.description , p.accountancy_code_sell, p.accountancy_code_buy, p.tms, p.fk_product_type as product_type , p.tosell , p.tobuy ";
-//$sql .= " WHERE p.accountancy_code_sell IS NULL AND p.tosell = 1 OR p.accountancy_code_buy IS NULL AND p.tobuy = 1";
-//$sql .= " WHERE p.accountancy_code_sell ='' AND p.tosell = 1 OR p.accountancy_code_buy ='' AND p.tobuy = 1";
-$sql = "SELECT p.rowid, p.ref , p.label, p.description , p.accountancy_code_sell, p.accountancy_code_buy, p.tms, p.fk_product_type as product_type";
+$sql = "SELECT p.rowid, p.ref , p.label, p.description , p.accountancy_code_sell, p.accountancy_code_buy, p.tms, p.fk_product_type as product_type";
$sql .= " FROM " . MAIN_DB_PREFIX . "product as p";
-//$sql .= " , " . MAIN_DB_PREFIX . "accountingaccount as aa";
$sql .= " WHERE (";
-$sql .= " p.accountancy_code_sell ='' OR p.accountancy_code_sell IS NULL OR p.accountancy_code_buy ='' OR p.accountancy_code_buy IS NULL";
-//Search on correct pcg version
$pcgver = $conf->global->CHARTOFACCOUNTS;
-$sql .= " OR (p.accountancy_code_sell IS NOT NULL AND p.accountancy_code_sell != '' AND p.accountancy_code_sell NOT IN
- (SELECT aa.account_number FROM " . MAIN_DB_PREFIX . "accountingaccount as aa , " . MAIN_DB_PREFIX . "accounting_system as asy WHERE fk_pcg_version = asy.pcg_version AND asy.rowid = " . $pcgver . "))";
- //(SELECT account_number FROM " . MAIN_DB_PREFIX . "accountingaccount as aa WHERE fk_pcg_version='PCG99-BASE'))";
-$sql .= " OR (p.accountancy_code_buy IS NOT NULL AND p.accountancy_code_buy != '' AND p.accountancy_code_buy NOT IN
- (SELECT aa.account_number FROM " . MAIN_DB_PREFIX . "accountingaccount as aa , " . MAIN_DB_PREFIX . "accounting_system as asy WHERE fk_pcg_version = asy.pcg_version AND asy.rowid = " . $pcgver . "))";
- //(SELECT account_number FROM " . MAIN_DB_PREFIX . "accountingaccount as aa WHERE fk_pcg_version='PCG99-BASE'))";
+
+IF ($accounting_product_mode == 'ACCOUNTANCY_BUY' ? ' checked' : '') {
+ $sql .= " p.accountancy_code_buy ='' OR p.accountancy_code_buy IS NULL";
+ $sql .= " OR (p.accountancy_code_buy IS NOT NULL AND p.accountancy_code_buy != '' AND p.accountancy_code_buy NOT IN
+ (SELECT aa.account_number FROM " . MAIN_DB_PREFIX . "accountingaccount as aa , " . MAIN_DB_PREFIX . "accounting_system as asy WHERE fk_pcg_version = asy.pcg_version AND asy.rowid = " . $pcgver . "))";
+} else {
+ $sql .= " p.accountancy_code_sell ='' OR p.accountancy_code_sell IS NULL ";
+ $sql .= " OR (p.accountancy_code_sell IS NOT NULL AND p.accountancy_code_sell != '' AND p.accountancy_code_sell NOT IN
+ (SELECT aa.account_number FROM " . MAIN_DB_PREFIX . "accountingaccount as aa , " . MAIN_DB_PREFIX . "accounting_system as asy WHERE fk_pcg_version = asy.pcg_version AND asy.rowid = " . $pcgver . "))";
+}
+
$sql .= ")";
-//Add search filter like
+
+// Add search filter like
if (strlen(trim($search_ref))) {
- $sql .= " AND (p.ref like '" . $search_ref . "%')";
+ $sql .= " AND (p.ref like '" . $search_ref . "%')";
}
if (strlen(trim($search_label))) {
- $sql .= " AND (p.label like '" . $search_label . "%')";
+ $sql .= " AND (p.label like '" . $search_label . "%')";
}
if (strlen(trim($search_desc))) {
- $sql .= " AND (p.description like '%" . $search_desc . "%')";
+ $sql .= " AND (p.description like '%" . $search_desc . "%')";
}
-$sql.= $db->order($sortfield,$sortorder);
+$sql .= $db->order($sortfield, $sortorder);
$sql .= $db->plimit($limit + 1, $offset);
dol_syslog("/accountancy/admin/productaccount.php:: sql=" . $sql, LOG_DEBUG);
$result = $db->query($sql);
if ($result) {
- $num_lines = $db->num_rows($result);
- $i = 0;
-
-/*
-
-
+ $num_lines = $db->num_rows($result);
+ $i = 0;
+
+ /*
* View
*/
- print_barre_liste($langs->trans("ProductAccountingAccountSelect"), $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, '', $num_lines);
-
- print '' . $langs->trans("DescProductAccountingAccount") . ' ';
- print_liste_field_titre($langs->trans("RowId"), $_SERVER["PHP_SELF"],"p.rowid","",$param,'',$sortfield,$sortorder);
- print ' ';
-
-
-//DEBUG
-//print $sql;
-
- print '";
-
llxFooter();
$db->close();
\ No newline at end of file
diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php
index 0c79820ea44..cb7787610f8 100644
--- a/htdocs/accountancy/class/accountingaccount.class.php
+++ b/htdocs/accountancy/class/accountingaccount.class.php
@@ -61,12 +61,15 @@ class AccountingAccount extends CommonObject
/**
* Load record in memory
*
- * @param int $rowid Id
- * @param string $account_number Account number
- * @return int <0 if KO, >0 if OK
+ * @param int $rowid Id
+ * @param string $account_number Account number
+ * @param int $limittocurentchart 1=Do not load record if it is into another accounting system
+ * @return int <0 if KO, >0 if OK
*/
- function fetch($rowid = null, $account_number = null)
+ function fetch($rowid = null, $account_number = null, $limittocurentchart=0)
{
+ global $conf;
+
if ($rowid || $account_number) {
$sql = "SELECT rowid, datec, tms, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, fk_user_author, fk_user_modif, active";
$sql.= " FROM " . MAIN_DB_PREFIX . "accountingaccount WHERE";
@@ -75,7 +78,9 @@ class AccountingAccount extends CommonObject
} elseif ($account_number) {
$sql .= " account_number = '" . $account_number . "'";
}
-
+ if (!empty($limittocurentchart)) {
+ $sql .=' AND fk_pcg_version IN (SELECT pcg_version FROM '.MAIN_DB_PREFIX.'accounting_system WHERE rowid='.$conf->global->CHARTOFACCOUNTS.')';
+ }
dol_syslog(get_class($this) . "::fetch sql=" . $sql, LOG_DEBUG);
$result = $this->db->query($sql);
if ($result) {
@@ -101,7 +106,8 @@ class AccountingAccount extends CommonObject
return 0;
}
} else {
- dol_print_error($this->db);
+ $this->error="Error " . $this->db->lasterror();
+ $this->errors[] = "Error " . $this->db->lasterror();
}
}
return -1;
diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php
index 11d69e3c7e6..ba7d35cee70 100644
--- a/htdocs/accountancy/customer/lines.php
+++ b/htdocs/accountancy/customer/lines.php
@@ -27,10 +27,13 @@
*/
require '../../main.inc.php';
+
+// Class
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/html.formventilation.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
+// Langs
$langs->load("bills");
$langs->load("compta");
$langs->load("main");
@@ -38,23 +41,23 @@ $langs->load("accountancy");
$account_parent = GETPOST('account_parent');
$changeaccount = GETPOST('changeaccount');
+//Search Getpost
$search_ref = GETPOST('search_ref','alpha');
$search_invoice = GETPOST('search_invoice','alpha');
$search_label = GETPOST('search_label','alpha');
$search_desc = GETPOST('search_desc','alpha');
$search_amount = GETPOST('search_amount','alpha');
$search_account = GETPOST('search_account','alpha');
+$search_vat = GETPOST('search_vat','alpha');
+//Getpost Order and column and limit page
$sortfield = GETPOST('sortfield','alpha');
$sortorder = GETPOST('sortorder','alpha');
$page = GETPOST('page','int');
-
-//if ($page == -1) { $page = 0; }
if ($page < 0) $page = 0;
$pageprev = $page - 1;
$pagenext = $page + 1;
-//$limit = $conf->liste_limit;
if (! empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)) {
$limit = $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION;
} else if ($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION <= 0) {
@@ -62,19 +65,11 @@ if (! empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)) {
} else {
$limit = $conf->liste_limit;
}
-//$offset = $conf->liste_limit * $page;
$offset = $limit * $page;
-// TODO : remove comment
-//elarifr we can not use only
-//$sql .= " ORDER BY l.rowid";
-// f.datef will order like FA08 FA09 FA10 FA05 FA06 FA07 FA04...
-// f.facnumber will not order properly invoice / avoir / accompte you can have All AC then All AV and all FA
-// l.rowid when an invoice is edited rowid are added at end of table & facturedet.rowid are not ordered
-//if (! $sortfield) $sortfield="f.facnumber";
+
if (! $sortfield) $sortfield="f.datef, f.facnumber, l.rowid";
-//if (! $sortorder) $sortorder="DESC";
if (! $sortorder) {
if ($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_DONE > 0) {
$sortorder = " DESC ";
@@ -98,6 +93,7 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both
$search_desc='';
$search_amount='';
$search_account='';
+ $search_vat='';
}
if (is_array($changeaccount) && count($changeaccount) > 0) {
@@ -181,6 +177,10 @@ if (strlen(trim($search_amount))) {
if (strlen(trim($search_account))) {
$sql .= " AND aa.account_number like '%" . $search_account . "%'";
}
+if (strlen(trim($search_vat)))
+{
+ $sql .= " AND (l.tva_tx like '" . $search_vat . "%')";
+}
if (! empty($conf->multicompany->enabled)) {
$sql .= " AND f.entity IN (" . getEntity("facture", 1) . ")";
}
@@ -210,6 +210,7 @@ if ($result) {
print_liste_field_titre($langs->trans("Label"), $_SERVER["PHP_SELF"],"p.label","",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Description"), $_SERVER["PHP_SELF"],"l.description","",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Amount"), $_SERVER["PHP_SELF"],"l.total_ht","",$param,'align="center"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("VATRate"), $_SERVER["PHP_SELF"],"l.tva_tx","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Account"), $_SERVER["PHP_SELF"],"aa.account_number","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre('');
print_liste_field_titre('');
@@ -222,6 +223,7 @@ if ($result) {
print ' ';
print ' ';
print ' ';
+ print '% ';
print ' ';
print ' ';
print ' ';
@@ -257,6 +259,7 @@ if ($result) {
print '' . dol_trunc($objp->product_label, 24) . ' ';
print '' . nl2br(dol_trunc($objp->description, 32)) . ' ';
print '' . price($objp->total_ht) . ' ';
+ print '' . price($objp->tva_tx) . ' ';
print '' . $codecompta . ' ';
print '' . $objp->rowid . ' ';
print '';
@@ -275,4 +278,4 @@ if ($result) {
print "
";
llxFooter();
-$db->close();
\ No newline at end of file
+$db->close();
diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php
index d3a4547c38b..6d82c324fd6 100644
--- a/htdocs/accountancy/customer/list.php
+++ b/htdocs/accountancy/customer/list.php
@@ -24,14 +24,13 @@
* \ingroup Accounting Expert
* \brief Ventilation page from customers invoices
*/
-
require '../../main.inc.php';
// Class
-require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
-require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
-require_once DOL_DOCUMENT_ROOT.'/accountancy/class/html.formventilation.class.php';
-require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
+require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
+require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
+require_once DOL_DOCUMENT_ROOT . '/accountancy/class/html.formventilation.class.php';
+require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php';
// Langs
$langs->load("compta");
@@ -42,24 +41,25 @@ $langs->load("accountancy");
$action = GETPOST('action');
-//Select Box
+// Select Box
$codeventil = GETPOST('codeventil', 'array');
$mesCasesCochees = GETPOST('mesCasesCochees', 'array');
-//Search Getpost
-$search_invoice = GETPOST('search_invoice','alpha');
-$search_ref = GETPOST('search_ref','alpha');
-$search_label = GETPOST('search_label','alpha');
-$search_desc = GETPOST('search_desc','alpha');
-$search_amount = GETPOST('search_amount','alpha');
-$search_account = GETPOST('search_account','alpha');
-$search_vat = GETPOST('search_vat','alpha');
+// Search Getpost
+$search_invoice = GETPOST('search_invoice', 'alpha');
+$search_ref = GETPOST('search_ref', 'alpha');
+$search_label = GETPOST('search_label', 'alpha');
+$search_desc = GETPOST('search_desc', 'alpha');
+$search_amount = GETPOST('search_amount', 'alpha');
+$search_account = GETPOST('search_account', 'alpha');
+$search_vat = GETPOST('search_vat', 'alpha');
-//Getpost Order and column and limit page
-$sortfield = GETPOST('sortfield','alpha');
-$sortorder = GETPOST('sortorder','alpha');
-$page = GETPOST('page');
-if ($page < 0) $page = 0;
+// Getpost Order and column and limit page
+$sortfield = GETPOST('sortfield', 'alpha');
+$sortorder = GETPOST('sortorder', 'alpha');
+$page = GETPOST('page','int');
+if ($page < 0)
+ $page = 0;
if (! empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)) {
$limit = $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION;
@@ -70,7 +70,8 @@ if (! empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)) {
}
$offset = $limit * $page;
-if (! $sortfield) $sortfield="f.datef, f.facnumber, l.rowid";
+if (! $sortfield)
+ $sortfield = "f.datef, f.facnumber, l.rowid";
if (! $sortorder) {
if ($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_TODO > 0) {
@@ -91,23 +92,23 @@ $aarowid_s = $accounting->fetch('', ACCOUNTING_SERVICE_SOLD_ACCOUNT);
$aarowid_p = $accounting->fetch('', ACCOUNTING_PRODUCT_SOLD_ACCOUNT);
// Purge search criteria
-if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter"))
-{
- $search_ref='';
- $search_invoice='';
- $search_label='';
- $search_desc='';
- $search_amount='';
- $search_account='';
- $search_vat='';
+if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) {
+ $search_ref = '';
+ $search_invoice = '';
+ $search_label = '';
+ $search_desc = '';
+ $search_amount = '';
+ $search_account = '';
+ $search_vat = '';
}
+
/*
* View
*/
llxHeader('', $langs->trans("Ventilation"));
-print '';
-/*
- * Action
- */
/*
* Supplier Invoice lines
@@ -157,6 +179,10 @@ if (strlen(trim($search_amount))) {
if (strlen(trim($search_account))) {
$sql .= " AND aa.account_number like '%" . $search_account . "%'";
}
+if (strlen(trim($search_vat)))
+{
+ $sql .= " AND (l.tva_tx like '" . $search_vat . "%')";
+}
if (! empty($conf->multicompany->enabled)) {
$sql .= " AND f.entity IN (" . getEntity("facture_fourn", 1) . ")";
}
@@ -187,6 +213,7 @@ if ($result) {
print_liste_field_titre($langs->trans("Label"), $_SERVER["PHP_SELF"],"p.label","",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Description"), $_SERVER["PHP_SELF"],"l.description","",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Amount"), $_SERVER["PHP_SELF"],"l.total_ht","",$param,'align="center"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans("VATRate"), $_SERVER["PHP_SELF"],"l.tva_tx","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Account"), $_SERVER["PHP_SELF"],"aa.account_number","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre('');
print_liste_field_titre('');
@@ -198,11 +225,12 @@ if ($result) {
print ' ';
print ' ';
print ' ';
+ print '% ';
print ' ';
print ' ';
- print ' ';
+ print ' ';
print ' ';
- print " \n";
+ print "\n";
$facturefournisseur_static = new FactureFournisseur($db);
$product_static = new Product($db);
@@ -234,6 +262,7 @@ if ($result) {
print '' . dol_trunc($objp->product_label, 24) . ' ';
print '' . nl2br(dol_trunc($objp->description, 32)) . ' ';
print '' . price($objp->total_ht) . ' ';
+ print '' . price($objp->tva_tx) . ' ';
print '' . $codeCompta . ' ';
print '' . $objp->rowid . ' ';
print '';
@@ -253,4 +282,4 @@ if ($result) {
print "";
llxFooter();
-$db->close();
\ No newline at end of file
+$db->close();
diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php
index 2f22a19347a..b6e06209da1 100644
--- a/htdocs/accountancy/supplier/list.php
+++ b/htdocs/accountancy/supplier/list.php
@@ -24,14 +24,13 @@
* \ingroup Accounting Expert
* \brief Ventilation page from suppliers invoices
*/
-
require '../../main.inc.php';
// Class
-require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
-require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
-require_once DOL_DOCUMENT_ROOT.'/accountancy/class/html.formventilation.class.php';
-require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
+require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php';
+require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.product.class.php';
+require_once DOL_DOCUMENT_ROOT . '/accountancy/class/html.formventilation.class.php';
+require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php';
// Langs
$langs->load("compta");
@@ -41,18 +40,28 @@ $langs->load("main");
$langs->load("accountancy");
$action = GETPOST('action');
+
+// Select Box
$codeventil = GETPOST('codeventil', 'array');
$mesCasesCochees = GETPOST('mesCasesCochees', 'array');
-$search_ref = GETPOST('search_ref','alpha');
-$search_label = GETPOST('search_label','alpha');
-$search_desc = GETPOST('search_desc','alpha');
-$sortfield = GETPOST('sortfield','alpha');
-$sortorder = GETPOST('sortorder','alpha');
-//Should move to top with all GETPOST
+// Search Getpost
+$search_invoice = GETPOST('search_invoice', 'alpha');
+$search_ref = GETPOST('search_ref', 'alpha');
+$search_label = GETPOST('search_label', 'alpha');
+$search_desc = GETPOST('search_desc', 'alpha');
+$search_amount = GETPOST('search_amount', 'alpha');
+$search_account = GETPOST('search_account', 'alpha');
+$search_vat = GETPOST('search_vat', 'alpha');
+$btn_ventil = GETPOST('ventil', 'alpha');
+
+// Getpost Order and column and limit page
+$sortfield = GETPOST('sortfield', 'alpha');
+$sortorder = GETPOST('sortorder', 'alpha');
+
$page = GETPOST('page');
-if ($page < 0) $page = 0;
-
+if ($page < 0)
+ $page = 0;
if (! empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)) {
$limit = $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION;
@@ -62,18 +71,9 @@ if (! empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)) {
$limit = $conf->liste_limit;
}
$offset = $limit * $page;
-//End Should move to top with all GETPOST
-
-// TODO : remove comment
-//elarifr we can not use only
-//$sql .= " ORDER BY l.rowid";
-// f.datef will order like FA08 FA09 FA10 FA05 FA06 FA07 FA04...
-// f.ref will not order properly invoice / avoir / accompte you can have All AC then All AV and all FA
-// l.rowid when an invoice is edited rowid are added at end of table & facturedet.rowid are not ordered
-//if (! $sortfield) $sortfield="l.rowid";
-if (! $sortfield) $sortfield="f.datef, f.ref, l.rowid";
-//if (! $sortorder) $sortorder="DESC";
+if (! $sortfield)
+ $sortfield = "f.datef, f.ref, l.rowid";
if (! $sortorder) {
if ($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_TODO > 0) {
$sortorder = " DESC ";
@@ -88,21 +88,24 @@ if (! $user->rights->accounting->ventilation->dispatch)
$formventilation = new FormVentilation($db);
-//Defaut AccountingAccount RowId Product / Service
-//at this time ACCOUNTING_SERVICE_SOLD_ACCOUNT & ACCOUNTING_PRODUCT_SOLD_ACCOUNT are account number not accountingacount rowid
-//so we need to get those default value rowid first
+// Defaut AccountingAccount RowId Product / Service
+// at this time ACCOUNTING_SERVICE_SOLD_ACCOUNT & ACCOUNTING_PRODUCT_SOLD_ACCOUNT are account number not accountingacount rowid
+// so we need to get those default value rowid first
$accounting = new AccountingAccount($db);
-//TODO: we should need to check if result is a really exist accountaccount rowid.....
+// TODO: we should need to check if result is a really exist accountaccount rowid.....
$aarowid_s = $accounting->fetch('', ACCOUNTING_SERVICE_BUY_ACCOUNT);
$aarowid_p = $accounting->fetch('', ACCOUNTING_PRODUCT_BUY_ACCOUNT);
// Purge search criteria
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
{
- $search_ref='';
- $search_label='';
- $search_desc='';
+ $search_ref = '';
+ $search_label = '';
+ $search_desc = '';
+ $search_amount = '';
+ $search_account = '';
+ $search_vat = '';
}
/*
@@ -110,10 +113,7 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both
*/
llxHeader('', $langs->trans("Ventilation"));
-//debug
-//print_r($aarowid_s);
-//print_r($aarowid_p);
-print '