From 71265558d2aad3c28cf4cc64e2d24f3160b412a3 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Wed, 27 Aug 2014 07:03:42 +0200 Subject: [PATCH 01/22] Integrate module Accounting Expert --- htdocs/accountancy/admin/account.php | 220 ++++++ htdocs/accountancy/admin/export.php | 176 +++++ htdocs/accountancy/admin/fiche.php | 297 ++++++++ htdocs/accountancy/admin/importaccounts.php | 197 +++++ htdocs/accountancy/admin/index.html | 0 htdocs/accountancy/admin/index.php | 301 ++++++++ htdocs/accountancy/admin/journaux.php | 176 +++++ htdocs/accountancy/admin/productaccount.php | 149 ++++ .../accountancy/admin/thirdpartyaccount.php | 253 +++++++ .../bookkeeping/balancebymonth.php | 143 ++++ htdocs/accountancy/bookkeeping/fiche.php | 385 ++++++++++ htdocs/accountancy/bookkeeping/index.html | 0 htdocs/accountancy/bookkeeping/liste.php | 226 ++++++ .../accountancy/bookkeeping/listebyyear.php | 137 ++++ .../class/accountancysystem.class.php | 86 +-- .../class/accountingaccount.class.php | 416 +++++++++++ .../accountancy/class/bookkeeping.class.php | 672 ++++++++++++++++++ .../class/html.formventilation.class.php | 246 +++++++ htdocs/accountancy/customer/fiche.php | 146 ++++ htdocs/accountancy/customer/index.html | 0 htdocs/accountancy/customer/index.php | 353 +++++++++ htdocs/accountancy/customer/lignes.php | 232 ++++++ htdocs/accountancy/customer/liste.php | 246 +++++++ htdocs/accountancy/journal/bankjournal.php | 568 +++++++++++++++ htdocs/accountancy/journal/cashjournal.php | 544 ++++++++++++++ htdocs/accountancy/journal/index.html | 0 htdocs/accountancy/journal/index.php | 58 ++ .../accountancy/journal/purchasesjournal.php | 482 +++++++++++++ htdocs/accountancy/journal/sellsjournal.php | 490 +++++++++++++ htdocs/accountancy/supplier/fiche.php | 149 ++++ htdocs/accountancy/supplier/index.html | 0 htdocs/accountancy/supplier/index.php | 272 +++++++ htdocs/accountancy/supplier/lignes.php | 232 ++++++ htdocs/accountancy/supplier/liste.php | 227 ++++++ htdocs/admin/accounting.php | 260 ------- htdocs/core/lib/accounting.lib.php | 188 +++++ htdocs/core/modules/modAccounting.class.php | 662 +++++++++++++---- .../install/mysql/migration/3.6.0-3.7.0.sql | 35 +- .../tables/llx_accounting_bookkeeping.sql | 39 + htdocs/langs/en_US/accounting.lang | 161 +++++ htdocs/langs/es_ES/accounting.lang | 161 +++++ htdocs/langs/fr_FR/accounting.lang | 161 +++++ htdocs/theme/amarok/img/object_accounting.png | Bin 0 -> 170 bytes .../theme/auguria/img/object_accounting.png | Bin 0 -> 170 bytes .../bureau2crea/img/object_accounting.png | Bin 0 -> 170 bytes .../theme/cameleo/img/object_accounting.png | Bin 0 -> 170 bytes htdocs/theme/eldy/img/object_accounting.png | Bin 0 -> 170 bytes 47 files changed, 9309 insertions(+), 437 deletions(-) create mode 100644 htdocs/accountancy/admin/account.php create mode 100644 htdocs/accountancy/admin/export.php create mode 100644 htdocs/accountancy/admin/fiche.php create mode 100644 htdocs/accountancy/admin/importaccounts.php create mode 100644 htdocs/accountancy/admin/index.html create mode 100644 htdocs/accountancy/admin/index.php create mode 100644 htdocs/accountancy/admin/journaux.php create mode 100644 htdocs/accountancy/admin/productaccount.php create mode 100644 htdocs/accountancy/admin/thirdpartyaccount.php create mode 100644 htdocs/accountancy/bookkeeping/balancebymonth.php create mode 100644 htdocs/accountancy/bookkeeping/fiche.php create mode 100644 htdocs/accountancy/bookkeeping/index.html create mode 100644 htdocs/accountancy/bookkeeping/liste.php create mode 100644 htdocs/accountancy/bookkeeping/listebyyear.php create mode 100644 htdocs/accountancy/class/accountingaccount.class.php create mode 100644 htdocs/accountancy/class/bookkeeping.class.php create mode 100644 htdocs/accountancy/class/html.formventilation.class.php create mode 100644 htdocs/accountancy/customer/fiche.php create mode 100644 htdocs/accountancy/customer/index.html create mode 100644 htdocs/accountancy/customer/index.php create mode 100644 htdocs/accountancy/customer/lignes.php create mode 100644 htdocs/accountancy/customer/liste.php create mode 100644 htdocs/accountancy/journal/bankjournal.php create mode 100644 htdocs/accountancy/journal/cashjournal.php create mode 100644 htdocs/accountancy/journal/index.html create mode 100644 htdocs/accountancy/journal/index.php create mode 100644 htdocs/accountancy/journal/purchasesjournal.php create mode 100644 htdocs/accountancy/journal/sellsjournal.php create mode 100644 htdocs/accountancy/supplier/fiche.php create mode 100644 htdocs/accountancy/supplier/index.html create mode 100644 htdocs/accountancy/supplier/index.php create mode 100644 htdocs/accountancy/supplier/lignes.php create mode 100644 htdocs/accountancy/supplier/liste.php delete mode 100644 htdocs/admin/accounting.php create mode 100644 htdocs/core/lib/accounting.lib.php create mode 100644 htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql create mode 100644 htdocs/langs/en_US/accounting.lang create mode 100644 htdocs/langs/es_ES/accounting.lang create mode 100644 htdocs/langs/fr_FR/accounting.lang create mode 100644 htdocs/theme/amarok/img/object_accounting.png create mode 100644 htdocs/theme/auguria/img/object_accounting.png create mode 100644 htdocs/theme/bureau2crea/img/object_accounting.png create mode 100644 htdocs/theme/cameleo/img/object_accounting.png create mode 100644 htdocs/theme/eldy/img/object_accounting.png diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php new file mode 100644 index 00000000000..f0bbd02f330 --- /dev/null +++ b/htdocs/accountancy/admin/account.php @@ -0,0 +1,220 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/admin/account.php + * \ingroup Accounting Expert + * \brief List accounting account + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + +// Class +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; +dol_include_once("/accountingex/class/accountingaccount.class.php"); +dol_include_once("/accountingex/class/html.formventilation.class.php"); + +// Langs +$langs->load("compta"); +$langs->load("accountingex@accountingex"); + +$mesg = ''; +$action = GETPOST('action'); +$id = GETPOST('id', 'int'); +$rowid = GETPOST('rowid', 'int'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->admin) + accessforbidden(); + +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$limit = $conf->liste_limit; +$page = GETPOST("page", 'int'); +if ($page == - 1) { + $page = 0; +} +$offset = $conf->liste_limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortfield) + $sortfield = "aa.account_number"; +if (! $sortorder) + $sortorder = "ASC"; + +if ($action == 'delete') { + $formconfirm = $html->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $id, $langs->trans('DeleteAccount'), $langs->trans('ConfirmDeleteAccount'), 'confirm_delete', '', 0, 1); + print $formconfirm; +} + +$accounting = new AccountingAccount($db); + +if ($action == 'disable') { + $accounting = $accounting->fetch($id); + if (! empty($accounting->id)) { + $result = $accounting->account_desactivate($id); + } + + $action = 'update'; + if ($result < 0) { + setEventMessage($accounting->error, 'errors'); + } +} else if ($action == 'enable') { + + $accounting = $accounting->fetch($id); + + if (! empty($accounting->id)) { + $result = $accounting->account_activate($id); + } + $action = 'update'; + if ($result < 0) { + setEventMessage($accounting->error, 'errors'); + } +} + +/* + * View + * + */ +llxHeader('', $langs->trans("ListAccounts")); + +$pcgver = $conf->global->CHARTOFACCOUNTS; + +$sql = "SELECT aa.rowid, aa.fk_pcg_version, aa.pcg_type, aa.pcg_subtype, aa.account_number, aa.account_parent , aa.label, aa.active "; +$sql .= " FROM " . MAIN_DB_PREFIX . "accountingaccount as aa, " . MAIN_DB_PREFIX . "accounting_system as asy"; +$sql .= " WHERE aa.fk_pcg_version = asy.pcg_version"; +$sql .= " AND asy.rowid = " . $pcgver; + +if (strlen(trim($_GET["search_account"]))) { + $sql .= " AND aa.account_number like '%" . $_GET["search_account"] . "%'"; +} +if (strlen(trim($_GET["search_label"]))) { + $sql .= " AND aa.label like '%" . $_GET["search_label"] . "%'"; +} +if (strlen(trim($_GET["search_accountparent"]))) { + $sql .= " AND aa.account_parent like '%" . $_GET["search_accountparent"] . "%'"; +} +if (strlen(trim($_GET["search_pcgtype"]))) { + $sql .= " AND aa.pcg_type like '%" . $_GET["search_pcgtype"] . "%'"; +} +if (strlen(trim($_GET["search_pcgsubtype"]))) { + $sql .= " AND aa.pcg_subtype like '%" . $_GET["search_pcgsubtype"] . "%'"; +} + +$sql .= $db->order($sortfield, $sortorder); +$sql .= $db->plimit($limit + 1, $offset); + +dol_syslog('accountingex/admin/account.php:: $sql=' . $sql); +$result = $db->query($sql); + +if ($result) { + $num = $db->num_rows($result); + + print_barre_liste($langs->trans('ListAccounts'), $page, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', $num); + + $i = 0; + + print '
'; + + print '
'; + + print '' . $langs->trans("Addanaccount") . ''; + print '' . $langs->trans("ImportAccount") . ''; + print '

'; + + print ''; + print ''; + print_liste_field_titre($langs->trans("AccountNumber"), "account.php", "aa.account_number", "", $param, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Label"), "account.php", "aa.label", "", $param, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Accountparent"), "account.php", "aa.account_parent", "", $param, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Pcgtype"), "account.php", "aa.pcg_type", "", $param, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Pcgsubtype"), "account.php", "aa.pcg_subtype", "", $param, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Active"), "account.php", "aa.active", "", $param, "", $sortfield, $sortorder); + print_liste_field_titre(" "); + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $var = True; + + while ( $i < min($num, $limit) ) { + $obj = $db->fetch_object($resql); + + $var = ! $var; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '' . "\n"; + + print "\n"; + $i ++; + } + + print "
 '; + print ''; + print '
' . $obj->account_number . '' . $obj->label . '' . $obj->account_parent . '' . $obj->pcg_type . '' . $obj->pcg_subtype . ''; + if (empty($obj->active)) { + print ''; + print img_picto($langs->trans("Disabled"), 'switch_off'); + print ''; + } else { + print ''; + print img_picto($langs->trans("Activated"), 'switch_on'); + print ''; + } + print ''; + if ($user->rights->accountingex->admin) { + print ''; + print img_edit(); + print ' '; + print ''; + print img_delete(); + print ''; + } + print '
"; + print '
'; +} else { + dol_print_error($db); +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php new file mode 100644 index 00000000000..a326b7058ad --- /dev/null +++ b/htdocs/accountancy/admin/export.php @@ -0,0 +1,176 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 Florian Henry + * Copyright (C) 2014 Marcos García + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/accountingex/admin/export.php + * \ingroup Accounting Expert + * \brief Setup page to configure accounting expert module + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + +// Class +dol_include_once("/core/lib/admin.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; + +$langs->load("compta"); +$langs->load("bills"); +$langs->load('admin'); +$langs->load('accountingex@accountingex'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->admin) + accessforbidden(); + +$action = GETPOST('action', 'alpha'); + +// Other parameters ACCOUNTINGEX_* +$list = array ( + 'ACCOUNTINGEX_SEPARATORCSV' +); + +/* + * Actions + */ +if ($action == 'update') { + $error = 0; + + $modelcsv = GETPOST('modelcsv', 'int'); + + if (! empty($modelcsv)) { + + if (! dolibarr_set_const($db, 'ACCOUNTINGEX_MODELCSV', $modelcsv, 'chaine', 0, '', $conf->entity)) { + $error ++; + } + } else { + $error ++; + } + + foreach ( $list as $constname ) { + $constvalue = GETPOST($constname, 'alpha'); + + if (! dolibarr_set_const($db, $constname, $constvalue, 'chaine', 0, '', $conf->entity)) { + $error ++; + } + } + + if (! $error) { + setEventMessage($langs->trans("SetupSaved")); + } else { + setEventMessage($langs->trans("Error"), 'errors'); + } +} + +/* + * View + */ + +llxHeader(); + +$form = new Form($db); + +print_fiche_titre($langs->trans('ConfigAccountingExpert')); + +$head = admin_account_prepare_head(null); + +dol_fiche_head($head, 'export', $langs->trans("Configuration"), 0, 'cron'); + +print '
'; +print ''; +print ''; + +print ''; +$var = True; + +print ''; +print ''; +print ''; + +$var = ! $var; + +print ''; +print ""; +print ""; +print "
' . $langs->trans("Modelcsv") . '
" . $langs->trans("Selectmodelcsv") . ""; +print '"; +print "
"; + +print "
\n"; + +/* + * Params + * + */ +$list = array ( + 'ACCOUNTINGEX_SEPARATORCSV' +); + +$num = count($list); +if ($num) { + print ''; + print ''; + print ''; + print "\n"; +} + +foreach ( $list as $key ) { + $var = ! $var; + + print ''; + + // Param + $label = $langs->trans($key); + print ''; + + // Value + print ''; +} + +print ''; +print "
' . $langs->trans('OtherOptions') . '
' . $label . ''; + print ''; + print '
\n"; + +print '
'; + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/admin/fiche.php b/htdocs/accountancy/admin/fiche.php new file mode 100644 index 00000000000..76fc955fca2 --- /dev/null +++ b/htdocs/accountancy/admin/fiche.php @@ -0,0 +1,297 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/admin/fiche.php + * \ingroup Accounting Expert + * \brief Page fiche de compte + */ +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; +dol_include_once("/accountingex/class/accountingaccount.class.php"); +dol_include_once("/accountingex/class/html.formventilation.class.php"); + +// Langs +$langs->load("bills"); +$langs->load("accountingex@accountingex"); + +$mesg = ''; +$action = GETPOST('action'); +$id = GETPOST('id', 'int'); +$rowid = GETPOST('rowid', 'int'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->admin) + accessforbidden(); +$accounting = new AccountingAccount($db); + +// action +if ($action == 'add') { + $sql = 'SELECT pcg_version FROM ' . MAIN_DB_PREFIX . 'accounting_system WHERE rowid=' . $conf->global->CHARTOFACCOUNTS; + + dol_syslog('accountingex/admin/fiche.php:: $sql=' . $sql); + $result = $db->query($sql); + $obj = $db->fetch_object($result); + + $accounting->fk_pcg_version = $obj->pcg_version; + $accounting->pcg_type = GETPOST('pcg_type'); + $accounting->pcg_subtype = GETPOST('pcg_subtype'); + $accounting->account_number = GETPOST('account_number', 'int'); + $accounting->account_parent = GETPOST('account_parent', 'int'); + $accounting->label = GETPOST('label', 'alpha'); + $accounting->active = 1; + + $res = $accounting->create($user); + + if ($res == 0) { + } else { + if ($res == - 3) { + $_error = 1; + $action = "create"; + } + if ($res == - 4) { + $_error = 2; + $action = "create"; + } + } + Header("Location: account.php"); +} elseif ($action == 'edit') { + if (! GETPOST('cancel', 'alpha')) { + $result = $accounting->fetch($id); + + $sql = 'SELECT pcg_version FROM ' . MAIN_DB_PREFIX . 'accounting_system WHERE rowid=' . $conf->global->CHARTOFACCOUNTS; + + dol_syslog('accountingex/admin/fiche.php:: $sql=' . $sql); + $result2 = $db->query($sql); + $obj = $db->fetch_object($result2); + + $accounting->fk_pcg_version = $obj->pcg_version; + $accounting->pcg_type = GETPOST('pcg_type'); + $accounting->pcg_subtype = GETPOST('pcg_subtype'); + $accounting->account_number = GETPOST('account_number', 'int'); + $accounting->account_parent = GETPOST('account_parent', 'int'); + $accounting->label = GETPOST('label', 'alpha'); + + $result = $accounting->update($user); + + if ($result > 0) { + header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id); + exit(); + } else { + $mesg = $object->error; + } + } else { + header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id); + exit(); + } +} else if ($action == 'delete') { + + $result = $accounting->fetch($id); + + if (! empty($accounting->id)) { + $result = $accounting->delete($user); + + if ($result > 0) { + Header("Location: account.php"); + } + } + + if ($result < 0) { + setEventMessage($accounting->error, 'errors'); + } +} + +/* + * View + * + */ +llxheader('', $langs->trans('AccountAccounting')); + +$form = new Form($db); +$htmlacc = new FormVentilation($db); + +if ($action == 'create') { + print_fiche_titre($langs->trans('NewAccount')); + + print '
' . "\n"; + print ''; + print ''; + + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
' . $langs->trans("AccountNumber") . '
' . $langs->trans("Label") . '
' . $langs->trans("Accountparent") . ''; + print $htmlacc->select_account($accounting->account_parent, 'account_parent'); + print '
' . $langs->trans("Pcgtype") . ''; + print $htmlacc->select_pcgtype($accounting->pcg_type, 'pcg_type'); + print '
' . $langs->trans("Pcgsubtype") . ''; + print $htmlacc->select_pcgsubtype($accounting->pcg_subtype, 'pcg_subtype'); + print '
'; + + print '
    '; + print ''; +} else if ($id) { + $rowid = $id; + $account = $accounting->fetch($rowid); + + if ($account > 0) { + dol_htmloutput_mesg($mesg); + + $head = account_prepare_head($accounting); + + if ($action == 'update') { + // WYSIWYG Editor + $htmlacc = new FormVentilation($db); + + require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php'; + + $soc = new Societe($db); + if ($object->socid) { + $soc->fetch($object->socid); + } + + dol_fiche_head($head, 'card', $langs->trans('AccountAccounting'), 0, 'billr'); + + print '' . "\n"; + print ''; + print ''; + print ''; + + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
' . $langs->trans("AccountNumber") . '
' . $langs->trans("Label") . '
' . $langs->trans("Accountparent") . ''; + print $htmlacc->select_account($accounting->account_parent, 'account_parent'); + print '
' . $langs->trans("Pcgtype") . ''; + print $htmlacc->select_pcgtype($accounting->pcg_type, 'pcg_type'); + print '
' . $langs->trans("Pcgsubtype") . ''; + print $htmlacc->select_pcgsubtype($accounting->pcg_subtype, 'pcg_subtype'); + print '
'; + + print '
  '; + print ''; + print '
'; + + print ''; + + print ''; + } else { + $linkback = '' . $langs->trans("BackToChartofaccounts") . ''; + + dol_fiche_head($head, 'card', $langs->trans('AccountAccounting'), 0, 'billr'); + + print ''; + + // Account number + print ''; + print ''; + print ''; + + print ''; + print ''; + + $accp = new AccountingAccount($db); + if (! empty($accounting->account_parent)) { + $accp->fetch($accounting->account_parent, ''); + } + print ''; + print ''; + + print ''; + print ''; + + print ''; + print ''; + + print ''; + print ''; + + print '
' . $langs->trans("AccountNumber") . '' . $accounting->account_number . '' . $linkback . '
' . $langs->trans("Label") . '' . $accounting->label . '
' . $langs->trans("Accountparent") . '' . $accp->account_number . ' - ' . $accp->label . '
' . $langs->trans("Pcgtype") . '' . $accounting->pcg_type . '
' . $langs->trans("Pcgsubtype") . '' . $accounting->pcg_subtype . '
' . $langs->trans("Active") . ''; + + if (empty($accounting->active)) { + print img_picto($langs->trans("Disabled"), 'switch_off'); + } else { + print img_picto($langs->trans("Activated"), 'switch_on'); + } + + print '
'; + + print ''; + + /* + * Barre d'actions + */ + + print '
'; + + if ($user->rights->accountingex->admin) { + print '' . $langs->trans('Modify') . ''; + } else { + print '' . $langs->trans('Modify') . ''; + } + + if ($user->rights->accountingex->admin) { + print '' . $langs->trans('Delete') . ''; + } else { + print '' . $langs->trans('Delete') . ''; + } + + print '
'; + } + } else { + dol_print_error($db); + } +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/admin/importaccounts.php b/htdocs/accountancy/admin/importaccounts.php new file mode 100644 index 00000000000..d9d255dad99 --- /dev/null +++ b/htdocs/accountancy/admin/importaccounts.php @@ -0,0 +1,197 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +/** + * \file htdocs/compta/accountingex/liste.php + * \ingroup compta + * \brief Page IMPORT COMPTE COMPTABLE + */ +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; +dol_include_once("/accountingex/class/accountingaccount.class.php"); +dol_include_once("/accountingex/class/html.formventilation.class.php"); + +// langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->admin) + accessforbidden(); + +llxHeader('', $langs->trans("ImportAccount")); + +$to_import = GETPOST("mesCasesCochees"); + +if ($_POST["action"] == 'import') { + print '
' . $langs->trans("Processing") . '...
'; + if (is_array($to_import) && count($to_import) > 0) { + print '
' . count($to_import) . ' ' . $langs->trans("SelectedLines") . '
'; + $sql = 'SELECT pcg_version FROM ' . MAIN_DB_PREFIX . 'accounting_system WHERE rowid=' . $conf->global->CHARTOFACCOUNTS; + + $result = $db->query($sql); + if ($result && ($db->num_rows($result) > 0)) { + + $obj = $db->fetch_object($result); + + $cpt = 0; + foreach ( $to_import as $maLigneCochee ) { + + $accounting = new AccountingAccount($db); + + $monLabel = GETPOST('intitule' . $maLigneCochee); + $monParentAccount = GETPOST('AccountParent' . $maLigneCochee); + $monType = GETPOST('pcgType' . $maLigneCochee); + $monSubType = GETPOST('pcgSubType' . $maLigneCochee); + + $accounting->fk_pcg_version = $obj->pcg_version; + $accounting->account_number = $maLigneCochee; + $accounting->label = $monLabel; + $accounting->account_parent = $monParentAccount; + $accounting->pcg_type = $monType; + $accounting->pcg_subtype = $monSubType; + $accounting->active = 1; + + $result = $accounting->create($user); + if ($result > 0) { + setEventMessage($langs->trans("AccountingAccountAdd"), 'mesgs'); + } else { + setEventMessage($accounting->error, 'errors'); + } + $cpt ++; + } + } else { + setEventMessage($langs->trans('AccountPlanNotFoundCheckSetting'), 'errors'); + } + } else { + print '
' . $langs->trans("AnyLineImport") . '
'; + } + print '
' . $langs->trans("EndProcessing") . '
'; +} + +/* +* list accounting account from product +* +*/ +$page = GETPOST("page"); +if ($page < 0) + $page = 0; +$limit = $conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION; +$offset = $limit * $page; + +$sql = "(SELECT p.rowid as product_id, p.accountancy_code_sell as accounting "; +$sql .= " FROM " . MAIN_DB_PREFIX . "product as p "; +$sql .= " WHERE p.accountancy_code_sell >=0"; +$sql .= " GROUP BY accounting "; +$sql .= ")"; +$sql .= "UNION ALL(SELECT p.rowid as product_id, p.accountancy_code_buy as accounting "; +$sql .= " FROM " . MAIN_DB_PREFIX . "product as p "; +$sql .= " WHERE p.accountancy_code_buy >=0"; +$sql .= " GROUP BY accounting "; +$sql .= ") "; +$sql .= " ORDER BY accounting DESC " . $db->plimit($limit + 1, $offset); + +dol_syslog('accountingex/admin/importaccounts.php:: $sql=' . $sql); +$result = $db->query($sql); +if ($result) { + $num_lignes = $db->num_rows($result); + $i = 0; + print_barre_liste($langs->trans("ImportAccount"), $page, "importaccounts.php", "", $sortfield, $sortorder, '', $num_lignes); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $form = new Form($db); + $htmlacc = new FormVentilation($db); + + print '' . "\n"; + print ''; + + $var = True; + while ( $i < min($num_lignes, $limit) ) { + $objp = $db->fetch_object($result); + $var = ! $var; + print ""; + + print ''; + + print ''; + + // Colonne choix du compte + print ''; + + print ''; + + print ''; + + // Colonne choix ligne a ventiler + + $checked = ('intitule' == 'O') ? ' checked=checked' : ''; + + print ''; + + print ''; + $i ++; + } + + print ''; + + print '
' . $langs->trans("accountingaccount") . '' . $langs->trans("label") . '' . $langs->trans("parentaccount") . '' . $langs->trans("Pcgtype") . '' . $langs->trans("Pcgsubtype") . '' . $langs->trans("Import") . '
'; + print $objp->accounting; + print ''; + print ''; + print ''; + print $htmlacc->select_account($accounting->account_parent, 'AccountParent'); + print ''; + print $htmlacc->select_pcgtype($accounting->pcg_type, 'pcgType'); + print ''; + print $htmlacc->select_pcgsubtype($accounting->pcg_subtype, 'pcgSubType'); + print ''; + print ''; + print '
 
'; + print ''; +} else { + print $db->error(); +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/admin/index.html b/htdocs/accountancy/admin/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php new file mode 100644 index 00000000000..d25dffe4c25 --- /dev/null +++ b/htdocs/accountancy/admin/index.php @@ -0,0 +1,301 @@ + + * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 Ari Elbaz (elarifr) + * Copyright (C) 2014 Marcos García + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file htdocs/accountingex/admin/index.php + * \ingroup Accounting Expert + * \brief Setup page to configure accounting expert module + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + +// Class +dol_include_once("/core/lib/admin.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; + +$langs->load("compta"); +$langs->load("bills"); +$langs->load('admin'); +$langs->load('accountingex@accountingex'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->admin) + accessforbidden(); + +$action = GETPOST('action', 'alpha'); + +// Other parameters COMPTA_* & ACCOUNTINGEX_* +$list = array ( + 'ACCOUNTINGEX_LIMIT_LIST_VENTILATION', + 'ACCOUNTINGEX_LENGTH_GACCOUNT', + 'ACCOUNTINGEX_LENGTH_AACCOUNT', + 'COMPTA_ACCOUNT_CUSTOMER', + 'COMPTA_ACCOUNT_SUPPLIER', + 'COMPTA_PRODUCT_BUY_ACCOUNT', + 'COMPTA_PRODUCT_SOLD_ACCOUNT', + 'COMPTA_SERVICE_BUY_ACCOUNT', + 'COMPTA_SERVICE_SOLD_ACCOUNT', + 'ACCOUNTINGEX_ACCOUNT_SUSPENSE', + 'ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH' +); + +/* + * Actions + */ + +$compta_mode = defined('COMPTA_MODE')?COMPTA_MODE:'RECETTES-DEPENSES'; + +if ($action == 'update') +{ + $error = 0; + + $compta_modes = array( + 'RECETTES-DEPENSES', + 'CREANCES-DETTES' + ); + + $compta_mode = GETPOST('compta_mode','alpha'); + + if (in_array($compta_mode,$compta_modes)) { + + if (!dolibarr_set_const($db, 'COMPTA_MODE', $compta_mode, 'chaine', 0, '', $conf->entity)) { + $error++; + } + } else { + $error++; + } + + $chartofaccounts = GETPOST('chartofaccounts', 'int'); + + if (! empty($chartofaccounts)) { + + if (! dolibarr_set_const($db, 'CHARTOFACCOUNTS', $chartofaccounts, 'chaine', 0, '', $conf->entity)) { + $error ++; + } + } else { + $error ++; + } + + foreach ($list as $constname) { + $constvalue = GETPOST($constname, 'alpha'); + + if (!dolibarr_set_const($db, $constname, $constvalue, 'chaine', 0, '', $conf->entity)) { + $error++; + } + } + + if (! $error) + { + setEventMessage($langs->trans("SetupSaved")); + } + else + { + setEventMessage($langs->trans("Error"),'errors'); + } +} + +if ($action == 'setlistsorttodo') { + $setlistsorttodo = GETPOST('value', 'int'); + $res = dolibarr_set_const($db, "ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO", $setlistsorttodo, 'yesno', 0, '', $conf->entity); + if (! $res > 0) + $error ++; + + if (! $error) { + setEventMessage($langs->trans("SetupSaved"), 'mesgs'); + } else { + setEventMessage($langs->trans("Error"), 'mesgs'); + } +} + +if ($action == 'setlistsortdone') { + $setlistsortdone = GETPOST('value', 'int'); + $res = dolibarr_set_const($db, "ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE", $setlistsortdone, 'yesno', 0, '', $conf->entity); + if (! $res > 0) + $error ++; + if (! $error) { + setEventMessage($langs->trans("SetupSaved"), 'mesgs'); + } else { + setEventMessage($langs->trans("Error"), 'mesgs'); + } +} + +/* + * View + */ + +llxHeader(); + +$form = new Form($db); + +print_fiche_titre($langs->trans('ConfigAccountingExpert')); + +$head = admin_account_prepare_head($accounting); + +dol_fiche_head($head, 'general', $langs->trans("Configuration"), 0, 'cron'); + +print '
'; +print ''; +print ''; + +print ''; + +// Cas du parametre COMPTA_MODE + +print ''; +print ''; +print "\n"; +print ''; +print '\n"; +print ''; +print '\n"; +print ''; + +print "
'.$langs->trans('OptionMode').''.$langs->trans('Description').'
'.$langs->trans('OptionModeTrue').''.nl2br($langs->trans('OptionModeTrueDesc')); +// Write info on way to count VAT +//if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) +//{ +// // print "
\n"; +// // print nl2br($langs->trans('OptionModeTrueInfoModuleComptabilite')); +//} +//else +//{ +// // print "
\n"; +// // print nl2br($langs->trans('OptionModeTrueInfoExpert')); +//} +print "
'.$langs->trans('OptionModeVirtual').''.nl2br($langs->trans('OptionModeVirtualDesc'))."
\n"; + +print "
\n"; + +/* + * Define Chart of accounts + */ +print ''; +$var = True; + +print ''; +print ''; +print "\n"; +$var = ! $var; +print ''; +print ""; +print ""; +print "
'; +print $langs->trans("Chartofaccounts") . '
" . $langs->trans("Selectchartofaccounts") . ""; +print '"; +print "
"; + +print "
\n"; + +/* + * Others params + */ +print ''; +print ''; +print ''; +print "\n"; + +foreach ($list as $key) +{ + $var=!$var; + + print ''; + + // Param + $label = $langs->trans($key); + print ''; + + // Value + print ''; +} + +print ""; +print ''; +if (! empty($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO)) { + print ''; +} else { + print ''; +} +print ''; + +print ""; +print ''; +if (! empty($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE)) { + print ''; +} else { + print ''; +} +print ''; + +print ''; +print "
' . $langs->trans('OtherOptions') . '
'; + print ''; + print '
' . $langs->trans("ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO") . ''; + print img_picto($langs->trans("Activated"), 'switch_on'); + print ''; + print img_picto($langs->trans("Disabled"), 'switch_off'); + print '
' . $langs->trans("ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE") . ''; + print img_picto($langs->trans("Activated"), 'switch_on'); + print ''; + print img_picto($langs->trans("Disabled"), 'switch_off'); + print '
\n"; + +print '

'; + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/admin/journaux.php b/htdocs/accountancy/admin/journaux.php new file mode 100644 index 00000000000..f7b354090e9 --- /dev/null +++ b/htdocs/accountancy/admin/journaux.php @@ -0,0 +1,176 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 Florian Henry + * Copyright (C) 2014 Marcos García + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file htdocs/accountingex/admin/journaux.php + * \ingroup Accounting Expert + * \brief Setup page to configure accounting expert module + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + +// Class +dol_include_once("/core/lib/admin.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; +dol_include_once("/core/lib/bank.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + +$langs->load('accountingex@accountingex'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->admin) + accessforbidden(); + +$action = GETPOST('action', 'alpha'); + +// Other parameters ACCOUNTINGEX_* +$list = array ( + 'ACCOUNTINGEX_SELL_JOURNAL', + 'ACCOUNTINGEX_PURCHASE_JOURNAL', + 'ACCOUNTINGEX_SOCIAL_JOURNAL', + 'ACCOUNTINGEX_CASH_JOURNAL', + 'ACCOUNTINGEX_MISCELLANEOUS_JOURNAL' +); + +/* + * Actions + */ + +if ($action == 'update') { + $error = 0; + + foreach ( $list as $constname ) { + $constvalue = GETPOST($constname, 'alpha'); + + if (! dolibarr_set_const($db, $constname, $constvalue, 'chaine', 0, '', $conf->entity)) { + $error ++; + } + } + + if (! $error) { + setEventMessage($langs->trans("SetupSaved")); + } else { + setEventMessage($langs->trans("Error"), 'errors'); + } +} + +/* + * View + */ + +llxHeader(); + +$form = new Form($db); + +print_fiche_titre($langs->trans('ConfigAccountingExpert')); + +$head = admin_account_prepare_head(null); + +dol_fiche_head($head, 'journal', $langs->trans("Configuration"), 0, 'cron'); + +print '
'; +print ''; +print ''; + +print ''; +print ''; +print ''; +print "\n"; + +foreach ( $list as $key ) { + $var = ! $var; + + print ''; + + // Param + $label = $langs->trans($key); + print ''; + + // Value + print ''; +} + +print ''; +print "
' . $langs->trans('Journaux') . '
'; + print ''; + print '
\n"; + +print '
'; + +print '
'; + +// Bank account +$sql = "SELECT ba.rowid, ba.ref , ba.label, ba.bank , ba.account_number, ba.code_journal "; +$sql .= " FROM ".MAIN_DB_PREFIX."lx_bank_account as ba"; +$sql .= " WHERE ba.clos = 0" ; +$sql .= " ORDER BY label"; + +dol_syslog('accountingex/admin/journaux.php:: $sql='.$sql); + +$resql = $db->query($sql); +if ($resql) +{ + $num = $db->num_rows($resql); + $i = 0; + +} + +print ''; +print ''; +print ''; +print "\n"; + +$form2 = new Form($db); + +$account = new Account($db); +foreach ( $resql as $key ) { + $var = ! $var; + + print ''; + + // Param + $label = $langs->trans($key); + print ''; + + // Value + print ''; +} + +print '
' . $langs->trans('JournauxTresorerie') . '
'; + print ''; + print '
'; +print ''; + +print '
'; + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php new file mode 100644 index 00000000000..89bc1996771 --- /dev/null +++ b/htdocs/accountancy/admin/productaccount.php @@ -0,0 +1,149 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/admin/productaccount.php + * \ingroup Accounting Expert + * \brief Onglet de gestion de parametrages des ventilations + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/core/lib/report.lib.php"); +dol_include_once("/core/lib/date.lib.php"); +dol_include_once("/product/class/product.class.php"); + +$langs->load("companies"); +$langs->load("compta"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->admin) + accessforbidden(); + +llxHeader('', $langs->trans("Accounts")); + +$form = new Form($db); + +print ''; + +print ' + '; + +$sql = "SELECT p.rowid, p.ref , p.label, p.description , p.accountancy_code_sell as codesell, p.accountancy_code_buy, p.tms, p.fk_product_type as product_type , p.tosell , p.tobuy "; +$sql .= " FROM " . MAIN_DB_PREFIX . "product as p"; +$sql .= " WHERE p.accountancy_code_sell IS NULL AND p.tosell = 1 OR p.accountancy_code_buy IS NULL AND p.tobuy = 1"; + +dol_syslog('accountingex/admin/productaccount.php:: $sql=' . $sql); +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + + /* +* view +*/ + + print '

'; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $var = True; + + while ( $i < min($num, 250) ) { + $obj = $db->fetch_object($resql); + $var = ! $var; + + $compta_prodsell = $obj->accountancy_code_sell; + if (empty($compta_prodsell)) { + if ($obj->product_type == 0) + $compta_prodsell = (! empty($conf->global->COMPTA_PRODUCT_SOLD_ACCOUNT) ? $conf->global->COMPTA_PRODUCT_SOLD_ACCOUNT : $langs->trans("CodeNotDef")); + else + $compta_prodsell = (! empty($conf->global->COMPTA_SERVICE_SOLD_ACCOUNT) ? $conf->global->COMPTA_SERVICE_SOLD_ACCOUNT : $langs->trans("CodeNotDef")); + } + + $compta_prodbuy = $obj->accountancy_code_buy; + if (empty($compta_prodbuy)) { + if ($obj->product_type == 0) + $compta_prodbuy = (! empty($conf->global->COMPTA_PRODUCT_BUY_ACCOUNT) ? $conf->global->COMPTA_PRODUCT_BUY_ACCOUNT : $langs->trans("CodeNotDef")); + else + $compta_prodbuy = (! empty($conf->global->COMPTA_SERVICE_BUY_ACCOUNT) ? $conf->global->COMPTA_SERVICE_BUY_ACCOUNT : $langs->trans("CodeNotDef")); + } + + $product_static = new Product($db); + + print ""; + // Ref produit + $product_static->ref = $objp->p . ref; + $product_static->id = $objp->rowid; + $product_static->type = $objp->type; + print ''; + print ''; + print ''; + print ''; + + print ''; + print ''; + + print ''; + print ''; + + print "\n"; + $i ++; + } + print "
' . $langs->trans("Ref") . '' . $langs->trans("Label") . '' . $langs->trans("Description") . '' . $langs->trans("Accountancy_code_buy") . '' . $langs->trans("Accountancy_code_buy_suggest") . '' . $langs->trans("Accountancy_code_sell") . '' . $langs->trans("Accountancy_code_sell_suggest") . '
'; + if ($product_static->id) + print $product_static->getNomUrl(1); + else + print ' '; + print '' . $obj->ref . '' . $obj->label . '' . $obj->description . '' . $obj->accountancy_code_buy . '' . $compta_prodbuy . '' . $obj->accountancy_code_sell . '' . $compta_prodsell . '
"; + $db->free($resql); +} else { + dol_print_error($db); +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/admin/thirdpartyaccount.php b/htdocs/accountancy/admin/thirdpartyaccount.php new file mode 100644 index 00000000000..c9af52fcc51 --- /dev/null +++ b/htdocs/accountancy/admin/thirdpartyaccount.php @@ -0,0 +1,253 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/admin/thirdpartyaccount.php + * \ingroup Accounting Expert + * \brief Onglet de gestion de parametrages des ventilations + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/core/lib/report.lib.php"); +dol_include_once("/core/lib/date.lib.php"); + +$langs->load("companies"); +$langs->load("compta"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->admin) + accessforbidden(); + + // Date range +$year = GETPOST("year"); +if (empty($year)) { + $year_current = strftime("%Y", dol_now()); + $month_current = strftime("%m", dol_now()); + $year_start = $year_current; +} else { + $year_current = $year; + $month_current = strftime("%m", dol_now()); + $year_start = $year; +} +$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); +$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); + +// Quarter +if (empty($date_start) || empty($date_end)) // We define date_start and date_end +{ + $q = GETPOST("q") ? GETPOST("q") : 0; + if ($q == 0) { + // We define date_start and date_end + $year_end = $year_start; + $month_start = GETPOST("month") ? GETPOST("month") : ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1); + if (! GETPOST('month')) { + if (! GETPOST("year") && $month_start > $month_current) { + $year_start --; + $year_end --; + } + $month_end = $month_start - 1; + if ($month_end < 1) + $month_end = 12; + else + $year_end ++; + } else + $month_end = $month_start; + $date_start = dol_get_first_day($year_start, $month_start, false); + $date_end = dol_get_last_day($year_end, $month_end, false); + } + if ($q == 1) { + $date_start = dol_get_first_day($year_start, 1, false); + $date_end = dol_get_last_day($year_start, 3, false); + } + if ($q == 2) { + $date_start = dol_get_first_day($year_start, 4, false); + $date_end = dol_get_last_day($year_start, 6, false); + } + if ($q == 3) { + $date_start = dol_get_first_day($year_start, 7, false); + $date_end = dol_get_last_day($year_start, 9, false); + } + if ($q == 4) { + $date_start = dol_get_first_day($year_start, 10, false); + $date_end = dol_get_last_day($year_start, 12, false); + } +} else { +} + +llxHeader(); + +$form = new Form($db); + +$nomlink = ''; +$periodlink = ''; +$exportlink = ''; + +$nom = $langs->trans("ReportThirdParty"); +$period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); +$description = $langs->trans("DescThirdPartyReport"); +$builddate = time(); + +report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( + 'action' => '' +)); + +print ''; + +print ' + '; + +$sql = "(SELECT s.rowid, s.nom as name , s.address, s.zip , s.town, s.code_compta as compta , "; +$sql .= " s.fk_forme_juridique , s.fk_pays , s.phone , s.fax , f.datec , f.fk_soc , cp.label as country "; +$sql .= " FROM " . MAIN_DB_PREFIX . "societe as s"; +$sql .= ", " . MAIN_DB_PREFIX . "facture as f"; +$sql .= ", " . MAIN_DB_PREFIX . "c_country as cp"; +$sql .= " WHERE f.fk_soc = s.rowid"; +$sql .= " AND s.fk_pays = cp.rowid"; +if (! empty($date_start) && ! empty($date_end)) + $sql .= " AND f.datec >= '" . $db->idate($date_start) . "' AND f.datec <= '" . $db->idate($date_end) . "'"; +$sql .= " AND f.entity = " . $conf->entity; +if ($socid) + $sql .= " AND f.fk_soc = " . $socid; +$sql .= " GROUP BY name"; +$sql .= ")"; +$sql .= "UNION (SELECT s.rowid, s.nom as name , s.address, s.zip , s.town, s.code_compta_fournisseur as compta , "; +$sql .= " s.fk_forme_juridique , s.fk_pays , s.phone , s.fax , ff.datec , ff.fk_soc , cp.label as country "; +$sql .= " FROM " . MAIN_DB_PREFIX . "societe as s"; +$sql .= ", " . MAIN_DB_PREFIX . "facture_fourn as ff"; +$sql .= ", " . MAIN_DB_PREFIX . "c_country as cp"; +$sql .= " WHERE ff.fk_soc = s.rowid"; +$sql .= " AND s.fk_pays = cp.rowid"; +if (! empty($date_start) && ! empty($date_end)) + $sql .= " AND ff.datec >= '" . $db->idate($date_start) . "' AND ff.datec <= '" . $db->idate($date_end) . "'"; +$sql .= " AND ff.entity = " . $conf->entity; +if ($socid) + $sql .= " AND f.fk_soc = " . $socid; +$sql .= " GROUP BY name"; +$sql .= ")"; + +$sql .= "ORDER BY name ASC"; + +dol_syslog('accountingex/admin/thirdpartyaccount.php:: $sql=' . $sql); +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + + // export csv + if (GETPOST('action') == 'export_csv') { + + header('Content-Type: text/csv'); + header('Content-Disposition: attachment;filename=export_csv.csv'); + + $obj = $db->fetch_object($resql); + $var = ! $var; + + print '"' . $obj->compta . '",'; + print '"' . $obj->address . '",'; + print '"' . $obj->zip . '",'; + print '"' . $obj->town . '",'; + print '"' . $obj->country . '",'; + print '"' . $obj->phone . '",'; + print '"' . $obj->fax . '",'; + print "\n"; + $i ++; + } + + /* + * View + */ + + $thirdpartystatic = new Societe($db); + + print '

'; + + print ''; + print "
\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $var = True; + + while ( $obj = $db->fetch_object($resql) ) { + + $var = ! $var; + + print ""; + print ''; + print '' . "\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $i ++; + } + + print "
' . $langs->trans("ThirdParties") . '' . $langs->trans("AccountNumber") . '' . $langs->trans("RaisonSociale") . '' . $langs->trans("Address") . '' . $langs->trans("Zip") . '' . $langs->trans("Town") . '' . $langs->trans("Country") . '' . $langs->trans("Contact") . '' . $langs->trans("Phone") . '' . $langs->trans("Fax") . '
'; + $thirdpartystatic->id = $obj->rowid; + $thirdpartystatic->name = $obj->name; + $thirdpartystatic->client = $obj->client; + $thirdpartystatic->canvas = $obj->canvas; + $thirdpartystatic->status = $obj->status; + print $thirdpartystatic->getNomUrl(1); + print '' . $obj->compta . '' . $obj->address . '' . $obj->zip . '' . $obj->town . '' . $obj->country . '' . $obj->phone . '' . $obj->fax . '
"; + $db->free($resql); +} else { + dol_print_error($db); +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/bookkeeping/balancebymonth.php b/htdocs/accountancy/bookkeeping/balancebymonth.php new file mode 100644 index 00000000000..5ce55fef7f6 --- /dev/null +++ b/htdocs/accountancy/bookkeeping/balancebymonth.php @@ -0,0 +1,143 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file accountingex/bookkeeping/balancebymonth.php + * \ingroup Accounting Expert + * \brief Balance by month + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/core/lib/date.lib.php"); +dol_include_once("accountingex/core/lib/account.lib.php"); + +// Langs +$langs->load("main"); +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("accountingex@accountingex"); + +// Filter +$year = $_GET["year"]; +if ($year == 0) { + $year_current = strftime("%Y", time()); + $year_start = $year_current; +} else { + $year_current = $year; + $year_start = $year; +} + +/* + * View + */ +llxHeader('', $langs->trans("CustomersVentilation")); + +$textprevyear = "" . img_previous() . ""; +$textnextyear = " " . img_next() . ""; + +print_fiche_titre($langs->trans("AccountBalanceByMonth") . ' ' . $textprevyear . ' ' . $langs->trans("Year") . ' ' . $year_start . ' ' . $textnextyear); + +$sql = "SELECT count(*) FROM " . MAIN_DB_PREFIX . "facturedet as fd"; +$sql .= " , " . MAIN_DB_PREFIX . "facture as f"; +$sql .= " WHERE fd.fk_code_ventilation = 0"; +$sql .= " AND f.rowid = fd.fk_facture AND f.fk_statut = 1;"; + +dol_syslog('accountingex/bookkeeping/balancebymonth.php:: $sql=' . $sql); +$result = $db->query($sql); +if ($result) { + $row = $db->fetch_row($result); + $nbfac = $row[0]; + + $db->free($result); +} + +$y = $year_current; + +$var = true; + +print ''; +print ''; + +$sql = "SELECT bk.numero_compte AS 'compte',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=1,bk.montant,0)),2) AS 'Janvier',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=2,bk.montant,0)),2) AS 'Fevrier',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=3,bk.montant,0)),2) AS 'Mars',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=4,bk.montant,0)),2) AS 'Avril',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=5,bk.montant,0)),2) AS 'Mai',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=6,bk.montant,0)),2) AS 'Juin',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=7,bk.montant,0)),2) AS 'Juillet',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=8,bk.montant,0)),2) AS 'Aout',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=9,bk.montant,0)),2) AS 'Septembre',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=10,bk.montant,0)),2) AS 'Octobre',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=11,bk.montant,0)),2) AS 'Novembre',"; +$sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=12,bk.montant,0)),2) AS 'Decembre',"; +$sql .= " ROUND(SUM(bk.montant),2) as 'Total'"; +$sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping as bk"; +$sql .= " WHERE bk.doc_date >= '" . $db->idate(dol_get_first_day($y, 1, false)) . "'"; +$sql .= " AND bk.doc_date <= '" . $db->idate(dol_get_last_day($y, 12, false)) . "'"; +$sql .= " GROUP BY bk.numero_compte"; + +$resql = $db->query($sql); +if ($resql) { + $i = 0; + $num = $db->num_rows($resql); + + while ( $i < $num ) { + + $row = $db->fetch_row($resql); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $i ++; + } + $db->free($resql); +} else { + print $db->lasterror(); +} +print "
' . $langs->trans("Intitule") . '' . $langs->trans("JanuaryMin") . '' . $langs->trans("FebruaryMin") . '' . $langs->trans("MarchMin") . '' . $langs->trans("AprilMin") . '' . $langs->trans("MayMin") . '' . $langs->trans("JuneMin") . '' . $langs->trans("JulyMin") . '' . $langs->trans("AugustMin") . '' . $langs->trans("SeptemberMin") . '' . $langs->trans("OctoberMin") . '' . $langs->trans("NovemberMin") . '' . $langs->trans("DecemberMin") . 'Total
' . length_accountg($row[0]) . '' . price($row[1]) . '' . price($row[2]) . '' . price($row[3]) . '' . price($row[4]) . '' . price($row[5]) . '' . price($row[6]) . '' . price($row[7]) . '' . price($row[8]) . '' . price($row[9]) . '' . price($row[10]) . '' . price($row[11]) . '' . price($row[12]) . '' . price($row[13]) . '
\n"; + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/bookkeeping/fiche.php b/htdocs/accountancy/bookkeeping/fiche.php new file mode 100644 index 00000000000..b558f70e480 --- /dev/null +++ b/htdocs/accountancy/bookkeeping/fiche.php @@ -0,0 +1,385 @@ + + * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013-2014 Alexandre Spangaro + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/bookkeeping/fiche.php + * \ingroup Accounting Expert + * \brief Page to show account + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("accountingex/class/bookkeeping.class.php"); + +// Langs +$langs->load("accountingex@accountingex"); + +// Security check +$id = GETPOST('id', 'int'); +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +$action = GETPOST('action'); +$piece_num = GETPOST("piece_num"); + +$mesg = ''; + +$numero_compte = GETPOST('numero_compte'); +$code_tiers = GETPOST('code_tiers'); +$label_compte = GETPOST('label_compte'); +$debit = price2num(GETPOST('debit')); +$credit = price2num(GETPOST('credit')); + +if ($action == "confirm_update") { + + $error = 0; + + if ((intval($debit) != 0) && (intval($credit) != 0)) { + setEventMessage($langs->trans('ErrorDebitCredit'), 'errors'); + $error ++; + } + + if (empty($error)) { + $book = new BookKeeping($db); + + $result = $book->fetch($id); + if ($result < 0) { + setEventMessage($book->errors, 'errors'); + } else { + $book->numero_compte = $numero_compte; + $book->code_tiers = $code_tiers; + $book->label_compte = $label_compte; + $book->debit = $debit; + $book->credit = $credit; + + if (! empty($debit)) { + $book->montant = $debit; + $book->sens = 'D'; + } + if (! empty($credit)) { + $book->montant = $credit; + $book->sens = 'C'; + } + + $result = $book->update(); + if ($result < 0) { + setEventMessage($book->errors, 'errors'); + } else { + setEventMessage($langs->trans('Saved'), 'mesgs'); + $action = ''; + } + } + } +} + +else if ($action == "add") { + + $error = 0; + if ((intval($debit) != 0) && (intval($credit) != 0)) { + setEventMessage($langs->trans('ErrorDebitCredit'), 'errors'); + $error ++; + } + + if (empty($error)) { + $book = new BookKeeping($db); + + $book->numero_compte = $numero_compte; + $book->code_tiers = $code_tiers; + $book->label_compte = $label_compte; + $book->debit = $debit; + $book->credit = $credit; + $book->doc_date = GETPOST('doc_date'); + $book->doc_type = GETPOST('doc_type'); + $book->piece_num = $piece_num; + $book->doc_ref = GETPOST('doc_ref'); + $book->code_journal = GETPOST('code_journal'); + $book->fk_doc = GETPOST('fk_doc'); + $book->fk_docdet = GETPOST('fk_docdet'); + + if (! empty($debit)) { + $book->montant = $debit; + $book->sens = 'D'; + } + if (! empty($credit)) { + $book->montant = $credit; + $book->sens = 'C'; + } + + $result = $book->create_std($user); + if ($result < 0) { + setEventMessage($book->errors, 'errors'); + } else { + setEventMessage($langs->trans('Saved'), 'mesgs'); + $action = ''; + } + } +} + +else if ($action == "confirm_delete") { + $book = new BookKeeping($db); + + $result = $book->fetch($id); + + $piece_num = $book->piece_num; + + if ($result < 0) { + setEventMessage($book->errors, 'errors'); + } else { + $result = $book->delete($user); + if ($result < 0) { + setEventMessage($book->errors, 'errors'); + } + } + $action = ''; +} + +else if ($action == "confirm_create") { + $book = new BookKeeping($db); + + $book->label_compte = ''; + $book->debit = 0; + $book->credit = 0; + $book->doc_date = $date_start = dol_mktime(0, 0, 0, GETPOST('doc_datemonth'), GETPOST('doc_dateday'), GETPOST('doc_dateyear')); + $book->doc_type = GETPOST('doc_type'); + $book->piece_num = GETPOST('next_num_mvt'); + $book->doc_ref = GETPOST('doc_ref'); + $book->code_journal = GETPOST('code_journal'); + $book->fk_doc = 0; + $book->fk_docdet = 0; + + $book->montant = 0; + + $result = $book->create_std($user); + if ($result < 0) { + setEventMessage($book->errors, 'errors'); + } else { + setEventMessage($langs->trans('Saved'), 'mesgs'); + $action = ''; + $piece_num = $book->piece_num; + } +} + +llxHeader(); + +$html = new Form($db); +$nbligne = 0; + +/* + * Confirmation to delete the command + */ +if ($action == 'delete') { + $formconfirm = $html->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $id, $langs->trans('DeleteMvt'), $langs->trans('ConfirmDeleteMvt'), 'confirm_delete', '', 0, 1); + print $formconfirm; +} + +if ($action == 'create') { + + print_fiche_titre($langs->trans("CreateMvts")); + + $code_journal_array = array ( + $conf->global->ACCOUNTINGEX_SELL_JOURNAL => $conf->global->ACCOUNTINGEX_SELL_JOURNAL, + $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL => $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL, + $conf->global->ACCOUNTINGEX_BANK_JOURNAL => $conf->global->ACCOUNTINGEX_BANK_JOURNAL, + $conf->global->ACCOUNTINGEX_SOCIAL_JOURNAL => $conf->global->ACCOUNTINGEX_SOCIAL_JOURNAL + ); + + $book = new BookKeeping($db); + $next_num_mvt = $book->next_num_mvt(); + + print '
'; + print '' . "\n"; + print '' . "\n"; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print ''; + print ''; + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
' . $langs->trans("NumMvts") . '' . $next_num_mvt . '
' . $langs->trans("Docdate") . ''; + print $html->select_date('', 'doc_date', '', '', '', "create_mvt", 1, 1); + print '
' . $langs->trans("Codejournal") . '' . $html->selectarray('code_journal', $code_journal_array) . '
' . $langs->trans("Docref") . '
' . $langs->trans("Doctype") . '
'; + print '
'; + print ''; + + print '
'; +} else { + $book = new BookKeeping($db); + $result = $book->fetch_per_mvt($piece_num); + if ($result < 0) { + setEventMessage($book->errors, 'errors'); + } + if (! empty($book->piece_num)) { + + print_fiche_titre($langs->trans("UpdateMvts")); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
' . $langs->trans("NumMvts") . '' . $book->piece_num . '
' . $langs->trans("Docdate") . '' . dol_print_date($book->doc_date, 'daytextshort') . '
' . $langs->trans("Codejournal") . '' . $book->code_journal . '
' . $langs->trans("Docref") . '' . $book->doc_ref . '
' . $langs->trans("Doctype") . '' . $book->doc_type . '
'; + + $result = $book->fetch_all_per_mvt($piece_num); + if ($result < 0) { + setEventMessage($book->errors, 'errors'); + } else { + + print_fiche_titre($langs->trans("ListeMvts")); + print ""; + if (count($book->linesmvt) > 0) { + + print ''; + + print_liste_field_titre($langs->trans("Numerocompte")); + print_liste_field_titre($langs->trans("Code_tiers")); + print_liste_field_titre($langs->trans("Labelcompte")); + print_liste_field_titre($langs->trans("Debit")); + print_liste_field_titre($langs->trans("Credit")); + print_liste_field_titre($langs->trans("Amount")); + print_liste_field_titre($langs->trans("Sens")); + + print ''; + print "\n"; + + foreach ( $book->linesmvt as $line ) { + $var = ! $var; + print ""; + + if ($action == 'update' && $line->id == $id) { + + print ''; + print '' . "\n"; + print '' . "\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print ''; + } else { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print ''; + } + print "\n"; + } + + if ($action == "" || $action == 'add') { + $var = ! $var; + print ""; + + print ''; + print '' . "\n"; + print '' . "\n"; + print '' . "\n"; + print '' . "\n"; + print '' . "\n"; + print '' . "\n"; + print '' . "\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print ''; + } + + print "
' . $line->montant . '' . $line->sens . ''; + if ($user->rights->accountingex->access) { + print ''; + } + print ''; + print '' . $line->numero_compte . '' . $line->code_tiers . '' . $line->label_compte . '' . $line->debit . '' . $line->credit . '' . $line->montant . '' . $line->sens . ''; + if ($user->rights->accoutingex->access) { + print ''; + print img_edit(); + print ' '; + print ''; + print img_delete(); + print ''; + } + print '
"; + } + } + } else { + print_fiche_titre($langs->trans("NoRecords")); + } +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/bookkeeping/index.html b/htdocs/accountancy/bookkeeping/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/accountancy/bookkeeping/liste.php b/htdocs/accountancy/bookkeeping/liste.php new file mode 100644 index 00000000000..f587663e71c --- /dev/null +++ b/htdocs/accountancy/bookkeeping/liste.php @@ -0,0 +1,226 @@ + + * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013-2014 Alexandre Spangaro + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file accountingex/bookkeeping/liste.php + * \ingroup Accounting Expert + * \brief List operation of book keeping + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/accountingex/class/html.formventilation.class.php"); +dol_include_once("/accountingex/class/bookkeeping.class.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; + +$page = GETPOST("page"); +$sortorder = GETPOST("sortorder"); +$sortfield = GETPOST("sortfield"); +$action = GETPOST('action', 'alpha'); + +if ($sortorder == "") + $sortorder = "ASC"; +if ($sortfield == "") + $sortfield = "bk.rowid"; + +$offset = $conf->liste_limit * $page; + +$formventilation = new FormVentilation($db); + +/* + * Action + */ +if ($action == 'delbookkeeping') { + + $import_key = GETPOST('importkey', 'alpha'); + + if (! empty($import_key)) { + $object = new BookKeeping($db); + $result = $object->delete_by_importkey($import_key); + Header("Location: liste.php"); + if ($result < 0) { + setEventMessage($object->errors, 'errors'); + } + } +} // export csv +else if ($action == 'export_csv') { + + header('Content-Type: text/csv'); + header('Content-Disposition: attachment;filename=export_csv.csv'); + + $object = new BookKeeping($db); + $result = $object->export_bookkeping('ebp'); + if ($result < 0) { + setEventMessage($object->errors, 'errors'); + } + + foreach ( $object->linesexport as $line ) { + print $line->id . ','; + print '"' . dol_print_date($line->doc_date, '%d%m%Y') . '",'; + print '"' . $line->code_journal . '",'; + print '"' . $line->numero_compte . '",'; + print '"' . substr($line->code_journal, 0, 2) . '",'; + print '"' . substr($line->doc_ref, 0, 40) . '",'; + print '"' . $line->num_piece . '",'; + print '"' . $line->montant . '",'; + print '"' . $line->sens . '",'; + print '"' . dol_print_date($line->doc_date, '%d%m%Y') . '",'; + print '"' . $conf->currency . '",'; + print "\n"; + } +} + +else { + + llxHeader('', $langs->trans("Accounting") . ' - ' . $langs->trans("Bookkeeping")); + + /* + * List + */ + + $sql = "SELECT bk.rowid, bk.doc_date, bk.doc_type, bk.doc_ref, bk.code_tiers, bk.numero_compte , bk.label_compte, bk.debit , bk.credit, bk.montant , bk.sens , bk.code_journal , bk.piece_num "; + $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping as bk"; + + if (dol_strlen(trim(GETPOST("search_doc_type")))) { + + $sql .= " WHERE bk.doc_type LIKE '%" . GETPOST("search_doc_type") . "%'"; + + if (dol_strlen(trim(GETPOST("search_doc_ref")))) { + $sql .= " AND bk.doc_ref LIKE '%" . GETPOST("search_doc_ref") . "%'"; + } + } + if (dol_strlen(trim(GETPOST("search_doc_ref")))) { + $sql .= " WHERE bk.doc_ref LIKE '%" . GETPOST("search_doc_ref") . "%'"; + } + if (dol_strlen(trim(GETPOST("search_compte")))) { + $sql .= " WHERE bk.numero_compte LIKE '%" . GETPOST("search_compte") . "%'"; + } + if (dol_strlen(trim(GETPOST("search_tiers")))) { + $sql .= " WHERE bk.code_tiers LIKE '%" . GETPOST("search_tiers") . "%'"; + } + if (dol_strlen(trim(GETPOST("search_journal")))) { + $sql .= " WHERE bk.code_journal LIKE '%" . GETPOST("search_journal") . "%'"; + } + + $sql .= " ORDER BY $sortfield $sortorder " . $db->plimit($conf->liste_limit + 1, $offset); + + dol_syslog('accountingex/bookkeeping/liste.php:: $sql=' . $sql); + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + + print_barre_liste($langs->trans("Bookkeeping"), $page, "liste.php", "", $sortfield, $sortorder, '', $num); + + print ''; + print ''; + print ''; + + print $formventilation->select_bookkeeping_importkey('importkey', GETPOST('importkey')); + + print '
'; + + print ''; + + print 'Nouveau mouvement comptable'; + + print '
'; + print ''; + print ''; + print ''; + print '
'; + + print ""; + print ''; + print_liste_field_titre($langs->trans("Doctype"), $_SERVER['PHP_SELF'], "bk.doc_type", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Docdate"), $_SERVER['PHP_SELF'], "bk.doc_date", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Docref"), $_SERVER['PHP_SELF'], "bk.doc_ref", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Numerocompte"), $_SERVER['PHP_SELF'], "bk.numero_compte", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Code_tiers"), $_SERVER['PHP_SELF'], "bk.code_tiers", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Labelcompte"), $_SERVER['PHP_SELF'], "bk_label_compte", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Debit"), $_SERVER['PHP_SELF'], "bk.debit", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Credit"), $_SERVER['PHP_SELF'], "bk.credit", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Amount"), $_SERVER['PHP_SELF'], "bk.montant", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Sens"), $_SERVER['PHP_SELF'], "bk.sens", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Codejournal"), $_SERVER['PHP_SELF'], "bk.code_journal", "", "", "", $sortfield, $sortorder); + print_liste_field_titre(" "); + print "\n"; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $var = True; + + while ( $i < min($num, $conf->liste_limit) ) { + $obj = $db->fetch_object($resql); + $var = ! $var; + + print ""; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + $i ++; + } + print "
      '; + print ''; + print '
' . $obj->doc_type . '' . dol_print_date($db->jdate($obj->doc_date), 'day') . '' . $obj->doc_ref . '' . length_accountg($obj->numero_compte) . '' . length_accounta($obj->code_tiers) . '' . $obj->label_compte . '' . price($obj->debit) . '' . price($obj->credit) . '' . price($obj->montant) . '' . $obj->sens . '' . $obj->code_journal . '' . img_edit() . '
"; + $db->free($resql); + } else { + dol_print_error($db); + } +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/bookkeeping/listebyyear.php b/htdocs/accountancy/bookkeeping/listebyyear.php new file mode 100644 index 00000000000..2e17e1205ab --- /dev/null +++ b/htdocs/accountancy/bookkeeping/listebyyear.php @@ -0,0 +1,137 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file accountingex/bookkeeping/listebyyear.php + * \ingroup Accounting Expert + * \brief Book keeping by year + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + +// Class +dol_include_once("/core/lib/date.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; + +// Langs +$langs->load("accountingex@accountingex"); + +$page = GETPOST("page"); +$sortorder = GETPOST("sortorder"); +$sortfield = GETPOST("sortfield"); + +// Filter +$year = GETPOST("year", 'int'); +if ($year == 0) { + $year_current = strftime("%Y", time()); + $year_start = $year_current; +} else { + $year_current = $year; + $year_start = $year; +} + +if ($sortorder == "") + $sortorder = "ASC"; +if ($sortfield == "") + $sortfield = "bk.rowid"; + +$offset = $conf->liste_limit * $page; + +llxHeader('', $langs->trans("Bookkeeping")); + +$textprevyear = "" . img_previous() . ""; +$textnextyear = " " . img_next() . ""; + +/* + * Mode Liste + * + */ + +$sql = "SELECT bk.rowid, bk.doc_date, bk.doc_type, bk.doc_ref, bk.code_tiers, bk.numero_compte , bk.label_compte, bk.debit , bk.credit, bk.montant , bk.sens, bk.code_journal"; +$sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping as bk"; +// $sql .= " WHERE bk.doc_date >= '".$db->idate(dol_get_first_day($y,1,false))."'"; +// $sql .= " AND bk.doc_date <= '".$db->idate(dol_get_last_day($y,12,false))."'"; +$sql .= " ORDER BY $sortfield $sortorder " . $db->plimit($conf->liste_limit + 1, $offset); + +dol_syslog('accountingex/bookkeeping/listebyyear.php:: $sql=' . $sql); +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + + print_barre_liste($langs->trans("Bookkeeping") . " $textprevyear " . $langs->trans("Year") . " $year_start $textnextyear", $page, $_SERVER['PHP_SELF'], "", $sortfield, $sortorder, '', $num); + print ""; + + print ''; + print_liste_field_titre($langs->trans("Doctype"), $_SERVER['PHP_SELF'], "bk.doc_type", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Date"), $_SERVER['PHP_SELF'], "bk.doc_date", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Docref"), $_SERVER['PHP_SELF'], "bk.doc_ref", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("AccountAccounting"), $_SERVER['PHP_SELF'], "bk.numero_compte", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("ThirdPartyAccount"), $_SERVER['PHP_SELF'], "bk.code_tiers", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Label"), $_SERVER['PHP_SELF'], "bk_label_compte", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Debit"), $_SERVER['PHP_SELF'], "bk.debit", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Credit"), $_SERVER['PHP_SELF'], "bk.credit", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Amount"), $_SERVER['PHP_SELF'], "bk.montant", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Sens"), $_SERVER['PHP_SELF'], "bk.sens", "", "", "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Codejournal"), $_SERVER['PHP_SELF'], "bk.code_journal", "", "", "", $sortfield, $sortorder); + print_liste_field_titre(" "); + print "\n"; + + $var = True; + + while ( $i < min($num, $conf->liste_limit) ) { + $obj = $db->fetch_object($resql); + $var = ! $var; + + print ""; + + print '' . "\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $i ++; + } + print "
' . $obj->doc_type . '' . dol_print_date($db->jdate($obj->doc_date)) . '' . $obj->doc_ref . '' . length_accountg($obj->numero_compte) . '' . length_accounta($obj->code_tiers) . '' . $obj->label_compte . '' . price($obj->debit) . '' . price($obj->credit) . '' . price($obj->montant) . '' . $obj->sens . '' . $obj->code_journal . '' . img_edit() . '
"; + $db->free($resql); +} else { + dol_print_error($db); +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/class/accountancysystem.class.php b/htdocs/accountancy/class/accountancysystem.class.php index 4d81a94985b..63b59a95aaf 100644 --- a/htdocs/accountancy/class/accountancysystem.class.php +++ b/htdocs/accountancy/class/accountancysystem.class.php @@ -1,5 +1,7 @@ +/* Copyright (C) 2013-2014 Olivier Geffroy + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2013-2014 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 @@ -16,20 +18,18 @@ */ /** - * \file htdocs/accountancy/class/accountancysystem.class.php - * \ingroup accounting - * \brief File of class to manage accountancy systems + * \file accountingex/class/accountancysystem.class.php + * \ingroup Accounting Expert + * \brief File of class to manage accountancy systems */ - -/** \class AccountancySystem - * \brief Classe to manage accountancy systems +/** + * \class AccountancySystem + * \brief Classe to manage accountancy systems */ -class AccountancySystem -{ +class AccountancySystem { var $db; var $error; - var $rowid; var $fk_pcg_version; var $pcg_type; @@ -37,58 +37,48 @@ class AccountancySystem var $label; var $account_number; var $account_parent; - - + /** - * Constructor + * Constructor * - * @param DoliDB $db Database handler + * @param DoliDB $db handler */ - function __construct($db) - { + function __construct($db) { $this->db = $db; } - - + /** - * Insert accountancy system name into database + * Insert accountancy system name into database * - * @param User $user User making insert - * @return int <0 if KO, Id of line if OK + * @param User $user making insert + * @return int if KO, Id of line if OK */ - function create($user) - { - $now=dol_now(); - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."accounting_system"; - $sql.= " (date_creation, fk_user_author, numero,intitule)"; - $sql.= " VALUES ('".$this->db->idate($now)."',".$user->id.",'".$this->numero."','".$this->intitule."')"; - + function create($user) { + $now = dol_now(); + + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "accounting_system"; + $sql .= " (date_creation, fk_user_author, numero,intitule)"; + $sql .= " VALUES (" . $this->db->idate($now) . "," . $user->id . ",'" . $this->numero . "','" . $this->intitule . "')"; + + dol_syslog(get_class($this) . "::create sql=" . $sql, LOG_DEBUG); $resql = $this->db->query($sql); - if ($resql) - { - $id = $this->db->last_insert_id(MAIN_DB_PREFIX."accounting_system"); - - if ($id > 0) - { + if ($resql) { + $id = $this->db->last_insert_id(MAIN_DB_PREFIX . "accounting_system"); + + if ($id > 0) { $this->id = $id; $result = $this->id; - } - else - { - $result = -2; - $this->error="AccountancySystem::Create Erreur $result"; + } else { + $result = - 2; + $this->error = "AccountancySystem::Create Erreur $result"; dol_syslog($this->error, LOG_ERR); } - } - else - { - $result = -1; - $this->error="AccountancySystem::Create Erreur $result"; + } else { + $result = - 1; + $this->error = "AccountancySystem::Create Erreur $result"; dol_syslog($this->error, LOG_ERR); } - + return $result; } - -} +} \ No newline at end of file diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php new file mode 100644 index 00000000000..9cb29dc1e0b --- /dev/null +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -0,0 +1,416 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/class/Accountingaccount.class.php + * \ingroup Accounting Expert + * \brief Fichier de la classe des comptes comptable + */ + +/** + * \class AccountingAccount + * \brief Classe permettant la gestion des comptes generaux de compta + */ +class AccountingAccount { + var $db; + var $id; + var $rowid; + var $datec; // Creation date + var $fk_pcg_version; + var $pcg_type; + var $pcg_subtype; + var $account_number; + var $account_parent; + var $label; + var $fk_user_author; + var $fk_user_modif; + var $active; + + /** + * \brief Constructeur de la classe + * \param DB handler acces base de donnees + * \param id id compte (0 par defaut) + */ + function __construct($db, $rowid = '') { + $this->db = $db; + + if ($rowid != '') + return $this->fetch($rowid); + } + + /** + * \brief Load record in memory + */ + function fetch($rowid = null, $account_number = null) { + if ($rowid || $account_number) { + $sql = "SELECT * FROM " . MAIN_DB_PREFIX . "accountingaccount WHERE "; + if ($rowid) { + $sql .= " rowid = '" . $rowid . "'"; + } elseif ($account_number) { + $sql .= " account_number = '" . $account_number . "'"; + } + + dol_syslog(get_class($this) . "::fetch sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + $obj = $this->db->fetch_object($result); + } else { + return null; + } + } + + $this->id = $obj->rowid; + $this->rowid = $obj->rowid; + $this->datec = $obj->datec; + $this->tms = $obj->tms; + $this->fk_pcg_version = $obj->fk_pcg_version; + $this->pcg_type = $obj->pcg_type; + $this->pcg_subtype = $obj->pcg_subtype; + $this->account_number = $obj->account_number; + $this->account_parent = $obj->account_parent; + $this->label = $obj->label; + $this->fk_user_author = $obj->fk_user_author; + $this->fk_user_modif = $obj->fk_user_modif; + $this->active = $obj->active; + + return $obj->rowid; + } + + /** + * \brief insert line in accountingaccount + * \param user utilisateur qui effectue l'insertion + */ + function create($user, $notrigger = 0) { + global $conf, $langs; + $error = 0; + + // Clean parameters + if (isset($this->fk_pcg_version)) + $this->fk_pcg_version = trim($this->fk_pcg_version); + if (isset($this->pcg_type)) + $this->pcg_type = trim($this->pcg_type); + if (isset($this->pcg_subtype)) + $this->pcg_subtype = trim($this->pcg_subtype); + if (isset($this->account_number)) + $this->account_number = trim($this->account_number); + if (isset($this->account_parent)) + $this->account_parent = trim($this->account_parent); + if (isset($this->label)) + $this->label = trim($this->label); + if (isset($this->fk_user_author)) + $this->fk_user_author = trim($this->fk_user_author); + if (isset($this->active)) + $this->active = trim($this->active); + + // Check parameters + // Put here code to add control on parameters values + + // Insert request + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "accountingaccount("; + + $sql .= "datec"; + $sql .= ", entity"; + $sql .= ", fk_pcg_version"; + $sql .= ", pcg_type"; + $sql .= ", pcg_subtype"; + $sql .= ", account_number"; + $sql .= ", account_parent"; + $sql .= ", label"; + $sql .= ", fk_user_author"; + $sql .= ", active"; + + $sql .= ") VALUES ("; + + $sql .= " '" . $this->db->idate($now) . "'"; + $sql .= ", " . $conf->entity; + $sql .= ", " . (! isset($this->fk_pcg_version) ? 'NULL' : "'" . $this->db->escape($this->fk_pcg_version) . "'"); + $sql .= ", " . (! isset($this->pcg_type) ? 'NULL' : "'" . $this->db->escape($this->pcg_type) . "'"); + $sql .= ", " . (! isset($this->pcg_subtype) ? 'NULL' : "'" . $this->pcg_subtype . "'"); + $sql .= ", " . (! isset($this->account_number) ? 'NULL' : "'" . $this->account_number . "'"); + $sql .= ", " . (! isset($this->account_parent) ? 'NULL' : "'" . $this->db->escape($this->account_parent) . "'"); + $sql .= ", " . (! isset($this->label) ? 'NULL' : "'" . $this->db->escape($this->label) . "'"); + $sql .= ", " . $user->id; + $sql .= ", " . (! isset($this->active) ? 'NULL' : "'" . $this->db->escape($this->active) . "'"); + + $sql .= ")"; + + $this->db->begin(); + + dol_syslog(get_class($this) . "::create sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = "Error " . $this->db->lasterror(); + } + + if (! $error) { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "accountingaccount"); + + if (! $notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + // // Call triggers + // include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + // $interface=new Interfaces($this->db); + // $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf); + // if ($result < 0) { $error++; $this->errors=$interface->errors; } + // // End call triggers + } + } + + // Commit or rollback + if ($error) { + foreach ( $this->errors as $errmsg ) { + dol_syslog(get_class($this) . "::create " . $errmsg, LOG_ERR); + $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); + } + $this->db->rollback(); + return - 1 * $error; + } else { + $this->db->commit(); + return $this->id; + } + } + + /** + * Update record + * + * @param User $user update + * @return int if KO, >0 if OK + */ + function update($user) { + global $langs; + + $this->db->begin(); + + $sql = "UPDATE " . MAIN_DB_PREFIX . "accountingaccount "; + $sql .= " SET fk_pcg_version = " . ($this->fk_pcg_version ? "'" . $this->db->escape($this->fk_pcg_version) . "'" : "null"); + $sql .= " , pcg_type = " . ($this->pcg_type ? "'" . $this->db->escape($this->pcg_type) . "'" : "null"); + $sql .= " , pcg_subtype = " . ($this->pcg_subtype ? "'" . $this->db->escape($this->pcg_subtype) . "'" : "null"); + $sql .= " , account_number = '" . $this->account_number . "'"; + $sql .= " , account_parent = '" . $this->account_parent . "'"; + $sql .= " , label = " . ($this->label ? "'" . $this->db->escape($this->label) . "'" : "null"); + $sql .= " , fk_user_modif = " . $user->id; + $sql .= " , active = '" . $this->active . "'"; + + $sql .= " WHERE rowid = " . $this->id; + + dol_syslog(get_class($this) . "::update sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + $this->db->commit(); + return 1; + } else { + $this->error = $this->db->lasterror(); + $this->db->rollback(); + return - 1; + } + } + + /** + * Check usage of accounting code + * + * @param User $user update + * @return int if KO, >0 if OK + */ + function checkUsage() { + global $langs; + + $sql = "(SELECT fk_code_ventilation FROM " . MAIN_DB_PREFIX . "facturedet"; + $sql .= " WHERE fk_code_ventilation=" . $this->id . ")"; + $sql .= "UNION"; + $sql .= "(SELECT fk_code_ventilation FROM " . MAIN_DB_PREFIX . "facture_fourn_det"; + $sql .= " WHERE fk_code_ventilation=" . $this->id . ")"; + + dol_syslog(get_class($this) . "::checkUsage sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + + if ($resql) { + $num = $this->db->num_rows($resql); + if ($num > 0) { + $this->error = $langs->trans('ErrorAccountancyCodeIsAlreadyUse'); + return 0; + } else { + return 1; + } + } else { + $this->error = $this->db->lasterror(); + return - 1; + } + } + + /** + * Delete object in database + * + * @param User $user that deletes + * @param int $notrigger triggers after, 1=disable triggers + * @return int <0 if KO, >0 if OK + */ + function delete($user, $notrigger = 0) { + global $conf, $langs; + $error = 0; + + $result = $this->checkUsage(); + + if ($result > 0) { + + $this->db->begin(); + + if (! $error) { + if (! $notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + // // Call triggers + // include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + // $interface=new Interfaces($this->db); + // $result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf); + // if ($result < 0) { $error++; $this->errors=$interface->errors; } + // // End call triggers + } + } + + if (! $error) { + $sql = "DELETE FROM " . MAIN_DB_PREFIX . "accountingaccount"; + $sql .= " WHERE rowid=" . $this->id; + + dol_syslog(get_class($this) . "::delete sql=" . $sql); + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = "Error " . $this->db->lasterror(); + } + } + + // Commit or rollback + if ($error) { + foreach ( $this->errors as $errmsg ) { + dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR); + $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); + } + $this->db->rollback(); + return - 1 * $error; + } else { + $this->db->commit(); + return 1; + } + } else { + return - 1; + } + } + + /** + * Information on record + * + * @param int $id of record + * @return void + */ + function info($id) { + $sql = 'SELECT a.rowid, a.datec, a.fk_user_author, a.fk_user_modif, a.tms'; + $sql .= ' FROM ' . MAIN_DB_PREFIX . 'accountingaccount as a'; + $sql .= ' WHERE a.rowid = ' . $id; + + dol_syslog(get_class($this) . '::info sql=' . $sql); + $result = $this->db->query($sql); + + if ($result) { + if ($this->db->num_rows($result)) { + $obj = $this->db->fetch_object($result); + $this->id = $obj->rowid; + if ($obj->fk_user_author) { + $cuser = new User($this->db); + $cuser->fetch($obj->fk_user_author); + $this->user_creation = $cuser; + } + if ($obj->fk_user_modif) { + $muser = new User($this->db); + $muser->fetch($obj->fk_user_modif); + $this->user_modification = $muser; + } + $this->date_creation = $this->db->jdate($obj->datec); + $this->date_modification = $this->db->jdate($obj->tms); + } + $this->db->free($result); + } else { + dol_print_error($this->db); + } + } + + /** + * Account desactivate + * + * @param User $user update + * @return int if KO, >0 if OK + */ + function account_desactivate($id) { + global $langs; + + $result = $this->checkUsage(); + + if ($result > 0) { + $this->db->begin(); + + $sql = "UPDATE " . MAIN_DB_PREFIX . "accountingaccount "; + $sql .= "SET active = '0'"; + $sql .= " WHERE rowid = ".$this->db->escape($id); + + dol_syslog(get_class($this) . "::desactivate sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + + if ($result) { + $this->db->commit(); + return 1; + } else { + $this->error = $this->db->lasterror(); + $this->db->rollback(); + return - 1; + } + } else { + return - 1; + } + } + + /** + * Account activate + * + * @param User $user update + * @return int if KO, >0 if OK + */ + function account_activate($id) { + global $langs; + + $this->db->begin(); + + $sql = "UPDATE " . MAIN_DB_PREFIX . "accountingaccount "; + $sql .= "SET active = '1'"; + $sql .= " WHERE rowid = ".$this->db->escape($id); + + dol_syslog(get_class($this) . "::activate sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + $this->db->commit(); + return 1; + } else { + $this->error = $this->db->lasterror(); + $this->db->rollback(); + return - 1; + } + } +} \ No newline at end of file diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php new file mode 100644 index 00000000000..0ea235599b6 --- /dev/null +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -0,0 +1,672 @@ + + * Copyright (C) 2013-2014 Olivier Geffroy + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/class/bookkeeping.class.php + * \ingroup Accounting Expert + * \brief Fichier de la classe des comptes comptable + */ + +/** + * \class BookKeeping + * \brief Classe permettant la gestion des comptes generaux de compta + */ +class BookKeeping { + var $db; + var $id; + var $doc_date; + var $doc_type; + var $doc_ref; + var $date_create; + var $fk_doc; + var $fk_docdet; + var $code_tiers; + var $numero_compte; + var $label_compte; + var $debit; + var $credit; + var $montant; + var $sens; + var $fk_user_author; + var $code_journal; + var $piece_num; + var $linesexport = array (); + var $linesmvt = array (); + + /** + * \brief Constructeur de la classe + * \param DB handler acces base de donnees + * \param id id compte (0 par defaut) + */ + function BookKeeping($db) { + $this->db = $db; + } + + /** + * \brief Load record in memory + */ + function fetch_per_mvt($piecenum) { + $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type FROM " . MAIN_DB_PREFIX . "bookkeeping WHERE "; + $sql .= " piece_num = '" . $piecenum . "'"; + + dol_syslog(get_class($this) . "fetch_per_mvt sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + $obj = $this->db->fetch_object($result); + + $this->piece_num = $obj->piece_num; + $this->code_journal = $obj->code_journal; + $this->doc_date = $this->db->jdate($obj->doc_date); + $this->doc_ref = $obj->doc_ref; + $this->doc_type = $obj->doc_type; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::fetch_per_mvt " . $this->error, LOG_ERR); + return - 1; + } + + return 1; + } + + /** + * \brief Load record in memory + */ + function fetch($id) { + $sql = "SELECT rowid, doc_date, doc_type, "; + $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; + $sql .= "numero_compte, label_compte, debit, credit, "; + $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; + $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " WHERE rowid = '" . $id . "'"; + + dol_syslog(get_class($this) . "fetch sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + $obj = $this->db->fetch_object($result); + + $this->id = $obj->rowid; + + $this->doc_date = $this->db->jdate($obj->doc_date); + $this->doc_type = $obj->doc_type; + $this->doc_ref = $obj->doc_ref; + $this->fk_doc = $obj->fk_doc; + $this->fk_docdet = $obj->fk_docdet; + $this->code_tiers = $obj->code_tiers; + $this->numero_compte = $obj->numero_compte; + $this->label_compte = $obj->label_compte; + $this->debit = $obj->debit; + $this->credit = $obj->credit; + $this->montant = $obj->montant; + $this->sens = $obj->sens; + $this->code_journal = $obj->code_journal; + $this->piece_num = $obj->piece_num; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::fetch " . $this->error, LOG_ERR); + return - 1; + } + + return 1; + } + + /** + * \brief Return next num mvt + */ + function next_num_mvt() { + $sql = "SELECT MAX(piece_num)+1 as max FROM " . MAIN_DB_PREFIX . "bookkeeping"; + + dol_syslog(get_class($this) . "next_num_mvt sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + $obj = $this->db->fetch_object($result); + + return $obj->max; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::fetch_per_mvt " . $this->error, LOG_ERR); + return - 1; + } + } + + /** + * \brief Load record in memory + */ + function fetch_all_per_mvt($piecenum) { + $sql = "SELECT rowid, doc_date, doc_type, "; + $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; + $sql .= "numero_compte, label_compte, debit, credit, "; + $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; + $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " WHERE piece_num = '" . $piecenum . "'"; + + dol_syslog(get_class($this) . "fetch_all_per_mvt sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + + while ( $obj = $this->db->fetch_object($result) ) { + + $line = new BookKeepingLine(); + + $line->id = $obj->rowid; + + $line->doc_date = $this->db->jdate($obj->doc_date); + $line->doc_type = $obj->doc_type; + $line->doc_ref = $obj->doc_ref; + $line->fk_doc = $obj->fk_doc; + $line->fk_docdet = $obj->fk_docdet; + $line->code_tiers = $obj->code_tiers; + $line->numero_compte = $obj->numero_compte; + $line->label_compte = $obj->label_compte; + $line->debit = $obj->debit; + $line->credit = $obj->credit; + $line->montant = $obj->montant; + $line->sens = $obj->sens; + $line->code_journal = $obj->code_journal; + $line->piece_num = $obj->piece_num; + + $this->linesmvt[] = $line; + } + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::fetch_per_mvt " . $this->error, LOG_ERR); + return - 1; + } + + return 1; + } + + /** + * \brief Insere une ligne dans bookkeeping + * \param user utilisateur qui effectue l'insertion + */ + function create() { + global $conf, $user, $langs; + + $this->piece_num = 0; + + // first check if line not yet in bookkeeping + $sql = "SELECT count(*)"; + $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " WHERE doc_type = '" . $this->doc_type . "'"; + $sql .= " AND fk_docdet = " . $this->fk_docdet; + $sql .= " AND numero_compte = '" . $this->numero_compte . "'"; + + dol_syslog(get_class($this) . ":: create sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + + if ($resql) { + $row = $this->db->fetch_array($resql); + if ($row[0] == 0) { + + // Determine piece_num + $sqlnum = "SELECT piece_num"; + $sqlnum .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sqlnum .= " WHERE doc_type = '" . $this->doc_type . "'"; + $sqlnum .= " AND fk_docdet = '" . $this->fk_docdet . "'"; + $sqlnum .= " AND doc_ref = '" . $this->doc_ref . "'"; + + dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG); + $resqlnum = $this->db->query($sqlnum); + if ($resqlnum) { + $objnum = $this->db->fetch_object($resqlnum); + $this->piece_num = $objnum->piece_num; + } + dol_syslog(get_class($this) . ":: create this->piece_num=" . $this->piece_num, LOG_DEBUG); + if (empty($this->piece_num)) { + $sqlnum = "SELECT MAX(piece_num)+1 as maxpiecenum"; + $sqlnum .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + + dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG); + $resqlnum = $this->db->query($sqlnum); + if ($resqlnum) { + $objnum = $this->db->fetch_object($resqlnum); + $this->piece_num = $objnum->maxpiecenum; + } + } + dol_syslog(get_class($this) . ":: create this->piece_num=" . $this->piece_num, LOG_DEBUG); + if (empty($this->piece_num)) { + $this->piece_num = 1; + } + + $now = dol_now(); + if (empty($this->date_create)) + $this->date_create = $now(); + + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "bookkeeping (doc_date, "; + $sql .= "doc_type, doc_ref,fk_doc,fk_docdet,code_tiers,numero_compte,label_compte,"; + $sql .= "debit,credit,montant,sens,fk_user_author,import_key,code_journal,piece_num)"; + $sql .= " VALUES ('" . $this->doc_date . "','" . $this->doc_type . "','" . $this->doc_ref . "'," . $this->fk_doc . ","; + $sql .= $this->fk_docdet . ",'" . $this->code_tiers . "','" . $this->numero_compte . "','" . $this->db->escape($this->label_compte) . "',"; + $sql .= $this->debit . "," . $this->credit . "," . $this->montant . ",'" . $this->sens . "'," . $user->id . ", '"; + $sql .= $this->date_create . "','" . $this->code_journal . "'," . $this->piece_num . ")"; + + dol_syslog(get_class($this) . ":: create sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) { + $id = $this->db->last_insert_id(MAIN_DB_PREFIX . "bookkeeping"); + + if ($id > 0) { + $this->id = $id; + $result = 0; + } else { + $result = - 2; + dol_syslog("BookKeeping::Create Erreur $result lecture ID"); + } + } else { + $result = - 1; + dol_syslog("BookKeeping::Create Erreur $result INSERT Mysql"); + } + } else { + $result = - 3; + dol_syslog("BookKeeping::Create Erreur $result SELECT Mysql"); + } + } else { + $result = - 5; + dol_syslog("BookKeeping::Create Erreur $result SELECT Mysql"); + } + + return $result; + } + + /** + * \brief Delete bookkepping by importkey + */ + function delete_by_importkey($importkey) { + $this->db->begin(); + + // first check if line not yet in bookkeeping + $sql = "DELETE"; + $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " WHERE import_key = '" . $importkey . "'"; + + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = "Error " . $this->db->lasterror(); + } + + // Commit or rollback + if ($error) { + foreach ( $this->errors as $errmsg ) { + dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR); + $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); + } + $this->db->rollback(); + return - 1 * $error; + } else { + $this->db->commit(); + return 1; + } + } + + /** + * Create object into database + * + * @param User $user that creates + * @param int $notrigger triggers after, 1=disable triggers + * @return int <0 if KO, Id of created object if OK + */ + function create_std($user, $notrigger = 0) { + global $conf, $langs; + $error = 0; + + // Clean parameters + + if (isset($this->doc_type)) + $this->doc_type = trim($this->doc_type); + if (isset($this->doc_ref)) + $this->doc_ref = trim($this->doc_ref); + if (isset($this->fk_doc)) + $this->fk_doc = trim($this->fk_doc); + if (isset($this->fk_docdet)) + $this->fk_docdet = trim($this->fk_docdet); + if (isset($this->code_tiers)) + $this->code_tiers = trim($this->code_tiers); + if (isset($this->numero_compte)) + $this->numero_compte = trim($this->numero_compte); + if (isset($this->label_compte)) + $this->label_compte = trim($this->label_compte); + if (isset($this->debit)) + $this->debit = trim($this->debit); + if (isset($this->credit)) + $this->credit = trim($this->credit); + if (isset($this->montant)) + $this->montant = trim($this->montant); + if (isset($this->sens)) + $this->sens = trim($this->sens); + if (isset($this->fk_user_author)) + $this->fk_user_author = trim($this->fk_user_author); + if (isset($this->import_key)) + $this->import_key = trim($this->import_key); + if (isset($this->code_journal)) + $this->code_journal = trim($this->code_journal); + if (isset($this->piece_num)) + $this->piece_num = trim($this->piece_num); + + // Check parameters + // Put here code to add control on parameters values + + // Insert request + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "bookkeeping("; + + $sql .= "doc_date,"; + $sql .= "doc_type,"; + $sql .= "doc_ref,"; + $sql .= "fk_doc,"; + $sql .= "fk_docdet,"; + $sql .= "code_tiers,"; + $sql .= "numero_compte,"; + $sql .= "label_compte,"; + $sql .= "debit,"; + $sql .= "credit,"; + $sql .= "montant,"; + $sql .= "sens,"; + $sql .= "fk_user_author,"; + $sql .= "import_key,"; + $sql .= "code_journal,"; + $sql .= "piece_num"; + + $sql .= ") VALUES ("; + + $sql .= " " . (! isset($this->doc_date) || dol_strlen($this->doc_date) == 0 ? 'NULL' : $this->db->idate($this->doc_date)) . ","; + $sql .= " " . (! isset($this->doc_type) ? 'NULL' : "'" . $this->db->escape($this->doc_type) . "'") . ","; + $sql .= " " . (! isset($this->doc_ref) ? 'NULL' : "'" . $this->db->escape($this->doc_ref) . "'") . ","; + $sql .= " " . (! isset($this->fk_doc) ? 'NULL' : "'" . $this->fk_doc . "'") . ","; + $sql .= " " . (! isset($this->fk_docdet) ? 'NULL' : "'" . $this->fk_docdet . "'") . ","; + $sql .= " " . (! isset($this->code_tiers) ? 'NULL' : "'" . $this->db->escape($this->code_tiers) . "'") . ","; + $sql .= " " . (! isset($this->numero_compte) ? 'NULL' : "'" . $this->db->escape($this->numero_compte) . "'") . ","; + $sql .= " " . (! isset($this->label_compte) ? 'NULL' : "'" . $this->db->escape($this->label_compte) . "'") . ","; + $sql .= " " . (! isset($this->debit) ? 'NULL' : "'" . $this->debit . "'") . ","; + $sql .= " " . (! isset($this->credit) ? 'NULL' : "'" . $this->credit . "'") . ","; + $sql .= " " . (! isset($this->montant) ? 'NULL' : "'" . $this->montant . "'") . ","; + $sql .= " " . (! isset($this->sens) ? 'NULL' : "'" . $this->db->escape($this->sens) . "'") . ","; + $sql .= " " . $user->id . ","; + $sql .= " " . (! isset($this->import_key) ? 'NULL' : "'" . $this->db->escape($this->import_key) . "'") . ","; + $sql .= " " . (! isset($this->code_journal) ? 'NULL' : "'" . $this->db->escape($this->code_journal) . "'") . ","; + $sql .= " " . (! isset($this->piece_num) ? 'NULL' : "'" . $this->piece_num . "'") . ""; + + $sql .= ")"; + + $this->db->begin(); + + dol_syslog(get_class($this) . "::create_std sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = "Error " . $this->db->lasterror(); + } + + if (! $error) { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "bookkeeping"); + + if (! $notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + // // Call triggers + // include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + // $interface=new Interfaces($this->db); + // $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf); + // if ($result < 0) { $error++; $this->errors=$interface->errors; } + // // End call triggers + } + } + + // Commit or rollback + if ($error) { + foreach ( $this->errors as $errmsg ) { + dol_syslog(get_class($this) . "::create_std " . $errmsg, LOG_ERR); + $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); + } + $this->db->rollback(); + return - 1 * $error; + } else { + $this->db->commit(); + return $this->id; + } + } + + /** + * Update object into database + * + * @param User $user that modifies + * @param int $notrigger triggers after, 1=disable triggers + * @return int <0 if KO, >0 if OK + */ + function update($user = 0, $notrigger = 0) { + global $conf, $langs; + $error = 0; + + // Clean parameters + + if (isset($this->doc_type)) + $this->doc_type = trim($this->doc_type); + if (isset($this->doc_ref)) + $this->doc_ref = trim($this->doc_ref); + if (isset($this->fk_doc)) + $this->fk_doc = trim($this->fk_doc); + if (isset($this->fk_docdet)) + $this->fk_docdet = trim($this->fk_docdet); + if (isset($this->code_tiers)) + $this->code_tiers = trim($this->code_tiers); + if (isset($this->numero_compte)) + $this->numero_compte = trim($this->numero_compte); + if (isset($this->label_compte)) + $this->label_compte = trim($this->label_compte); + if (isset($this->debit)) + $this->debit = trim($this->debit); + if (isset($this->credit)) + $this->credit = trim($this->credit); + if (isset($this->montant)) + $this->montant = trim($this->montant); + if (isset($this->sens)) + $this->sens = trim($this->sens); + if (isset($this->fk_user_author)) + $this->fk_user_author = trim($this->fk_user_author); + if (isset($this->import_key)) + $this->import_key = trim($this->import_key); + if (isset($this->code_journal)) + $this->code_journal = trim($this->code_journal); + if (isset($this->piece_num)) + $this->piece_num = trim($this->piece_num); + + // Check parameters + // Put here code to add a control on parameters values + + // Update request + $sql = "UPDATE " . MAIN_DB_PREFIX . "bookkeeping SET"; + + $sql .= " doc_date=" . (dol_strlen($this->doc_date) != 0 ? "'" . $this->db->idate($this->doc_date) . "'" : 'null') . ","; + $sql .= " doc_type=" . (isset($this->doc_type) ? "'" . $this->db->escape($this->doc_type) . "'" : "null") . ","; + $sql .= " doc_ref=" . (isset($this->doc_ref) ? "'" . $this->db->escape($this->doc_ref) . "'" : "null") . ","; + $sql .= " fk_doc=" . (isset($this->fk_doc) ? $this->fk_doc : "null") . ","; + $sql .= " fk_docdet=" . (isset($this->fk_docdet) ? $this->fk_docdet : "null") . ","; + $sql .= " code_tiers=" . (isset($this->code_tiers) ? "'" . $this->db->escape($this->code_tiers) . "'" : "null") . ","; + $sql .= " numero_compte=" . (isset($this->numero_compte) ? "'" . $this->db->escape($this->numero_compte) . "'" : "null") . ","; + $sql .= " label_compte=" . (isset($this->label_compte) ? "'" . $this->db->escape($this->label_compte) . "'" : "null") . ","; + $sql .= " debit=" . (isset($this->debit) ? $this->debit : "null") . ","; + $sql .= " credit=" . (isset($this->credit) ? $this->credit : "null") . ","; + $sql .= " montant=" . (isset($this->montant) ? $this->montant : "null") . ","; + $sql .= " sens=" . (isset($this->sens) ? "'" . $this->db->escape($this->sens) . "'" : "null") . ","; + $sql .= " fk_user_author=" . (isset($this->fk_user_author) ? $this->fk_user_author : "null") . ","; + $sql .= " import_key=" . (isset($this->import_key) ? "'" . $this->db->escape($this->import_key) . "'" : "null") . ","; + $sql .= " code_journal=" . (isset($this->code_journal) ? "'" . $this->db->escape($this->code_journal) . "'" : "null") . ","; + $sql .= " piece_num=" . (isset($this->piece_num) ? $this->piece_num : "null") . ""; + + $sql .= " WHERE rowid=" . $this->id; + + $this->db->begin(); + + dol_syslog(get_class($this) . "::update sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = "Error " . $this->db->lasterror(); + } + + if (! $error) { + if (! $notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + // // Call triggers + // include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + // $interface=new Interfaces($this->db); + // $result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf); + // if ($result < 0) { $error++; $this->errors=$interface->errors; } + // // End call triggers + } + } + + // Commit or rollback + if ($error) { + foreach ( $this->errors as $errmsg ) { + dol_syslog(get_class($this) . "::update " . $errmsg, LOG_ERR); + $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); + } + $this->db->rollback(); + return - 1 * $error; + } else { + $this->db->commit(); + return 1; + } + } + + /** + * Delete object in database + * + * @param User $user that deletes + * @param int $notrigger triggers after, 1=disable triggers + * @return int <0 if KO, >0 if OK + */ + function delete($user, $notrigger = 0) { + global $conf, $langs; + $error = 0; + + $this->db->begin(); + + if (! $error) { + if (! $notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + // // Call triggers + // include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + // $interface=new Interfaces($this->db); + // $result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf); + // if ($result < 0) { $error++; $this->errors=$interface->errors; } + // // End call triggers + } + } + + if (! $error) { + $sql = "DELETE FROM " . MAIN_DB_PREFIX . "bookkeeping"; + $sql .= " WHERE rowid=" . $this->id; + + dol_syslog(get_class($this) . "::delete sql=" . $sql); + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = "Error " . $this->db->lasterror(); + } + } + + // Commit or rollback + if ($error) { + foreach ( $this->errors as $errmsg ) { + dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR); + $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); + } + $this->db->rollback(); + return - 1 * $error; + } else { + $this->db->commit(); + return 1; + } + } + + /** + * \brief Delete bookkepping by importkey + */ + function export_bookkeping($model = 'ebp') { + $sql = "SELECT rowid, doc_date, doc_type, "; + $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; + $sql .= "numero_compte, label_compte, debit, credit, "; + $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; + $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + + $resql = $this->db->query($sql); + + dol_syslog(get_class($this) . "::export_bookkeping sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) { + $this->linesexport = array (); + + $num = $this->db->num_rows($resql); + while ( $obj = $this->db->fetch_object($resql) ) { + $line = new BookKeepingLine(); + + $line->id = $obj->rowid; + + $line->doc_date = $this->db->jdate($obj->doc_date); + $line->doc_type = $obj->doc_type; + $line->doc_ref = $obj->doc_ref; + $line->fk_doc = $obj->fk_doc; + $line->fk_docdet = $obj->fk_docdet; + $line->code_tiers = $obj->code_tiers; + $line->numero_compte = $obj->numero_compte; + $line->label_compte = $obj->label_compte; + $line->debit = $obj->debit; + $line->credit = $obj->credit; + $line->montant = $obj->montant; + $line->sens = $obj->sens; + $line->code_journal = $obj->code_journal; + $line->piece_num = $obj->piece_num; + + $this->linesexport[] = $line; + } + $this->db->free($resql); + + return $num; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::export_bookkeping " . $this->error, LOG_ERR); + return - 1; + } + } +} +class BookKeepingLine { + var $id; + var $doc_date; + var $doc_type; + var $doc_ref; + var $fk_doc; + var $fk_docdet; + var $code_tiers; + var $numero_compte; + var $label_compte; + var $debit; + var $credit; + var $montant; + var $sens; + var $fk_user_author; + var $code_journal; + var $piece_num; +} \ No newline at end of file diff --git a/htdocs/accountancy/class/html.formventilation.class.php b/htdocs/accountancy/class/html.formventilation.class.php new file mode 100644 index 00000000000..16aeb01dd02 --- /dev/null +++ b/htdocs/accountancy/class/html.formventilation.class.php @@ -0,0 +1,246 @@ + + * Copyright (C) 2013-2014 Olivier Geffroy + * Copyright (C) 2013-2014 Alexandre Spangaro + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/class/html.formventilation.class.php + * \brief Class for HML form + */ +class FormVentilation extends Form { + var $db; + var $error; + + /** + * Constructor + * + * @param DoliDB $db handler + */ + function __construct($db) { + $this->db = $db; + return 1; + } + + /** + * Return select filter with date of transaction + * + * @param string $htmlname of input + * @param string $selectedkey value + * @return string select input + */ + function select_bookkeeping_importkey($htmlname = 'importkey', $selectedkey) { + global $langs; + + $date_array = array (); + + $sql = 'SELECT DISTINCT import_key from ' . MAIN_DB_PREFIX . 'bookkeeping '; + $sql .= ' ORDER BY import_key DESC'; + + $out = ''; + + return $out; + } + + /** + * Return list of the accounts with label + * + * @param string $selectedid pcg_type + * @param string $htmlname of combo list + * @param int $showempty en empty line + * + * @return string with HTML select + */ + function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array()) { + global $conf, $user, $langs; + + $out = ''; + + $sql = "SELECT DISTINCT aa.account_number, aa.label, aa.rowid, aa.fk_pcg_version"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accountingaccount as aa"; + $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version"; + $sql .= " AND asy.rowid = " . $conf->global->CHARTOFACCOUNTS; + $sql .= " AND aa.active = 1"; + $sql .= " ORDER BY aa.account_number"; + + dol_syslog(get_class($this) . "::select_account sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) { + + $out .= ajax_combobox($htmlname, $event); + $out .= ''; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::select_account " . $this->error, LOG_ERR); + return - 1; + } + $this->db->free($resql); + return $out; + } + + /** + * Return list of pcg with label + * + * @param string $selectedid pcg_type + * @param string $htmlname of combo list + * @param int $showempty en empty line + * + * @return string with HTML select + */ + function select_pcgtype($selectid, $htmlname = 'pcg_type', $showempty = 0, $event = array()) { + global $conf, $user, $langs; + + $out = ''; + + $sql = "SELECT DISTINCT pcg_type "; + $sql .= " FROM " . MAIN_DB_PREFIX . "accountingaccount "; + $sql .= " ORDER BY pcg_type"; + + dol_syslog(get_class($this) . "::select_pcgtype sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) { + + $out .= ajax_combobox($htmlname, $event); + + $out .= ''; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::select_pcgtype " . $this->error, LOG_ERR); + return - 1; + } + $this->db->free($resql); + return $out; + } + + /** + * Return subtype list of pcg with label + * + * @param string $selectedid pcg_type + * @param string $htmlname of combo list + * @param int $showempty en empty line + * + * @return string with HTML select + */ + function select_pcgsubtype($selectid, $htmlname = 'pcg_subtype', $showempty = 0, $event = array()) { + global $conf, $user, $langs; + + $out = ''; + + $sql = "SELECT DISTINCT pcg_subtype "; + $sql .= " FROM " . MAIN_DB_PREFIX . "accountingaccount "; + $sql .= " ORDER BY pcg_subtype"; + + dol_syslog(get_class($this) . "::select_pcgsubtype sql=" . $sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) { + + $out .= ajax_combobox($htmlname, $event); + + $out .= ''; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::select_pcgsubtype " . $this->error, LOG_ERR); + return - 1; + } + $this->db->free($resql); + return $out; + } +} diff --git a/htdocs/accountancy/customer/fiche.php b/htdocs/accountancy/customer/fiche.php new file mode 100644 index 00000000000..4cb05ccb019 --- /dev/null +++ b/htdocs/accountancy/customer/fiche.php @@ -0,0 +1,146 @@ + + * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013 Alexandre Spangaro + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/customer/fiche.php + * \ingroup Accounting Expert + * \brief Page fiche ventilation + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/compta/facture/class/facture.class.php"); +dol_include_once("/accountingex/class/html.formventilation.class.php"); + +// Langs +$langs->load("bills"); +$langs->load("accountingex@accountingex"); + +$action = GETPOST('action', 'alpha'); +$codeventil = GETPOST('codeventil'); +$id = GETPOST('id'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + + /* + * Actions + */ + +if ($action == 'ventil' && $user->rights->accountingex->access) { + $sql = " UPDATE " . MAIN_DB_PREFIX . "facturedet"; + $sql .= " SET fk_code_ventilation = " . $codeventil; + $sql .= " WHERE rowid = " . $id; + + dol_syslog("/accountingex/customer/fiche.php sql=" . $sql, LOG_DEBUG); + $resql = $db->query($sql); + if (! $resql) { + setEventMessage($db->lasterror(), 'errors'); + } +} + +llxHeader("", "", "FicheVentilation"); + +if ($cancel == $langs->trans("Cancel")) { + $action = ''; +} + +/* + * Create + */ +$form = new Form($db); +$facture_static = new Facture($db); +$formventilation = new FormVentilation($db); + +if (! empty($id)) { + $sql = "SELECT f.facnumber, f.rowid as facid, l.fk_product, l.description, l.price,"; + $sql .= " l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice, p.accountancy_code_sell as code_sell,"; + $sql .= " l.fk_code_ventilation, aa.account_number, aa.label"; + $sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as l"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accountingaccount as aa ON l.fk_code_ventilation = aa.rowid"; + $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = l.fk_facture"; + $sql .= " WHERE f.fk_statut > 0 AND l.rowid = " . $id; + + if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; + } + + dol_syslog("/accountingex/customer/fiche.php sql=" . $sql, LOG_DEBUG); + $result = $db->query($sql); + + if ($result) { + $num_lignes = $db->num_rows($result); + $i = 0; + + if ($num_lignes) { + + $objp = $db->fetch_object($result); + + print '
' . "\n"; + print ''; + print ''; + + print_fiche_titre($langs->trans("Ventilation")); + + print ''; + + // Ref facture + print ''; + $facture_static->ref = $objp->facnumber; + $facture_static->id = $objp->facid; + print ''; + print ''; + + print ''; + print ''; + print ''; + print ''; + + print '
' . $langs->trans("Invoice") . '' . $facture_static->getNomUrl(1) . '
' . $langs->trans("Line") . '' . nl2br($objp->description) . '
' . $langs->trans("Account") . ''; + print $objp->account_number . '-' . $objp->label; + print '
' . $langs->trans("NewAccount") . ''; + print $formventilation->select_account($objp->fk_code_ventilation, 'codeventil', 1); + print '
 
'; + print '
'; + } else { + print "Error"; + } + } else { + print "Error"; + } +} else { + print "Error ID incorrect"; +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/customer/index.html b/htdocs/accountancy/customer/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php new file mode 100644 index 00000000000..55287abef4d --- /dev/null +++ b/htdocs/accountancy/customer/index.php @@ -0,0 +1,353 @@ + + * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013-2014 Alexandre Spangaro + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file accountingex/customer/index.php + * \ingroup Accounting Expert + * \brief Page accueil clients ventilation comptable + */ +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/core/lib/date.lib.php"); + +// Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +// Filter +$year = $_GET["year"]; +if ($year == 0) { + $year_current = strftime("%Y", time()); + $year_start = $year_current; +} else { + $year_current = $year; + $year_start = $year; +} + +// Validate History +$action = GETPOST('action'); +if ($action == 'validatehistory') { + + $error = 0; + $db->begin(); + + if ($db->type == 'pgsql') { + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet as fd"; + $sql1 .= " SET fd.fk_code_ventilation = accnt.rowid"; + $sql1 .= " FROM " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accountingaccount as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; + $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS; + $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_sell=accnt.account_number"; + $sql1 .= " AND fd.fk_code_ventilation = 0"; + } else { + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet as fd, " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accountingaccount as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; + $sql1 .= " SET fd.fk_code_ventilation = accnt.rowid"; + $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS; + $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_sell=accnt.account_number"; + $sql1 .= " AND fd.fk_code_ventilation = 0"; + } + + dol_syslog("/accountingex/customer/index.php sql=" . $sql, LOG_DEBUG); + $resql1 = $db->query($sql1); + if (! $resql1) { + $error ++; + $db->rollback(); + setEventMessage($db->lasterror(), 'errors'); + } else { + $db->commit(); + setEventMessage($langs->trans('Dispatched'), 'mesgs'); + } +} + +/* + * View + */ +llxHeader('', $langs->trans("CustomersVentilation")); + +$textprevyear = "" . img_previous() . ""; +$textnextyear = " " . img_next() . ""; + +print_fiche_titre($langs->trans("CustomersVentilation") . " " . $textprevyear . " " . $langs->trans("Year") . " " . $year_start . " " . $textnextyear); + +print '' . $langs->trans("DescVentilCustomer") . ''; +print ''; + +$sql = "SELECT count(*) FROM " . MAIN_DB_PREFIX . "facturedet as fd"; +$sql .= " , " . MAIN_DB_PREFIX . "facture as f"; +$sql .= " WHERE fd.fk_code_ventilation = 0"; +$sql .= " AND f.rowid = fd.fk_facture AND f.fk_statut = 1;"; + +dol_syslog("/accountingex/customer/index.php sql=" . $sql, LOG_DEBUG); +$result = $db->query($sql); +if ($result) { + $row = $db->fetch_row($result); + $nbfac = $row[0]; + $db->free($result); +} + +$y = $year_current; + +$var = true; + +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$sql = "SELECT IF(aa.account_number IS NULL, 'Non pointe', aa.account_number) AS 'code comptable',"; +$sql .= " IF(aa.label IS NULL, 'Non pointe', aa.label) AS 'Intitulé',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=1,fd.total_ht,0)),2) AS 'Janvier',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=2,fd.total_ht,0)),2) AS 'Fevrier',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=3,fd.total_ht,0)),2) AS 'Mars',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=4,fd.total_ht,0)),2) AS 'Avril',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=5,fd.total_ht,0)),2) AS 'Mai',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=6,fd.total_ht,0)),2) AS 'Juin',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=7,fd.total_ht,0)),2) AS 'Juillet',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=8,fd.total_ht,0)),2) AS 'Aout',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=9,fd.total_ht,0)),2) AS 'Septembre',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=10,fd.total_ht,0)),2) AS 'Octobre',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=11,fd.total_ht,0)),2) AS 'Novembre',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=12,fd.total_ht,0)),2) AS 'Decembre',"; +$sql .= " ROUND(SUM(fd.total_ht),2) as 'Total'"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accountingaccount as aa ON aa.rowid = fd.fk_code_ventilation"; +$sql .= " WHERE f.datef >= '" . $db->idate(dol_get_first_day($y, 1, false)) . "'"; +$sql .= " AND f.datef <= '" . $db->idate(dol_get_last_day($y, 12, false)) . "'"; + +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; +} + +$sql .= " GROUP BY fd.fk_code_ventilation"; + +dol_syslog("/accountingex/customer/index.php sql=" . $sql, LOG_DEBUG); +$resql = $db->query($sql); +if ($resql) { + $i = 0; + $num = $db->num_rows($resql); + + while ( $i < $num ) { + $row = $db->fetch_row($resql); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $i ++; + } + $db->free($resql); +} else { + print $db->lasterror(); // affiche la derniere erreur sql +} +print "
' . $langs->trans("Account") . '' . $langs->trans("Intitule") . '' . $langs->trans("JanuaryMin") . '' . $langs->trans("FebruaryMin") . '' . $langs->trans("MarchMin") . '' . $langs->trans("AprilMin") . '' . $langs->trans("MayMin") . '' . $langs->trans("JuneMin") . '' . $langs->trans("JulyMin") . '' . $langs->trans("AugustMin") . '' . $langs->trans("SeptemberMin") . '' . $langs->trans("OctoberMin") . '' . $langs->trans("NovemberMin") . '' . $langs->trans("DecemberMin") . '' . $langs->trans("Total") . '
' . $row[0] . '' . $row[1] . '' . price($row[2]) . '' . price($row[3]) . '' . price($row[4]) . '' . price($row[5]) . '' . price($row[6]) . '' . price($row[7]) . '' . price($row[8]) . '' . price($row[9]) . '' . price($row[10]) . '' . price($row[11]) . '' . price($row[12]) . '' . price($row[13]) . '' . price($row[14]) . '
\n"; + +print "
\n"; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$sql = "SELECT '" . $langs->trans("Vide") . "' AS 'Total',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=1,fd.total_ht,0)),2) AS 'Janvier',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=2,fd.total_ht,0)),2) AS 'Fevrier',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=3,fd.total_ht,0)),2) AS 'Mars',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=4,fd.total_ht,0)),2) AS 'Avril',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=5,fd.total_ht,0)),2) AS 'Mai',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=6,fd.total_ht,0)),2) AS 'Juin',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=7,fd.total_ht,0)),2) AS 'Juillet',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=8,fd.total_ht,0)),2) AS 'Aout',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=9,fd.total_ht,0)),2) AS 'Septembre',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=10,fd.total_ht,0)),2) AS 'Octobre',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=11,fd.total_ht,0)),2) AS 'Novembre',"; +$sql .= " ROUND(SUM(IF(MONTH(f.datef)=12,fd.total_ht,0)),2) AS 'Decembre',"; +$sql .= " ROUND(SUM(fd.total_ht),2) as 'Total'"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; +$sql .= " WHERE f.datef >= '" . $db->idate(dol_get_first_day($y, 1, false)) . "'"; +$sql .= " AND f.datef <= '" . $db->idate(dol_get_last_day($y, 12, false)) . "'"; + +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; +} + +dol_syslog('accountingext/customer/index.php:: $sql=' . $sql); +$resql = $db->query($sql); +if ($resql) { + $i = 0; + $num = $db->num_rows($resql); + + while ( $i < $num ) { + $row = $db->fetch_row($resql); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $i ++; + } + $db->free($resql); +} else { + print $db->lasterror(); // affiche la derniere erreur sql +} +print "
' . $langs->trans("TotalVente") . '' . $langs->trans("JanuaryMin") . '' . $langs->trans("FebruaryMin") . '' . $langs->trans("MarchMin") . '' . $langs->trans("AprilMin") . '' . $langs->trans("MayMin") . '' . $langs->trans("JuneMin") . '' . $langs->trans("JulyMin") . '' . $langs->trans("AugustMin") . '' . $langs->trans("SeptemberMin") . '' . $langs->trans("OctoberMin") . '' . $langs->trans("NovemberMin") . '' . $langs->trans("DecemberMin") . '' . $langs->trans("Total") . '
' . $row[0] . '' . price($row[1]) . '' . price($row[2]) . '' . price($row[3]) . '' . price($row[4]) . '' . price($row[5]) . '' . price($row[6]) . '' . price($row[7]) . '' . price($row[8]) . '' . price($row[9]) . '' . price($row[10]) . '' . price($row[11]) . '' . price($row[12]) . '' . price($row[13]) . '
\n"; + +if (! empty($conf->margin->enabled)) { + print "
\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $sql = "SELECT '" . $langs->trans("Vide") . "' AS 'Marge',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=1,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Janvier',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=2,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Fevrier',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=3,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Mars',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=4,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Avril',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=5,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Mai',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=6,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Juin',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=7,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Juillet',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=8,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Aout',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=9,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Septembre',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=10,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Octobre',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=11,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Novembre',"; + $sql .= " ROUND(SUM(IF(MONTH(f.datef)=12,(fd.total_ht-(fd.qty * fd.buy_price_ht)),0)),2) AS 'Decembre',"; + $sql .= " ROUND(SUM((fd.total_ht-(fd.qty * fd.buy_price_ht))),2) as 'Total'"; + $sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture as f ON f.rowid = fd.fk_facture"; + $sql .= " WHERE f.datef >= '" . $db->idate(dol_get_first_day($y, 1, false)) . "'"; + $sql .= " AND f.datef <= '" . $db->idate(dol_get_last_day($y, 12, false)) . "'"; + + if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; + } + + dol_syslog('accountingext/customer/index.php:: $sql=' . $sql); + $resql = $db->query($sql); + if ($resql) { + $i = 0; + $num = $db->num_rows($resql); + + while ( $i < $num ) { + $row = $db->fetch_row($resql); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $i ++; + } + $db->free($resql); + } else { + print $db->lasterror(); // affiche la derniere erreur sql + } + print "
' . $langs->trans("TotalMarge") . '' . $langs->trans("JanuaryMin") . '' . $langs->trans("FebruaryMin") . '' . $langs->trans("MarchMin") . '' . $langs->trans("AprilMin") . '' . $langs->trans("MayMin") . '' . $langs->trans("JuneMin") . '' . $langs->trans("JulyMin") . '' . $langs->trans("AugustMin") . '' . $langs->trans("SeptemberMin") . '' . $langs->trans("OctoberMin") . '' . $langs->trans("NovemberMin") . '' . $langs->trans("DecemberMin") . '' . $langs->trans("Total") . '
' . $row[0] . '' . price($row[1]) . '' . price($row[2]) . '' . price($row[3]) . '' . price($row[4]) . '' . price($row[5]) . '' . price($row[6]) . '' . price($row[7]) . '' . price($row[8]) . '' . price($row[9]) . '' . price($row[10]) . '' . price($row[11]) . '' . price($row[12]) . '' . price($row[13]) . '
\n"; +} +print "\n"; +print ''; + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/customer/lignes.php b/htdocs/accountancy/customer/lignes.php new file mode 100644 index 00000000000..c0929f1fed5 --- /dev/null +++ b/htdocs/accountancy/customer/lignes.php @@ -0,0 +1,232 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 Ari Elbaz (elarifr) + * Copyright (C) 2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file accountingex/customer/lignes.php + * \ingroup Accounting Expert + * \brief Page of detail of the lines of ventilation of invoices customers + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + +// Class +dol_include_once("/accountingex/class/html.formventilation.class.php"); +dol_include_once("/compta/facture/class/facture.class.php"); +dol_include_once("/product/class/product.class.php"); + +// langs +$langs->load("bills"); +$langs->load("compta"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +$account_parent = GETPOST('account_parent'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +$formventilation = new FormVentilation($db); + +// change account + +$changeaccount = GETPOST('changeaccount'); + +$is_search = GETPOST('button_search_x'); + +if (is_array($changeaccount) && count($changeaccount) > 0 && empty($is_search)) { + $error = 0; + + $db->begin(); + + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facturedet as l"; + $sql1 .= " SET l.fk_code_ventilation=" . $account_parent; + $sql1 .= ' WHERE l.rowid IN (' . implode(',', $changeaccount) . ')'; + + dol_syslog('accountingex/customer/lignes.php::changeaccount 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'); + } +} + +/* + * View + */ + +llxHeader('', $langs->trans("CustomersVentilation") . ' - ' . $langs->trans("Dispatched")); + +$page = GETPOST("page"); +if ($page < 0) + $page = 0; + +if (! empty($conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION)) { + $limit = $conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION; +} elseif ($conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION <= 0) { + $limit = $conf->liste_limit; +} else { + $limit = $conf->liste_limit; +} + +$offset = $limit * $page; + +$sql = "SELECT l.rowid , f.facnumber, f.rowid as facid, l.fk_product, l.description, l.total_ht, l.qty, l.tva_tx, l.fk_code_ventilation, aa.label, aa.account_number,"; +$sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facture as f"; +$sql .= " , " . MAIN_DB_PREFIX . "accountingaccount as aa"; +$sql .= " , " . MAIN_DB_PREFIX . "facturedet as l"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; +$sql .= " WHERE f.rowid = l.fk_facture AND f.fk_statut >= 1 AND l.fk_code_ventilation <> 0 "; +$sql .= " AND aa.rowid = l.fk_code_ventilation"; +if (strlen(trim(GETPOST("search_facture")))) { + $sql .= " AND f.facnumber like '%" . GETPOST("search_facture") . "%'"; +} +if (strlen(trim(GETPOST("search_ref")))) { + $sql .= " AND p.ref like '%" . GETPOST("search_ref") . "%'"; +} +if (strlen(trim(GETPOST("search_label")))) { + $sql .= " AND p.label like '%" . GETPOST("search_label") . "%'"; +} +if (strlen(trim(GETPOST("search_desc")))) { + $sql .= " AND l.description like '%" . GETPOST("search_desc") . "%'"; +} +if (strlen(trim(GETPOST("search_account")))) { + $sql .= " AND aa.account_number like '%" . GETPOST("search_account") . "%'"; +} + +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; +} + +$sql .= " ORDER BY l.rowid"; +if ($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE > 0) { + $sql .= " DESC "; +} +$sql .= $db->plimit($limit + 1, $offset); + +dol_syslog("/accountingex/customer/linges.php sql=" . $sql, LOG_DEBUG); +$result = $db->query($sql); +if ($result) { + $num_lignes = $db->num_rows($result); + $i = 0; + + // TODO : print_barre_liste always use $conf->liste_limit and do not care about custom limit in list... + print_barre_liste($langs->trans("InvoiceLinesDone"), $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, '', $num_lignes); + + print '' . $langs->trans("DescVentilDoneCustomer") . ''; + + print '
'; + print ''; + + print '

' . $langs->trans("ChangeAccount"); + print $formventilation->select_account($account_parent, 'account_parent', 1); + print '
'; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $facture_static = new Facture($db); + $product_static = new Product($db); + + $var = True; + while ( $objp = $db->fetch_object($result) ) { + $var = ! $var; + $codeCompta = $objp->account_number . ' ' . $objp->label; + + print ""; + + // Ref facture + $facture_static->ref = $objp->facnumber; + $facture_static->id = $objp->facid; + print ''; + + // Ref produit + $product_static->ref = $objp->product_ref; + $product_static->id = $objp->product_id; + $product_static->type = $objp->type; + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print ''; + + print ""; + $i ++; + } +} else { + print $db->error(); +} + +print "
' . $langs->trans("Invoice") . '' . $langs->trans("Ref") . '' . $langs->trans("Label") . '' . $langs->trans("Description") . '' . $langs->trans("Amount") . '' . $langs->trans("Account") . '  
  '; + print ''; + print ' 
' . $facture_static->getNomUrl(1) . ''; + if ($product_static->id) + print $product_static->getNomUrl(1); + else + print ' '; + print '' . dol_trunc($objp->product_label, 24) . '' . nl2br(dol_trunc($objp->description, 32)) . '' . price($objp->total_ht) . '' . $codeCompta . '' . $objp->rowid . ''; + print img_edit(); + print '
"; + +$db->close(); +llxFooter(); \ No newline at end of file diff --git a/htdocs/accountancy/customer/liste.php b/htdocs/accountancy/customer/liste.php new file mode 100644 index 00000000000..f0363918b0a --- /dev/null +++ b/htdocs/accountancy/customer/liste.php @@ -0,0 +1,246 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 Ari Elbaz (elarifr) + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/customer/liste.php + * \ingroup Accounting Expert + * \brief Page de ventilation des lignes de facture clients + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/compta/facture/class/facture.class.php"); +dol_include_once("/product/class/product.class.php"); +dol_include_once("/accountingex/class/html.formventilation.class.php"); + +// Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +$action = GETPOST('action'); +$codeventil = GETPOST('codeventil', 'array'); +$mesCasesCochees = GETPOST('mesCasesCochees', 'array'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +$formventilation = new FormVentilation($db); + +llxHeader('', $langs->trans("Ventilation")); + +/* + * Action +*/ + +if ($action == 'ventil') { + print '
' . $langs->trans("Processing") . '...
'; + if (! empty($codeventil) && ! empty($mesCasesCochees)) { + print '
' . count($mesCasesCochees) . ' ' . $langs->trans("SelectedLines") . '
'; + $mesCodesVentilChoisis = $codeventil; + $cpt = 0; + foreach ( $mesCasesCochees as $maLigneCochee ) { + // print '
id selectionnee : '.$monChoix."
"; + $maLigneCourante = split("_", $maLigneCochee); + $monId = $maLigneCourante[0]; + $monNumLigne = $maLigneCourante[1]; + $monCompte = $mesCodesVentilChoisis[$monNumLigne]; + + $sql = " UPDATE " . MAIN_DB_PREFIX . "facturedet"; + $sql .= " SET fk_code_ventilation = " . $monCompte; + $sql .= " WHERE rowid = " . $monId; + + dol_syslog("/accountingex/customer/liste.php sql=" . $sql, LOG_DEBUG); + if ($db->query($sql)) { + print '
' . $langs->trans("Lineofinvoice") . ' ' . $monId . ' ' . $langs->trans("VentilatedinAccount") . ' : ' . $monCompte . '
'; + } else { + print '
' . $langs->trans("ErrorDB") . ' : ' . $langs->trans("Lineofinvoice") . ' ' . $monId . ' ' . $langs->trans("NotVentilatedinAccount") . ' : ' . $monCompte . '
' . $sql . '
'; + } + + $cpt ++; + } + } else { + print '
' . $langs->trans("AnyLineVentilate") . '
'; + } + print '
' . $langs->trans("EndProcessing") . '
'; +} + +/* + * Customer Invoice lines + */ +$page = GETPOST('page'); +if ($page < 0) + $page = 0; + +if (! empty($conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION)) { + $limit = $conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION; +} else if ($conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION <= 0) { + $limit = $conf->liste_limit; +} else { + $limit = $conf->liste_limit; +} + +$offset = $limit * $page; + +$sql = "SELECT f.facnumber, f.rowid as facid, l.fk_product, l.description, l.total_ht, l.rowid, l.fk_code_ventilation,"; +$sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.accountancy_code_sell as code_sell"; +$sql .= " , aa.rowid as aarowid"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facture as f"; +$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "facturedet as l ON f.rowid = l.fk_facture"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accountingaccount as aa ON p.accountancy_code_sell = aa.account_number"; +$sql .= " WHERE f.fk_statut > 0 AND fk_code_ventilation = 0"; + +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; +} + +$sql .= " ORDER BY l.rowid"; +if ($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO > 0) { + $sql .= " DESC "; +} +$sql .= $db->plimit($limit + 1, $offset); + +dol_syslog("/accountingex/customer/liste.php sql=" . $sql, LOG_DEBUG); +$result = $db->query($sql); +if ($result) { + $num_lignes = $db->num_rows($result); + $i = 0; + + // TODO : print_barre_liste always use $conf->liste_limit and do not care about custom limit in list... + print_barre_liste($langs->trans("InvoiceLines"), $page, "liste.php", "", $sortfield, $sortorder, '', $num_lignes); + + print '
' . $langs->trans("DescVentilTodoCustomer") . '
'; + + print '
' . "\n"; + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $facture_static = new Facture($db); + $product_static = new Product($db); + $form = new Form($db); + + $var = True; + while ( $i < min($num_lignes, $limit) ) { + $objp = $db->fetch_object($result); + $var = ! $var; + + // product_type: 0 = service ? 1 = product + // if product does not exist we use the value of product_type provided in facturedet to define if this is a product or service + // issue : if we change product_type value in product DB it should differ from the value stored in facturedet DB ! + $code_sell_notset = ''; + + if (empty($objp->code_sell)) { + $code_sell_notset = 'color:red'; + + if (! empty($objp->type)) { + if ($objp->type == 1) { + $objp->code_sell = (! empty($conf->global->COMPTA_PRODUCT_SOLD_ACCOUNT) ? $conf->global->COMPTA_PRODUCT_SOLD_ACCOUNT : $langs->trans("CodeNotDef")); + } else { + $objp->code_sell = (! empty($conf->global->COMPTA_SERVICE_SOLD_ACCOUNT) ? $conf->global->COMPTA_SERVICE_SOLD_ACCOUNT : $langs->trans("CodeNotDef")); + } + } else { + $code_sell_notset = 'color:blue'; + + if ($objp->type == 1) { + $objp->code_sell = (! empty($conf->global->COMPTA_PRODUCT_SOLD_ACCOUNT) ? $conf->global->COMPTA_PRODUCT_SOLD_ACCOUNT : $langs->trans("CodeNotDef")); + } else { + $objp->code_sell = (! empty($conf->global->COMPTA_SERVICE_SOLD_ACCOUNT) ? $conf->global->COMPTA_SERVICE_SOLD_ACCOUNT : $langs->trans("CodeNotDef")); + } + } + } + + print ""; + + // Ref facture + $facture_static->ref = $objp->facnumber; + $facture_static->id = $objp->facid; + print ''; + + // Ref produit + $product_static->ref = $objp->product_ref; + $product_static->id = $objp->product_id; + $product_static->type = $objp->type; + print ''; + + print ''; + print ''; + + print ''; + + print ''; + + // Colonne choix du compte + print ''; + + // Colonne choix ligne a ventiler + print ''; + + print ''; + $i ++; + } + + print ''; + + print '
' . $langs->trans("Invoice") . '' . $langs->trans("Ref") . '' . $langs->trans("Label") . '' . $langs->trans("Description") . '' . $langs->trans("Amount") . '' . $langs->trans("AccountAccounting") . '' . $langs->trans("IntoAccount") . '' . $langs->trans("Ventilate") . '
' . $facture_static->getNomUrl(1) . ''; + if ($product_static->id) + print $product_static->getNomUrl(1); + else + print ' '; + print '' . dol_trunc($objp->product_label, 24) . '' . nl2br(dol_trunc($objp->description, 32)) . ''; + print price($objp->total_ht); + print ''; + print $objp->code_sell; + print ''; + print $formventilation->select_account($objp->aarowid, 'codeventil[]', 1); + print ''; + print 'code_sell ? "checked" : "") . '/>'; + print '
 
'; + print '
'; +} else { + print $db->error(); +} + +$db->close(); +llxFooter(); \ No newline at end of file diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php new file mode 100644 index 00000000000..493aa24b5ea --- /dev/null +++ b/htdocs/accountancy/journal/bankjournal.php @@ -0,0 +1,568 @@ + + * Copyright (C) 2007-2010 Jean Heimburger + * Copyright (C) 2011 Juanjo Menent + * Copyright (C) 2012 Regis Houssin + * Copyright (C) 2013 Christophe Battarel + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/journal/bankjournal.php + * \ingroup Accounting Expert + * \brief Page with sells journal + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/core/lib/report.lib.php"); +dol_include_once("/core/lib/date.lib.php"); +dol_include_once("/core/lib/bank.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; +dol_include_once("/societe/class/societe.class.php"); +dol_include_once("/adherents/class/adherent.class.php"); +dol_include_once("/compta/sociales/class/chargesociales.class.php"); +dol_include_once("/compta/paiement/class/paiement.class.php"); +dol_include_once("/compta/tva/class/tva.class.php"); +dol_include_once("/fourn/class/paiementfourn.class.php"); +dol_include_once("/fourn/class/fournisseur.facture.class.php"); +dol_include_once("/fourn/class/fournisseur.class.php"); +dol_include_once("/accountingex/class/bookkeeping.class.php"); +dol_include_once("/societe/class/client.class.php"); + +// Langs +$langs->load("companies"); +$langs->load("other"); +$langs->load("compta"); +$langs->load("bank"); +$langs->load('bills'); +$langs->load("accountingex@accountingex"); + +$date_startmonth = GETPOST('date_startmonth'); +$date_startday = GETPOST('date_startday'); +$date_startyear = GETPOST('date_startyear'); +$date_endmonth = GETPOST('date_endmonth'); +$date_endday = GETPOST('date_endday'); +$date_endyear = GETPOST('date_endyear'); +$action = GETPOST('action'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +/* + * View + */ + +$year_current = strftime("%Y", dol_now()); +$pastmonth = strftime("%m", dol_now()) - 1; +$pastmonthyear = $year_current; +if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; +} + +$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); +$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); + +if (empty($date_start) || empty($date_end)) // We define date_start and date_end +{ + $date_start = dol_get_first_day($pastmonthyear, $pastmonth, false); + $date_end = dol_get_last_day($pastmonthyear, $pastmonth, false); +} + +$p = explode(":", $conf->global->MAIN_INFO_SOCIETE_COUNTRY); +$idpays = $p[0]; + +$sql = "SELECT b.rowid , b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro, b.num_releve, b.num_chq, b.fk_type, soc.code_compta, ba.courant,"; +$sql .= " soc.code_compta_fournisseur, soc.rowid as socid, soc.nom as name, ba.account_number, bu1.type as typeop"; +$sql .= " FROM " . MAIN_DB_PREFIX . "bank b"; +$sql .= " JOIN " . MAIN_DB_PREFIX . "bank_account ba on b.fk_account=ba.rowid"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url bu1 ON bu1.fk_bank = b.rowid AND bu1.type='company'"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe soc on bu1.url_id=soc.rowid"; +// To isolate the cash of the other accounts +$sql .= " WHERE ba.courant <> 2"; +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND ba.entity = " . $conf->entity; +} +if ($date_start && $date_end) + $sql .= " AND b.dateo >= '" . $db->idate($date_start) . "' AND b.dateo <= '" . $db->idate($date_end) . "'"; +$sql .= " ORDER BY b.datev"; + +$object = new Account($db); +$paymentstatic = new Paiement($db); +$paymentsupplierstatic = new PaiementFourn($db); +$societestatic = new Societe($db); +$chargestatic = new ChargeSociales($db); +$paymentvatstatic = new TVA($db); + +dol_syslog("accountingex/journal/bankjournal.php:: sql=" . $sql, LOG_DEBUG); +$result = $db->query($sql); +if ($result) { + + $num = $db->num_rows($result); + // Variables + $cptfour = (! empty($conf->global->COMPTA_ACCOUNT_SUPPLIER) ? $conf->global->COMPTA_ACCOUNT_SUPPLIER : $langs->trans("CodeNotDef")); + $cptcli = (! empty($conf->global->COMPTA_ACCOUNT_CUSTOMER) ? $conf->global->COMPTA_ACCOUNT_CUSTOMER : $langs->trans("CodeNotDef")); + $cpttva = (! empty($conf->global->ACCOUNTINGEX_ACCOUNT_SUSPENSE) ? $conf->global->ACCOUNTINGEX_ACCOUNT_SUSPENSE : $langs->trans("CodeNotDef")); + $cptsociale = (! empty($conf->global->ACCOUNTINGEX_ACCOUNT_SUSPENSE) ? $conf->global->ACCOUNTINGEX_ACCOUNT_SUSPENSE : $langs->trans("CodeNotDef")); + + $tabpay = array (); + $tabbq = array (); + $tabtp = array (); + $tabcompany[$obj->rowid] = array ( + 'id' => $obj->socid, + 'name' => $obj->name, + 'code_client' => $obj->code_compta + ); + $tabtype = array (); + + $i = 0; + while ( $i < $num ) { + $obj = $db->fetch_object($result); + + // Controls + $compta_bank = $obj->account_number; + if ($obj->label == '(SupplierInvoicePayment)') + $compta_soc = (! empty($obj->code_compta_fournisseur) ? $obj->code_compta_fournisseur : $cptfour); + if ($obj->label == '(CustomerInvoicePayment)') + $compta_soc = (! empty($obj->code_compta) ? $obj->code_compta : $cptcli); + if ($obj->typeop == '(BankTransfert)') + $compta_soc = $conf->global->ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH; + + // Variable bookkeeping + $tabpay[$obj->rowid]["date"] = $obj->do; + $tabpay[$obj->rowid]["type_payment"] = $obj->fk_type; + $tabpay[$obj->rowid]["ref"] = $obj->label; + $tabpay[$obj->rowid]["fk_bank"] = $obj->rowid; + if (preg_match('/^\((.*)\)$/i', $obj->label, $reg)) { + $tabpay[$obj->rowid]["lib"] = $langs->trans($reg[1]); + } else { + $tabpay[$obj->rowid]["lib"] = dol_trunc($obj->label, 60); + } + $links = $object->get_url($obj->rowid); + + foreach ( $links as $key => $val ) { + + $tabtype[$obj->rowid] = $links[$key]['type']; + + if ($links[$key]['type'] == 'payment') { + $paymentstatic->id = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentstatic->getNomUrl(2); + } else if ($links[$key]['type'] == 'payment_supplier') { + $paymentsupplierstatic->id = $links[$key]['url_id']; + $paymentsupplierstatic->ref = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentsupplierstatic->getNomUrl(2); + } else if ($links[$key]['type'] == 'company') { + + $societestatic->id = $links[$key]['url_id']; + $societestatic->nom = $links[$key]['label']; + $tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30); + $tabtp[$obj->rowid][$compta_soc] += $obj->amount; + } else if ($links[$key]['type'] == 'sc') { + + $chargestatic->id = $links[$key]['url_id']; + $chargestatic->ref = $links[$key]['url_id']; + + $tabpay[$obj->rowid]["lib"] .= ' ' . $chargestatic->getNomUrl(2); + if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) { + if ($reg[1] == 'socialcontribution') + $reg[1] = 'SocialContribution'; + $chargestatic->lib = $langs->trans($reg[1]); + } else { + $chargestatic->lib = $links[$key]['label']; + } + $chargestatic->ref = $chargestatic->lib; + $tabpay[$obj->rowid]["soclib"] = $chargestatic->getNomUrl(1, 30); + + $sqlmid = 'SELECT cchgsoc.accountancy_code'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "c_chargesociales cchgsoc "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "chargesociales as chgsoc ON chgsoc.fk_type=cchgsoc.id"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementcharge as paycharg ON paycharg.fk_charge=chgsoc.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "bank_url as bkurl ON bkurl.url_id=paycharg.rowid"; + $sqlmid .= " WHERE bkurl.fk_bank=" . $obj->rowid; + + dol_syslog("accountingex/journal/bankjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $tabtp[$obj->rowid][$objmid->accountancy_code] += $obj->amount; + } + } else if ($links[$key]['type'] == 'payment_vat') { + + $paymentvatstatic->id = $links[$key]['url_id']; + $paymentvatstatic->ref = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentvatstatic->getNomUrl(2); + $tabtp[$obj->rowid][$cpttva] += $obj->amount; + } else if ($links[$key]['type'] == 'banktransfert') { + + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentvatstatic->getNomUrl(2); + $tabtp[$obj->rowid][$cpttva] += $obj->amount; + } + /*else { + $tabtp [$obj->rowid] [$cptsociale] += $obj->amount; + }*/ + } + $tabbq[$obj->rowid][$compta_bank] += $obj->amount; + + // if($obj->socid)$tabtp[$obj->rowid][$compta_soc] += $obj->amount; + + $i ++; + } +} else { + dol_print_error($db); +} + +/* + * Actions +*/ + +// Write bookkeeping +if ($action == 'writeBookKeeping') { + $error = 0; + foreach ( $tabpay as $key => $val ) { + // Bank + foreach ( $tabbq[$key] as $k => $mt ) { + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->doc_type = 'bank'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_bank"]; + $bookkeeping->code_tiers = $tabcompany[$key]['code_client']; + $bookkeeping->numero_compte = $k; + $bookkeeping->label_compte = $compte->intitule; + $bookkeeping->montant = ($mt < 0 ? price - ($mt) : $mt); + $bookkeeping->sens = ($mt >= 0) ? 'D' : 'C'; + $bookkeeping->debit = ($mt >= 0) ? $mt : 0; + $bookkeeping->credit = ($mt < 0 ? price - ($mt) : 0); + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_BANK_JOURNAL; + + if ($tabtype[$key] == 'payment') { + + $sqlmid = 'SELECT fac.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture fac "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement_facture as payfac ON payfac.fk_facture=fac.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement as pay ON payfac.fk_paiement=pay.rowid"; + $sqlmid .= " WHERE pay.fk_bank=" . $key; + dol_syslog("accountingex/journal/bankjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + } else if ($tabtype[$key] == 'payment_supplier') { + + $sqlmid = 'SELECT facf.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture_fourn facf "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn_facturefourn as payfacf ON payfacf.fk_facturefourn=facf.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn as payf ON payfacf.fk_paiementfourn=payf.rowid"; + $sqlmid .= " WHERE payf.fk_bank=" . $key; + dol_syslog("accountingex/journal/bankjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + } + + $result = $bookkeeping->create(); + if ($result < 0) { + $error ++; + setEventMessage($object->errors, 'errors'); + } + } + // Third party + foreach ( $tabtp[$key] as $k => $mt ) { + + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->doc_type = 'banque'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_bank"]; + $bookkeeping->label_compte = $tabcompany[$key]['name']; + $bookkeeping->montant = ($mt < 0 ? price - ($mt) : $mt); + $bookkeeping->sens = ($mt < 0) ? 'D' : 'C'; + $bookkeeping->debit = ($mt < 0 ? price - ($mt) : 0); + $bookkeeping->credit = ($mt >= 0) ? $mt : 0; + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_BANK_JOURNAL; + + if ($tabtype[$key] == 'sc') { + $bookkeeping->code_tiers = ''; + $bookkeeping->numero_compte = $k; + } else if ($tabtype[$key] == 'payment') { + + $sqlmid = 'SELECT fac.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture fac "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement_facture as payfac ON payfac.fk_facture=fac.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement as pay ON payfac.fk_paiement=pay.rowid"; + $sqlmid .= " WHERE pay.fk_bank=" . $key; + dol_syslog("accountingex/journal/bankjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + $bookkeeping->code_tiers = $k; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_CUSTOMER; + } else if ($tabtype[$key] == 'payment_supplier') { + + $sqlmid = 'SELECT facf.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture_fourn facf "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn_facturefourn as payfacf ON payfacf.fk_facturefourn=facf.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn as payf ON payfacf.fk_paiementfourn=payf.rowid"; + $sqlmid .= " WHERE payf.fk_bank=" . $key; + dol_syslog("accountingex/journal/bankjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + $bookkeeping->code_tiers = $k; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_SUPPLIER; + } else if ($tabtype[$key] == 'company') { + + $sqlmid = 'SELECT fac.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture fac "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement_facture as payfac ON payfac.fk_facture=fac.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement as pay ON payfac.fk_paiement=pay.rowid"; + $sqlmid .= " WHERE pay.fk_bank=" . $key; + dol_syslog("accountingex/journal/bankjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + $bookkeeping->code_tiers = $k; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_CUSTOMER; + } else { + + $bookkeeping->doc_ref = $k; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_CUSTOMER; + } + + $result = $bookkeeping->create(); + if ($result < 0) { + $error ++; + setEventMessage($object->errors, 'errors'); + } + } + } + + if (empty($error)) { + setEventMessage($langs->trans('Success'), 'mesgs'); + } +} +// export csv +if ($action == 'export_csv') { + $sep = $conf->global->ACCOUNTINGEX_SEPARATORCSV; + + header('Content-Type: text/csv'); + header('Content-Disposition: attachment;filename=journal_banque.csv'); + + $companystatic = new Client($db); + + if ($conf->global->ACCOUNTINGEX_MODELCSV == 1) // Modèle Export Cegid Expert + { + foreach ( $tabpay as $key => $val ) { + $date = dol_print_date($db->jdate($val["date"]), '%d%m%Y'); + + $companystatic->id = $tabcompany[$key]['id']; + $companystatic->name = $tabcompany[$key]['name']; + + // Bank + print $date . $sep; + print $conf->global->ACCOUNTINGEX_BANK_JOURNAL . $sep; + foreach ( $tabbq[$key] as $k => $mt ) { + print length_accountg(html_entity_decode($k)) . $sep; + print $sep; + print ($mt < 0 ? 'C' : 'D') . $sep; + print ($mt <= 0 ? price(- $mt) : $mt) . $sep; + print $val["type_payment"] . $sep; + print $sep; + } + print "\n"; + + // Third party + foreach ( $tabtp[$key] as $k => $mt ) { + if ($mt) { + print $date . $sep; + print $conf->global->ACCOUNTINGEX_BANK_JOURNAL . $sep; + if ($val["lib"] == '(SupplierInvoicePayment)') { + print length_accountg($conf->global->COMPTA_ACCOUNT_SUPPLIER) . $sep; + } else { + print length_accountg($conf->global->COMPTA_ACCOUNT_CUSTOMER) . $sep; + } + print length_accounta(html_entity_decode($k)) . $sep; + print ($mt < 0 ? 'D' : 'C') . $sep; + print ($mt <= 0 ? price(- $mt) : $mt) . $sep; + print $val["type_payment"] . $sep; + print $sep; + print "\n"; + } + } + } + } else // Modèle Export Classique + { + foreach ( $tabpay as $key => $val ) { + $date = dol_print_date($db->jdate($val["date"]), 'day'); + + $companystatic->id = $tabcompany[$key]['id']; + $companystatic->name = $tabcompany[$key]['name']; + + print '"' . $date . '"' . $sep; + print '"' . $val["type_payment"] . '"' . $sep; + + // Bank + foreach ( $tabbq[$key] as $k => $mt ) { + print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; + print '"' . $langs->trans("Bank") . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"'; + } + print "\n"; + + // Third party + foreach ( $tabtp[$key] as $k => $mt ) { + if ($mt) { + print '"' . $date . '"' . $sep; + print '"' . $val["type_payment"] . '"' . $sep; + + print '"' . length_accounta(html_entity_decode($k)) . '"' . $sep; + print '"' . $companystatic->name . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"'; + print "\n"; + } + } + } + } +} else { + + $form = new Form($db); + + llxHeader('', $langs->trans("BankJournal")); + + $nom = $langs->trans("BankJournal"); + $nomlink = ''; + $periodlink = ''; + $exportlink = ''; + $builddate = time(); + $description = $langs->trans("DescBankJournal") . '
'; + $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); + report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( + 'action' => '' + )); + + print ''; + + print ''; + + print ' + '; + + /* + * Show result array + */ + print '

'; + + $i = 0; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print "\n"; + + $var = true; + $r = ''; + + foreach ( $tabpay as $key => $val ) { + $date = dol_print_date($db->jdate($val["date"]), 'day'); + + if ($val["lib"] == '(SupplierInvoicePayment)') + $reflabel = $langs->trans('SupplierInvoicePayment'); + if ($val["lib"] == '(CustomerInvoicePayment)') + $reflabel = $langs->trans('CustomerInvoicePayment'); + + // Bank + foreach ( $tabbq[$key] as $k => $mt ) { + if (1) { + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + } + } + + // Third party + foreach ( $tabtp[$key] as $k => $mt ) { + if ($k != 'type') { + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + } + } + + $var = ! $var; + } + + print "
" . $langs->trans("Date") . "" . $langs->trans("Piece") . ' (' . $langs->trans("InvoiceRef") . ")" . $langs->trans("Account") . "" . $langs->trans("Type") . "" . $langs->trans("PaymentMode") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
" . $date . "" . $reflabel . "" . length_accountg($k) . "" . $langs->trans('Bank') . "" . $val["type_payment"] . "" . ($mt >= 0 ? price($mt) : '') . "" . ($mt < 0 ? price(- $mt) : '') . "
" . $date . "" . $val["soclib"] . "" . length_accounta($k) . "" . $langs->trans('ThirdParty') . " (" . $val['soclib'] . ")" . $val["type_payment"] . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "
"; + + // End of page + llxFooter(); +} +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/journal/cashjournal.php b/htdocs/accountancy/journal/cashjournal.php new file mode 100644 index 00000000000..c5e0b74543d --- /dev/null +++ b/htdocs/accountancy/journal/cashjournal.php @@ -0,0 +1,544 @@ + + * Copyright (C) 2007-2010 Jean Heimburger + * Copyright (C) 2011 Juanjo Menent + * Copyright (C) 2012 Regis Houssin + * Copyright (C) 2013 Christophe Battarel + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/journal/cashjournal.php + * \ingroup Accounting Expert + * \brief Page with cash journal + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/core/lib/report.lib.php"); +dol_include_once("/core/lib/date.lib.php"); +dol_include_once("/core/lib/bank.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; +dol_include_once("/societe/class/societe.class.php"); +dol_include_once("/adherents/class/adherent.class.php"); +dol_include_once("/compta/sociales/class/chargesociales.class.php"); +dol_include_once("/compta/paiement/class/paiement.class.php"); +dol_include_once("/compta/tva/class/tva.class.php"); +dol_include_once("/fourn/class/paiementfourn.class.php"); +dol_include_once("/fourn/class/fournisseur.facture.class.php"); +dol_include_once("/fourn/class/fournisseur.class.php"); +dol_include_once("/accountingex/class/bookkeeping.class.php"); + +// Langs +$langs->load("companies"); +$langs->load("other"); +$langs->load("compta"); +$langs->load("bank"); +$langs->load("accountingex@accountingex"); + +$date_startmonth = GETPOST('date_startmonth'); +$date_startday = GETPOST('date_startday'); +$date_startyear = GETPOST('date_startyear'); +$date_endmonth = GETPOST('date_endmonth'); +$date_endday = GETPOST('date_endday'); +$date_endyear = GETPOST('date_endyear'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +$action = GETPOST('action'); + +/* + * View + */ + +$year_current = strftime("%Y", dol_now()); +$pastmonth = strftime("%m", dol_now()) - 1; +$pastmonthyear = $year_current; +if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; +} + +$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); +$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); + +if (empty($date_start) || empty($date_end)) // We define date_start and date_end +{ + $date_start = dol_get_first_day($pastmonthyear, $pastmonth, false); + $date_end = dol_get_last_day($pastmonthyear, $pastmonth, false); +} + +$p = explode(":", $conf->global->MAIN_INFO_SOCIETE_COUNTRY); +$idpays = $p[0]; + +$sql = "SELECT b.rowid , b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro, b.num_releve, b.num_chq, b.fk_type, soc.code_compta, ba.courant,"; +$sql .= " soc.code_compta_fournisseur, soc.rowid as socid, soc.nom as name, ba.account_number, bu1.type as typeop"; +$sql .= " FROM " . MAIN_DB_PREFIX . "bank b"; +$sql .= " JOIN " . MAIN_DB_PREFIX . "bank_account ba on b.fk_account=ba.rowid"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url bu1 ON bu1.fk_bank = b.rowid AND bu1.type='company'"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe soc on bu1.url_id=soc.rowid"; + +// Code opération type caisse +$sql .= " WHERE ba.courant = 2"; +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND ba.entity = " . $conf->entity; +} + +if ($date_start && $date_end) + $sql .= " AND b.dateo >= '" . $db->idate($date_start) . "' AND b.dateo <= '" . $db->idate($date_end) . "'"; +$sql .= " ORDER BY b.datev"; + +$object = new Account($db); +$paymentstatic = new Paiement($db); +$paymentsupplierstatic = new PaiementFourn($db); +$societestatic = new Societe($db); +$chargestatic = new ChargeSociales($db); +$paymentvatstatic = new TVA($db); + +dol_syslog("accountingex/journal/cashjournal.php:: sql=" . $sql, LOG_DEBUG); +$result = $db->query($sql); +if ($result) { + + $num = $db->num_rows($result); + // les variables + $cptfour = (! empty($conf->global->COMPTA_ACCOUNT_SUPPLIER) ? $conf->global->COMPTA_ACCOUNT_SUPPLIER : $langs->trans("CodeNotDef")); + $cptcli = (! empty($conf->global->COMPTA_ACCOUNT_CUSTOMER) ? $conf->global->COMPTA_ACCOUNT_CUSTOMER : $langs->trans("CodeNotDef")); + $cpttva = (! empty($conf->global->ACCOUNTINGEX_ACCOUNT_SUSPENSE) ? $conf->global->ACCOUNTINGEX_ACCOUNT_SUSPENSE : $langs->trans("CodeNotDef")); + $cptsociale = (! empty($conf->global->ACCOUNTINGEX_ACCOUNT_SUSPENSE) ? $conf->global->ACCOUNTINGEX_ACCOUNT_SUSPENSE : $langs->trans("CodeNotDef")); + + $tabpay = array (); + $tabbq = array (); + $tabtp = array (); + $tabcompany = array (); + $tabtype = array (); + + $i = 0; + while ( $i < $num ) { + $obj = $db->fetch_object($result); + + // controls + $compta_bank = $obj->account_number; + if ($obj->label == '(SupplierInvoicePayment)') + $compta_soc = (! empty($obj->code_compta_fournisseur) ? $obj->code_compta_fournisseur : $cptfour); + if ($obj->label == '(CustomerInvoicePayment)') + $compta_soc = (! empty($obj->code_compta) ? $obj->code_compta : $cptcli); + if ($obj->typeop == '(BankTransfert)') + $compta_soc = $conf->global->ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH; + + // variable bookkeeping + + $tabpay[$obj->rowid]["date"] = $obj->do; + $tabpay[$obj->rowid]["ref"] = $obj->label; + $tabpay[$obj->rowid]["fk_bank"] = $obj->rowid; + if (preg_match('/^\((.*)\)$/i', $obj->label, $reg)) { + $tabpay[$obj->rowid]["lib"] = $langs->trans($reg[1]); + } else { + $tabpay[$obj->rowid]["lib"] = dol_trunc($obj->label, 60); + } + $links = $object->get_url($obj->rowid); + + foreach ( $links as $key => $val ) { + + $tabtype[$obj->rowid] = $links[$key]['type']; + + if ($links[$key]['type'] == 'payment') { + $paymentstatic->id = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentstatic->getNomUrl(2); + } else if ($links[$key]['type'] == 'payment_supplier') { + $paymentsupplierstatic->id = $links[$key]['url_id']; + $paymentsupplierstatic->ref = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentsupplierstatic->getNomUrl(2); + } else if ($links[$key]['type'] == 'company') { + + $societestatic->id = $links[$key]['url_id']; + $societestatic->nom = $links[$key]['label']; + $tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30); + $tabtp[$obj->rowid][$compta_soc] += $obj->amount; + } else if ($links[$key]['type'] == 'sc') { + + $chargestatic->id = $links[$key]['url_id']; + $chargestatic->ref = $links[$key]['url_id']; + + $tabpay[$obj->rowid]["lib"] .= ' ' . $chargestatic->getNomUrl(2); + if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) { + if ($reg[1] == 'socialcontribution') + $reg[1] = 'SocialContribution'; + $chargestatic->lib = $langs->trans($reg[1]); + } else { + $chargestatic->lib = $links[$key]['label']; + } + $chargestatic->ref = $chargestatic->lib; + $tabpay[$obj->rowid]["soclib"] = $chargestatic->getNomUrl(1, 30); + + $sqlmid = 'SELECT cchgsoc.accountancy_code'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "c_chargesociales cchgsoc "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "chargesociales as chgsoc ON chgsoc.fk_type=cchgsoc.id"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementcharge as paycharg ON paycharg.fk_charge=chgsoc.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "bank_url as bkurl ON bkurl.url_id=paycharg.rowid"; + $sqlmid .= " WHERE bkurl.fk_bank=" . $obj->rowid; + dol_syslog("accountingex/journal/cashjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $tabtp[$obj->rowid][$objmid->accountancy_code] += $obj->amount; + } + } else if ($links[$key]['type'] == 'payment_vat') { + + $paymentvatstatic->id = $links[$key]['url_id']; + $paymentvatstatic->ref = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentvatstatic->getNomUrl(2); + $tabtp[$obj->rowid][$cpttva] += $obj->amount; + } else if ($links[$key]['type'] == 'banktransfert') { + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentvatstatic->getNomUrl(2); + $tabtp[$obj->rowid][$cpttva] += $obj->amount; + } + /*else { + $tabtp [$obj->rowid] [$cptsociale] += $obj->amount; + }*/ + } + $tabbq[$obj->rowid][$compta_bank] += $obj->amount; + + // if($obj->socid)$tabtp[$obj->rowid][$compta_soc] += $obj->amount; + + $i ++; + } +} else { + dol_print_error($db); +} + +/* + * Actions +*/ + +// write bookkeeping +if ($action == 'writeBookKeeping') { + $error = 0; + foreach ( $tabpay as $key => $val ) { + // cash + foreach ( $tabbq[$key] as $k => $mt ) { + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->doc_type = 'cash'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_bank"]; + $bookkeeping->code_tiers = $tabcompany[$key]['code_client']; + $bookkeeping->numero_compte = $k; + $bookkeeping->label_compte = $compte->intitule; + $bookkeeping->montant = ($mt < 0 ? price - ($mt) : $mt); + $bookkeeping->sens = ($mt >= 0) ? 'D' : 'C'; + $bookkeeping->debit = ($mt >= 0) ? $mt : 0; + $bookkeeping->credit = ($mt < 0 ? price - ($mt) : 0); + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_CASH_JOURNAL; + + if ($tabtype[$key] == 'payment') { + + $sqlmid = 'SELECT fac.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture fac "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement_facture as payfac ON payfac.fk_facture=fac.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement as pay ON payfac.fk_paiement=pay.rowid"; + $sqlmid .= " WHERE pay.fk_bank=" . $key; + dol_syslog("accountingex/journal/cashjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + } else if ($tabtype[$key] == 'payment_supplier') { + + $sqlmid = 'SELECT facf.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture_fourn facf "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn_facturefourn as payfacf ON payfacf.fk_facturefourn=facf.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn as payf ON payfacf.fk_paiementfourn=payf.rowid"; + $sqlmid .= " WHERE payf.fk_bank=" . $key; + dol_syslog("accountingex/journal/cashjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + } + + $result = $bookkeeping->create(); + if ($result < 0) { + $error ++; + setEventMessage($object->errors, 'errors'); + } + } + // third party + foreach ( $tabtp[$key] as $k => $mt ) { + + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->doc_type = 'cash'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_bank"]; + $bookkeeping->label_compte = $tabcompany[$key]['name']; + $bookkeeping->montant = ($mt < 0 ? price - ($mt) : $mt); + $bookkeeping->sens = ($mt < 0) ? 'D' : 'C'; + $bookkeeping->debit = ($mt < 0 ? price - ($mt) : 0); + $bookkeeping->credit = ($mt >= 0) ? $mt : 0; + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_CASH_JOURNAL; + + if ($tabtype[$key] == 'sc') { + $bookkeeping->code_tiers = ''; + $bookkeeping->numero_compte = $k; + } else if ($tabtype[$key] == 'payment') { + + $sqlmid = 'SELECT fac.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture fac "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement_facture as payfac ON payfac.fk_facture=fac.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement as pay ON payfac.fk_paiement=pay.rowid"; + $sqlmid .= " WHERE pay.fk_bank=" . $key; + dol_syslog("accountingex/journal/cashjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + $bookkeeping->code_tiers = $k; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_CUSTOMER; + } else if ($tabtype[$key] == 'payment_supplier') { + + $sqlmid = 'SELECT facf.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture_fourn facf "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn_facturefourn as payfacf ON payfacf.fk_facturefourn=facf.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementfourn as payf ON payfacf.fk_paiementfourn=payf.rowid"; + $sqlmid .= " WHERE payf.fk_bank=" . $key; + dol_syslog("accountingex/journal/cashjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + $bookkeeping->code_tiers = $k; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_SUPPLIER; + } else if ($tabtype[$key] == 'company') { + + $sqlmid = 'SELECT fac.facnumber'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "facture fac "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement_facture as payfac ON payfac.fk_facture=fac.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiement as pay ON payfac.fk_paiement=pay.rowid"; + $sqlmid .= " WHERE pay.fk_bank=" . $key; + dol_syslog("accountingex/journal/cashjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) { + $objmid = $db->fetch_object($resultmid); + $bookkeeping->doc_ref = $objmid->facnumber; + } + $bookkeeping->code_tiers = $k; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_CUSTOMER; + } else { + + $bookkeeping->doc_ref = $k; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_CUSTOMER; + } + + $result = $bookkeeping->create(); + if ($result < 0) { + $error ++; + setEventMessage($object->errors, 'errors'); + } + } + } + + if (empty($error)) { + setEventMessage($langs->trans('Success'), 'mesgs'); + } +} +// export csv +if ($action == 'export_csv') { + $sep = $conf->global->ACCOUNTINGEX_SEPARATORCSV; + + header('Content-Type: text/csv'); + header('Content-Disposition:attachment;filename=journal_caisse.csv'); + + if ($conf->global->ACCOUNTINGEX_MODELCSV == 1) // Modèle Export Cegid Expert + { + foreach ( $tabpay as $key => $val ) { + $date = dol_print_date($db->jdate($val["date"]), '%d%m%Y'); + + // Cash + print $date . $sep; + print $conf->global->ACCOUNTINGEX_CASH_JOURNAL . $sep; + + foreach ( $tabbq[$key] as $k => $mt ) { + print length_accountg(html_entity_decode($k)) . $sep; + print $sep; + print ($mt < 0 ? 'C' : 'D') . $sep; + print price($mt) . $sep; + } + print utf8_decode($langs->trans("CashPayment")) . $sep; + print $val["ref"] . $sep; + print "\n"; + + // Third party + foreach ( $tabtp[$key] as $k => $mt ) { + if ($mt) { + print $date . $sep; + print $conf->global->ACCOUNTINGEX_CASH_JOURNAL . $sep; + if ($obj->label == '(SupplierInvoicePayment)') { + print length_accountg($conf->global->COMPTA_ACCOUNT_SUPPLIER) . $sep; + } else { + print length_accountg($conf->global->COMPTA_ACCOUNT_CUSTOMER) . $sep; + } + print length_accounta(html_entity_decode($k)) . $sep; + print ($mt < 0 ? 'D' : 'C') . $sep; + print price($mt) . $sep; + print $langs->trans("ThirdParty") . $sep; + print $val["ref"] . $sep; + print "\n"; + } + } + } + } else // Modèle Export Classique + { + foreach ( $tabpay as $key => $val ) { + $date = dol_print_date($db->jdate($val["date"]), 'day'); + print '"' . $date . '"' . $sep; + print '"' . $val["ref"] . '"' . $sep; + + // Cash + foreach ( $tabbq[$key] as $k => $mt ) { + print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; + print '"' . $langs->trans("Cash") . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"'; + } + print "\n"; + + // Third party + foreach ( $tabtp[$key] as $k => $mt ) { + if ($mt) { + print '"' . $date . '"' . $sep; + print '"' . $val["ref"] . '"' . $sep; + print '"' . length_accounta(html_entity_decode($k)) . '"' . $sep; + print '"' . $langs->trans("ThirdParty") . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"'; + print "\n"; + } + } + } + } +} else { + + $form = new Form($db); + + llxHeader('', $langs->trans("CashJournal"), ''); + + $nom = $langs->trans("CashJournal"); + $nomlink = ''; + $periodlink = ''; + $exportlink = ''; + $builddate = time(); + $description = $langs->trans("DescCashJournal") . '
'; + $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); + report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( + 'action' => '' + )); + + print ''; + + print ''; + + print ' + '; + + /* + * Show result array + */ + print '

'; + + $i = 0; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print "\n"; + + $var = true; + $r = ''; + + foreach ( $tabpay as $key => $val ) { + $date = dol_print_date($db->jdate($val["date"]), 'day'); + + // Cash + foreach ( $tabbq[$key] as $k => $mt ) { + if (1) { + print ""; + print ""; + print ""; + print ""; + print '"; + print '"; + print ""; + } + } + + // third party + foreach ( $tabtp[$key] as $k => $mt ) { + if ($k != 'type') { + print ""; + + print ""; + print ""; + + print ""; + print '"; + print '"; + } + } + + $var = ! $var; + } + + print "
" . $langs->trans("Date") . "" . $langs->trans("Piece") . ' (' . $langs->trans("InvoiceRef") . ")" . $langs->trans("Account") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
" . $date . "" . $val["lib"] . "" . length_accountg($k) . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "
" . $date . "" . $val["soclib"] . "" . length_accounta($k) . "' . ($mt < 0 ? price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "
"; + + // End of page + llxFooter(); +} +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/journal/index.html b/htdocs/accountancy/journal/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/accountancy/journal/index.php b/htdocs/accountancy/journal/index.php new file mode 100644 index 00000000000..74e53e4076b --- /dev/null +++ b/htdocs/accountancy/journal/index.php @@ -0,0 +1,58 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/** + * \file accountingex/journal/index.php + * \ingroup Accounting Expert + * \brief Index + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +llxHeader('', 'Journaux', ''); + +$form = new Form($db); + +// End of page +$db->close(); +llxFooter(); +?> \ No newline at end of file diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php new file mode 100644 index 00000000000..01dbc0a28c2 --- /dev/null +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -0,0 +1,482 @@ + + * Copyright (C) 2007-2010 Jean Heimburger + * Copyright (C) 2011 Juanjo Menent + * Copyright (C) 2012 Regis Houssin + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2013-2014 Olivier Geffroy + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/journal/purchasesjournal.php + * \ingroup Accounting Expert + * \brief Page with purchases journal + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + +// Class +dol_include_once("/core/lib/report.lib.php"); +dol_include_once("/core/lib/date.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; +dol_include_once("/fourn/class/fournisseur.facture.class.php"); +dol_include_once("/fourn/class/fournisseur.class.php"); +dol_include_once("/accountingex/class/bookkeeping.class.php"); +dol_include_once("/accountingex/class/accountingaccount.class.php"); + +// Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +$date_startmonth = GETPOST('date_startmonth'); +$date_startday = GETPOST('date_startday'); +$date_startyear = GETPOST('date_startyear'); +$date_endmonth = GETPOST('date_endmonth'); +$date_endday = GETPOST('date_endday'); +$date_endyear = GETPOST('date_endyear'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +$action = GETPOST('action'); + +/* + * View + */ + +$year_current = strftime("%Y", dol_now()); +$pastmonth = strftime("%m", dol_now()) - 1; +$pastmonthyear = $year_current; +if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; +} + +$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); +$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); + +if (empty($date_start) || empty($date_end)) // We define date_start and date_end +{ + $date_start = dol_get_first_day($pastmonthyear, $pastmonth, false); + $date_end = dol_get_last_day($pastmonthyear, $pastmonth, false); +} + +$p = explode(":", $conf->global->MAIN_INFO_SOCIETE_COUNTRY); +$idpays = $p[0]; + +$sql = "SELECT f.rowid, f.ref, f.type, f.datef as df, f.libelle,"; +$sql .= " fd.rowid as fdid, fd.description, fd.total_ttc, fd.tva_tx, fd.total_ht, fd.tva as total_tva, fd.product_type,"; +$sql .= " s.rowid as socid, s.nom as name, s.code_compta_fournisseur, s.fournisseur,"; +$sql .= " s.code_compta_fournisseur, p.accountancy_code_buy , ct.accountancy_code_buy as account_tva, aa.rowid as fk_compte, aa.account_number as compte, aa.label as label_compte"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facture_fourn_det fd"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_tva ct ON fd.tva_tx = ct.taux AND ct.fk_pays = '" . $idpays . "'"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product p ON p.rowid = fd.fk_product"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accountingaccount aa ON aa.rowid = fd.fk_code_ventilation"; +$sql .= " JOIN " . MAIN_DB_PREFIX . "facture_fourn f ON f.rowid = fd.fk_facture_fourn"; +$sql .= " JOIN " . MAIN_DB_PREFIX . "societe s ON s.rowid = f.fk_soc"; +$sql .= " WHERE f.fk_statut > 0 "; +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = " . $conf->entity; +} +if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) + $sql .= " AND f.type IN (0,1,2)"; +else + $sql .= " AND f.type IN (0,1,2,3)"; +if ($date_start && $date_end) + $sql .= " AND f.datef >= '" . $db->idate($date_start) . "' AND f.datef <= '" . $db->idate($date_end) . "'"; +$sql .= " ORDER BY f.datef"; + +dol_syslog('accountingex/journal/purchasesjournal.php:: $sql=' . $sql); +$result = $db->query($sql); +if ($result) { + $num = $db->num_rows($result); + // les variables + $cptfour = (! empty($conf->global->COMPTA_ACCOUNT_SUPPLIER)) ? $conf->global->COMPTA_ACCOUNT_SUPPLIER : $langs->trans("CodeNotDef"); + $cpttva = (! empty($conf->global->COMPTA_VAT_ACCOUNT)) ? $conf->global->COMPTA_VAT_ACCOUNT : $langs->trans("CodeNotDef"); + + $tabfac = array (); + $tabht = array (); + $tabtva = array (); + $tabttc = array (); + $tabcompany = array (); + + $i = 0; + while ( $i < $num ) { + $obj = $db->fetch_object($result); + // contrôles + $compta_soc = (! empty($obj->code_compta_fournisseur)) ? $obj->code_compta_fournisseur : $cptfour; + $compta_prod = $obj->compte; + if (empty($compta_prod)) { + if ($obj->product_type == 0) + $compta_prod = (! empty($conf->global->COMPTA_PRODUCT_BUY_ACCOUNT)) ? $conf->global->COMPTA_PRODUCT_BUY_ACCOUNT : $langs->trans("CodeNotDef"); + else + $compta_prod = (! empty($conf->global->COMPTA_SERVICE_BUY_ACCOUNT)) ? $conf->global->COMPTA_SERVICE_BUY_ACCOUNT : $langs->trans("CodeNotDef"); + } + $compta_tva = (! empty($obj->account_tva) ? $obj->account_tva : $cpttva); + + $tabfac[$obj->rowid]["date"] = $obj->df; + $tabfac[$obj->rowid]["ref"] = $obj->ref; + $tabfac[$obj->rowid]["type"] = $obj->type; + $tabfac[$obj->rowid]["description"] = $obj->description; + $tabfac[$obj->rowid]["fk_facturefourndet"] = $obj->fdid; + $tabttc[$obj->rowid][$compta_soc] += $obj->total_ttc; + $tabht[$obj->rowid][$compta_prod] += $obj->total_ht; + $tabtva[$obj->rowid][$compta_tva] += $obj->total_tva; + $tabcompany[$obj->rowid] = array ( + 'id' => $obj->socid, + 'name' => $obj->name, + 'code_fournisseur' => $obj->code_compta_fournisseur + ); + + $i ++; + } +} else { + dol_print_error($db); +} + +/* + * Actions +*/ +// Bookkeeping Write +if ($action == 'writebookkeeping') { + $now = dol_now(); + + foreach ( $tabfac as $key => $val ) { + foreach ( $tabttc[$key] as $k => $mt ) { + // get compte id and label + + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->date_create = $now; + $bookkeeping->doc_type = 'supplier_invoice'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_facturefourndet"]; + $bookkeeping->code_tiers = $tabcompany[$key]['code_fournisseur']; + $bookkeeping->label_compte = $tabcompany[$key]['name']; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_SUPPLIER; + $bookkeeping->montant = $mt; + $bookkeeping->sens = ($mt >= 0) ? 'C' : 'D'; + $bookkeeping->debit = ($mt <= 0) ? $mt : 0; + $bookkeeping->credit = ($mt > 0) ? $mt : 0; + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL; + + $bookkeeping->create(); + } + + // Product / Service + foreach ( $tabht[$key] as $k => $mt ) { + if ($mt) { + // get compte id and label + $compte = new AccountingAccount($db); + if ($compte->fetch(null, $k)) { + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->date_create = $now; + $bookkeeping->doc_type = 'supplier_invoice'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_facturefourndet"]; + $bookkeeping->code_tiers = ''; + $bookkeeping->label_compte = dol_trunc($val["description"], 128); + $bookkeeping->numero_compte = $k; + $bookkeeping->montant = $mt; + $bookkeeping->sens = ($mt < 0) ? 'C' : 'D'; + $bookkeeping->debit = ($mt > 0) ? $mt : 0; + $bookkeeping->credit = ($mt <= 0) ? $mt : 0; + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL; + + $bookkeeping->create(); + } + } + } + + // VAT + // var_dump($tabtva); + foreach ( $tabtva[$key] as $k => $mt ) { + if ($mt) { + // get compte id and label + + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->date_create = $now; + $bookkeeping->doc_type = 'supplier_invoice'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_facturefourndet"]; + $bookkeeping->code_tiers = ''; + $bookkeeping->label_compte = $langs->trans("VAT"); + $bookkeeping->numero_compte = $k; + $bookkeeping->montant = $mt; + $bookkeeping->sens = ($mt < 0) ? 'C' : 'D'; + $bookkeeping->debit = ($mt > 0) ? $mt : 0; + $bookkeeping->credit = ($mt <= 0) ? $mt : 0; + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL; + + $bookkeeping->create(); + } + } + } +} + +// export csv + +if ($action == 'export_csv') { + $sep = $conf->global->ACCOUNTINGEX_SEPARATORCSV; + + header('Content-Type: text/csv'); + header('Content-Disposition: attachment;filename=journal_achats.csv'); + + if ($conf->global->ACCOUNTINGEX_MODELCSV == 1) // Modèle Export Cegid Expert + { + foreach ( $tabfac as $key => $val ) { + $date = dol_print_date($db->jdate($val["date"]), '%d%m%Y'); + + // Product / Service + foreach ( $tabht[$key] as $k => $mt ) { + $companystatic->id = $tabcompany[$key]['id']; + $companystatic->name = $tabcompany[$key]['name']; + $companystatic->client = $tabcompany[$key]['code_client']; + + if ($mt) { + print $date . $sep; + print $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL . $sep; + print length_accountg(html_entity_decode($k)) . $sep; + print $sep; + print ($mt < 0 ? 'C' : 'D') . $sep; + print ($mt <= 0 ? price(- $mt) : $mt) . $sep; + print dol_trunc($val["description"], 32) . $sep; + print $val["ref"]; + print "\n"; + } + } + + // VAT + // var_dump($tabtva); + foreach ( $tabtva[$key] as $k => $mt ) { + if ($mt) { + print $date . $sep; + print $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL . $sep; + print length_accountg(html_entity_decode($k)) . $sep; + print $sep; + print ($mt < 0 ? 'C' : 'D') . $sep; + print ($mt <= 0 ? price(- $mt) : $mt) . $sep; + print $langs->trans("VAT") . $sep; + print $val["ref"]; + print "\n"; + } + } + print $date . $sep; + print $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL . $sep; + print length_accountg($conf->global->COMPTA_ACCOUNT_SUPPLIER) . $sep; + + foreach ( $tabttc[$key] as $k => $mt ) { + print length_accounta(html_entity_decode($k)) . $sep; + print ($mt < 0 ? 'D' : 'C') . $sep; + print ($mt <= 0 ? price(- $mt) : $mt) . $sep; + print utf8_decode($companystatic->name) . $sep; + print $val["ref"]; + } + print "\n"; + } + } else // Modèle Export Classique + { + foreach ( $tabfac as $key => $val ) { + $date = dol_print_date($db->jdate($val["date"]), 'day'); + + $companystatic->id = $tabcompany[$key]['id']; + $companystatic->name = $tabcompany[$key]['name']; + $companystatic->client = $tabcompany[$key]['code_client']; + + // Product / Service + foreach ( $tabht[$key] as $k => $mt ) { + if ($mt) { + print '"' . $date . '"' . $sep; + print '"' . $val["ref"] . '"' . $sep; + print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; + print '"' . dol_trunc($val["description"], 32) . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"'; + print "\n"; + } + } + // VAT + // var_dump($tabtva); + foreach ( $tabtva[$key] as $k => $mt ) { + if ($mt) { + print '"' . $date . '"' . $sep; + print '"' . $val["ref"] . '"' . $sep; + print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; + print '"' . $langs->trans("VAT") . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"'; + print "\n"; + } + } + + // Third party + print '"' . $date . '"' . $sep; + print '"' . $val["ref"] . '"' . $sep; + foreach ( $tabttc[$key] as $k => $mt ) { + print '"' . length_accounta(html_entity_decode($k)) . '"' . $sep; + print '"' . utf8_decode($companystatic->name) . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"'; + } + print "\n"; + } + } +} else { + + llxHeader('', '', ''); + + $form = new Form($db); + + $nom = $langs->trans("PurchasesJournal"); + $nomlink = ''; + $periodlink = ''; + $exportlink = ''; + $builddate = time(); + $description = $langs->trans("DescPurchasesJournal") . '
'; + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) + $description .= $langs->trans("DepositsAreNotIncluded"); + else + $description .= $langs->trans("DepositsAreIncluded"); + $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); + report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( + 'action' => '' + )); + + print ''; + + print ''; + + print ' + '; + + /* + * Show result array + */ + print '

'; + + $i = 0; + print ""; + print ""; + // /print ""; + print ""; + print ""; + print ""; + print ""; + print "\n"; + + $var = true; + $r = ''; + + $invoicestatic = new FactureFournisseur($db); + $companystatic = new Fournisseur($db); + + foreach ( $tabfac as $key => $val ) { + $invoicestatic->id = $key; + $invoicestatic->ref = $val["ref"]; + $invoicestatic->type = $val["type"]; + $invoicestatic->description = html_entity_decode(dol_trunc($val["description"], 32)); + + $date = dol_print_date($db->jdate($val["date"]), 'day'); + + // Product / Service + foreach ( $tabht[$key] as $k => $mt ) { + if ($mt) { + print ""; + // print ""; + print ""; + print ""; + print ""; + print ""; + print '"; + print '"; + print ""; + } + } + // VAT + // var_dump($tabtva); + foreach ( $tabtva[$key] as $k => $mt ) { + if ($mt) { + print ""; + // print ""; + print ""; + print ""; + print ""; + print '"; + print '"; + print ""; + } + } + print ""; + + // Third party + // print ""; + print ""; + print ""; + + foreach ( $tabttc[$key] as $k => $mt ) { + $companystatic->id = $tabcompany[$key]['id']; + $companystatic->name = $tabcompany[$key]['name']; + + print ""; + print '"; + print '"; + } + print ""; + + $var = ! $var; + } + + print "
".$langs->trans("JournalNum")."" . $langs->trans("Date") . "" . $langs->trans("Piece") . ' (' . $langs->trans("InvoiceRef") . ")" . $langs->trans("Account") . "" . $langs->trans("Type") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
".$conf->global->COMPTA_JOURNAL_BUY."" . $date . "" . $invoicestatic->getNomUrl(1) . "" . length_accountg($k) . "" . $invoicestatic->description . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "
".$conf->global->COMPTA_JOURNAL_BUY."" . $date . "" . $invoicestatic->getNomUrl(1) . "" . length_accountg($k) . "" . $langs->trans("VAT") . "' . ($mt >= 0 ? price($mt) : '') . "' . ($mt < 0 ? price(- $mt) : '') . "
".$conf->global->COMPTA_JOURNAL_BUY."" . $date . "" . $invoicestatic->getNomUrl(1) . "" . length_accounta($k); + print "" . $langs->trans("ThirdParty"); + print ' (' . $companystatic->getNomUrl(0, 'supplier', 16) . ')'; + print "' . ($mt < 0 ? - price(- $mt) : '') . "' . ($mt >= 0 ? price($mt) : '') . "
"; + + // End of page + llxFooter(); +} +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php new file mode 100644 index 00000000000..dd249db3b13 --- /dev/null +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -0,0 +1,490 @@ + + * Copyright (C) 2007-2010 Jean Heimburger + * Copyright (C) 2011 Juanjo Menent + * Copyright (C) 2012 Regis Houssin + * Copyright (C) 2013 Christophe Battarel + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/journal/sellsjournal.php + * \ingroup Accounting Expert + * \brief Page with sells journal + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/core/lib/report.lib.php"); +dol_include_once("/core/lib/date.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; +dol_include_once("/compta/facture/class/facture.class.php"); +dol_include_once("/societe/class/client.class.php"); +dol_include_once("/accountingex/class/bookkeeping.class.php"); +dol_include_once("/accountingex/class/accountingaccount.class.php"); + +// Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +$date_startmonth = GETPOST('date_startmonth'); +$date_startday = GETPOST('date_startday'); +$date_startyear = GETPOST('date_startyear'); +$date_endmonth = GETPOST('date_endmonth'); +$date_endday = GETPOST('date_endday'); +$date_endyear = GETPOST('date_endyear'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +$action = GETPOST('action'); + +/* + * View + */ + +$year_current = strftime("%Y", dol_now()); +$pastmonth = strftime("%m", dol_now()) - 1; +$pastmonthyear = $year_current; +if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; +} + +$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); +$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); + +if (empty($date_start) || empty($date_end)) // We define date_start and date_end +{ + $date_start = dol_get_first_day($pastmonthyear, $pastmonth, false); + $date_end = dol_get_last_day($pastmonthyear, $pastmonth, false); +} + +$p = explode(":", $conf->global->MAIN_INFO_SOCIETE_COUNTRY); +$idpays = $p[0]; + +$sql = "SELECT f.rowid, f.facnumber, f.type, f.datef as df, f.ref_client,"; +$sql .= " fd.rowid as fdid, fd.description, fd.product_type, fd.total_ht, fd.total_tva, fd.tva_tx, fd.total_ttc,"; +$sql .= " s.rowid as socid, s.nom as name, s.code_compta, s.code_client,"; +$sql .= " p.rowid as pid, p.ref as pref, p.accountancy_code_sell, aa.rowid as fk_compte, aa.account_number as compte, aa.label as label_compte, "; +$sql .= " ct.accountancy_code_sell as account_tva"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facturedet fd"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product p ON p.rowid = fd.fk_product"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accountingaccount aa ON aa.rowid = fd.fk_code_ventilation"; +$sql .= " JOIN " . MAIN_DB_PREFIX . "facture f ON f.rowid = fd.fk_facture"; +$sql .= " JOIN " . MAIN_DB_PREFIX . "societe s ON s.rowid = f.fk_soc"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_tva ct ON fd.tva_tx = ct.taux AND ct.fk_pays = '" . $idpays . "'"; +$sql .= " WHERE fd.fk_code_ventilation > 0 "; +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = " . $conf->entity; +} +$sql .= " AND f.fk_statut > 0"; +if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) + $sql .= " AND f.type IN (0,1,2)"; +else + $sql .= " AND f.type IN (0,1,2,3)"; +$sql .= " AND fd.product_type IN (0,1)"; +if ($date_start && $date_end) + $sql .= " AND f.datef >= '" . $db->idate($date_start) . "' AND f.datef <= '" . $db->idate($date_end) . "'"; +$sql .= " ORDER BY f.datef"; + +dol_syslog('accountingex/journal/sellsjournal.php:: $sql=' . $sql); +$result = $db->query($sql); +if ($result) { + $tabfac = array (); + $tabht = array (); + $tabtva = array (); + $tabttc = array (); + $tabcompany = array (); + + $num = $db->num_rows($result); + $i = 0; + $resligne = array (); + while ( $i < $num ) { + $obj = $db->fetch_object($result); + // les variables + $cptcli = (! empty($conf->global->COMPTA_ACCOUNT_CUSTOMER)) ? $conf->global->COMPTA_ACCOUNT_CUSTOMER : $langs->trans("CodeNotDef"); + $compta_soc = (! empty($obj->code_compta)) ? $obj->code_compta : $cptcli; + + $compta_prod = $obj->compte; + if (empty($compta_prod)) { + if ($obj->product_type == 0) + $compta_prod = (! empty($conf->global->COMPTA_PRODUCT_SOLD_ACCOUNT)) ? $conf->global->COMPTA_PRODUCT_SOLD_ACCOUNT : $langs->trans("CodeNotDef"); + else + $compta_prod = (! empty($conf->global->COMPTA_SERVICE_SOLD_ACCOUNT)) ? $conf->global->COMPTA_SERVICE_SOLD_ACCOUNT : $langs->trans("CodeNotDef"); + } + $cpttva = (! empty($conf->global->COMPTA_VAT_ACCOUNT)) ? $conf->global->COMPTA_VAT_ACCOUNT : $langs->trans("CodeNotDef"); + $compta_tva = (! empty($obj->account_tva) ? $obj->account_tva : $cpttva); + + // la ligne facture + $tabfac[$obj->rowid]["date"] = $obj->df; + $tabfac[$obj->rowid]["ref"] = $obj->facnumber; + $tabfac[$obj->rowid]["type"] = $obj->type; + $tabfac[$obj->rowid]["description"] = $obj->description; + $tabfac[$obj->rowid]["fk_facturedet"] = $obj->fdid; + if (! isset($tabttc[$obj->rowid][$compta_soc])) + $tabttc[$obj->rowid][$compta_soc] = 0; + if (! isset($tabht[$obj->rowid][$compta_prod])) + $tabht[$obj->rowid][$compta_prod] = 0; + if (! isset($tabtva[$obj->rowid][$compta_tva])) + $tabtva[$obj->rowid][$compta_tva] = 0; + $tabttc[$obj->rowid][$compta_soc] += $obj->total_ttc; + $tabht[$obj->rowid][$compta_prod] += $obj->total_ht; + $tabtva[$obj->rowid][$compta_tva] += $obj->total_tva; + $tabcompany[$obj->rowid] = array ( + 'id' => $obj->socid, + 'name' => $obj->name, + 'code_client' => $obj->code_compta + ); + + $i ++; + } +} else { + dol_print_error($db); +} + +/* + * Action + */ + +// Bookkeeping Write +if ($action == 'writebookkeeping') { + $now = dol_now(); + + foreach ( $tabfac as $key => $val ) { + foreach ( $tabttc[$key] as $k => $mt ) { + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->date_create = $now; + $bookkeeping->doc_type = 'customer_invoice'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_facturedet"]; + $bookkeeping->code_tiers = $tabcompany[$key]['code_client']; + $bookkeeping->numero_compte = $conf->global->COMPTA_ACCOUNT_CUSTOMER; + $bookkeeping->label_compte = $tabcompany[$key]['name']; + $bookkeeping->montant = $mt; + $bookkeeping->sens = ($mt >= 0) ? 'D' : 'C'; + $bookkeeping->debit = ($mt >= 0) ? $mt : 0; + $bookkeeping->credit = ($mt < 0) ? $mt : 0; + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_SELL_JOURNAL; + + $bookkeeping->create(); + } + + // Product / Service + foreach ( $tabht[$key] as $k => $mt ) { + if ($mt) { + // get compte id and label + $compte = new AccountingAccount($db); + if ($compte->fetch(null, $k)) { + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->date_create = $now; + $bookkeeping->doc_type = 'customer_invoice'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_facturedet"]; + $bookkeeping->code_tiers = ''; + $bookkeeping->numero_compte = $k; + $bookkeeping->label_compte = dol_trunc($val["description"], 128); + $bookkeeping->montant = $mt; + $bookkeeping->sens = ($mt < 0) ? 'D' : 'C'; + $bookkeeping->debit = ($mt < 0) ? $mt : 0; + $bookkeeping->credit = ($mt >= 0) ? $mt : 0; + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_SELL_JOURNAL; + + $bookkeeping->create(); + } + } + } + + // VAT + // var_dump($tabtva); + foreach ( $tabtva[$key] as $k => $mt ) { + if ($mt) { + $bookkeeping = new BookKeeping($db); + $bookkeeping->doc_date = $val["date"]; + $bookkeeping->doc_ref = $val["ref"]; + $bookkeeping->date_create = $now; + $bookkeeping->doc_type = 'customer_invoice'; + $bookkeeping->fk_doc = $key; + $bookkeeping->fk_docdet = $val["fk_facturedet"]; + $bookkeeping->fk_compte = $compte->id; + $bookkeeping->code_tiers = ''; + $bookkeeping->numero_compte = $k; + $bookkeeping->label_compte = $langs->trans("VAT"); + $bookkeeping->montant = $mt; + $bookkeeping->sens = ($mt < 0) ? 'D' : 'C'; + $bookkeeping->debit = ($mt < 0) ? $mt : 0; + $bookkeeping->credit = ($mt >= 0) ? $mt : 0; + $bookkeeping->code_journal = $conf->global->ACCOUNTINGEX_SELL_JOURNAL; + + $bookkeeping->create(); + } + } + } +} +// export csv +if ($action == 'export_csv') { + $sep = $conf->global->ACCOUNTINGEX_SEPARATORCSV; + + header('Content-Type: text/csv'); + header('Content-Disposition: attachment;filename=journal_ventes.csv'); + + $companystatic = new Client($db); + + if ($conf->global->ACCOUNTINGEX_MODELCSV == 1) // Modèle Export Cegid Expert + { + foreach ( $tabfac as $key => $val ) { + $companystatic->id = $tabcompany[$key]['id']; + $companystatic->name = $tabcompany[$key]['name']; + $companystatic->client = $tabcompany[$key]['code_client']; + + $date = dol_print_date($db->jdate($val["date"]), '%d%m%Y'); + + print $date . $sep; + print $conf->global->ACCOUNTINGEX_SELL_JOURNAL . $sep; + print length_accountg($conf->global->COMPTA_ACCOUNT_CUSTOMER) . $sep; + foreach ( $tabttc[$key] as $k => $mt ) { + print length_accounta(html_entity_decode($k)) . $sep; + print ($mt < 0 ? 'C' : 'D') . $sep; + print ($mt <= 0 ? price(- $mt) : $mt) . $sep; + print utf8_decode($companystatic->name) . $sep; + } + print $val["ref"]; + print "\n"; + + // Product / Service + foreach ( $tabht[$key] as $k => $mt ) { + if ($mt) { + print $date . $sep; + print $conf->global->ACCOUNTINGEX_SELL_JOURNAL . $sep; + print length_accountg(html_entity_decode($k)) . $sep; + print $sep; + print ($mt < 0 ? 'D' : 'C') . $sep; + print ($mt <= 0 ? price(- $mt) : $mt) . $sep; + print dol_trunc($val["description"], 32) . $sep; + print $val["ref"]; + print "\n"; + } + } + // TVA + foreach ( $tabtva[$key] as $k => $mt ) { + if ($mt) { + print $date . $sep; + print $conf->global->ACCOUNTINGEX_SELL_JOURNAL . $sep; + print length_accountg(html_entity_decode($k)) . $sep; + print $sep; + print ($mt < 0 ? 'D' : 'C') . $sep; + print ($mt <= 0 ? price(- $mt) : $mt) . $sep; + print $langs->trans("VAT") . $sep; + print $val["ref"]; + print "\n"; + } + } + } + } else // Modèle Export Classique + { + foreach ( $tabfac as $key => $val ) { + $companystatic->id = $tabcompany[$key]['id']; + $companystatic->name = $tabcompany[$key]['name']; + $companystatic->client = $tabcompany[$key]['code_client']; + + $date = dol_print_date($db->jdate($val["date"]), 'day'); + print '"' . $date . '"' . $sep; + print '"' . $val["ref"] . '"' . $sep; + foreach ( $tabttc[$key] as $k => $mt ) { + print '"' . length_accounta(html_entity_decode($k)) . '"' . $sep; + print '"' . utf8_decode($companystatic->name) . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"'; + } + print "\n"; + + // Product / Service + foreach ( $tabht[$key] as $k => $mt ) { + if ($mt) { + print '"' . $date . '"' . $sep; + print '"' . $val["ref"] . '"' . $sep; + print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; + print '"' . dol_trunc($val["description"], 32) . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"'; + print "\n"; + } + } + + // VAT + // var_dump($tabtva); + foreach ( $tabtva[$key] as $k => $mt ) { + if ($mt) { + print '"' . $date . '"' . $sep; + print '"' . $val["ref"] . '"' . $sep; + print '"' . length_accountg(html_entity_decode($k)) . '"' . $sep; + print '"' . $langs->trans("VAT") . '"' . $sep; + print '"' . ($mt < 0 ? price(- $mt) : '') . '"' . $sep; + print '"' . ($mt >= 0 ? price($mt) : '') . '"'; + print "\n"; + } + } + } + } +} else { + + $form = new Form($db); + + llxHeader('', $langs->trans("SellsJournal")); + + $nom = $langs->trans("SellsJournal"); + $nomlink = ''; + $periodlink = ''; + $exportlink = ''; + $builddate = time(); + $description = $langs->trans("DescSellsJournal") . '
'; + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) + $description .= $langs->trans("DepositsAreNotIncluded"); + else + $description .= $langs->trans("DepositsAreIncluded"); + $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); + report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( + 'action' => '' + )); + + print ''; + + print ''; + + print ' + '; + + /* + * Show result array + */ + print '

'; + + $i = 0; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print "\n"; + + $var = true; + $r = ''; + + $invoicestatic = new Facture($db); + $companystatic = new Client($db); + + foreach ( $tabfac as $key => $val ) { + $invoicestatic->id = $key; + $invoicestatic->ref = $val["ref"]; + $invoicestatic->type = $val["type"]; + $invoicestatic->description = html_entity_decode(dol_trunc($val["description"], 32)); + + $date = dol_print_date($db->jdate($val["date"]), 'day'); + + print ""; + + // Third party + // print ""; + print ""; + print ""; + foreach ( $tabttc[$key] as $k => $mt ) { + $companystatic->id = $tabcompany[$key]['id']; + $companystatic->name = $tabcompany[$key]['name']; + $companystatic->client = $tabcompany[$key]['code_client']; + print ""; + print ""; + } + print ""; + + // Product / Service + foreach ( $tabht[$key] as $k => $mt ) { + if ($mt) { + print ""; + // print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + } + } + + // VAT + // var_dump($tabtva); + foreach ( $tabtva[$key] as $k => $mt ) { + if ($mt) { + print ""; + // print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + } + } + + $var = ! $var; + } + + print "
" . $langs->trans("Date") . "" . $langs->trans("Piece") . ' (' . $langs->trans("InvoiceRef") . ")" . $langs->trans("Account") . "" . $langs->trans("Type") . "" . $langs->trans("Debit") . "" . $langs->trans("Credit") . "
".$conf->global->COMPTA_JOURNAL_SELL."" . $date . "" . $invoicestatic->getNomUrl(1) . "" . length_accounta($k); + print "" . $langs->trans("ThirdParty"); + print ' (' . $companystatic->getNomUrl(0, 'customer', 16) . ')'; + print "" . ($mt >= 0 ? price($mt) : '') . "" . ($mt < 0 ? price(- $mt) : '') . "
".$conf->global->COMPTA_JOURNAL_SELL."" . $date . "" . $invoicestatic->getNomUrl(1) . "" . length_accountg($k) . "" . $invoicestatic->description . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "
".$conf->global->COMPTA_JOURNAL_SELL."" . $date . "" . $invoicestatic->getNomUrl(1) . "" . length_accountg($k) . "" . $langs->trans("VAT") . "" . ($mt < 0 ? price(- $mt) : '') . "" . ($mt >= 0 ? price($mt) : '') . "
"; + + // End of page + llxFooter(); +} +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/supplier/fiche.php b/htdocs/accountancy/supplier/fiche.php new file mode 100644 index 00000000000..1ad626e136f --- /dev/null +++ b/htdocs/accountancy/supplier/fiche.php @@ -0,0 +1,149 @@ + + * Copyright (C) 2005 Simon TOSSER + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2013-2014 Olivier Geffroy + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +/** + * \file accountingex/supplier/fiche.php + * \ingroup Accountign Expert + * \brief Page fiche ventilation + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/fourn/class/fournisseur.facture.class.php"); +dol_include_once("/accountingex/class/html.formventilation.class.php"); + +// Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +$action = GETPOST('action'); +$id = GETPOST('id', 'int'); +$codeventil = GETPOST('codeventil'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +if ($action == 'ventil' && $user->rights->accountingex->access) { + $sql = " UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det"; + $sql .= " SET fk_code_ventilation = " . $codeventil; + $sql .= " WHERE rowid = " . $id; + + dol_syslog('accountingex/journal/sellsjournal.php:: $sql=' . $sql); + + $resql = $db->query($sql); + if (! $resql) { + setEventMessage($db->lasterror(), 'errors'); + } +} + +/* + * View + */ +llxHeader("", "", "FicheVentilation"); + +if ($cancel == $langs->trans("Cancel")) { + $action = ''; +} + +/* + * Create + */ +$form = new Form($db); +$facturefournisseur_static = new FactureFournisseur($db); +$formventilation = new FormVentilation($db); + +if ($_GET["id"]) { + $sql = "SELECT f.ref as facnumber, f.rowid as facid, l.fk_product, l.description, l.rowid, l.fk_code_ventilation, "; + $sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label"; + $sql .= ", aa.account_number, aa.label"; + $sql .= " FROM " . MAIN_DB_PREFIX . "facture_fourn_det as l"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accountingaccount as aa ON l.fk_code_ventilation = aa.rowid"; + $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "facture_fourn as f ON f.rowid = l.fk_facture_fourn "; + $sql .= " WHERE f.fk_statut > 0 AND l.rowid = " . $id; + if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; + } + + $result = $db->query($sql); + if ($result) { + $num_lignes = $db->num_rows($result); + $i = 0; + + if ($num_lignes) { + $objp = $db->fetch_object($result); + + print '
' . "\n"; + print ''; + print ''; + + print_fiche_titre($langs->trans("Ventilation")); + + print ''; + + // ref invoice + print ''; + $facturefournisseur_static->ref = $objp->facnumber; + $facturefournisseur_static->id = $objp->facid; + print ''; + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
' . $langs->trans("BillsSuppliers") . '' . $facturefournisseur_static->getNomUrl(1) . '
Ligne' . stripslashes(nl2br($objp->description)) . '
' . $langs->trans("ProductLabel") . '' . dol_trunc($objp->product_label, 24) . '
' . $langs->trans("Account") . ''; + print $objp->account_number . '-' . $objp->label; + print '
' . $langs->trans("NewAccount") . ''; + print $formventilation->select_account($objp->fk_code_ventilation, 'codeventil', 1); + print '
 
'; + print '
'; + } else { + print "Error 1"; + } + } else { + print "Error 2"; + } +} else { + print "Error ID incorrect"; +} + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/supplier/index.html b/htdocs/accountancy/supplier/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php new file mode 100644 index 00000000000..a108415aa56 --- /dev/null +++ b/htdocs/accountancy/supplier/index.php @@ -0,0 +1,272 @@ + + * Copyright (C) 2004 Laurent Destailleur + * Copyright (C) 2005 Simon TOSSER + * Copyright (C) 2013 Olivier Geffroy + * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013-2014 Alexandre Spangaro + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/supplier/index.php + * \ingroup Accounting Expert + * \brief Page accueil ventilation + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/core/lib/date.lib.php"); + +// Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + + // Filter +$year = $_GET["year"]; +if ($year == 0) { + $year_current = strftime("%Y", time()); + $year_start = $year_current; +} else { + $year_current = $year; + $year_start = $year; +} + +// Validate History +$action = GETPOST('action'); +if ($action == 'validatehistory') { + + $error = 0; + $db->begin(); + + if ($db->type == 'pgsql') { + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det as fd"; + $sql1 .= " SET fd.fk_code_ventilation = accnt.rowid"; + $sql1 .= " FROM " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accountingaccount as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; + $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS; + $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_buy=accnt.account_number"; + $sql1 .= " AND fd.fk_code_ventilation = 0"; + } else { + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det as fd, " . MAIN_DB_PREFIX . "product as p, " . MAIN_DB_PREFIX . "accountingaccount as accnt , " . MAIN_DB_PREFIX . "accounting_system as syst"; + $sql1 .= " SET fd.fk_code_ventilation = accnt.rowid"; + $sql1 .= " WHERE fd.fk_product = p.rowid AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid=" . $conf->global->CHARTOFACCOUNTS; + $sql1 .= " AND accnt.active = 1 AND p.accountancy_code_buy=accnt.account_number"; + $sql1 .= " AND fd.fk_code_ventilation = 0"; + } + + $resql1 = $db->query($sql1); + if (! $resql1) { + $error ++; + $db->rollback(); + setEventMessage($db->lasterror(), 'errors'); + } else { + $db->commit(); + setEventMessage($langs->trans('Dispatched'), 'mesgs'); + } +} + +/* + * View + */ + +llxHeader('', $langs->trans("SuppliersVentilation")); + +$textprevyear = "" . img_previous() . ""; +$textnextyear = " " . img_next() . ""; + +print_fiche_titre($langs->trans("VentilationComptableSupplier") . " " . $textprevyear . " " . $langs->trans("Year") . " " . $year_start . " " . $textnextyear); + +print '' . $langs->trans("DescVentilSupplier") . ''; +print ''; + +$y = $year_current; + +$var = true; + +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$sql = "SELECT IF(aa.account_number IS NULL, 'Non pointe', aa.account_number) AS 'code comptable',"; +$sql .= " IF(aa.label IS NULL, 'Non pointe', aa.label) AS 'Intitulé',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=1,ffd.total_ht,0)),2) AS 'Janvier',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=2,ffd.total_ht,0)),2) AS 'Fevrier',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=3,ffd.total_ht,0)),2) AS 'Mars',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=4,ffd.total_ht,0)),2) AS 'Avril',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=5,ffd.total_ht,0)),2) AS 'Mai',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=6,ffd.total_ht,0)),2) AS 'Juin',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=7,ffd.total_ht,0)),2) AS 'Juillet',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=8,ffd.total_ht,0)),2) AS 'Aout',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=9,ffd.total_ht,0)),2) AS 'Septembre',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=10,ffd.total_ht,0)),2) AS 'Octobre',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=11,ffd.total_ht,0)),2) AS 'Novembre',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=12,ffd.total_ht,0)),2) AS 'Decembre',"; +$sql .= " ROUND(SUM(ffd.total_ht),2) as 'Total'"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facture_fourn_det as ffd"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture_fourn as ff ON ff.rowid = ffd.fk_facture_fourn"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accountingaccount as aa ON aa.rowid = ffd.fk_code_ventilation"; +$sql .= " WHERE ff.datef >= '" . $db->idate(dol_get_first_day($y, 1, false)) . "'"; +$sql .= " AND ff.datef <= '" . $db->idate(dol_get_last_day($y, 12, false)) . "'"; +$sql .= " AND ff.fk_statut > 0 "; + +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND ff.entity = '" . $conf->entity . "'"; +} + +$sql .= " GROUP BY ffd.fk_code_ventilation"; + +dol_syslog('/accountingex/supplier/index.php:: sql=' . $sql); +$resql = $db->query($sql); +if ($resql) { + $i = 0; + $num = $db->num_rows($resql); + + while ( $i < $num ) { + + $row = $db->fetch_row($resql); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $i ++; + } + $db->free($resql); +} else { + print $db->lasterror(); // affiche la derniere erreur sql +} +print "
' . $langs->trans("Account") . '' . $langs->trans("Intitule") . '' . $langs->trans("JanuaryMin") . '' . $langs->trans("FebruaryMin") . '' . $langs->trans("MarchMin") . '' . $langs->trans("AprilMin") . '' . $langs->trans("MayMin") . '' . $langs->trans("JuneMin") . '' . $langs->trans("JulyMin") . '' . $langs->trans("AugustMin") . '' . $langs->trans("SeptemberMin") . '' . $langs->trans("OctoberMin") . '' . $langs->trans("NovemberMin") . '' . $langs->trans("DecemberMin") . '' . $langs->trans("Total") . '
' . $row[0] . '' . $row[1] . '' . price($row[2]) . '' . price($row[3]) . '' . price($row[4]) . '' . price($row[5]) . '' . price($row[6]) . '' . price($row[7]) . '' . price($row[8]) . '' . price($row[9]) . '' . price($row[10]) . '' . price($row[11]) . '' . price($row[12]) . '' . price($row[13]) . '' . price($row[14]) . '
\n"; + +print "
\n"; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$sql = "SELECT '" . $langs->trans("CAHTF") . "' AS 'Total',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=1,ffd.total_ht,0)),2) AS 'Janvier',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=2,ffd.total_ht,0)),2) AS 'Fevrier',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=3,ffd.total_ht,0)),2) AS 'Mars',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=4,ffd.total_ht,0)),2) AS 'Avril',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=5,ffd.total_ht,0)),2) AS 'Mai',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=6,ffd.total_ht,0)),2) AS 'Juin',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=7,ffd.total_ht,0)),2) AS 'Juillet',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=8,ffd.total_ht,0)),2) AS 'Aout',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=9,ffd.total_ht,0)),2) AS 'Septembre',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=10,ffd.total_ht,0)),2) AS 'Octobre',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=11,ffd.total_ht,0)),2) AS 'Novembre',"; +$sql .= " ROUND(SUM(IF(MONTH(ff.datef)=12,ffd.total_ht,0)),2) AS 'Decembre',"; +$sql .= " ROUND(SUM(ffd.total_ht),2) as 'Total'"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facture_fourn_det as ffd"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "facture_fourn as ff ON ff.rowid = ffd.fk_facture_fourn"; +$sql .= " WHERE ff.datef >= '" . $db->idate(dol_get_first_day($y, 1, false)) . "'"; +$sql .= " AND ff.datef <= '" . $db->idate(dol_get_last_day($y, 12, false)) . "'"; +$sql .= " AND ff.fk_statut > 0 "; + +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND ff.entity = '" . $conf->entity . "'"; +} + +dol_syslog('/accountingex/supplier/index.php:: sql=' . $sql); +$resql = $db->query($sql); +if ($resql) { + $i = 0; + $num = $db->num_rows($resql); + + while ( $i < $num ) { + $row = $db->fetch_row($resql); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + $i ++; + } + + $db->free($resql); +} else { + print $db->lasterror(); // show last sql error +} +print "
' . $langs->trans("Total") . '' . $langs->trans("JanuaryMin") . '' . $langs->trans("FebruaryMin") . '' . $langs->trans("MarchMin") . '' . $langs->trans("AprilMin") . '' . $langs->trans("MayMin") . '' . $langs->trans("JuneMin") . '' . $langs->trans("JulyMin") . '' . $langs->trans("AugustMin") . '' . $langs->trans("SeptemberMin") . '' . $langs->trans("OctoberMin") . '' . $langs->trans("NovemberMin") . '' . $langs->trans("DecemberMin") . '' . $langs->trans("Total") . '
' . $row[0] . '' . $row[1] . '' . price($row[2]) . '' . price($row[3]) . '' . price($row[4]) . '' . price($row[5]) . '' . price($row[6]) . '' . price($row[7]) . '' . price($row[8]) . '' . price($row[9]) . '' . price($row[10]) . '' . price($row[11]) . '' . price($row[12]) . '' . price($row[13]) . '
\n"; + +llxFooter(); +$db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/supplier/lignes.php b/htdocs/accountancy/supplier/lignes.php new file mode 100644 index 00000000000..d3d47b6b371 --- /dev/null +++ b/htdocs/accountancy/supplier/lignes.php @@ -0,0 +1,232 @@ + + * Copyright (C) 2005 Simon TOSSER + * Copyright (C) 2013-2014 Olivier Geffroy + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 Ari Elbaz (elarifr) + * Copyright (C) 2013-2014 Florian Henry a + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/supplier/lignes.php + * \ingroup Accounting Expert + * \brief Page of detail of the lines of ventilation of invoices suppliers + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + +// Class +dol_include_once("/accountingex/class/html.formventilation.class.php"); +dol_include_once("/fourn/class/fournisseur.facture.class.php"); +dol_include_once("/product/class/product.class.php"); +dol_include_once("/core/lib/date.lib.php"); + +// Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +$formventilation = new FormVentilation($db); + +$changeaccount = GETPOST('changeaccount'); + +$is_search = GETPOST('button_search_x'); + +if (is_array($changeaccount) && count($changeaccount) > 0 && empty($is_search)) { + $error = 0; + + $db->begin(); + + $sql1 = "UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det as l"; + $sql1 .= " SET l.fk_code_ventilation=" . GETPOST('account_parent'); + $sql1 .= ' WHERE l.rowid IN (' . implode(',', $changeaccount) . ')'; + + dol_syslog('accountingex/supplier/lignes.php::changeaccount 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'); + } +} + +/* + * View + */ + +llxHeader('', $langs->trans("SuppliersVentilation") . ' - ' . $langs->trans("Dispatched")); + +$page = $_GET["page"]; +if ($page < 0) + $page = 0; + +if (! empty($conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION)) { + $limit = $conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION; +} else if ($conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION <= 0) { + $limit = $conf->liste_limit; +} else { + $limit = $conf->liste_limit; +} + +$offset = $limit * $page; + +$sql = "SELECT f.ref as facnumber, f.rowid as facid, l.fk_product, l.description, l.total_ht , l.qty, l.rowid, l.tva_tx, aa.label, aa.account_number, "; +$sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facture_fourn as f"; +$sql .= " , " . MAIN_DB_PREFIX . "accountingaccount as aa"; +$sql .= " , " . MAIN_DB_PREFIX . "facture_fourn_det as l"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; +$sql .= " WHERE f.rowid = l.fk_facture_fourn and f.fk_statut >= 1 AND l.fk_code_ventilation <> 0 "; +$sql .= " AND aa.rowid = l.fk_code_ventilation"; +if (strlen(trim($_GET["search_facture"]))) { + $sql .= " AND f.facnumber like '%" . $_GET["search_facture"] . "%'"; +} +if (strlen(trim($_GET["search_ref"]))) { + $sql .= " AND p.ref like '%" . $_GET["search_ref"] . "%'"; +} +if (strlen(trim($_GET["search_label"]))) { + $sql .= " AND p.label like '%" . $_GET["search_label"] . "%'"; +} +if (strlen(trim($_GET["search_desc"]))) { + $sql .= " AND l.description like '%" . $_GET["search_desc"] . "%'"; +} +if (strlen(trim($_GET["search_account"]))) { + $sql .= " AND aa.account_number like '%" . $_GET["search_account"] . "%'"; +} +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; +} + +$sql .= " ORDER BY l.rowid"; +if ($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE > 0) { + $sql .= " DESC "; +} +$sql .= $db->plimit($limit + 1, $offset); + +dol_syslog('accountingex/supplier/lignes.php::list sql= ' . $sql1); +$result = $db->query($sql); + +if ($result) { + $num_lignes = $db->num_rows($result); + $i = 0; + + // TODO : print_barre_liste always use $conf->liste_limit and do not care about custom limit in list... + print_barre_liste($langs->trans("InvoiceLinesDone"), $page, "lignes.php", "", $sortfield, $sortorder, '', $num_lignes); + + print '' . $langs->trans("DescVentilDoneSupplier") . ''; + + print '
'; + print ''; + + print '

'. $langs->trans("ChangeAccount"); + print $formventilation->select_account(GETPOST('account_parent'), 'account_parent', 1); + print '
'; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $facturefournisseur_static = new FactureFournisseur($db); + $product_static = new Product($db); + + $var = True; + while ( $i < min($num_lignes, $limit) ) { + $objp = $db->fetch_object($result); + $var = ! $var; + $codeCompta = $objp->account_number . ' ' . $objp->label; + + print ""; + + // Ref Invoice + $facturefournisseur_static->ref = $objp->facnumber; + $facturefournisseur_static->id = $objp->facid; + print ''; + + // Ref Product + $product_static->ref = $objp->product_ref; + $product_static->id = $objp->product_id; + $product_static->type = $objp->type; + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print ''; + + print ""; + $i ++; + } +} else { + print $db->error(); +} + +print "
' . $langs->trans("Invoice") . '' . $langs->trans("Ref") . '' . $langs->trans("Label") . '' . $langs->trans("Description") . '' . $langs->trans("Amount") . '' . $langs->trans("Account") . '  
  '; + print ''; + print ' 
' . $facturefournisseur_static->getNomUrl(1) . ''; + if ($product_static->id) + print $product_static->getNomUrl(1); + else + print ' '; + print '' . dol_trunc($objp->product_label, 24) . '' . nl2br(dol_trunc($objp->description, 32)) . '' . price($objp->total_ht) . '' . $codeCompta . '' . $objp->rowid . ''; + print img_edit(); + print '
"; + +$db->close(); +llxFooter(); \ No newline at end of file diff --git a/htdocs/accountancy/supplier/liste.php b/htdocs/accountancy/supplier/liste.php new file mode 100644 index 00000000000..cbb7e06dab0 --- /dev/null +++ b/htdocs/accountancy/supplier/liste.php @@ -0,0 +1,227 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 Ari Elbaz (elarifr) + * Copyright (C) 2013-2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/supplier/liste.php + * \ingroup Accounting Expert + * \brief Page de ventilation des lignes de facture + */ + +// Dolibarr environment +$res = @include ("../main.inc.php"); +if (! $res && file_exists("../main.inc.php")) + $res = @include ("../main.inc.php"); +if (! $res && file_exists("../../main.inc.php")) + $res = @include ("../../main.inc.php"); +if (! $res && file_exists("../../../main.inc.php")) + $res = @include ("../../../main.inc.php"); +if (! $res) + die("Include of main fails"); + + // Class +dol_include_once("/fourn/class/fournisseur.facture.class.php"); +dol_include_once("/fourn/class/fournisseur.product.class.php"); +dol_include_once("/accountingex/class/html.formventilation.class.php"); + +// Langs +$langs->load("compta"); +$langs->load("bills"); +$langs->load("other"); +$langs->load("main"); +$langs->load("accountingex@accountingex"); + +$action = GETPOST('action'); +$codeventil = GETPOST('codeventil', 'array'); +$mesCasesCochees = GETPOST('mesCasesCochees', 'array'); + +// Security check +if ($user->societe_id > 0) + accessforbidden(); +if (! $user->rights->accountingex->access) + accessforbidden(); + +$formventilation = new FormVentilation($db); + +llxHeader('', $langs->trans("Ventilation")); + +/* + * Action + */ + +if ($action == 'ventil') { + print '
' . $langs->trans("Processing") . '...
'; + if ($_POST['codeventil'] && $_POST["mesCasesCochees"]) { + print '
' . count($_POST["mesCasesCochees"]) . ' ' . $langs->trans("SelectedLines") . '
'; + $mesCodesVentilChoisis = $codeventil; + $cpt = 0; + + foreach ( $mesCasesCochees as $maLigneCochee ) { + // print '
id selectionnee : '.$monChoix."
"; + $maLigneCourante = split("_", $maLigneCochee); + $monId = $maLigneCourante[0]; + $monNumLigne = $maLigneCourante[1]; + $monCompte = $mesCodesVentilChoisis[$monNumLigne]; + + $sql = " UPDATE " . MAIN_DB_PREFIX . "facture_fourn_det"; + $sql .= " SET fk_code_ventilation = " . $monCompte; + $sql .= " WHERE rowid = " . $monId; + + dol_syslog('accountingext/supplier/liste.php:: sql=' . $sql); + if ($db->query($sql)) { + print '
' . $langs->trans("Lineofinvoice") . ' ' . $monId . ' ' . $langs->trans("VentilatedinAccount") . ' : ' . $monCompte . '
'; + } else { + print '
' . $langs->trans("ErrorDB") . ' : ' . $langs->trans("Lineofinvoice") . ' ' . $monId . ' ' . $langs->trans("NotVentilatedinAccount") . ' : ' . $monCompte . '
' . $sql . '
'; + } + + $cpt ++; + } + } else { + print '
' . $langs->trans("AnyLineVentilate") . '
'; + } + print '
' . $langs->trans("EndProcessing") . '
'; +} + +/* + * Supplier Invoice Lines + * + */ +$page = GETPOST('page'); +if ($page < 0) + $page = 0; + +if (! empty($conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION)) { + $limit = $conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION; +} else if ($conf->global->ACCOUNTINGEX_LIMIT_LIST_VENTILATION <= 0) { + $limit = $conf->liste_limit; +} else { + $limit = $conf->liste_limit; +} + +$offset = $limit * $page; + +$sql = "SELECT f.ref, f.rowid as facid, f.ref_supplier, l.fk_product, l.description, l.total_ht as price, l.rowid, l.fk_code_ventilation, "; +$sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.accountancy_code_buy as code_buy"; +$sql .= " FROM " . MAIN_DB_PREFIX . "facture_fourn as f"; +$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "facture_fourn_det as l ON f.rowid = l.fk_facture_fourn"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = l.fk_product"; +$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accountingaccount as aa ON p.accountancy_code_buy = aa.account_number"; +$sql .= " WHERE f.fk_statut > 0 AND fk_code_ventilation = 0"; + +if (! empty($conf->multicompany->enabled)) { + $sql .= " AND f.entity = '" . $conf->entity . "'"; +} + +$sql .= " ORDER BY l.rowid"; +if ($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO > 0) { + $sql .= " DESC "; +} +$sql .= $db->plimit($limit + 1, $offset); + +dol_syslog('accountingext/supplier/liste.php:: $sql=' . $sql); +$result = $db->query($sql); +if ($result) { + $num_lignes = $db->num_rows($result); + $i = 0; + + // TODO : print_barre_liste always use $conf->liste_limit and do not care about custom limit in list... + print_barre_liste($langs->trans("InvoiceLines"), $page, "liste.php", "", $sortfield, $sortorder, '', $num_lignes); + + print '
' . $langs->trans("DescVentilTodoSupplier") . '
'; + + print '
' . "\n"; + print ''; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $facturefourn_static = new FactureFournisseur($db); + $productfourn_static = new ProductFournisseur($db); + $form = new Form($db); + + $var = True; + while ( $i < min($num_lignes, $limit) ) { + $objp = $db->fetch_object($result); + $var = ! $var; + print ""; + + // Ref facture + $facturefourn_static->ref = $objp->ref; + $facturefourn_static->id = $objp->facid; + print ''; + + // Ref facture supplier + $productfourn_static->ref = $objp->product_ref; + $productfourn_static->id = $objp->product_id; + $productfourn_static->type = $objp->type; + print ''; + + // print ''; + + // print ''; + + print ''; + + print ''; + + print ''; + + print ''; + + // Colonne choix du compte + print ''; + // Colonne choix ligne a ventiler + print ''; + + print ""; + $i ++; + } + + print ''; + + print "
Facture' . $langs->trans("Ref") . '' . $langs->trans("Label") . '' . $langs->trans("Description") . '' . $langs->trans("Amount") . '' . $langs->trans("Compte") . '' . $langs->trans("IntoAccount") . '' . $langs->trans("Ventilate") . '
' . $facturefourn_static->getNomUrl(1) . ''; + if ($productfourn_static->id) + print $productfourn_static->getNomUrl(1); + else + print ' '; + print ''.$objp->ref.''.$objp->ref_supplier.'' . dol_trunc($objp->product_label, 24) . '' . stripslashes(nl2br($objp->description)) . ''; + print price($objp->price); + print ''; + print $objp->code_buy; + print ''; + print $formventilation->select_account($objp->aarowid, 'codeventil[]', 1); + print ''; + print 'code_buy ? "checked" : "") . '/>'; + print '
 
"; + + print '
'; +} else { + print $db->error(); +} + +llxFooter(); +$db->close(); diff --git a/htdocs/admin/accounting.php b/htdocs/admin/accounting.php deleted file mode 100644 index 80f9a647125..00000000000 --- a/htdocs/admin/accounting.php +++ /dev/null @@ -1,260 +0,0 @@ - - * Copyright (C) 2004-2008 Laurent Destailleur - * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2011-2013 Juanjo Menent - * Copyright (C) 2011-2012 Alexandre Spangaro - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file htdocs/admin/accounting.php - * \ingroup compta - * \brief Page to setup accountancy module - */ - -require '../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; - -$langs->load('admin'); -$langs->load('compta'); - -if (!$user->admin) -accessforbidden(); - -$action = GETPOST('action','alpha'); - -$compta_mode = defined('COMPTA_MODE')?COMPTA_MODE:'RECETTES-DEPENSES'; - -if ($action == 'setcomptamode') -{ - $compta_mode = GETPOST('compta_mode','alpha'); - - $res = dolibarr_set_const($db, 'COMPTA_MODE', $compta_mode,'chaine',0,'',$conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessage($langs->trans("SetupSaved")); - } - else - { - setEventMessage($langs->trans("Error"),'errors'); - } - -} - -if ($action == 'setchart') -{ - $chartofaccounts = GETPOST('chartofaccounts','alpha'); - - $res = dolibarr_set_const($db, 'CHARTOFACCOUNTS', $chartofaccounts,'chaine',0,'',$conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessage($langs->trans("SetupSaved")); - } - else - { - setEventMessage($langs->trans("Error"),'errors'); - } -} - -if ($action == 'update' || $action == 'add') -{ - $constname = GETPOST('constname','alpha'); - $constvalue = GETPOST('constvalue','alpha'); - $consttype = GETPOST('consttype','alpha'); - $constnote = GETPOST('constnote','alpha'); - - $res = dolibarr_set_const($db, $constname, $constvalue, $consttype, 0, $constnote, $conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - setEventMessage($langs->trans("SetupSaved")); - } - else - { - setEventMessage($langs->trans("Error"),'errors'); - } -} - - -/*if ($action == 'delete') -{ - if (! dolibarr_del_const($db, $_GET['constname'],$conf->entity)); - { - print $db->error(); - } -}*/ - -/* - * Affichage page - */ - -llxHeader(); - -$form=new Form($db); - -$linkback=''.$langs->trans("BackToModuleList").''; -print_fiche_titre($langs->trans('ComptaSetup'),$linkback,'setup'); - - -print '
'; - -print ''; - -// Cas du parametre COMPTA_MODE -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print "\n"; -print ''; -print '\n"; -print ''; -print '\n"; -print ''; - -print "
'.$langs->trans('OptionMode').''.$langs->trans('Description').'
'.$langs->trans('OptionModeTrue').''.nl2br($langs->trans('OptionModeTrueDesc')); -// Write info on way to count VAT -if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) -{ - // print "
\n"; - // print nl2br($langs->trans('OptionModeTrueInfoModuleComptabilite')); -} -else -{ - // print "
\n"; - // print nl2br($langs->trans('OptionModeTrueInfoExpert')); -} -print "
'.$langs->trans('OptionModeVirtual').''.nl2br($langs->trans('OptionModeVirtualDesc'))."
\n"; - -/* - * Define Chart of accounts - * - */ -if (! empty($conf->global->ACCOUNTING_SELECTCHART) && ! empty($conf->accounting->enabled)) -{ - print '
'; - print_titre($langs->trans("Definechartofaccounts")); - - print '
'; - print ''; - - print ''; - $var=True; - - print ''; - print ''; - print ''; - print "\n"; - $var=!$var; - print ''; - print ""; - print ""; - print "
'; - print ''; - print $langs->trans("Chartofaccounts").'
".$langs->trans("Selectchartofaccounts").""; - print '"; - print "
"; - print "
"; -} - -print "
\n"; - -// Cas des autres parametres COMPTA_* -$list=array('COMPTA_PRODUCT_BUY_ACCOUNT','COMPTA_PRODUCT_SOLD_ACCOUNT','COMPTA_SERVICE_BUY_ACCOUNT','COMPTA_SERVICE_SOLD_ACCOUNT', -'COMPTA_VAT_ACCOUNT','COMPTA_ACCOUNT_CUSTOMER','COMPTA_ACCOUNT_SUPPLIER' -); - -$num=count($list); -if ($num) -{ - print ''; - print ''; - print ''; - print "\n"; -} - -foreach ($list as $key) -{ - $var=!$var; - - print ''; - print ''; - print ''; - print ''; - print ''; - - print ''; - - // Param - $libelle = $langs->trans($key); - print '\n"; - - // Value - print '\n"; - print ''; - - $i++; -} - -if ($num) -{ - print "
'.$langs->trans('OtherOptions').'
'.$libelle; - //print ' ('.$key.')'; - print "'; - print ''; - print ''; - print '   '; - print "
\n"; -} - -$db->close(); - -llxFooter(); diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php new file mode 100644 index 00000000000..e11aa0770b2 --- /dev/null +++ b/htdocs/core/lib/accounting.lib.php @@ -0,0 +1,188 @@ + + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file accountingex/core/lib/account.lib.php + * \ingroup Accounting Expert + * \brief Ensemble de fonctions de base pour les comptes comptables + */ + +/** + * Prepare array with list of tabs + * + * @param Object $object to tabs + * @return array of tabs to shoc + */ +function admin_accounting_prepare_head($object) { + global $langs, $conf; + + $h = 0; + $head = array (); + + $head[$h][0] = dol_buildpath('/accountancy/admin/index.php', 1); + $head[$h][1] = $langs->trans("Configuration"); + $head[$h][2] = 'general'; + $h ++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname); to remove a tab + complete_head_from_modules($conf, $langs, $object, $head, $h, 'accounting_admin'); + + $head[$h][0] = dol_buildpath('/accountancy/admin/journaux.php', 1); + $head[$h][1] = $langs->trans("Journaux"); + $head[$h][2] = 'journal'; + $h ++; + + $head[$h][0] = dol_buildpath('/accountancy/admin/export.php', 1); + $head[$h][1] = $langs->trans("Export"); + $head[$h][2] = 'export'; + $h ++; + + complete_head_from_modules($conf, $langs, $object, $head, $h, 'accounting_admin', 'remove'); + + return $head; +} + +/** + * Prepare array with list of tabs + * + * @param Object $object to tabs + * @return array of tabs to shoc + */ +function accounting_prepare_head($object) { + global $langs, $conf; + + $h = 0; + $head = array (); + + $head[$h][0] = dol_buildpath('/accountancy/admin/fiche.php', 1) . '?id=' . $object->id; + $head[$h][1] = $langs->trans("Card"); + $head[$h][2] = 'card'; + $h ++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname); to remove a tab + complete_head_from_modules($conf, $langs, $object, $head, $h, 'accounting_account'); + + complete_head_from_modules($conf, $langs, $object, $head, $h, 'accounting_account', 'remove'); + + return $head; +} + +/** + * Return general account with defined length + * + * @param $account + * + * @return $account + */ +function length_accountg($account) { + global $conf, $langs; + + $g = $conf->global->ACCOUNTING_LENGTH_GACCOUNT; + + if (! empty($g)) { + // Clean parameters + $i = strlen($account); + + if ($i >= 2) { + while ( $i < $g ) { + $account .= '0'; + + $i ++; + } + + return $account; + } else { + return $account; + } + } else { + return $account; + } +} + +/** + * Return auxiliary account with defined length + * + * @param $account + * + * @return $account + */ +function length_accounta($accounta) { + global $conf, $langs; + + $a = $conf->global->ACCOUNTING_LENGTH_AACCOUNT; + + if (! empty($a)) { + // Clean parameters + $i = strlen($accounta); + + if ($i >= 2) { + while ( $i < $a ) { + $accounta .= '0'; + + $i ++; + } + + return $accounta; + } else { + return $accounta; + } + } else { + return $accounta; + } +} + +/** + * Return account with defined length for Sage export software + * + * @param $account + * + * @return $account + */ +function length_exportsage($txt, $len, $end) { + // $txt = utf8_decode($txt); + // problem with this function, but we need to have the number of letter + if (strlen($txt) == $len) { + $res = $txt; + } + + elseif (strlen($txt) > $len) { + $res = substr($txt, 0, $len); + } + + else { + if ($end == 1) { + $res = $txt; + } else { + $res = ""; + } + for($i = strlen($txt); $i <= ($len - 1); $i ++) { + $res .= " "; + } + if ($end == 0) { + $res .= $txt; + } + } + return $res; +} \ No newline at end of file diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 489f07378a9..7a83486f286 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -1,9 +1,8 @@ - * Copyright (C) 2004-2009 Laurent Destailleur - * Copyright (C) 2004 Sebastien Di Cintio - * Copyright (C) 2004 Benoit Mortier - * Copyright (C) 2005-2012 Regis Houssin +/* Copyright (C) 2013-2014 Olivier Geffroy + * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2014 Ari Elbaz (elarifr) + * Copyright (C) 2014 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 @@ -20,154 +19,573 @@ */ /** - * \defgroup accounting Module accounting - * \brief Module to include accounting features - * \file htdocs/core/modules/modAccounting.class.php - * \ingroup accounting - * \brief Fichier de description et activation du module Comptabilite Expert + * \file accountingex/core/modules/modAccountingExpert.class.php + * \ingroup Accounting Expert + * \brief Module to activate Accounting Expert module */ - include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; - /** - * Classe de description et activation du module Comptabilite Expert + * \class modAccountingExpert + * \brief Description and activation class for module accounting expert */ class modAccounting extends DolibarrModules { - /** - * Constructor. Define names, constants, directories, boxes, permissions + * Constructor. + * Define names, constants, directories, boxes, permissions * - * @param DoliDB $db Database handler + * @param DoliDB $db */ function __construct($db) { global $conf; - $this->db = $db; - $this->numero = 50400 ; - + $this->db = $db; + $this->numero = 50400; + $this->family = "financial"; // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) - $this->name = preg_replace('/^mod/i','',get_class($this)); - $this->description = "Gestion complete de comptabilite (doubles parties)"; - + $this->name = preg_replace('/^mod/i', '', get_class($this)); + $this->description = "Advanced manage of accounting"; + // Possible values for version are: 'development', 'experimental', 'dolibarr' or version - //$this->version = 'dolibarr'; - $this->version = "development"; - - $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); + $this->version = 'development'; + + $this->const_name = 'MAIN_MODULE_' . strtoupper($this->name); $this->special = 0; - - // Config pages - $this->config_page_url = array("accounting.php"); - - // Dependancies - $this->depends = array("modFacture","modBanque","modTax"); - $this->requiredby = array(); - $this->conflictwith = array("modComptabilite"); - $this->langfiles = array("compta"); - - // Constants - $this->const = array(0=>array('MAIN_COMPANY_CODE_ALWAYS_REQUIRED','chaine','1','With this constants on, third party code is always required whatever is numbering module behaviour',0,'current',1), - 1=>array('MAIN_BANK_ACCOUNTANCY_CODE_ALWAYS_REQUIRED','chaine','1','With this constants on, bank account number is always required',0,'current',1), - - ); // List of particular constants to add when module is enabled - + $this->picto = 'accountingex@accountingex'; + + // Defined if the directory /mymodule/inc/triggers/ contains triggers or not + // $this->triggers = 1; + // Data directories to create when module is enabled - $this->dirs = array("/accounting/temp"); - + $this->dirs = array ( + '/accountingex/temp' + ); + + // Config pages + $this->config_page_url = array('index.php@accounting'); + + // Dependencies + $this->depends = array ("modFacture","modBanque","modTax"); // List of modules id that must be enabled if this module is enabled + $this->requiredby = array (); // List of modules id to disable if this one is disabled + $this->conflictwith = array ("modComptabilite"); // List of modules are in conflict with this module + $this->phpmin = array ( + 5, + 2 + ); // Minimum version of PHP required by module + $this->need_dolibarr_version = array ( + 3, + 4 + ); // Minimum version of Dolibarr required by module + $this->langfiles = array ( + "accountingex@accountingex" + ); + + // Constants + $this->const = array (); + $this->const[1] = array ( + "MAIN_COMPANY_CODE_ALWAYS_REQUIRED", + "chaine", + "1", + "With this constants on, third party code is always required whatever is numbering module behaviour" + ); + $this->const[2] = array ( + "MAIN_BANK_ACCOUNTANCY_CODE_ALWAYS_REQUIRED", + "chaine", + "1", + "With this constants on, bank account number is always required" + ); + $this->const[1] = array ( + "ACCOUNTING_SEPARATORCSV", + "string", + "," + ); + $this->const[2] = array ( + "ACCOUNTING_ACCOUNT_SUSPENSE", + "chaine", + "471" + ); + $this->const[3] = array ( + "ACCOUNTING_SELL_JOURNAL", + "chaine", + "VTE" + ); + $this->const[4] = array ( + "ACCOUNTING_PURCHASE_JOURNAL", + "chaine", + "ACH" + ); + $this->const[5] = array ( + "ACCOUNTING_SOCIAL_JOURNAL", + "chaine", + "SOC" + ); + $this->const[6] = array ( + "ACCOUNTING_CASH_JOURNAL", + "chaine", + "CAI" + ); + $this->const[7] = array ( + "ACCOUNTING_MISCELLANEOUS_JOURNAL", + "chaine", + "OD" + ); + $this->const[8] = array ( + "ACCOUNTING_BANK_JOURNAL", + "chaine", + "BQ" + ); // Deprecated Move into llx_bank_account + $this->const[9] = array ( + "ACCOUNTING_ACCOUNT_TRANSFER_CASH", + "chaine", + "58" + ); + $this->const[10] = array ( + "CHARTOFACCOUNTS", + "chaine", + "2" + ); + $this->const[11] = array ( + "ACCOUNTING_MODELCSV", + "chaine", + "0" + ); + $this->const[12] = array ( + "ACCOUNTING_LENGTH_GACCOUNT", + "chaine", + "" + ); + $this->const[13] = array ( + "ACCOUNTING_LENGTH_AACCOUNT", + "chaine", + "" + ); + $this->const[14] = array ( + "ACCOUNTING_LIMIT_LIST_VENTILATION", + "chaine", + "50" + ); + $this->const[15] = array ( + "ACCOUNTING_LIST_SORT_VENTILATION_TODO", + "yesno", + "1" + ); + $this->const[16] = array ( + "ACCOUNTING_LIST_SORT_VENTILATION_DONE", + "yesno", + "1" + ); + + // Tabs + $this->tabs = array(); + + // Css + $this->module_parts = array ( + 'css' => array ( + '/accountingex/css/accountingex.css.php' + ) + ); + // Boxes - $this->boxes = array(); - + $this->boxes = array (); + // Permissions - $this->rights = array(); $this->rights_class = 'accounting'; - $r=0; - - $this->rights[$r][0] = 50401; - $this->rights[$r][1] = 'Lire le plan de compte'; - $this->rights[$r][2] = 'r'; - $this->rights[$r][3] = 1; - $this->rights[$r][4] = 'plancompte'; - $this->rights[$r][5] = 'lire'; - $r++; - - $this->rights[$r][0] = 50402; - $this->rights[$r][1] = 'Creer/modifier un plan de compte'; - $this->rights[$r][2] = 'w'; - $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'plancompte'; - $this->rights[$r][5] = 'creer'; - $r++; - - $this->rights[$r][0] = 50403; - $this->rights[$r][1] = 'Cloturer plan de compte'; - $this->rights[$r][2] = 'w'; - $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'plancompte'; - $this->rights[$r][5] = 'cloturer'; - $r++; - - $this->rights[$r][0] = 50411; - $this->rights[$r][1] = 'Lire les mouvements comptables'; - $this->rights[$r][2] = 'r'; - $this->rights[$r][3] = 1; - $this->rights[$r][4] = 'mouvements'; - $this->rights[$r][5] = 'lire'; - $r++; - - $this->rights[$r][0] = 50412; - $this->rights[$r][1] = 'Creer/modifier/annuler les mouvements comptables'; - $this->rights[$r][2] = 'w'; - $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'mouvements'; - $this->rights[$r][5] = 'creer'; - $r++; - - $this->rights[$r][0] = 50415; - $this->rights[$r][1] = 'Lire CA, bilans, resultats, journaux, grands livres'; - $this->rights[$r][2] = 'r'; - $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'comptarapport'; - $this->rights[$r][5] = 'lire'; - $r++; + + $this->rights = array (); // Permission array used by this module + $r = 0; + + $this->rights[$r][0] = 150001; // Permission id (must not be already used) + $this->rights[$r][1] = 'Acces_module'; // Permission label + $this->rights[$r][3] = 0; // Permission by default for new user (0/1) + $this->rights[$r][4] = 'access'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) + $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) + $r ++; + + $this->rights[$r][0] = 150002; // Permission id (must not be already used) + $this->rights[$r][1] = 'Administration_module'; // Permission label + $this->rights[$r][3] = 0; // Permission by default for new user (0/1) + $this->rights[$r][4] = 'admin'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) + $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) + $r ++; + + $this->rights[$r][0] = 150010; // Permission id (must not be already used) + $this->rights[$r][1] = 'Développement'; // Permission label + $this->rights[$r][3] = 0; // Permission by default for new user (0/1) + $this->rights[$r][4] = 'dev'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) + $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) + $r ++; + + // Main menu entries + $this->menus = array (); + $r = 0; + + $this->menu[$r] = array ( + 'fk_menu' => 0, + 'type' => 'top', + 'titre' => 'Accounting', + 'mainmenu' => 'accounting', + 'leftmenu' => '0', + 'url' => '/accountingex/customer/index.php', + 'langs' => 'accountingex@accountingex', + 'position' => 100, + 'perms' => '$user->rights->accountingex->access', + 'enabled' => '$conf->accountingexpert->enabled', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting', + 'type' => 'left', + 'titre' => 'CustomersVentilation', + 'leftmenu' => 'CustomersVentilation', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/customer/index.php', + 'langs' => 'accountingex@accountingex', + 'position' => 101, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=CustomersVentilation', + 'type' => 'left', + 'titre' => 'ToDispatch', + 'leftmenu' => 'ToDispatchCustomer', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/customer/liste.php', + 'langs' => 'accountingex@accountingex', + 'position' => 102, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=CustomersVentilation', + 'type' => 'left', + 'titre' => 'Dispatched', + 'leftmenu' => 'DispatchedCustomer', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/customer/lignes.php', + 'langs' => 'accountingex@accountingex', + 'position' => 103, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting', + 'type' => 'left', + 'titre' => 'SuppliersVentilation', + 'leftmenu' => 'SuppliersVentilation', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/supplier/index.php', + 'langs' => 'accountingex@accountingex', + 'position' => 110, + 'enabled' => '$conf->fournisseur->enabled', + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=SuppliersVentilation', + 'type' => 'left', + 'titre' => 'ToDispatch', + 'leftmenu' => 'ToDispatchSupplier', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/supplier/liste.php', + 'langs' => 'accountingex@accountingex', + 'position' => 111, + 'enabled' => '$conf->fournisseur->enabled', + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=SuppliersVentilation', + 'type' => 'left', + 'titre' => 'Dispatched', + 'leftmenu' => 'DispatchedSupplier', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/supplier/lignes.php', + 'langs' => 'accountingex@accountingex', + 'position' => 112, + 'enabled' => '$conf->fournisseur->enabled', + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting', + 'type' => 'left', + 'titre' => 'Journaux', + 'leftmenu' => 'Journaux', + 'mainmenu' => 'accounting', + // 'url'=>'', + 'langs' => 'accountingex@accountingex', + 'position' => 120, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Journaux', + 'type' => 'left', + 'titre' => 'SellsJournal', + 'leftmenu' => 'SellsJournal', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/journal/sellsjournal.php', + 'langs' => 'accountingex@accountingex', + 'position' => 121, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Journaux', + 'type' => 'left', + 'titre' => 'PurchasesJournal', + 'leftmenu' => 'PurchasesJournal', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/journal/purchasesjournal.php', + 'langs' => 'accountingex@accountingex', + 'position' => 122, + 'enabled' => '$conf->fournisseur->enabled', + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Journaux', + 'type' => 'left', + 'titre' => 'CashJournal', + 'leftmenu' => 'CashJournal', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/journal/cashjournal.php', + 'langs' => 'accountingex@accountingex', + 'position' => 123, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Journaux', + 'type' => 'left', + 'titre' => 'BankJournal', + 'leftmenu' => 'BankJournal', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/journal/bankjournal.php', + 'langs' => 'accountingex@accountingex', + 'position' => 200, + 'enabled' => '$conf->banque->enabled', + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting', + 'type' => 'left', + 'titre' => 'Bookkeeping', + 'leftmenu' => 'Bookkeeping', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/bookkeeping/liste.php', + 'langs' => 'accountingex@accountingex', + 'position' => 300, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Bookkeeping', + 'type' => 'left', + 'titre' => 'ByYear', + 'leftmenu' => 'ByYear', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/bookkeeping/listebyyear.php', + 'langs' => 'accountingex@accountingex', + 'position' => 301, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Bookkeeping', + 'type' => 'left', + 'titre' => 'AccountBalanceByMonth', + 'leftmenu' => 'AccountBalanceByMonth', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/bookkeeping/balancebymonth.php', + 'langs' => 'accountingex@accountingex', + 'position' => 302, + 'enabled' => 1, + 'perms' => 1, + 'target' => '', + 'user' => 0 + ); + $r ++; + + // Parameters Menu + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting', + 'type' => 'left', + 'titre' => 'Parameters', + 'leftmenu' => 'Parameters', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/admin/index.php', + 'langs' => 'accountingex@accountingex', + 'position' => 400, + 'enabled' => 1, + 'perms' => '$user->rights->accountingex->admin', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Parameters', + 'type' => 'left', + 'titre' => 'Globalparameters', + 'leftmenu' => 'Globalparameters', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/admin/index.php', + 'langs' => 'accountingex@accountingex', + 'position' => 401, + 'enabled' => 1, + 'perms' => '$user->rights->accountingex->admin', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Globalparameters', + 'type' => 'left', + 'titre' => 'Chartofaccounts', + 'leftmenu' => 'Chartofaccounts', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/admin/account.php', + 'langs' => 'accountingex@accountingex', + 'position' => 402, + 'enabled' => 1, + 'perms' => '$user->rights->accountingex->admin', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Globalparameters', + 'type' => 'left', + 'titre' => 'Menuaccount', + 'leftmenu' => 'Menuaccount', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/admin/account.php', + 'langs' => 'accountingex@accountingex', + 'position' => 403, + 'enabled' => 1, + 'perms' => '$user->rights->accountingex->admin', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Parameters', + 'type' => 'left', + 'titre' => 'Menuthirdpartyaccount', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/admin/thirdpartyaccount.php', + 'langs' => 'accountingex@accountingex', + 'position' => 404, + 'enabled' => 1, + 'perms' => '$user->rights->accountingex->admin', + 'target' => '', + 'user' => 0 + ); + $r ++; + + $this->menu[$r] = array ( + 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Parameters', + 'type' => 'left', + 'titre' => 'MenuTools', + 'mainmenu' => 'accounting', + 'url' => '/accountingex/admin/productaccount.php', + 'langs' => 'accountingex@accountingex', + 'position' => 405, + 'enabled' => 1, + 'perms' => '$user->rights->accountingex->admin', + 'target' => '', + 'user' => 0 + ); + $r ++; } - - - /** + + /** * Function called when module is enabled. * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. * It also creates data directories * * @param string $options Options when enabling module ('', 'noboxes') * @return int 1 if OK, 0 if KO - */ - function init($options='') - { - // Prevent pb of modules not correctly disabled - //$this->remove($options); + */ + function init($options='') + { + $sql = array(); + + return $this->_init($sql,$options); + } + + /** + * Function called when module is disabled. + * Remove from database constants, boxes and permissions from Dolibarr database. + * Data directories are not deleted + * + * @param string $options Options when enabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO + */ + function remove($options='') + { $sql = array(); - return $this->_init($sql,$options); - } - - /** - * Function called when module is enabled. - * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. - * It also creates data directories - * - * @param string $options Options when enabling module ('', 'noboxes') - * @return int 1 if OK, 0 if KO - */ - function remove($options='') - { - global $conf; - - $sql = array("DELETE FROM ".MAIN_DB_PREFIX."const where name='MAIN_COMPANY_CODE_ALWAYS_REQUIRED' and entity IN ('0','".$conf->entity."')"); - return $this->_remove($sql,$options); - } + } } diff --git a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql index cbe07b2fbdf..a0e557720e1 100644 --- a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql +++ b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql @@ -14,14 +14,12 @@ -- To make pk to be auto increment (mysql): VMYSQL4.3 ALTER TABLE llx_c_shipment_mode CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; -- To make pk to be auto increment (postgres): VPGSQL8.2 NOT POSSIBLE. MUST DELETE/CREATE TABLE -- To set a field as NULL: VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; --- To set a field as defailt NULL: VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; +-- To set a field as default NULL: VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; -- -- VPGSQL8.2 DELETE FROM llx_usergroup_user WHERE fk_user NOT IN (SELECT rowid from llx_user); -- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup); -ALTER TABLE llx_c_paiement ADD COLUMN accountancy_code varchar(32) DEFAULT NULL AFTER active; - -- Defined only to have specific list for countries that can't use generic list (like argentina that need type A or B) ALTER TABLE llx_c_typent ADD COLUMN fk_country integer NULL AFTER libelle; @@ -29,10 +27,36 @@ INSERT INTO llx_c_action_trigger (rowid,code,label,description,elementtype,rang) INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) values (11,'AC_INT','system','Intervention on site',NULL, 1, 4); - ALTER TABLE llx_user ADD COLUMN fk_user_creat integer AFTER tms; ALTER TABLE llx_user ADD COLUMN fk_user_modif integer AFTER fk_user_creat; +-- Add module accounting Expert +ALTER TABLE llx_bookkeeping RENAME TO llx_accounting_bookkeeping; -- To update old user of module Accounting Expert + + +CREATE TABLE llx_accounting_bookkeeping +( + rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, + doc_date date NOT NULL, + doc_type varchar(30) NOT NULL, -- facture_client/reglement_client/facture_fournisseur/reglement_fournisseur + doc_ref varchar(30) NOT NULL, -- facture_client/reglement_client/... reference number + fk_doc integer NOT NULL, -- facture_client/reglement_client/... rowid + fk_docdet integer NOT NULL, -- facture_client/reglement_client/... line rowid + code_tiers varchar(24), -- code tiers + numero_compte varchar(32) DEFAULT NULL, + label_compte varchar(128) NOT NULL, + debit double NOT NULL, + credit double NOT NULL, + montant double NOT NULL, + sens varchar(1) DEFAULT NULL, + fk_user_author integer NOT NULL, + import_key varchar(14), + code_journal varchar(10) DEFAULT NULL, + piece_num integer NOT NULL +) ENGINE=innodb; + +ALTER TABLE llx_c_paiement ADD COLUMN accountancy_code varchar(32) DEFAULT NULL AFTER active; +ALTER TABLE llx_bank_account ADD COLUMN accountancy_journal varchar(3) DEFAULT NULL AFTER account_number; ALTER TABLE llx_accountingaccount add column entity integer DEFAULT 1 NOT NULL AFTER rowid; ALTER TABLE llx_accountingaccount add column datec datetime NOT NULL AFTER entity; @@ -40,7 +64,6 @@ ALTER TABLE llx_accountingaccount add column tms timestamp AFTER datec; ALTER TABLE llx_accountingaccount add column fk_user_author integer DEFAULT NULL AFTER label; ALTER TABLE llx_accountingaccount add column fk_user_modif integer DEFAULT NULL AFTER fk_user_author; - -- Drop old table DROP TABLE llx_compta; DROP TABLE llx_compta_account; @@ -61,8 +84,6 @@ ALTER TABLE llx_product MODIFY COLUMN accountancy_code_buy varchar(32); ALTER TABLE llx_user MODIFY COLUMN accountancy_code varchar(32); -ALTER TABLE llx_bank_account ADD COLUMN accountancy_journal varchar(3) DEFAULT NULL AFTER account_number; - ALTER TABLE llx_projet_task_time ADD COLUMN task_datehour datetime after task_date; diff --git a/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql b/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql new file mode 100644 index 00000000000..856d4d058d7 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql @@ -0,0 +1,39 @@ +-- ============================================================================ +-- Copyright (C) 2013-2014 Olivier Geffroy +-- Copyright (C) 2013-2014 Alexandre Spangaro +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- ============================================================================ + +CREATE TABLE llx_accounting_bookkeeping +( + rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, + doc_date date NOT NULL, + doc_type varchar(30) NOT NULL, -- facture_client/reglement_client/facture_fournisseur/reglement_fournisseur + doc_ref varchar(30) NOT NULL, -- facture_client/reglement_client/... reference number + fk_doc integer NOT NULL, -- facture_client/reglement_client/... rowid + fk_docdet integer NOT NULL, -- facture_client/reglement_client/... line rowid + code_tiers varchar(24), -- code tiers + numero_compte varchar(32) DEFAULT NULL, + label_compte varchar(128) NOT NULL, + debit double NOT NULL, + credit double NOT NULL, + montant double NOT NULL, + sens varchar(1) DEFAULT NULL, + fk_user_author integer NOT NULL, + import_key varchar(14), + code_journal varchar(10) DEFAULT NULL, + piece_num integer NOT NULL +) ENGINE=innodb; diff --git a/htdocs/langs/en_US/accounting.lang b/htdocs/langs/en_US/accounting.lang new file mode 100644 index 00000000000..41ccb3b9197 --- /dev/null +++ b/htdocs/langs/en_US/accounting.lang @@ -0,0 +1,161 @@ +# Dolibarr language file - en_US - Accounting Expert +CHARSET=UTF-8 + +Module150000Name=Accounting Expert +Module150000Desc=Advanced management of the accounting + +Accounting=Accounting +Globalparameters=Global parameters +Chartofaccounts=Chart of accounts +Fiscalyear=Fiscal years +Menuaccount=Accounting accounts +Menuthirdpartyaccount=Thirdparty accounts +MenuTools=Tools + +ConfigAccountingExpert=Configuration of the module accounting expert +Journaux=Journaux +Exports=Exports +About=About +Contributors=Contributors +Investors=Investors +Modelcsv=Model of export +Selectmodelcsv=Select a model of export +Modelcsv_normal=Classic export +Modelcsv_CEGID=Export towards CEGID Expert +BackToChartofaccounts=Return chart of accounts + +Definechartofaccounts=Define a chart of accounts +Selectchartofaccounts=Select a chart of accounts +Validate=Validate +Addanaccount=Add an accounting account +AccountAccounting=Accounting account +Ventilation=Ventilation +ToDispatch=To dispatch +Dispatched=Dispatched + +CustomersVentilation=Ventilation customers +SuppliersVentilation=Ventilation suppliers +TradeMargin=Trade margin +Reports=Reports +ByCustomerInvoice=By invoices customers +ByMonth=By Month +NewAccount=New accounting account +Update=Update +List=List +Create=Create +UpdateAccount=Modification of an accounting account +UpdateMvts=Modification of a movement +WriteBookKeeping=Record accounts in general ledger +Bookkeeping=General ledger +AccountBalanceByMonth=Account balance by month + +VentilationComptable=Accounting ventilation +VentilationComptableSupplier=Accounting ventilation supplier +Intitule=Label +Line=Line + +CAHTF=Total purchase supplier HT +InvoiceLines=Lines of invoice to be ventilated +InvoiceLinesDone=Ventilated lines of invoice +IntoAccount=In the accounting account + +Ventilate=Ventilate +VentilationAuto=Automatic ventilation + +Processing=Processing +EndProcessing=The end of processing +AnyLineVentilate=Any lines to ventilate +SelectedLines=Selected lines +Lineofinvoice=Line of invoice +VentilatedinAccount=Ventilated successfully in the accounting account +NotVentilatedinAccount=Not ventilated in the accounting account + +ACCOUNTINGEX_SEPARATORCSV=Separator CSV + +ACCOUNTINGEX_LIMIT_LIST_VENTILATION=Number of elements to be ventilated shown by page (maximum recommended : 50) +ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO=Begin the sorting of the pages of ventilation "Has to ventilate" by the most recent elements +ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE=Begin the sorting of the pages of ventilation "Ventilated" by the most recent elements + +AccountLength=Length of the accounting accounts shown in Dolibarr +AccountLengthDesc=Function allowing to feign a length of accounting account by replacing spaces by the zero figure. This function touches only the display, it does not modify the accounting accounts registered in Dolibarr. For the export, this function is necessary to be compatible with certain software. +ACCOUNTINGEX_LENGTH_GACCOUNT=Length of the general accounts +ACCOUNTINGEX_LENGTH_AACCOUNT=Length of the third party accounts + +ACCOUNTINGEX_SELL_JOURNAL=Sell journal +ACCOUNTINGEX_PURCHASE_JOURNAL=Purchase journal +ACCOUNTINGEX_BANK_JOURNAL=Bank journal +ACCOUNTINGEX_CASH_JOURNAL=Cash journal +ACCOUNTINGEX_MISCELLANEOUS_JOURNAL=Miscellaneous journal +ACCOUNTINGEX_SOCIAL_JOURNAL=Social journal + +ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH=Account of transfer +ACCOUNTINGEX_ACCOUNT_SUSPENSE=Account of wait + +COMPTA_PRODUCT_BUY_ACCOUNT=Accounting account by default for bought products (if not defined in the product sheet) +COMPTA_PRODUCT_SOLD_ACCOUNT=Accounting account by default for the sold products (if not defined in the product sheet) +COMPTA_SERVICE_BUY_ACCOUNT=Accounting account by default for the bought services (if not defined in the service sheet) +COMPTA_SERVICE_SOLD_ACCOUNT=Accounting account by default for the sold services (if not defined in the service sheet) + +Doctype=Type of document +Docdate=Date +Docref=Reference +Numerocompte=Account +Code_tiers=Thirdparty +Labelcompte=Label account +Debit=Debit +Credit=Credit +Amount=Amount +Sens=Sens +Codejournal=Journal + +DelBookKeeping=Delete the records of the general ledger + +SellsJournal=Sells journal +PurchasesJournal=Purchases journal +DescSellsJournal=Sells journal +DescPurchasesJournal=Purchases journal +BankJournal=Bank journal +DescBankJournal=Banl journal including all the types of payments other than cash +CashJournal=Cash journal +DescCashJournal=Cash journal including the type of payment cash + +CashPayment=Cash Payment + +SupplierInvoicePayment=Payment of invoice supplier +CustomerInvoicePayment=Payment of invoice customer + +ThirdPartyAccount=Thirdparty account + +NumMvts=Number of movement +ListeMvts=List of the movement +ErrorDebitCredit=Debit and Credit cannot have a value at the same time + +ReportThirdParty=List thirdparty account +DescThirdPartyReport=Consult here the list of the thirdparty customers and the suppliers and their accounting accounts + +ListAccounts=List of the accounting accounts + +Pcgversion=Version of the plan +Pcgtype=Class of account +Pcgsubtype=Under class of account +Accountparent=Root of the account +Active=Statement + +NewFiscalYear=New fiscal year + +DescVentilCustomer=Consult here the annual accounting ventilation of your invoices customers +TotalVente=Total turnover HT +TotalMarge=Total sales margin +DescVentilDoneCustomer=Consult here the list of the lines of invoices customers and their accounting account +DescVentilTodoCustomer=Ventilate your lines of customer invoice with an accounting account +ChangeAccount=Change the accounting account for lines selected by the account: +Vide=- +DescVentilSupplier=Consult here the annual accounting ventilation of your invoices suppliers +DescVentilTodoSupplier=Ventilate your lines of invoice supplier with an accounting account +DescVentilDoneSupplier=Consult here the list of the lines of invoices supplier and their accounting account + +ValidateHistory=Validate Automatically + +ErrorAccountancyCodeIsAlreadyUse=Error, you cannot delete this accounting account because it is used + +FicheVentilation=Ventilation card \ No newline at end of file diff --git a/htdocs/langs/es_ES/accounting.lang b/htdocs/langs/es_ES/accounting.lang new file mode 100644 index 00000000000..af388dd6cff --- /dev/null +++ b/htdocs/langs/es_ES/accounting.lang @@ -0,0 +1,161 @@ +# Dolibarr language file - es_ES - Experto de la contabilidad +CHARSET=UTF-8 + +Module150000Name= Desglose contable +Module150000Desc= Gestión desglose contable + +Accounting=Contabilidad +Globalparameters=Configuración global +Chartofaccounts=Cuentas +Fiscalyear=Los años fiscales +Menuaccount=Contabilidad Cuentas +Menuthirdpartyaccount=Cuentas de terceros +MenuTools=Instrumentos + +ConfigAccountingExpert=Módulo de configuración experto en contabilidad +Journaux=Periódicos +Exports=Exportaciones +About=acerca de +Contributors=Contributors +Investors=Investors +Modelcsv=Plantilla de Exportación +Selectmodelcsv=Seleccione una plantilla de exportación +Modelcsv_normal=clásico exportación +Modelcsv_CEGID=Exportar a Cegid Expert +BackToChartofaccounts=Plan contable Volver + +Definechartofaccounts=Definir la contabilidad +Selectchartofaccounts=Seleccione una contabilidad +Validate=validar +Addanaccount=Añadir una cuenta contable +AccountAccounting=cuenta de Contabilidad +Ventilation=ventilación +ToDispatch=Para llevar a cabo +Dispatched=Realizado + +CustomersVentilation=Los clientes de ventilación +SuppliersVentilation=proveedores de ventilación +TradeMargin=margen de beneficio +Reports=relaciones +ByCustomerInvoice=Por las facturas de los clientes +ByMonth=por mes +NewAccount=Nueva cuenta contable +Update=Actualización +List=lista +Create=crear +UpdateAccount=Editar una cuenta +UpdateMvts=Modificación de un movimiento +WriteBookKeeping=Asientos contables en el libro mayor +Bookkeeping=libro mayor +AccountBalanceByMonth=Saldo Mensual + +VentilationComptable=desglose de Contabilidad +VentilationComptableSupplier=Proveedor de cuentas de ventilación +Intitule=título +Line=línea + +CAHTF=Total HT proveedor compra +InvoiceLines=Líneas de factura para ventilar +InvoiceLinesDone=Líneas de factura rotos +IntoAccount=En la cuenta + +Ventilate=ventilar +VentilationAuto=ventilación automática + +Processing=Tratamiento +EndProcessing=Final del tratamiento +AnyLineVentilate=No hay línea para ventilar +SelectedLines=Las líneas seleccionadas +Lineofinvoice=Línea de la factura +VentilatedinAccount=Ventilada con éxito en la cuenta contable +NotVentilatedinAccount=Cuenta sin ventilación en la contabilidad + +ACCOUNTINGEX_SEPARATORCSV=separador CSV + +ACCOUNTINGEX_LIMIT_LIST_VENTILATION=(El máximo recomendado: 50) Número de elementos que se muestran por página para ventilar +ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO=Páginas de inicio de clasificación de ventilación "desglose" de las pruebas más recientes +ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE=Páginas de inicio de clasificación de ventilación "ventilada" por la evidencia más reciente + +AccountLength=Cuentas contables longitud mostrada en Dolibarr +AccountLengthDesc=Función para simular una longitud de cuenta contable sustituyendo espacios con el número cero. Esta función sólo afecta a la pantalla, no cambia las cuentas contables registrados en Dolibarr. Para la exportación, esta función se requiere para ser compatible con algunos programas. +ACCOUNTINGEX_LENGTH_GACCOUNT=Longitud de las cuentas generales +ACCOUNTINGEX_LENGTH_AACCOUNT=Duración de subcuentas + +ACCOUNTINGEX_SELL_JOURNAL=Diario de Ventas +ACCOUNTINGEX_PURCHASE_JOURNAL=Diario de Compras +ACCOUNTINGEX_BANK_JOURNAL=Diario del Banco +ACCOUNTINGEX_CASH_JOURNAL=Diario de Caso +ACCOUNTINGEX_MISCELLANEOUS_JOURNAL=Diario de Operaciones diversas +ACCOUNTINGEX_SOCIAL_JOURNAL=Diario Social + +ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH=En caso de transferencia +ACCOUNTINGEX_ACCOUNT_SUSPENSE=Cuenta Suspense + +COMPTA_PRODUCT_BUY_ACCOUNT=Cuenta predeterminada de contabilidad para los productos comprados (si no se define en el producto) +COMPTA_PRODUCT_SOLD_ACCOUNT=Cuenta predeterminada de contabilidad para los productos vendidos (si no se define en el producto) +COMPTA_SERVICE_BUY_ACCOUNT=Cuenta predeterminada de contabilidad para los servicios adquiridos (si no está definido en la hoja de servicio) +COMPTA_SERVICE_SOLD_ACCOUNT=Cuenta predeterminada de contabilidad para servicios vendidos (si no se define en la ficha de servicio) + +Doctype=Tipo de documento +Docdate=fecha +Docref=referencia +Numerocompte=cuenta +Code_tiers=tercera +Labelcompte=cuenta de fraseología +Debit=débito +Credit=crédito +Amount=cantidad +Sens=sentido +Codejournal=periódico + +DelBookKeeping=Eliminar el libro mayor + +SellsJournal=Sell journal +PurchasesJournal=Purchase journal +DescSellsJournal=Sell journal +DescPurchasesJournal=Purchase journal +BankJournal=Diario de banco +DescBankJournal=Descripción de la revista del Banco +CashJournal=Libro de Caja +DescCashJournal=Descripción Libro de Caja + +CashPayment=especies Reglas + +SupplierInvoicePayment=Reglamento Factura +CustomerInvoicePayment=Factura del cliente Reglamento + +ThirdPartyAccount=Thirdparty account + +NumMvts=Number of movement +ListeMvts=List of the movement +ErrorDebitCredit=Debit and Credit cannot have a value at the same time + +ReportThirdParty=List thirdparty account +DescThirdPartyReport=Consult here the list of the thirdparty customers and the suppliers and their accounting accounts + +ListAccounts=List of the accounting accounts + +Pcgversion=Version of the plan +Pcgtype=Class of account +Pcgsubtype=Under class of account +Accountparent=Root of the account +Active=Statement + +NewFiscalYear=New fiscal year + +DescVentilCustomer=Consult here the annual accounting ventilation of your invoices customers +TotalVente=Total turnover HT +TotalMarge=Total sales margin +DescVentilDoneCustomer=Consult here the list of the lines of invoices customers and their accounting account +DescVentilTodoCustomer=Ventilate your lines of customer invoice with an accounting account +ChangeAccount=Change the accounting account for lines selected by the account: +Vide=- +DescVentilSupplier=Consult here the annual accounting ventilation of your invoices suppliers +DescVentilTodoSupplier=Ventilate your lines of invoice supplier with an accounting account +DescVentilDoneSupplier=Consult here the list of the lines of invoices supplier and their accounting account + +ValidateHistory=Validate Automatically + +ErrorAccountancyCodeIsAlreadyUse=Error, you cannot delete this accounting account because it is used + +FicheVentilation=Ventilation card \ No newline at end of file diff --git a/htdocs/langs/fr_FR/accounting.lang b/htdocs/langs/fr_FR/accounting.lang new file mode 100644 index 00000000000..41b2366590e --- /dev/null +++ b/htdocs/langs/fr_FR/accounting.lang @@ -0,0 +1,161 @@ +# Dolibarr language file - fr_FR - Accounting Expert +CHARSET=UTF-8 + +Module150000Name=Comptabilité Expert +Module150000Desc=Gestion avancée de la comptabilité + +Accounting=Comptabilité +Globalparameters=Paramètres globaux +Chartofaccounts=Plan comptable +Fiscalyear=Exercices fiscaux +Menuaccount=Comptes comptables +Menuthirdpartyaccount=Comptes tiers +MenuTools=Outils + +ConfigAccountingExpert=Configuration du module comptabilité expert +Journaux=Journaux +Exports=Exports +About=A propos +Contributors=Contributeurs +Investors=Investisseurs +Modelcsv=Modèle d'export +Selectmodelcsv=Sélectionnez un modèle d'export +Modelcsv_normal=Export classique +Modelcsv_CEGID=Export vers CEGID Expert +BackToChartofaccounts=Retour plan comptable + +Definechartofaccounts=Définir un plan comptable +Selectchartofaccounts=Sélectionnez un plan comptable +Validate=Valider +Addanaccount=Ajouter un compte comptable +AccountAccounting=Compte comptable +Ventilation=Ventilation +ToDispatch=A effectuer +Dispatched=Effectuée + +CustomersVentilation=Ventilation clients +SuppliersVentilation=Ventilation fournisseurs +TradeMargin=Marge commerciale +Reports=Rapports +ByCustomerInvoice=Par factures clients +ByMonth=Par mois +NewAccount=Nouveau compte comptable +Update=Mettre à jour +List=Liste +Create=Créer +UpdateAccount=Modification d'un compte +UpdateMvts=Modification d'un mouvement +WriteBookKeeping=Comptabiliser les écritures dans le grand livre +Bookkeeping=Grand livre +AccountBalanceByMonth=Balance mensuelle + +VentilationComptable=Ventilation comptable +VentilationComptableSupplier=Ventilation comptable fournisseur +Intitule=Intitulé +Line=Ligne + +CAHTF=Total achat fournisseur HT +InvoiceLines=Lignes de facture à ventiler +InvoiceLinesDone=Lignes de facture ventilées +IntoAccount=Dans le compte comptable + +Ventilate=Ventiler +VentilationAuto=Ventilation automatique + +Processing=Traitement en cours +EndProcessing=Fin de traitement +AnyLineVentilate=Aucune ligne à ventiler +SelectedLines=Lignes sélectionnées +Lineofinvoice=Ligne de facture +VentilatedinAccount=Ventilée avec succès dans le compte comptable +NotVentilatedinAccount=Non ventilée dans le compte comptable + +ACCOUNTINGEX_SEPARATORCSV=Séparateur CSV + +ACCOUNTINGEX_LIMIT_LIST_VENTILATION=Nombre d'éléments à ventiler affichés par page (maximum conseillé : 50) +ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO=Commencer le tri des pages de ventilation "A ventiler" par les éléments les plus récents +ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE=Commencer le tri des pages de ventilation "Ventilées" par les éléments les plus récents + +AccountLength=Longueur des comptes comptables affichés dans Dolibarr +AccountLengthDesc=Fonction permettant de simuler une longueur de compte comptable en remplaçant les espaces par le chiffre zéro. Cette fonction touche uniquement à l'affichage, elle ne modifie pas les comptes comptables enregistrés dans Dolibarr. Pour l'export, cette fonction est nécessaire pour être compatible avec certains logiciels. +ACCOUNTINGEX_LENGTH_GACCOUNT=Longueur des comptes généraux +ACCOUNTINGEX_LENGTH_AACCOUNT=Longueur des comptes tiers + +ACCOUNTINGEX_SELL_JOURNAL=Journal des Ventes +ACCOUNTINGEX_PURCHASE_JOURNAL=Journal des Achats +ACCOUNTINGEX_BANK_JOURNAL=Journal de Banque +ACCOUNTINGEX_CASH_JOURNAL=Journal de Caisse +ACCOUNTINGEX_MISCELLANEOUS_JOURNAL=Journal des Opérations Diverses +ACCOUNTINGEX_SOCIAL_JOURNAL=Journal Social + +ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH=Compte de transfert espèce +ACCOUNTINGEX_ACCOUNT_SUSPENSE=Compte d'attente + +COMPTA_PRODUCT_BUY_ACCOUNT=Compte comptable par défaut pour les produits achetés (si non défini dans la fiche produit) +COMPTA_PRODUCT_SOLD_ACCOUNT=Compte comptable par défaut pour les produits vendus (si non défini dans la fiche produit) +COMPTA_SERVICE_BUY_ACCOUNT=Compte comptable par défaut pour les services achetés (si non défini dans la fiche service) +COMPTA_SERVICE_SOLD_ACCOUNT=Compte comptable par défaut pour les services vendus (si non défini dans la fiche service) + +Doctype=Type de document +Docdate=Date +Docref=Référence +Numerocompte=Compte +Code_tiers=Tiers +Labelcompte=Libellé compte +Debit=Débit +Credit=Crédit +Amount=Montant +Sens=Sens +Codejournal=Journal + +DelBookKeeping=Supprimer les écritures du grand livre + +SellsJournal=Journal des ventes +PurchasesJournal=Journal des achats +DescSellsJournal=Journal des ventes +DescPurchasesJournal=Journal des achats +BankJournal=Journal de banque +DescBankJournal=Journal de banque comprenant tous les types de règlements autres que espèce +CashJournal=Journal de caisse +DescCashJournal=Journal de caisse comprenant le type de règlement "espèce" + +CashPayment=Règlement espèce + +SupplierInvoicePayment=Règlement de facture fournisseur +CustomerInvoicePayment=Règlement de facture client + +ThirdPartyAccount=Compte tiers + +NumMvts=Numero de mouvement +ListeMvts=Liste du mouvement +ErrorDebitCredit=Debit et Credit ne peuvent avoir une valeur en même temps + +ReportThirdParty=Liste compte tiers +DescThirdPartyReport=Consultez ici la liste des tiers clients et fournisseurs et leurs codes comptables + +ListAccounts=Liste des comptes comptables + +Pcgversion=Version du plan +Pcgtype=Classe de compte +Pcgsubtype=Sous classe de compte +Accountparent=Racine du compte +Active=État + +NewFiscalYear=Nouvel exercice fiscal + +DescVentilCustomer=Consultez ici la ventilation comptable annuelle de vos factures clients +TotalVente=Total chiffre affaires HT +TotalMarge=Total marge commerciale +DescVentilDoneCustomer=Consultez ici la liste des lignes de factures clients et leur compte comptable +DescVentilTodoCustomer=Ventilez vos lignes de facture client avec un compte comptable +ChangeAccount=Changer le compte comptable pour les lignes sélectionnées par le compte : +Vide=- +DescVentilSupplier=Consultez ici la ventilation comptable annuelle de vos factures fournisseurs +DescVentilTodoSupplier=Ventilez vos lignes de facture fournisseur avec un compte comptable +DescVentilDoneSupplier=Consultez ici la liste des lignes de factures fournisseur et leur compte comptable + +ValidateHistory=Valider Automatiquement + +ErrorAccountancyCodeIsAlreadyUse=Erreur, vous ne pouvez pas supprimer ce compte comptable car il est utilisé + +FicheVentilation=Fiche ventilation diff --git a/htdocs/theme/amarok/img/object_accounting.png b/htdocs/theme/amarok/img/object_accounting.png new file mode 100644 index 0000000000000000000000000000000000000000..b5600221f02fc922e0c2bda2149f123a6d707d35 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSL74G){)!Z!ppU1EV~B-+@(+Kdgca-8w;OdbEAY;!dSiR;fM5s*+lJc?4$OOV zDzq0fxwDu!M5tsO$Zx*nCU4P{#qe6i^{~OlMh}Kd3}$mPKK!?5_?j)8|83)j^+0nO NJYD@<);T3K0RT{uGx`7k literal 0 HcmV?d00001 diff --git a/htdocs/theme/auguria/img/object_accounting.png b/htdocs/theme/auguria/img/object_accounting.png new file mode 100644 index 0000000000000000000000000000000000000000..b5600221f02fc922e0c2bda2149f123a6d707d35 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSL74G){)!Z!ppU1EV~B-+@(+Kdgca-8w;OdbEAY;!dSiR;fM5s*+lJc?4$OOV zDzq0fxwDu!M5tsO$Zx*nCU4P{#qe6i^{~OlMh}Kd3}$mPKK!?5_?j)8|83)j^+0nO NJYD@<);T3K0RT{uGx`7k literal 0 HcmV?d00001 diff --git a/htdocs/theme/bureau2crea/img/object_accounting.png b/htdocs/theme/bureau2crea/img/object_accounting.png new file mode 100644 index 0000000000000000000000000000000000000000..b5600221f02fc922e0c2bda2149f123a6d707d35 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSL74G){)!Z!ppU1EV~B-+@(+Kdgca-8w;OdbEAY;!dSiR;fM5s*+lJc?4$OOV zDzq0fxwDu!M5tsO$Zx*nCU4P{#qe6i^{~OlMh}Kd3}$mPKK!?5_?j)8|83)j^+0nO NJYD@<);T3K0RT{uGx`7k literal 0 HcmV?d00001 diff --git a/htdocs/theme/cameleo/img/object_accounting.png b/htdocs/theme/cameleo/img/object_accounting.png new file mode 100644 index 0000000000000000000000000000000000000000..b5600221f02fc922e0c2bda2149f123a6d707d35 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSL74G){)!Z!ppU1EV~B-+@(+Kdgca-8w;OdbEAY;!dSiR;fM5s*+lJc?4$OOV zDzq0fxwDu!M5tsO$Zx*nCU4P{#qe6i^{~OlMh}Kd3}$mPKK!?5_?j)8|83)j^+0nO NJYD@<);T3K0RT{uGx`7k literal 0 HcmV?d00001 diff --git a/htdocs/theme/eldy/img/object_accounting.png b/htdocs/theme/eldy/img/object_accounting.png new file mode 100644 index 0000000000000000000000000000000000000000..b5600221f02fc922e0c2bda2149f123a6d707d35 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSL74G){)!Z!ppU1EV~B-+@(+Kdgca-8w;OdbEAY;!dSiR;fM5s*+lJc?4$OOV zDzq0fxwDu!M5tsO$Zx*nCU4P{#qe6i^{~OlMh}Kd3}$mPKK!?5_?j)8|83)j^+0nO NJYD@<);T3K0RT{uGx`7k literal 0 HcmV?d00001 From d03763f6c37ed9a1fa9bfe56906c4092a146f87b Mon Sep 17 00:00:00 2001 From: aspangaro Date: Thu, 28 Aug 2014 06:30:01 +0200 Subject: [PATCH 02/22] Update Accounting Expert integration --- htdocs/accountancy/admin/account.php | 24 ++++---- .../accountancy/admin/{fiche.php => card.php} | 25 ++++---- htdocs/accountancy/admin/export.php | 24 ++++---- htdocs/accountancy/admin/importaccounts.php | 32 +++++----- htdocs/accountancy/admin/index.php | 38 ++++++------ htdocs/accountancy/admin/journaux.php | 28 +++++---- htdocs/accountancy/admin/productaccount.php | 18 +++--- .../accountancy/admin/thirdpartyaccount.php | 16 +++-- .../bookkeeping/balancebymonth.php | 14 ++--- .../bookkeeping/{fiche.php => card.php} | 21 ++++--- .../bookkeeping/{liste.php => list.php} | 22 +++---- .../{listebyyear.php => listbyyear.php} | 14 ++--- .../class/accountancysystem.class.php | 6 +- .../class/accountingaccount.class.php | 6 +- .../accountancy/class/bookkeeping.class.php | 40 ++++++------- .../class/html.formventilation.class.php | 7 ++- .../customer/{fiche.php => card.php} | 28 ++++----- htdocs/accountancy/customer/index.php | 22 +++---- .../customer/{lignes.php => lines.php} | 26 ++++----- .../customer/{liste.php => list.php} | 30 +++++----- htdocs/accountancy/journal/bankjournal.php | 38 ++++++------ htdocs/accountancy/journal/cashjournal.php | 42 +++++++------- htdocs/accountancy/journal/index.php | 11 ++-- .../accountancy/journal/purchasesjournal.php | 26 ++++----- htdocs/accountancy/journal/sellsjournal.php | 30 +++++----- .../supplier/{fiche.php => card.php} | 22 +++---- htdocs/accountancy/supplier/index.php | 21 +++---- .../supplier/{lignes.php => lines.php} | 28 ++++----- .../supplier/{liste.php => list.php} | 32 +++++----- htdocs/admin/dict.php | 58 ++++++------------- htdocs/core/modules/modAccounting.class.php | 14 ----- .../{accounting.lang => accountancy.lang} | 0 .../{accounting.lang => accountancy.lang} | 0 .../{accounting.lang => accountancy.lang} | 0 34 files changed, 354 insertions(+), 409 deletions(-) rename htdocs/accountancy/admin/{fiche.php => card.php} (94%) rename htdocs/accountancy/bookkeeping/{fiche.php => card.php} (93%) rename htdocs/accountancy/bookkeeping/{liste.php => list.php} (91%) rename htdocs/accountancy/bookkeeping/{listebyyear.php => listbyyear.php} (90%) rename htdocs/accountancy/customer/{fiche.php => card.php} (85%) rename htdocs/accountancy/customer/{lignes.php => lines.php} (90%) rename htdocs/accountancy/customer/{liste.php => list.php} (90%) rename htdocs/accountancy/supplier/{fiche.php => card.php} (89%) rename htdocs/accountancy/supplier/{lignes.php => lines.php} (89%) rename htdocs/accountancy/supplier/{liste.php => list.php} (88%) rename htdocs/langs/en_US/{accounting.lang => accountancy.lang} (100%) rename htdocs/langs/es_ES/{accounting.lang => accountancy.lang} (100%) rename htdocs/langs/fr_FR/{accounting.lang => accountancy.lang} (100%) diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php index f0bbd02f330..d8a26ca1ec5 100644 --- a/htdocs/accountancy/admin/account.php +++ b/htdocs/accountancy/admin/account.php @@ -17,7 +17,7 @@ */ /** - * \file accountingex/admin/account.php + * \file htdocs/accountancy/admin/account.php * \ingroup Accounting Expert * \brief List accounting account */ @@ -35,12 +35,12 @@ if (! $res) // Class require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; -dol_include_once("/accountingex/class/accountingaccount.class.php"); -dol_include_once("/accountingex/class/html.formventilation.class.php"); +dol_include_once("/accountancy/class/accountingaccount.class.php"); +dol_include_once("/accountancy/class/html.formventilation.class.php"); // Langs $langs->load("compta"); -$langs->load("accountingex@accountingex"); +$langs->load("accountancy"); $mesg = ''; $action = GETPOST('action'); @@ -48,10 +48,8 @@ $id = GETPOST('id', 'int'); $rowid = GETPOST('rowid', 'int'); // Security check -if ($user->societe_id > 0) - accessforbidden(); -if (! $user->rights->accountingex->admin) - accessforbidden(); +if (!$user->admin) + accessforbidden(); $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); @@ -130,7 +128,7 @@ if (strlen(trim($_GET["search_pcgsubtype"]))) { $sql .= $db->order($sortfield, $sortorder); $sql .= $db->plimit($limit + 1, $offset); -dol_syslog('accountingex/admin/account.php:: $sql=' . $sql); +dol_syslog('accountancy/admin/account.php:: $sql=' . $sql); $result = $db->query($sql); if ($result) { @@ -144,7 +142,7 @@ if ($result) { print '
'; - print '' . $langs->trans("Addanaccount") . ''; + print '' . $langs->trans("Addanaccount") . ''; print '' . $langs->trans("ImportAccount") . ''; print '

'; @@ -178,7 +176,7 @@ if ($result) { $var = ! $var; print ''; - print '' . $obj->account_number . ''; + print '' . $obj->account_number . ''; print '' . $obj->label . ''; print '' . $obj->account_parent . ''; print '' . $obj->pcg_type . ''; @@ -197,10 +195,10 @@ if ($result) { print ''; if ($user->rights->accountingex->admin) { - print ''; + print ''; print img_edit(); print ' '; - print ''; + print ''; print img_delete(); print ''; } diff --git a/htdocs/accountancy/admin/fiche.php b/htdocs/accountancy/admin/card.php similarity index 94% rename from htdocs/accountancy/admin/fiche.php rename to htdocs/accountancy/admin/card.php index 76fc955fca2..68cdaf704a4 100644 --- a/htdocs/accountancy/admin/fiche.php +++ b/htdocs/accountancy/admin/card.php @@ -18,9 +18,9 @@ */ /** - * \file accountingex/admin/fiche.php - * \ingroup Accounting Expert - * \brief Page fiche de compte + * \file htdocs/accountancy/admin/card.php + * \ingroup Accounting Expert + * \brief Card accounting account */ $res = @include ("../main.inc.php"); if (! $res && file_exists("../main.inc.php")) @@ -34,12 +34,12 @@ if (! $res) // Class require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; -dol_include_once("/accountingex/class/accountingaccount.class.php"); -dol_include_once("/accountingex/class/html.formventilation.class.php"); +dol_include_once("/accountancy/class/accountingaccount.class.php"); +dol_include_once("/accountancy/class/html.formventilation.class.php"); // Langs $langs->load("bills"); -$langs->load("accountingex@accountingex"); +$langs->load("accountancy"); $mesg = ''; $action = GETPOST('action'); @@ -47,17 +47,16 @@ $id = GETPOST('id', 'int'); $rowid = GETPOST('rowid', 'int'); // Security check -if ($user->societe_id > 0) - accessforbidden(); -if (! $user->rights->accountingex->admin) - accessforbidden(); +if (!$user->admin) + accessforbidden(); + $accounting = new AccountingAccount($db); -// action +// Action if ($action == 'add') { $sql = 'SELECT pcg_version FROM ' . MAIN_DB_PREFIX . 'accounting_system WHERE rowid=' . $conf->global->CHARTOFACCOUNTS; - dol_syslog('accountingex/admin/fiche.php:: $sql=' . $sql); + dol_syslog('accountancy/admin/card.php:: $sql=' . $sql); $result = $db->query($sql); $obj = $db->fetch_object($result); @@ -89,7 +88,7 @@ if ($action == 'add') { $sql = 'SELECT pcg_version FROM ' . MAIN_DB_PREFIX . 'accounting_system WHERE rowid=' . $conf->global->CHARTOFACCOUNTS; - dol_syslog('accountingex/admin/fiche.php:: $sql=' . $sql); + dol_syslog('accountancy/admin/card.php:: $sql=' . $sql); $result2 = $db->query($sql); $obj = $db->fetch_object($result2); diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index a326b7058ad..2b042720b60 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -19,7 +19,7 @@ */ /** - * \file htdocs/accountingex/admin/export.php + * \file htdocs/accountancy/admin/export.php * \ingroup Accounting Expert * \brief Setup page to configure accounting expert module */ @@ -41,20 +41,18 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; $langs->load("compta"); $langs->load("bills"); -$langs->load('admin'); -$langs->load('accountingex@accountingex'); +$langs->load("admin"); +$langs->load("accountancy"); // Security check -if ($user->societe_id > 0) - accessforbidden(); -if (! $user->rights->accountingex->admin) - accessforbidden(); +if (!$user->admin) + accessforbidden(); $action = GETPOST('action', 'alpha'); -// Other parameters ACCOUNTINGEX_* +// Other parameters ACCOUNTING_* $list = array ( - 'ACCOUNTINGEX_SEPARATORCSV' + 'ACCOUNTING_SEPARATORCSV' ); /* @@ -67,7 +65,7 @@ if ($action == 'update') { if (! empty($modelcsv)) { - if (! dolibarr_set_const($db, 'ACCOUNTINGEX_MODELCSV', $modelcsv, 'chaine', 0, '', $conf->entity)) { + if (! dolibarr_set_const($db, 'ACCOUNTING_MODELCSV', $modelcsv, 'chaine', 0, '', $conf->entity)) { $error ++; } } else { @@ -121,12 +119,12 @@ print "" . $langs->trans("Selectmodelcsv") . ""; print ""; print ''; $var = True; - while ( $i < min($num_lignes, $limit) ) { + while ( $i < min($num_lines, $limit) ) { $objp = $db->fetch_object($result); $var = ! $var; print ""; diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php index d25dffe4c25..83fb8820f08 100644 --- a/htdocs/accountancy/admin/index.php +++ b/htdocs/accountancy/admin/index.php @@ -21,7 +21,7 @@ */ /** - * \file htdocs/accountingex/admin/index.php + * \file htdocs/accountancy/admin/index.php * \ingroup Accounting Expert * \brief Setup page to configure accounting expert module */ @@ -43,30 +43,28 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; $langs->load("compta"); $langs->load("bills"); -$langs->load('admin'); -$langs->load('accountingex@accountingex'); +$langs->load("admin"); +$langs->load("accountancy"); // Security check -if ($user->societe_id > 0) - accessforbidden(); -if (! $user->rights->accountingex->admin) - accessforbidden(); +if (!$user->admin) + accessforbidden(); $action = GETPOST('action', 'alpha'); -// Other parameters COMPTA_* & ACCOUNTINGEX_* +// Other parameters COMPTA_* & ACCOUNTING_* $list = array ( - 'ACCOUNTINGEX_LIMIT_LIST_VENTILATION', - 'ACCOUNTINGEX_LENGTH_GACCOUNT', - 'ACCOUNTINGEX_LENGTH_AACCOUNT', + 'ACCOUNTING_LIMIT_LIST_VENTILATION', + 'ACCOUNTING_LENGTH_GACCOUNT', + 'ACCOUNTING_LENGTH_AACCOUNT', 'COMPTA_ACCOUNT_CUSTOMER', 'COMPTA_ACCOUNT_SUPPLIER', 'COMPTA_PRODUCT_BUY_ACCOUNT', 'COMPTA_PRODUCT_SOLD_ACCOUNT', 'COMPTA_SERVICE_BUY_ACCOUNT', 'COMPTA_SERVICE_SOLD_ACCOUNT', - 'ACCOUNTINGEX_ACCOUNT_SUSPENSE', - 'ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH' + 'ACCOUNTING_ACCOUNT_SUSPENSE', + 'ACCOUNTING_ACCOUNT_TRANSFER_CASH' ); /* @@ -126,7 +124,7 @@ if ($action == 'update') if ($action == 'setlistsorttodo') { $setlistsorttodo = GETPOST('value', 'int'); - $res = dolibarr_set_const($db, "ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO", $setlistsorttodo, 'yesno', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "ACCOUNTING_LIST_SORT_VENTILATION_TODO", $setlistsorttodo, 'yesno', 0, '', $conf->entity); if (! $res > 0) $error ++; @@ -139,7 +137,7 @@ if ($action == 'setlistsorttodo') { if ($action == 'setlistsortdone') { $setlistsortdone = GETPOST('value', 'int'); - $res = dolibarr_set_const($db, "ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE", $setlistsortdone, 'yesno', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "ACCOUNTING_LIST_SORT_VENTILATION_DONE", $setlistsortdone, 'yesno', 0, '', $conf->entity); if (! $res > 0) $error ++; if (! $error) { @@ -217,7 +215,7 @@ $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_system"; $sql .= " WHERE active = 1"; $sql .= " AND fk_pays = " . $mysoc->country_id; -dol_syslog('accountingex/admin/index.php:: $sql=' . $sql); +dol_syslog('accountancy/admin/index.php:: $sql=' . $sql); $resql = $db->query($sql); $var = True; @@ -267,8 +265,8 @@ foreach ($list as $key) } print ""; -print '' . $langs->trans("ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO") . ''; -if (! empty($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO)) { +print '' . $langs->trans("ACCOUNTING_LIST_SORT_VENTILATION_TODO") . ''; +if (! empty($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_TODO)) { print ''; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; @@ -280,8 +278,8 @@ if (! empty($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO)) { print ''; print ""; -print '' . $langs->trans("ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE") . ''; -if (! empty($conf->global->ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE)) { +print '' . $langs->trans("ACCOUNTING_LIST_SORT_VENTILATION_DONE") . ''; +if (! empty($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_DONE)) { print ''; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; diff --git a/htdocs/accountancy/admin/journaux.php b/htdocs/accountancy/admin/journaux.php index f7b354090e9..139b8b37ae8 100644 --- a/htdocs/accountancy/admin/journaux.php +++ b/htdocs/accountancy/admin/journaux.php @@ -20,9 +20,9 @@ */ /** - * \file htdocs/accountingex/admin/journaux.php - * \ingroup Accounting Expert - * \brief Setup page to configure accounting expert module + * \file htdocs/accountancy/admin/journaux.php + * \ingroup Accounting Expert + * \brief Setup page to configure accounting expert module */ // Dolibarr environment @@ -42,23 +42,21 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; dol_include_once("/core/lib/bank.lib.php"); require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; -$langs->load('accountingex@accountingex'); +$langs->load("accountancy"); // Security check -if ($user->societe_id > 0) - accessforbidden(); -if (! $user->rights->accountingex->admin) - accessforbidden(); +if (!$user->admin) + accessforbidden(); $action = GETPOST('action', 'alpha'); -// Other parameters ACCOUNTINGEX_* +// Other parameters ACCOUNTING_* $list = array ( - 'ACCOUNTINGEX_SELL_JOURNAL', - 'ACCOUNTINGEX_PURCHASE_JOURNAL', - 'ACCOUNTINGEX_SOCIAL_JOURNAL', - 'ACCOUNTINGEX_CASH_JOURNAL', - 'ACCOUNTINGEX_MISCELLANEOUS_JOURNAL' + 'ACCOUNTING_SELL_JOURNAL', + 'ACCOUNTING_PURCHASE_JOURNAL', + 'ACCOUNTING_SOCIAL_JOURNAL', + 'ACCOUNTING_CASH_JOURNAL', + 'ACCOUNTING_MISCELLANEOUS_JOURNAL' ); /* @@ -134,7 +132,7 @@ $sql .= " FROM ".MAIN_DB_PREFIX."lx_bank_account as ba"; $sql .= " WHERE ba.clos = 0" ; $sql .= " ORDER BY label"; -dol_syslog('accountingex/admin/journaux.php:: $sql='.$sql); +dol_syslog('accountancy/admin/journaux.php:: $sql='.$sql); $resql = $db->query($sql); if ($resql) diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index 89bc1996771..55e7b54031e 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -1,7 +1,7 @@ - * Copyright (C) 2013-2014 Alexandre Spangaro + * Copyright (C) 2013-2014 Alexandre Spangaro * Copyright (C) 2014 Florian Henry * * This program is free software; you can redistribute it and/or modify @@ -19,9 +19,9 @@ */ /** - * \file accountingex/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 */ // Dolibarr environment @@ -43,13 +43,11 @@ dol_include_once("/product/class/product.class.php"); $langs->load("companies"); $langs->load("compta"); $langs->load("main"); -$langs->load("accountingex@accountingex"); +$langs->load("accountancy"); // Security check -if ($user->societe_id > 0) - accessforbidden(); -if (! $user->rights->accountingex->admin) - accessforbidden(); +if (!$user->admin) + accessforbidden(); llxHeader('', $langs->trans("Accounts")); @@ -70,7 +68,7 @@ $sql = "SELECT p.rowid, p.ref , p.label, p.description , p.accountancy_code_sell $sql .= " FROM " . MAIN_DB_PREFIX . "product as p"; $sql .= " WHERE p.accountancy_code_sell IS NULL AND p.tosell = 1 OR p.accountancy_code_buy IS NULL AND p.tobuy = 1"; -dol_syslog('accountingex/admin/productaccount.php:: $sql=' . $sql); +dol_syslog('accountancy/admin/productaccount.php:: $sql=' . $sql); $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); diff --git a/htdocs/accountancy/admin/thirdpartyaccount.php b/htdocs/accountancy/admin/thirdpartyaccount.php index c9af52fcc51..7c4745aac86 100644 --- a/htdocs/accountancy/admin/thirdpartyaccount.php +++ b/htdocs/accountancy/admin/thirdpartyaccount.php @@ -18,9 +18,9 @@ */ /** - * \file accountingex/admin/thirdpartyaccount.php - * \ingroup Accounting Expert - * \brief Onglet de gestion de parametrages des ventilations + * \file htdocs/accountancy/admin/thirdpartyaccount.php + * \ingroup Accounting Expert + * \brief Onglet de gestion de parametrages des ventilations */ // Dolibarr environment @@ -41,13 +41,11 @@ dol_include_once("/core/lib/date.lib.php"); $langs->load("companies"); $langs->load("compta"); $langs->load("main"); -$langs->load("accountingex@accountingex"); +$langs->load("accountancy"); // Security check -if ($user->societe_id > 0) - accessforbidden(); -if (! $user->rights->accountingex->admin) - accessforbidden(); +if (!$user->admin) + accessforbidden(); // Date range $year = GETPOST("year"); @@ -164,7 +162,7 @@ $sql .= ")"; $sql .= "ORDER BY name ASC"; -dol_syslog('accountingex/admin/thirdpartyaccount.php:: $sql=' . $sql); +dol_syslog('accountancy/admin/thirdpartyaccount.php:: $sql=' . $sql); $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); diff --git a/htdocs/accountancy/bookkeeping/balancebymonth.php b/htdocs/accountancy/bookkeeping/balancebymonth.php index 5ce55fef7f6..7506ad27a39 100644 --- a/htdocs/accountancy/bookkeeping/balancebymonth.php +++ b/htdocs/accountancy/bookkeeping/balancebymonth.php @@ -19,9 +19,9 @@ */ /** - * \file accountingex/bookkeeping/balancebymonth.php - * \ingroup Accounting Expert - * \brief Balance by month + * \file htdocs/accountancy/bookkeeping/balancebymonth.php + * \ingroup Accounting Expert + * \brief Balance by month */ // Dolibarr environment @@ -37,14 +37,14 @@ if (! $res) // Class dol_include_once("/core/lib/date.lib.php"); -dol_include_once("accountingex/core/lib/account.lib.php"); +dol_include_once("accountancy/core/lib/account.lib.php"); // Langs $langs->load("main"); $langs->load("compta"); $langs->load("bills"); $langs->load("other"); -$langs->load("accountingex@accountingex"); +$langs->load("accountancy"); // Filter $year = $_GET["year"]; @@ -71,7 +71,7 @@ $sql .= " , " . MAIN_DB_PREFIX . "facture as f"; $sql .= " WHERE fd.fk_code_ventilation = 0"; $sql .= " AND f.rowid = fd.fk_facture AND f.fk_statut = 1;"; -dol_syslog('accountingex/bookkeeping/balancebymonth.php:: $sql=' . $sql); +dol_syslog('accountancy/bookkeeping/balancebymonth.php:: $sql=' . $sql); $result = $db->query($sql); if ($result) { $row = $db->fetch_row($result); @@ -101,7 +101,7 @@ $sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=10,bk.montant,0)),2) AS 'Octobre',"; $sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=11,bk.montant,0)),2) AS 'Novembre',"; $sql .= " ROUND(SUM(IF(MONTH(bk.doc_date)=12,bk.montant,0)),2) AS 'Decembre',"; $sql .= " ROUND(SUM(bk.montant),2) as 'Total'"; -$sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping as bk"; +$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as bk"; $sql .= " WHERE bk.doc_date >= '" . $db->idate(dol_get_first_day($y, 1, false)) . "'"; $sql .= " AND bk.doc_date <= '" . $db->idate(dol_get_last_day($y, 12, false)) . "'"; $sql .= " GROUP BY bk.numero_compte"; diff --git a/htdocs/accountancy/bookkeeping/fiche.php b/htdocs/accountancy/bookkeeping/card.php similarity index 93% rename from htdocs/accountancy/bookkeeping/fiche.php rename to htdocs/accountancy/bookkeeping/card.php index b558f70e480..f6a9f347dc0 100644 --- a/htdocs/accountancy/bookkeeping/fiche.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -18,7 +18,7 @@ */ /** - * \file accountingex/bookkeeping/fiche.php + * \file htdocs/accountancy/bookkeeping/card.php * \ingroup Accounting Expert * \brief Page to show account */ @@ -35,10 +35,10 @@ if (! $res) die("Include of main fails"); // Class -dol_include_once("accountingex/class/bookkeeping.class.php"); +dol_include_once("accountancy/class/bookkeeping.class.php"); // Langs -$langs->load("accountingex@accountingex"); +$langs->load("accounting"); // Security check $id = GETPOST('id', 'int'); @@ -190,7 +190,6 @@ else if ($action == "confirm_create") { llxHeader(); $html = new Form($db); -$nbligne = 0; /* * Confirmation to delete the command @@ -205,16 +204,16 @@ if ($action == 'create') { print_fiche_titre($langs->trans("CreateMvts")); $code_journal_array = array ( - $conf->global->ACCOUNTINGEX_SELL_JOURNAL => $conf->global->ACCOUNTINGEX_SELL_JOURNAL, - $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL => $conf->global->ACCOUNTINGEX_PURCHASE_JOURNAL, - $conf->global->ACCOUNTINGEX_BANK_JOURNAL => $conf->global->ACCOUNTINGEX_BANK_JOURNAL, - $conf->global->ACCOUNTINGEX_SOCIAL_JOURNAL => $conf->global->ACCOUNTINGEX_SOCIAL_JOURNAL + $conf->global->ACCOUNTING_SELL_JOURNAL => $conf->global->ACCOUNTING_SELL_JOURNAL, + $conf->global->ACCOUNTING_PURCHASE_JOURNAL => $conf->global->ACCOUNTING_PURCHASE_JOURNAL, + $conf->global->ACCOUNTING_BANK_JOURNAL => $conf->global->ACCOUNTING_BANK_JOURNAL, + $conf->global->ACCOUNTING_SOCIAL_JOURNAL => $conf->global->ACCOUNTING_SOCIAL_JOURNAL ); $book = new BookKeeping($db); $next_num_mvt = $book->next_num_mvt(); - print '
'; + print ''; print '' . "\n"; print '' . "\n"; @@ -337,10 +336,10 @@ if ($action == 'create') { print ''; if ($user->rights->accoutingex->access) { - print ''; + print ''; print img_edit(); print ' '; - print ''; + print ''; print img_delete(); print ''; } diff --git a/htdocs/accountancy/bookkeeping/liste.php b/htdocs/accountancy/bookkeeping/list.php similarity index 91% rename from htdocs/accountancy/bookkeeping/liste.php rename to htdocs/accountancy/bookkeeping/list.php index f587663e71c..5826256db51 100644 --- a/htdocs/accountancy/bookkeeping/liste.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -19,8 +19,8 @@ */ /** - * \file accountingex/bookkeeping/liste.php - * \ingroup Accounting Expert + * \file htdocs/accountancy/bookkeeping/list.php + * \ingroup Accounting Expert * \brief List operation of book keeping */ @@ -36,8 +36,8 @@ if (! $res) die("Include of main fails"); // Class -dol_include_once("/accountingex/class/html.formventilation.class.php"); -dol_include_once("/accountingex/class/bookkeeping.class.php"); +dol_include_once("/accountancy/class/html.formventilation.class.php"); +dol_include_once("/accountancy/class/bookkeeping.class.php"); require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; $page = GETPOST("page"); @@ -64,7 +64,7 @@ if ($action == 'delbookkeeping') { if (! empty($import_key)) { $object = new BookKeeping($db); $result = $object->delete_by_importkey($import_key); - Header("Location: liste.php"); + Header("Location: list.php"); if ($result < 0) { setEventMessage($object->errors, 'errors'); } @@ -106,7 +106,7 @@ else { */ $sql = "SELECT bk.rowid, bk.doc_date, bk.doc_type, bk.doc_ref, bk.code_tiers, bk.numero_compte , bk.label_compte, bk.debit , bk.credit, bk.montant , bk.sens , bk.code_journal , bk.piece_num "; - $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping as bk"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as bk"; if (dol_strlen(trim(GETPOST("search_doc_type")))) { @@ -131,13 +131,13 @@ else { $sql .= " ORDER BY $sortfield $sortorder " . $db->plimit($conf->liste_limit + 1, $offset); - dol_syslog('accountingex/bookkeeping/liste.php:: $sql=' . $sql); + dol_syslog('accountancy/bookkeeping/list.php:: $sql=' . $sql); $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); $i = 0; - print_barre_liste($langs->trans("Bookkeeping"), $page, "liste.php", "", $sortfield, $sortorder, '', $num); + print_barre_liste($langs->trans("Bookkeeping"), $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, '', $num); print ''; print ''; @@ -149,7 +149,7 @@ else { print '
'; - print 'Nouveau mouvement comptable'; + print '' . $langs->trans("NewAccountingMvt") . ''; print '
'; print ''; @@ -174,7 +174,7 @@ else { print "\n"; print ''; - print ''; + print ''; print ''; print ' '; print ''; @@ -211,7 +211,7 @@ else { print '' . price($obj->montant) . ''; print '' . $obj->sens . ''; print '' . $obj->code_journal . ''; - print '' . img_edit() . ''; + print '' . img_edit() . ''; print "\n"; $i ++; } diff --git a/htdocs/accountancy/bookkeeping/listebyyear.php b/htdocs/accountancy/bookkeeping/listbyyear.php similarity index 90% rename from htdocs/accountancy/bookkeeping/listebyyear.php rename to htdocs/accountancy/bookkeeping/listbyyear.php index 2e17e1205ab..45c25f72fbe 100644 --- a/htdocs/accountancy/bookkeeping/listebyyear.php +++ b/htdocs/accountancy/bookkeeping/listbyyear.php @@ -19,7 +19,7 @@ */ /** - * \file accountingex/bookkeeping/listebyyear.php + * \file htdocs/accountancy/bookkeeping/listbyyear.php * \ingroup Accounting Expert * \brief Book keeping by year */ @@ -40,7 +40,7 @@ dol_include_once("/core/lib/date.lib.php"); require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; // Langs -$langs->load("accountingex@accountingex"); +$langs->load("accountancy"); $page = GETPOST("page"); $sortorder = GETPOST("sortorder"); @@ -65,8 +65,8 @@ $offset = $conf->liste_limit * $page; llxHeader('', $langs->trans("Bookkeeping")); -$textprevyear = "" . img_previous() . ""; -$textnextyear = " " . img_next() . ""; +$textprevyear = "" . img_previous() . ""; +$textnextyear = " " . img_next() . ""; /* * Mode Liste @@ -74,12 +74,12 @@ $textnextyear = " " */ $sql = "SELECT bk.rowid, bk.doc_date, bk.doc_type, bk.doc_ref, bk.code_tiers, bk.numero_compte , bk.label_compte, bk.debit , bk.credit, bk.montant , bk.sens, bk.code_journal"; -$sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping as bk"; +$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as bk"; // $sql .= " WHERE bk.doc_date >= '".$db->idate(dol_get_first_day($y,1,false))."'"; // $sql .= " AND bk.doc_date <= '".$db->idate(dol_get_last_day($y,12,false))."'"; $sql .= " ORDER BY $sortfield $sortorder " . $db->plimit($conf->liste_limit + 1, $offset); -dol_syslog('accountingex/bookkeeping/listebyyear.php:: $sql=' . $sql); +dol_syslog('accountancy/bookkeeping/listbyyear.php:: $sql=' . $sql); $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); @@ -122,7 +122,7 @@ if ($resql) { print '' . price($obj->montant) . ''; print '' . $obj->sens . ''; print '' . $obj->code_journal . ''; - print '' . img_edit() . ''; + print '' . img_edit() . ''; print "\n"; $i ++; diff --git a/htdocs/accountancy/class/accountancysystem.class.php b/htdocs/accountancy/class/accountancysystem.class.php index 63b59a95aaf..08d195aedcf 100644 --- a/htdocs/accountancy/class/accountancysystem.class.php +++ b/htdocs/accountancy/class/accountancysystem.class.php @@ -18,9 +18,9 @@ */ /** - * \file accountingex/class/accountancysystem.class.php - * \ingroup Accounting Expert - * \brief File of class to manage accountancy systems + * \file htdocs/accountancy/class/accountancysystem.class.php + * \ingroup Accounting Expert + * \brief File of class to manage accountancy systems */ /** diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php index 9cb29dc1e0b..34c23cb0a51 100644 --- a/htdocs/accountancy/class/accountingaccount.class.php +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -18,9 +18,9 @@ */ /** - * \file accountingex/class/Accountingaccount.class.php - * \ingroup Accounting Expert - * \brief Fichier de la classe des comptes comptable + * \file htdocs/accountancy/class/Accountingaccount.class.php + * \ingroup Accounting Expert + * \brief Fichier de la classe des comptes comptable */ /** diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 0ea235599b6..b1bc5b158f1 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -19,9 +19,9 @@ */ /** - * \file accountingex/class/bookkeeping.class.php - * \ingroup Accounting Expert - * \brief Fichier de la classe des comptes comptable + * \file htdocs/accountancy/class/bookkeeping.class.php + * \ingroup Accounting Expert + * \brief Fichier de la classe des comptes comptable */ /** @@ -63,7 +63,7 @@ class BookKeeping { * \brief Load record in memory */ function fetch_per_mvt($piecenum) { - $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type FROM " . MAIN_DB_PREFIX . "bookkeeping WHERE "; + $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping WHERE "; $sql .= " piece_num = '" . $piecenum . "'"; dol_syslog(get_class($this) . "fetch_per_mvt sql=" . $sql, LOG_DEBUG); @@ -93,7 +93,7 @@ class BookKeeping { $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; $sql .= "numero_compte, label_compte, debit, credit, "; $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; - $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; $sql .= " WHERE rowid = '" . $id . "'"; dol_syslog(get_class($this) . "fetch sql=" . $sql, LOG_DEBUG); @@ -130,7 +130,7 @@ class BookKeeping { * \brief Return next num mvt */ function next_num_mvt() { - $sql = "SELECT MAX(piece_num)+1 as max FROM " . MAIN_DB_PREFIX . "bookkeeping"; + $sql = "SELECT MAX(piece_num)+1 as max FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; dol_syslog(get_class($this) . "next_num_mvt sql=" . $sql, LOG_DEBUG); $result = $this->db->query($sql); @@ -153,7 +153,7 @@ class BookKeeping { $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; $sql .= "numero_compte, label_compte, debit, credit, "; $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; - $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; $sql .= " WHERE piece_num = '" . $piecenum . "'"; dol_syslog(get_class($this) . "fetch_all_per_mvt sql=" . $sql, LOG_DEBUG); @@ -193,8 +193,8 @@ class BookKeeping { } /** - * \brief Insere une ligne dans bookkeeping - * \param user utilisateur qui effectue l'insertion + * \brief Insert line into bookkeeping + * \param user User who inserted operation */ function create() { global $conf, $user, $langs; @@ -203,7 +203,7 @@ class BookKeeping { // first check if line not yet in bookkeeping $sql = "SELECT count(*)"; - $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; $sql .= " WHERE doc_type = '" . $this->doc_type . "'"; $sql .= " AND fk_docdet = " . $this->fk_docdet; $sql .= " AND numero_compte = '" . $this->numero_compte . "'"; @@ -217,7 +217,7 @@ class BookKeeping { // Determine piece_num $sqlnum = "SELECT piece_num"; - $sqlnum .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sqlnum .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; $sqlnum .= " WHERE doc_type = '" . $this->doc_type . "'"; $sqlnum .= " AND fk_docdet = '" . $this->fk_docdet . "'"; $sqlnum .= " AND doc_ref = '" . $this->doc_ref . "'"; @@ -231,7 +231,7 @@ class BookKeeping { dol_syslog(get_class($this) . ":: create this->piece_num=" . $this->piece_num, LOG_DEBUG); if (empty($this->piece_num)) { $sqlnum = "SELECT MAX(piece_num)+1 as maxpiecenum"; - $sqlnum .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sqlnum .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG); $resqlnum = $this->db->query($sqlnum); @@ -249,7 +249,7 @@ class BookKeeping { if (empty($this->date_create)) $this->date_create = $now(); - $sql = "INSERT INTO " . MAIN_DB_PREFIX . "bookkeeping (doc_date, "; + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "accounting_bookkeeping (doc_date, "; $sql .= "doc_type, doc_ref,fk_doc,fk_docdet,code_tiers,numero_compte,label_compte,"; $sql .= "debit,credit,montant,sens,fk_user_author,import_key,code_journal,piece_num)"; $sql .= " VALUES ('" . $this->doc_date . "','" . $this->doc_type . "','" . $this->doc_ref . "'," . $this->fk_doc . ","; @@ -260,7 +260,7 @@ class BookKeeping { dol_syslog(get_class($this) . ":: create sql=" . $sql, LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { - $id = $this->db->last_insert_id(MAIN_DB_PREFIX . "bookkeeping"); + $id = $this->db->last_insert_id(MAIN_DB_PREFIX . "accounting_bookkeeping"); if ($id > 0) { $this->id = $id; @@ -293,7 +293,7 @@ class BookKeeping { // first check if line not yet in bookkeeping $sql = "DELETE"; - $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; $sql .= " WHERE import_key = '" . $importkey . "'"; $resql = $this->db->query($sql); @@ -364,7 +364,7 @@ class BookKeeping { // Put here code to add control on parameters values // Insert request - $sql = "INSERT INTO " . MAIN_DB_PREFIX . "bookkeeping("; + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "accounting_bookkeeping("; $sql .= "doc_date,"; $sql .= "doc_type,"; @@ -414,7 +414,7 @@ class BookKeeping { } if (! $error) { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "bookkeeping"); + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "accounting_bookkeeping"); if (! $notrigger) { // Uncomment this and change MYOBJECT to your own tag if you @@ -491,7 +491,7 @@ class BookKeeping { // Put here code to add a control on parameters values // Update request - $sql = "UPDATE " . MAIN_DB_PREFIX . "bookkeeping SET"; + $sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_bookkeeping SET"; $sql .= " doc_date=" . (dol_strlen($this->doc_date) != 0 ? "'" . $this->db->idate($this->doc_date) . "'" : 'null') . ","; $sql .= " doc_type=" . (isset($this->doc_type) ? "'" . $this->db->escape($this->doc_type) . "'" : "null") . ","; @@ -577,7 +577,7 @@ class BookKeeping { } if (! $error) { - $sql = "DELETE FROM " . MAIN_DB_PREFIX . "bookkeeping"; + $sql = "DELETE FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; $sql .= " WHERE rowid=" . $this->id; dol_syslog(get_class($this) . "::delete sql=" . $sql); @@ -610,7 +610,7 @@ class BookKeeping { $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; $sql .= "numero_compte, label_compte, debit, credit, "; $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; - $sql .= " FROM " . MAIN_DB_PREFIX . "bookkeeping "; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; $resql = $this->db->query($sql); diff --git a/htdocs/accountancy/class/html.formventilation.class.php b/htdocs/accountancy/class/html.formventilation.class.php index 16aeb01dd02..d6f5ce17404 100644 --- a/htdocs/accountancy/class/html.formventilation.class.php +++ b/htdocs/accountancy/class/html.formventilation.class.php @@ -18,8 +18,9 @@ */ /** - * \file accountingex/class/html.formventilation.class.php - * \brief Class for HML form + * \file htdocs/accountancy/class/html.formventilation.class.php + * \ingroup Accounting Expert + * \brief Class for HML form */ class FormVentilation extends Form { var $db; @@ -47,7 +48,7 @@ class FormVentilation extends Form { $date_array = array (); - $sql = 'SELECT DISTINCT import_key from ' . MAIN_DB_PREFIX . 'bookkeeping '; + $sql = 'SELECT DISTINCT import_key from ' . MAIN_DB_PREFIX . 'accounting_bookkeeping'; $sql .= ' ORDER BY import_key DESC'; $out = ''; print ''; @@ -164,7 +164,7 @@ if ($result) { $form = new Form($db); $var = True; - while ( $i < min($num_lignes, $limit) ) { + while ( $i < min($num_lines, $limit) ) { $objp = $db->fetch_object($result); $var = ! $var; print ""; diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 28573c63677..11c3eb3f80b 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -70,7 +70,7 @@ $hookmanager->initHooks(array('admin')); // Put here declaration of dictionaries properties // Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this. -$taborder=array(9,0,4,3,2,0,1,8,19,16,0,5,11,0,6,0,10,25,12,13,0,14,0,7,17,0,22,20,18,21,0,15,0,24,23,0,26); +$taborder=array(9,0,4,3,2,0,1,8,19,16,0,5,11,0,6,0,10,23,12,13,0,14,0,7,17,0,22,20,18,21,0,15,0,24); // Name of SQL tables of dictionaries $tabname=array(); @@ -96,10 +96,8 @@ $tabname[19]= MAIN_DB_PREFIX."c_effectif"; $tabname[20]= MAIN_DB_PREFIX."c_input_method"; $tabname[21]= MAIN_DB_PREFIX."c_availability"; $tabname[22]= MAIN_DB_PREFIX."c_input_reason"; -$tabname[23]= MAIN_DB_PREFIX."accountingaccount"; -$tabname[24]= MAIN_DB_PREFIX."accounting_system"; -$tabname[25]= MAIN_DB_PREFIX."c_revenuestamp"; -$tabname[26]= MAIN_DB_PREFIX."c_type_resource"; +$tabname[23]= MAIN_DB_PREFIX."c_revenuestamp"; +$tabname[24]= MAIN_DB_PREFIX."c_type_resource"; // Dictionary labels $tablib=array(); @@ -125,10 +123,8 @@ $tablib[19]= "DictionaryStaff"; $tablib[20]= "DictionaryOrderMethods"; $tablib[21]= "DictionaryAvailability"; $tablib[22]= "DictionarySource"; -$tablib[23]= "DictionaryAccountancyplan"; -$tablib[24]= "DictionaryAccountancysystem"; -$tablib[25]= "DictionaryRevenueStamp"; -$tablib[26]= "DictionaryResourceType"; +$tablib[23]= "DictionaryRevenueStamp"; +$tablib[24]= "DictionaryResourceType"; // Requests to extract data $tabsql=array(); @@ -154,10 +150,8 @@ $tabsql[19]= "SELECT id as rowid, code, libelle, active FROM ".MAIN_DB_PREF $tabsql[20]= "SELECT rowid as rowid, code, libelle, active FROM ".MAIN_DB_PREFIX."c_input_method"; $tabsql[21]= "SELECT c.rowid as rowid, code, label, active FROM ".MAIN_DB_PREFIX."c_availability AS c"; $tabsql[22]= "SELECT rowid as rowid, code, label, active FROM ".MAIN_DB_PREFIX."c_input_reason"; -$tabsql[23]= "SELECT rowid as rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number as accountancy_code, account_parent, label, active FROM ".MAIN_DB_PREFIX."accountingaccount"; -$tabsql[24]= "SELECT s.rowid as rowid, pcg_version, s.fk_pays as country_id, c.code as country_code, c.label as country, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s, ".MAIN_DB_PREFIX."c_country as c WHERE s.fk_pays=c.rowid and c.active=1"; -$tabsql[25]= "SELECT t.rowid, t.taux, c.label as country, c.code as country_code, t.fk_pays as country_id, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_revenuestamp as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_pays=c.rowid"; -$tabsql[26]= "SELECT rowid as rowid, code, label, active FROM ".MAIN_DB_PREFIX."c_type_resource"; +$tabsql[23]= "SELECT t.rowid, t.taux, c.label as country, c.code as country_code, t.fk_pays as country_id, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_revenuestamp as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_pays=c.rowid"; +$tabsql[24]= "SELECT rowid as rowid, code, label, active FROM ".MAIN_DB_PREFIX."c_type_resource"; // Criteria to sort dictionaries $tabsqlsort=array(); @@ -183,10 +177,8 @@ $tabsqlsort[19]="id ASC"; $tabsqlsort[20]="code ASC, libelle ASC"; $tabsqlsort[21]="code ASC, label ASC"; $tabsqlsort[22]="code ASC, label ASC"; -$tabsqlsort[23]="fk_pcg_version ASC, accountancy_code ASC"; -$tabsqlsort[24]="pcg_version ASC"; -$tabsqlsort[25]="country ASC, taux ASC"; -$tabsqlsort[26]="code ASC,label ASC"; +$tabsqlsort[23]="country ASC, taux ASC"; +$tabsqlsort[24]="code ASC,label ASC"; // Nom des champs en resultat de select pour affichage du dictionnaire $tabfield=array(); @@ -212,10 +204,8 @@ $tabfield[19]= "code,libelle"; $tabfield[20]= "code,libelle"; $tabfield[21]= "code,label"; $tabfield[22]= "code,label"; -$tabfield[23]= "fk_pcg_version,accountancy_code,account_parent,pcg_type,pcg_subtype,label"; -$tabfield[24]= "pcg_version,country_id,country,label"; -$tabfield[25]= "country_id,country,taux,accountancy_code_sell,accountancy_code_buy,note"; -$tabfield[26]= "code,label"; +$tabfield[23]= "country_id,country,taux,accountancy_code_sell,accountancy_code_buy,note"; +$tabfield[24]= "code,label"; // Nom des champs d'edition pour modification d'un enregistrement $tabfieldvalue=array(); @@ -241,10 +231,8 @@ $tabfieldvalue[19]= "code,libelle"; $tabfieldvalue[20]= "code,libelle"; $tabfieldvalue[21]= "code,label"; $tabfieldvalue[22]= "code,label"; -$tabfieldvalue[23]= "fk_pcg_version,accountancy_code,account_parent,pcg_type,pcg_subtype,label"; -$tabfieldvalue[24]= "pcg_version,country,label"; -$tabfieldvalue[25]= "country,taux,accountancy_code_sell,accountancy_code_buy,note"; -$tabfieldvalue[26]= "code,label"; +$tabfieldvalue[23]= "country,taux,accountancy_code_sell,accountancy_code_buy,note"; +$tabfieldvalue[24]= "code,label"; // Nom des champs dans la table pour insertion d'un enregistrement $tabfieldinsert=array(); @@ -270,10 +258,8 @@ $tabfieldinsert[19]= "code,libelle"; $tabfieldinsert[20]= "code,libelle"; $tabfieldinsert[21]= "code,label"; $tabfieldinsert[22]= "code,label"; -$tabfieldinsert[23]= "fk_pcg_version,account_number,account_parent,pcg_type,pcg_subtype,label"; -$tabfieldinsert[24]= "pcg_version,fk_pays,label"; -$tabfieldinsert[25]= "fk_pays,taux,accountancy_code_sell,accountancy_code_buy,note"; -$tabfieldinsert[26]= "code,label"; +$tabfieldinsert[23]= "fk_pays,taux,accountancy_code_sell,accountancy_code_buy,note"; +$tabfieldinsert[24]= "code,label"; // Nom du rowid si le champ n'est pas de type autoincrement // Example: "" if id field is "rowid" and has autoincrement on @@ -302,9 +288,7 @@ $tabrowid[20]= ""; $tabrowid[21]= "rowid"; $tabrowid[22]= "rowid"; $tabrowid[23]= ""; -$tabrowid[24]= ""; -$tabrowid[25]= ""; -$tabrowid[25]= ""; +$tabrowid[23]= ""; // Condition to show dictionary in setup page $tabcond=array(); @@ -330,10 +314,8 @@ $tabcond[19]= ! empty($conf->societe->enabled); $tabcond[20]= ! empty($conf->fournisseur->enabled); $tabcond[21]= ! empty($conf->propal->enabled); $tabcond[22]= (! empty($conf->commande->enabled) || ! empty($conf->propal->enabled)); -$tabcond[23]= (! empty($conf->global->ACCOUNTING_USEDICTTOEDIT) && ! empty($conf->accounting->enabled)); // The accountancy plan should be edited with specific pages. You can set ACCOUNTING_USEDICTTOEDIT to 1 if you want to use dictionary editor. -$tabcond[24]= (! empty($conf->global->ACCOUNTING_USEDICTTOEDIT) && ! empty($conf->accounting->enabled)); // The accountancy system should be edited with specific pages. You can set ACCOUNTING_USEDICTTOEDIT to 1 if you want to use dictionary editor. -$tabcond[25]= true; -$tabcond[26]= ! empty($conf->resource->enabled); +$tabcond[23]= true; +$tabcond[24]= ! empty($conf->resource->enabled); // List of help for fields $tabhelp=array(); @@ -361,8 +343,6 @@ $tabhelp[21] = array(); $tabhelp[22] = array(); $tabhelp[23] = array(); $tabhelp[24] = array(); -$tabhelp[25] = array(); -$tabhelp[26] = array(); // List of check for fields (NOT USED YET) $tabfieldcheck=array(); @@ -390,8 +370,6 @@ $tabfieldcheck[21] = array(); $tabfieldcheck[22] = array(); $tabfieldcheck[23] = array(); $tabfieldcheck[24] = array(); -$tabfieldcheck[25] = array(); -$tabfieldcheck[26] = array(); // Complete all arrays with entries found into modules complete_dictionary_with_modules($taborder,$tabname,$tablib,$tabsql,$tabsqlsort,$tabfield,$tabfieldvalue,$tabfieldinsert,$tabrowid,$tabcond,$tabhelp,$tabfieldcheck); diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 7a83486f286..49d137a014f 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -204,20 +204,6 @@ class modAccounting extends DolibarrModules $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) $r ++; - $this->rights[$r][0] = 150002; // Permission id (must not be already used) - $this->rights[$r][1] = 'Administration_module'; // Permission label - $this->rights[$r][3] = 0; // Permission by default for new user (0/1) - $this->rights[$r][4] = 'admin'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) - $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) - $r ++; - - $this->rights[$r][0] = 150010; // Permission id (must not be already used) - $this->rights[$r][1] = 'Développement'; // Permission label - $this->rights[$r][3] = 0; // Permission by default for new user (0/1) - $this->rights[$r][4] = 'dev'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) - $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) - $r ++; - // Main menu entries $this->menus = array (); $r = 0; diff --git a/htdocs/langs/en_US/accounting.lang b/htdocs/langs/en_US/accountancy.lang similarity index 100% rename from htdocs/langs/en_US/accounting.lang rename to htdocs/langs/en_US/accountancy.lang diff --git a/htdocs/langs/es_ES/accounting.lang b/htdocs/langs/es_ES/accountancy.lang similarity index 100% rename from htdocs/langs/es_ES/accounting.lang rename to htdocs/langs/es_ES/accountancy.lang diff --git a/htdocs/langs/fr_FR/accounting.lang b/htdocs/langs/fr_FR/accountancy.lang similarity index 100% rename from htdocs/langs/fr_FR/accounting.lang rename to htdocs/langs/fr_FR/accountancy.lang From add4528e6cf1aa143083e5b6d317de0402ca001e Mon Sep 17 00:00:00 2001 From: aspangaro Date: Thu, 28 Aug 2014 06:48:22 +0200 Subject: [PATCH 03/22] Update perms --- htdocs/accountancy/admin/account.php | 2 +- htdocs/accountancy/admin/card.php | 4 +- htdocs/accountancy/bookkeeping/card.php | 6 +-- htdocs/accountancy/customer/lines.php | 2 +- htdocs/accountancy/journal/bankjournal.php | 2 +- htdocs/accountancy/journal/cashjournal.php | 2 +- htdocs/accountancy/journal/index.php | 2 +- .../accountancy/journal/purchasesjournal.php | 2 +- htdocs/accountancy/journal/sellsjournal.php | 2 +- htdocs/accountancy/supplier/lines.php | 2 +- htdocs/accountancy/supplier/list.php | 2 +- htdocs/core/modules/modAccounting.class.php | 53 +++++++++++++------ 12 files changed, 51 insertions(+), 30 deletions(-) diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php index d8a26ca1ec5..5aba91751e4 100644 --- a/htdocs/accountancy/admin/account.php +++ b/htdocs/accountancy/admin/account.php @@ -194,7 +194,7 @@ if ($result) { print ''; print ''; print ''; print '
'; - if ($user->rights->accountingex->admin) { + if ($user->admin) { print ''; print img_edit(); print ' '; diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index 68cdaf704a4..b2dfd751726 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -273,13 +273,13 @@ if ($action == 'create') { print '
'; - if ($user->rights->accountingex->admin) { + if ($user->admin) { print '' . $langs->trans('Modify') . ''; } else { print '' . $langs->trans('Modify') . ''; } - if ($user->rights->accountingex->admin) { + if ($user->admin) { print '' . $langs->trans('Delete') . ''; } else { print '' . $langs->trans('Delete') . ''; diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index f6a9f347dc0..ffb88af7658 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -44,7 +44,7 @@ $langs->load("accounting"); $id = GETPOST('id', 'int'); if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountingex->access) +if (! $user->rights->accounting->access) accessforbidden(); $action = GETPOST('action'); @@ -320,7 +320,7 @@ if ($action == 'create') { print '
' . $line->sens . ''; - if ($user->rights->accountingex->access) { + if ($user->rights->accounting->access) { print ''; } print ''; @@ -335,7 +335,7 @@ if ($action == 'create') { print '' . $line->sens . ''; - if ($user->rights->accoutingex->access) { + if ($user->rights->accouting->access) { print ''; print img_edit(); print ' '; diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 8c3a590b4b5..798d70e85ff 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -52,7 +52,7 @@ $account_parent = GETPOST('account_parent'); // Security check if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountancy->access) +if (! $user->rights->accounting->access) accessforbidden(); $formventilation = new FormVentilation($db); diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 6444c8d5fbe..01a925cdeac 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -74,7 +74,7 @@ $action = GETPOST('action'); // Security check if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountingex->access) +if (! $user->rights->accounting->access) accessforbidden(); /* diff --git a/htdocs/accountancy/journal/cashjournal.php b/htdocs/accountancy/journal/cashjournal.php index 0abd1c95cd3..72a9e79140e 100644 --- a/htdocs/accountancy/journal/cashjournal.php +++ b/htdocs/accountancy/journal/cashjournal.php @@ -71,7 +71,7 @@ $date_endyear = GETPOST('date_endyear'); // Security check if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountingex->access) +if (! $user->rights->accounting->access) accessforbidden(); $action = GETPOST('action'); diff --git a/htdocs/accountancy/journal/index.php b/htdocs/accountancy/journal/index.php index 254c98a9fb8..74d85467212 100644 --- a/htdocs/accountancy/journal/index.php +++ b/htdocs/accountancy/journal/index.php @@ -45,7 +45,7 @@ $langs->load("accountancy"); // Security check if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountingex->access) +if (! $user->rights->accounting->access) accessforbidden(); llxHeader('', 'Journaux', ''); diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 83f4fcbf88e..daf3b4d0532 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -64,7 +64,7 @@ $date_endyear = GETPOST('date_endyear'); // Security check if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountingex->access) +if (! $user->rights->accounting->access) accessforbidden(); $action = GETPOST('action'); diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index fc7b57509ac..40b4377e7af 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -65,7 +65,7 @@ $date_endyear = GETPOST('date_endyear'); // Security check if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountingex->access) +if (! $user->rights->accounting->access) accessforbidden(); $action = GETPOST('action'); diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 1273ff8660c..4283b088d15 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -53,7 +53,7 @@ $langs->load("accountancy"); // Security check if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountingex->access) +if (! $user->rights->accounting->access) accessforbidden(); $formventilation = new FormVentilation($db); diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index de6914b1fdc..3f990eb0dfd 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -54,7 +54,7 @@ $mesCasesCochees = GETPOST('mesCasesCochees', 'array'); // Security check if ($user->societe_id > 0) accessforbidden(); -if (! $user->rights->accountingex->access) +if (! $user->rights->accounting->access) accessforbidden(); $formventilation = new FormVentilation($db); diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 49d137a014f..ae525ccaa75 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -54,7 +54,7 @@ class modAccounting extends DolibarrModules $this->const_name = 'MAIN_MODULE_' . strtoupper($this->name); $this->special = 0; - $this->picto = 'accountingex@accountingex'; + $this->picto = 'accounting'; // Defined if the directory /mymodule/inc/triggers/ contains triggers or not // $this->triggers = 1; @@ -65,7 +65,7 @@ class modAccounting extends DolibarrModules ); // Config pages - $this->config_page_url = array('index.php@accounting'); + $this->config_page_url = array('index.php@accountancy'); // Dependencies $this->depends = array ("modFacture","modBanque","modTax"); // List of modules id that must be enabled if this module is enabled @@ -77,10 +77,10 @@ class modAccounting extends DolibarrModules ); // Minimum version of PHP required by module $this->need_dolibarr_version = array ( 3, - 4 + 6 ); // Minimum version of Dolibarr required by module $this->langfiles = array ( - "accountingex@accountingex" + "accountancy" ); // Constants @@ -182,11 +182,7 @@ class modAccounting extends DolibarrModules $this->tabs = array(); // Css - $this->module_parts = array ( - 'css' => array ( - '/accountingex/css/accountingex.css.php' - ) - ); + $this->module_parts = array (); // Boxes $this->boxes = array (); @@ -197,12 +193,37 @@ class modAccounting extends DolibarrModules $this->rights = array (); // Permission array used by this module $r = 0; - $this->rights[$r][0] = 150001; // Permission id (must not be already used) - $this->rights[$r][1] = 'Acces_module'; // Permission label - $this->rights[$r][3] = 0; // Permission by default for new user (0/1) - $this->rights[$r][4] = 'access'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) - $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2) - $r ++; + $this->rights[$r][0] = 50401; + $this->rights[$r][1] = 'Access_accountancy'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'access'; + $this->rights[$r][5] = ''; + $r++; + + $this->rights[$r][0] = 50411; + $this->rights[$r][1] = 'Lire les mouvements comptables'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'mouvements'; + $this->rights[$r][5] = 'lire'; + $r++; + + $this->rights[$r][0] = 50412; + $this->rights[$r][1] = 'Creer/modifier/annuler les mouvements comptables'; + $this->rights[$r][2] = 'w'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'mouvements'; + $this->rights[$r][5] = 'creer'; + $r++; + + $this->rights[$r][0] = 50420; + $this->rights[$r][1] = 'Lire CA, bilans, resultats, journaux, grands livres'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'comptarapport'; + $this->rights[$r][5] = 'lire'; + $r++; // Main menu entries $this->menus = array (); @@ -218,7 +239,7 @@ class modAccounting extends DolibarrModules 'langs' => 'accountingex@accountingex', 'position' => 100, 'perms' => '$user->rights->accountingex->access', - 'enabled' => '$conf->accountingexpert->enabled', + 'enabled' => '$conf->accounting->enabled', 'target' => '', 'user' => 0 ); From 6f8234dd60ac9bbbfe595e103754a97895c3547d Mon Sep 17 00:00:00 2001 From: aspangaro Date: Thu, 28 Aug 2014 07:13:33 +0200 Subject: [PATCH 04/22] Update Eldy menu --- htdocs/core/menus/standard/eldy.lib.php | 24 +- htdocs/core/modules/modAccounting.class.php | 351 +------------------- 2 files changed, 30 insertions(+), 345 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index b1e9ccffd52..0cc34ecb20e 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -858,18 +858,22 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu } } - // Compta simple - if (! empty($conf->comptabilite->enabled) && ($conf->global->MAIN_FEATURES_LEVEL >= 2)) - { - $newmenu->add("/compta/ventilation/index.php?leftmenu=ventil",$langs->trans("Dispatch"),0,$user->rights->compta->ventilation->lire, '', $mainmenu, 'ventil'); - if (empty($leftmenu) || $leftmenu=="ventil") $newmenu->add("/compta/ventilation/liste.php",$langs->trans("ToDispatch"),1,$user->rights->compta->ventilation->lire); - if (empty($leftmenu) || $leftmenu=="ventil") $newmenu->add("/compta/ventilation/lignes.php",$langs->trans("Dispatched"),1,$user->rights->compta->ventilation->lire); - } - - // Compta expert + // Accounting Expert if (! empty($conf->accounting->enabled)) { - + $langs->load("accountancy"); + + $newmenu->add("/accountancy/customer/index.php?leftmenu=ventil_customer",$langs->trans("CustomersVentilation"),0,$user->rights->accounting->ventilation->read, '', $mainmenu, 'ventil_customer'); + if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/customer/list.php",$langs->trans("ToDispatch"),1,$user->rights->accounting->ventilation->read); + if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/customer/lines.php",$langs->trans("Dispatched"),1,$user->rights->accounting->ventilation->read); + + $newmenu->add("/accountancy/supplier/index.php?leftmenu=ventil_supplier",$langs->trans("SuppliersVentilation"),0,$user->rights->accounting->ventilation->read, '', $mainmenu, 'ventil_supplier'); + if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/supplier/list.php",$langs->trans("ToDispatch"),1,$user->rights->accounting->ventilation->read); + if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/supplier/lines.php",$langs->trans("Dispatched"),1,$user->rights->accounting->ventilation->read); + + $newmenu->add("/accountancy/bookkeeping/list.php?leftmenu=bookkeeping",$langs->trans("Bookkeeping"),0,$user->rights->accounting->mouvements->lire, '', $mainmenu, 'bookeeping'); + if (empty($leftmenu) || $leftmenu=="bookeeping") $newmenu->add("/accountancy/bookkeeping/listbyyear.php",$langs->trans("ByYear"),1,$user->rights->accounting->mouvements->lire); + if (empty($leftmenu) || $leftmenu=="bookeeping") $newmenu->add("/accountancy/bookkeeping/balancebymonth.php.php",$langs->trans("AccountBalanceByMonth"),1,$user->rights->accounting->mouvements->lire); } // Rapports diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index ae525ccaa75..3d4174be73e 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -200,6 +200,22 @@ class modAccounting extends DolibarrModules $this->rights[$r][4] = 'access'; $this->rights[$r][5] = ''; $r++; + + $this->rights[$r][0] = 50402; + $this->rights[$r][1] = 'Read ventilation'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'ventilation'; + $this->rights[$r][5] = 'read'; + $r++; + + $this->rights[$r][0] = 50403; + $this->rights[$r][1] = 'Dispatched ventilation'; + $this->rights[$r][2] = 'r'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'ventilation'; + $this->rights[$r][5] = 'dispatch'; + $r++; $this->rights[$r][0] = 50411; $this->rights[$r][1] = 'Lire les mouvements comptables'; @@ -228,341 +244,6 @@ class modAccounting extends DolibarrModules // Main menu entries $this->menus = array (); $r = 0; - - $this->menu[$r] = array ( - 'fk_menu' => 0, - 'type' => 'top', - 'titre' => 'Accounting', - 'mainmenu' => 'accounting', - 'leftmenu' => '0', - 'url' => '/accountingex/customer/index.php', - 'langs' => 'accountingex@accountingex', - 'position' => 100, - 'perms' => '$user->rights->accountingex->access', - 'enabled' => '$conf->accounting->enabled', - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting', - 'type' => 'left', - 'titre' => 'CustomersVentilation', - 'leftmenu' => 'CustomersVentilation', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/customer/index.php', - 'langs' => 'accountingex@accountingex', - 'position' => 101, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=CustomersVentilation', - 'type' => 'left', - 'titre' => 'ToDispatch', - 'leftmenu' => 'ToDispatchCustomer', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/customer/liste.php', - 'langs' => 'accountingex@accountingex', - 'position' => 102, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=CustomersVentilation', - 'type' => 'left', - 'titre' => 'Dispatched', - 'leftmenu' => 'DispatchedCustomer', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/customer/lignes.php', - 'langs' => 'accountingex@accountingex', - 'position' => 103, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting', - 'type' => 'left', - 'titre' => 'SuppliersVentilation', - 'leftmenu' => 'SuppliersVentilation', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/supplier/index.php', - 'langs' => 'accountingex@accountingex', - 'position' => 110, - 'enabled' => '$conf->fournisseur->enabled', - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=SuppliersVentilation', - 'type' => 'left', - 'titre' => 'ToDispatch', - 'leftmenu' => 'ToDispatchSupplier', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/supplier/liste.php', - 'langs' => 'accountingex@accountingex', - 'position' => 111, - 'enabled' => '$conf->fournisseur->enabled', - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=SuppliersVentilation', - 'type' => 'left', - 'titre' => 'Dispatched', - 'leftmenu' => 'DispatchedSupplier', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/supplier/lignes.php', - 'langs' => 'accountingex@accountingex', - 'position' => 112, - 'enabled' => '$conf->fournisseur->enabled', - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting', - 'type' => 'left', - 'titre' => 'Journaux', - 'leftmenu' => 'Journaux', - 'mainmenu' => 'accounting', - // 'url'=>'', - 'langs' => 'accountingex@accountingex', - 'position' => 120, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Journaux', - 'type' => 'left', - 'titre' => 'SellsJournal', - 'leftmenu' => 'SellsJournal', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/journal/sellsjournal.php', - 'langs' => 'accountingex@accountingex', - 'position' => 121, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Journaux', - 'type' => 'left', - 'titre' => 'PurchasesJournal', - 'leftmenu' => 'PurchasesJournal', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/journal/purchasesjournal.php', - 'langs' => 'accountingex@accountingex', - 'position' => 122, - 'enabled' => '$conf->fournisseur->enabled', - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Journaux', - 'type' => 'left', - 'titre' => 'CashJournal', - 'leftmenu' => 'CashJournal', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/journal/cashjournal.php', - 'langs' => 'accountingex@accountingex', - 'position' => 123, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Journaux', - 'type' => 'left', - 'titre' => 'BankJournal', - 'leftmenu' => 'BankJournal', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/journal/bankjournal.php', - 'langs' => 'accountingex@accountingex', - 'position' => 200, - 'enabled' => '$conf->banque->enabled', - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting', - 'type' => 'left', - 'titre' => 'Bookkeeping', - 'leftmenu' => 'Bookkeeping', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/bookkeeping/liste.php', - 'langs' => 'accountingex@accountingex', - 'position' => 300, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Bookkeeping', - 'type' => 'left', - 'titre' => 'ByYear', - 'leftmenu' => 'ByYear', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/bookkeeping/listebyyear.php', - 'langs' => 'accountingex@accountingex', - 'position' => 301, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Bookkeeping', - 'type' => 'left', - 'titre' => 'AccountBalanceByMonth', - 'leftmenu' => 'AccountBalanceByMonth', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/bookkeeping/balancebymonth.php', - 'langs' => 'accountingex@accountingex', - 'position' => 302, - 'enabled' => 1, - 'perms' => 1, - 'target' => '', - 'user' => 0 - ); - $r ++; - - // Parameters Menu - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting', - 'type' => 'left', - 'titre' => 'Parameters', - 'leftmenu' => 'Parameters', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/admin/index.php', - 'langs' => 'accountingex@accountingex', - 'position' => 400, - 'enabled' => 1, - 'perms' => '$user->rights->accountingex->admin', - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Parameters', - 'type' => 'left', - 'titre' => 'Globalparameters', - 'leftmenu' => 'Globalparameters', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/admin/index.php', - 'langs' => 'accountingex@accountingex', - 'position' => 401, - 'enabled' => 1, - 'perms' => '$user->rights->accountingex->admin', - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Globalparameters', - 'type' => 'left', - 'titre' => 'Chartofaccounts', - 'leftmenu' => 'Chartofaccounts', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/admin/account.php', - 'langs' => 'accountingex@accountingex', - 'position' => 402, - 'enabled' => 1, - 'perms' => '$user->rights->accountingex->admin', - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Globalparameters', - 'type' => 'left', - 'titre' => 'Menuaccount', - 'leftmenu' => 'Menuaccount', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/admin/account.php', - 'langs' => 'accountingex@accountingex', - 'position' => 403, - 'enabled' => 1, - 'perms' => '$user->rights->accountingex->admin', - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Parameters', - 'type' => 'left', - 'titre' => 'Menuthirdpartyaccount', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/admin/thirdpartyaccount.php', - 'langs' => 'accountingex@accountingex', - 'position' => 404, - 'enabled' => 1, - 'perms' => '$user->rights->accountingex->admin', - 'target' => '', - 'user' => 0 - ); - $r ++; - - $this->menu[$r] = array ( - 'fk_menu' => 'fk_mainmenu=accounting,fk_leftmenu=Parameters', - 'type' => 'left', - 'titre' => 'MenuTools', - 'mainmenu' => 'accounting', - 'url' => '/accountingex/admin/productaccount.php', - 'langs' => 'accountingex@accountingex', - 'position' => 405, - 'enabled' => 1, - 'perms' => '$user->rights->accountingex->admin', - 'target' => '', - 'user' => 0 - ); - $r ++; } /** From 9b3a3a47c284c682678fc15ddc3bd0610481545d Mon Sep 17 00:00:00 2001 From: aspangaro Date: Thu, 28 Aug 2014 07:18:28 +0200 Subject: [PATCH 05/22] Add link chart of accounts in administration --- htdocs/accountancy/admin/account.php | 2 +- htdocs/core/menus/standard/empty.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php index 5aba91751e4..e3fd4da9dd1 100644 --- a/htdocs/accountancy/admin/account.php +++ b/htdocs/accountancy/admin/account.php @@ -52,7 +52,7 @@ if (!$user->admin) accessforbidden(); $sortfield = GETPOST("sortfield", 'alpha'); -$sortorder = GETPOST("sortorder", 'alpha'); +$sortorder = GETPOST("sortorder", 'sortorder'); $limit = $conf->liste_limit; $page = GETPOST("page", 'int'); if ($page == - 1) { diff --git a/htdocs/core/menus/standard/empty.php b/htdocs/core/menus/standard/empty.php index a6063c84d18..74b195a1749 100644 --- a/htdocs/core/menus/standard/empty.php +++ b/htdocs/core/menus/standard/empty.php @@ -115,6 +115,7 @@ class MenuManager $this->menu->add("/admin/modules.php", $langs->trans("Modules"),1); $this->menu->add("/admin/menus.php", $langs->trans("Menus"),1); $this->menu->add("/admin/ihm.php", $langs->trans("GUISetup"),1); + $this->menu->add("/aaccountancy/account.php", $langs->trans("Chartofaccounts"),1); $this->menu->add("/admin/fiscalyear.php", $langs->trans("Fiscalyear"),1); $this->menu->add("/admin/boxes.php", $langs->trans("Boxes"),1); $this->menu->add("/admin/delais.php",$langs->trans("Alerts"),1); From 84dff915c19ec9c4f2ac4c4d881c3fdc4e070487 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Thu, 28 Aug 2014 07:21:40 +0200 Subject: [PATCH 06/22] Typo --- htdocs/accountancy/bookkeeping/balancebymonth.php | 2 +- htdocs/accountancy/bookkeeping/card.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/balancebymonth.php b/htdocs/accountancy/bookkeeping/balancebymonth.php index 7506ad27a39..e3ff328ca43 100644 --- a/htdocs/accountancy/bookkeeping/balancebymonth.php +++ b/htdocs/accountancy/bookkeeping/balancebymonth.php @@ -37,7 +37,7 @@ if (! $res) // Class dol_include_once("/core/lib/date.lib.php"); -dol_include_once("accountancy/core/lib/account.lib.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; // Langs $langs->load("main"); diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index ffb88af7658..e4264ca9a2c 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -34,7 +34,7 @@ if (! $res && file_exists("../../../main.inc.php")) if (! $res) die("Include of main fails"); - // Class +// Class dol_include_once("accountancy/class/bookkeeping.class.php"); // Langs From bb45b8bbc5dbbc1ef5c352e4536e7360d15680de Mon Sep 17 00:00:00 2001 From: aspangaro Date: Thu, 28 Aug 2014 07:37:29 +0200 Subject: [PATCH 07/22] Typo & admin menu --- htdocs/core/menus/standard/eldy.lib.php | 1 + htdocs/core/menus/standard/empty.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 125bba1e656..de110ff126f 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -501,6 +501,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $newmenu->add("/admin/modules.php?mainmenu=home", $langs->trans("Modules").$warnpicto,1); $newmenu->add("/admin/menus.php?mainmenu=home", $langs->trans("Menus"),1); $newmenu->add("/admin/ihm.php?mainmenu=home", $langs->trans("GUISetup"),1); + $newmenu->add("/accountancy/admin/account.php?mainmenu=home", $langs->trans("Chartofaccounts"),1); $newmenu->add("/admin/fiscalyear.php?mainmenu=home", $langs->trans("Fiscalyear"),1); if (! in_array($langs->defaultlang,array('en_US','en_GB','en_NZ','en_AU','fr_FR','fr_BE','es_ES','ca_ES'))) { diff --git a/htdocs/core/menus/standard/empty.php b/htdocs/core/menus/standard/empty.php index 74b195a1749..d8b8d0f04cb 100644 --- a/htdocs/core/menus/standard/empty.php +++ b/htdocs/core/menus/standard/empty.php @@ -115,7 +115,7 @@ class MenuManager $this->menu->add("/admin/modules.php", $langs->trans("Modules"),1); $this->menu->add("/admin/menus.php", $langs->trans("Menus"),1); $this->menu->add("/admin/ihm.php", $langs->trans("GUISetup"),1); - $this->menu->add("/aaccountancy/account.php", $langs->trans("Chartofaccounts"),1); + $this->menu->add("/accountancy/admin/account.php", $langs->trans("Chartofaccounts"),1); $this->menu->add("/admin/fiscalyear.php", $langs->trans("Fiscalyear"),1); $this->menu->add("/admin/boxes.php", $langs->trans("Boxes"),1); $this->menu->add("/admin/delais.php",$langs->trans("Alerts"),1); From bc686a7995d0044d1e369b5c2439f2353a3bd5dd Mon Sep 17 00:00:00 2001 From: aspangaro Date: Fri, 29 Aug 2014 06:43:05 +0200 Subject: [PATCH 08/22] Test Correct travis --- htdocs/core/modules/modAccounting.class.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 3d4174be73e..308c765f5da 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -32,11 +32,10 @@ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; class modAccounting extends DolibarrModules { /** - * Constructor. - * Define names, constants, directories, boxes, permissions + * Constructor. Define names, constants, directories, boxes, permissions * - * @param DoliDB $db - */ + * @param DoliDB $db Database handler + */ function __construct($db) { global $conf; From 1a7c88751c163417a989bbbdd47512f52e8e05ea Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sat, 30 Aug 2014 05:19:48 +0200 Subject: [PATCH 09/22] Correct travis --- htdocs/core/lib/accounting.lib.php | 39 +++++++++++++++++------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index e11aa0770b2..e1c853b057c 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -18,16 +18,15 @@ */ /** - * \file accountingex/core/lib/account.lib.php - * \ingroup Accounting Expert - * \brief Ensemble de fonctions de base pour les comptes comptables + * \file htdocs/core/lib/account.lib.php + * \ingroup Accounting Expert + * \brief Library of accountancy functions */ /** - * Prepare array with list of tabs + * Prepare array with list of admin tabs * - * @param Object $object to tabs - * @return array of tabs to shoc + * @return array Array of tabs to show */ function admin_accounting_prepare_head($object) { global $langs, $conf; @@ -64,8 +63,7 @@ function admin_accounting_prepare_head($object) { /** * Prepare array with list of tabs * - * @param Object $object to tabs - * @return array of tabs to shoc + * @return array Array of tabs to show */ function accounting_prepare_head($object) { global $langs, $conf; @@ -90,14 +88,13 @@ function accounting_prepare_head($object) { } /** - * Return general account with defined length + * Return general accounting account with defined length * - * @param $account - * - * @return $account + * @param string $account Accounting account + * @return string String with defined length */ function length_accountg($account) { - global $conf, $langs; + global $conf; $g = $conf->global->ACCOUNTING_LENGTH_GACCOUNT; @@ -122,11 +119,10 @@ function length_accountg($account) { } /** - * Return auxiliary account with defined length + * Return auxiliary accounting account with defined length * - * @param $account - * - * @return $account + * @param string $account Accounting account + * @return string String with defined length */ function length_accounta($accounta) { global $conf, $langs; @@ -153,6 +149,15 @@ function length_accounta($accounta) { } } +/** + * Return accounting account with defined length for Sage Export Software + * + * @param string $txt Accounting account + * @param int $len Length + * @param int $end Number of characters + * + * @return string Formated string + */ /** * Return account with defined length for Sage export software * From cc9f26a0352661529c0818ad7c4866cd885953c6 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sat, 30 Aug 2014 05:44:12 +0200 Subject: [PATCH 10/22] Correct travis --- htdocs/core/lib/accounting.lib.php | 39 +++++++++++++++--------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index e1c853b057c..a030d96224f 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -18,17 +18,18 @@ */ /** - * \file htdocs/core/lib/account.lib.php - * \ingroup Accounting Expert - * \brief Library of accountancy functions + * \file htdocs/core/lib/account.lib.php + * \ingroup Accounting Expert + * \brief Library of accountancy functions */ /** - * Prepare array with list of admin tabs + * Prepare array with list of admin tabs * - * @return array Array of tabs to show + * @return array Array of tabs to show */ -function admin_accounting_prepare_head($object) { +function admin_accounting_prepare_head() +{ global $langs, $conf; $h = 0; @@ -61,17 +62,19 @@ function admin_accounting_prepare_head($object) { } /** - * Prepare array with list of tabs + * Prepare array with list of tabs * - * @return array Array of tabs to show + * @param Object $object Accounting account + * @return array Array of tabs to show */ -function accounting_prepare_head($object) { +function accounting_prepare_head($object) +{ global $langs, $conf; $h = 0; $head = array (); - $head[$h][0] = dol_buildpath('/accountancy/admin/fiche.php', 1) . '?id=' . $object->id; + $head[$h][0] = dol_buildpath('/accountancy/admin/card.php', 1) . '?id=' . $object->id; $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'card'; $h ++; @@ -93,7 +96,8 @@ function accounting_prepare_head($object) { * @param string $account Accounting account * @return string String with defined length */ -function length_accountg($account) { +function length_accountg($account) +{ global $conf; $g = $conf->global->ACCOUNTING_LENGTH_GACCOUNT; @@ -124,7 +128,8 @@ function length_accountg($account) { * @param string $account Accounting account * @return string String with defined length */ -function length_accounta($accounta) { +function length_accounta($accounta) +{ global $conf, $langs; $a = $conf->global->ACCOUNTING_LENGTH_AACCOUNT; @@ -158,14 +163,8 @@ function length_accounta($accounta) { * * @return string Formated string */ -/** - * Return account with defined length for Sage export software - * - * @param $account - * - * @return $account - */ -function length_exportsage($txt, $len, $end) { +function length_exportsage($txt, $len, $end) +{ // $txt = utf8_decode($txt); // problem with this function, but we need to have the number of letter if (strlen($txt) == $len) { From d6b2cb0b31d386f1373b632dde6c6cf1227590bf Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sat, 30 Aug 2014 06:05:02 +0200 Subject: [PATCH 11/22] Correct travis --- htdocs/accountancy/journal/bankjournal.php | 4 +--- htdocs/accountancy/journal/cashjournal.php | 4 +--- htdocs/accountancy/journal/purchasesjournal.php | 4 +--- htdocs/accountancy/journal/sellsjournal.php | 4 +--- htdocs/core/lib/accounting.lib.php | 4 ++-- 5 files changed, 6 insertions(+), 14 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 01a925cdeac..259dc35a5b0 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -478,9 +478,7 @@ if ($action == 'export_csv') { $builddate = time(); $description = $langs->trans("DescBankJournal") . '
'; $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); - report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( - 'action' => '' - )); + report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => '')); print ''; diff --git a/htdocs/accountancy/journal/cashjournal.php b/htdocs/accountancy/journal/cashjournal.php index 72a9e79140e..1eee5de5fb5 100644 --- a/htdocs/accountancy/journal/cashjournal.php +++ b/htdocs/accountancy/journal/cashjournal.php @@ -464,9 +464,7 @@ if ($action == 'export_csv') { $builddate = time(); $description = $langs->trans("DescCashJournal") . '
'; $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); - report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( - 'action' => '' - )); + report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => '')); print ''; diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index daf3b4d0532..bcb45646f14 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -372,9 +372,7 @@ if ($action == 'export_csv') { else $description .= $langs->trans("DepositsAreIncluded"); $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); - report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( - 'action' => '' - )); + report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => '')); print ''; diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 40b4377e7af..09cbe5924aa 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -378,9 +378,7 @@ if ($action == 'export_csv') { else $description .= $langs->trans("DepositsAreIncluded"); $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); - report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array ( - 'action' => '' - )); + report_header($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => '')); print ''; diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index a030d96224f..e7313c73aee 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -93,7 +93,7 @@ function accounting_prepare_head($object) /** * Return general accounting account with defined length * - * @param string $account Accounting account + * @param string $account General accounting account * @return string String with defined length */ function length_accountg($account) @@ -125,7 +125,7 @@ function length_accountg($account) /** * Return auxiliary accounting account with defined length * - * @param string $account Accounting account + * @param string $accounta Auxiliary accounting account * @return string String with defined length */ function length_accounta($accounta) From 74ef9d5c59f224c63e05e239e2a66bc7a2056d8a Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sat, 30 Aug 2014 06:22:18 +0200 Subject: [PATCH 12/22] Changelog --- ChangeLog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index e7c05ea3295..c9af73628a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -64,6 +64,9 @@ For users: - Fix: [ bug #1469 ] Triggers CONTACT_MODIFY and CONTACT_DELETE duplicates error message - Fix: [ bug #1537 ] Difference between societe.nom and adherent.societe. +New experimental module: +- New: Module Accounting Expert to manage accountancy + For translators: - Update language files. - New: When a translation is not available we always jump to en_US and only en_US. From 6bad77d8fb8d737a4979fa6d825ac1baf27424b8 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sat, 30 Aug 2014 06:46:42 +0200 Subject: [PATCH 13/22] Move script --- .../accountancy/export-thirdpartyaccount.php | 28 ++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) rename htdocs/accountancy/admin/thirdpartyaccount.php => scripts/accountancy/export-thirdpartyaccount.php (92%) diff --git a/htdocs/accountancy/admin/thirdpartyaccount.php b/scripts/accountancy/export-thirdpartyaccount.php similarity index 92% rename from htdocs/accountancy/admin/thirdpartyaccount.php rename to scripts/accountancy/export-thirdpartyaccount.php index 7c4745aac86..7fb4a7c56e0 100644 --- a/htdocs/accountancy/admin/thirdpartyaccount.php +++ b/scripts/accountancy/export-thirdpartyaccount.php @@ -18,25 +18,14 @@ */ /** - * \file htdocs/accountancy/admin/thirdpartyaccount.php + * \file htdocs/accountancy/admin/export-thirdpartyaccount.php * \ingroup Accounting Expert - * \brief Onglet de gestion de parametrages des ventilations + * \brief Page to detect empty accounting account */ -// Dolibarr environment -$res = @include ("../main.inc.php"); -if (! $res && file_exists("../main.inc.php")) - $res = @include ("../main.inc.php"); -if (! $res && file_exists("../../main.inc.php")) - $res = @include ("../../main.inc.php"); -if (! $res && file_exists("../../../main.inc.php")) - $res = @include ("../../../main.inc.php"); -if (! $res) - die("Include of main fails"); - - // Class -dol_include_once("/core/lib/report.lib.php"); -dol_include_once("/core/lib/date.lib.php"); +require_once($path."../../htdocs/master.inc.php"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; $langs->load("companies"); $langs->load("compta"); @@ -47,7 +36,7 @@ $langs->load("accountancy"); if (!$user->admin) accessforbidden(); - // Date range +// Date range $year = GETPOST("year"); if (empty($year)) { $year_current = strftime("%Y", dol_now()); @@ -124,10 +113,11 @@ print ' - function launch_export() { + function launch_export() + { $("div.fiche div.tabBar form input[name=\"action\"]").val("export_csv"); $("div.fiche div.tabBar form input[type=\"submit\"]").click(); - $("div.fiche div.tabBar form input[name=\"action\"]").val(""); + $("div.fiche div.tabBar form input[name=\"action\"]").val(); } '; From d3a14c514a6281ec85b9dd95f84191d9a6b098f6 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sat, 30 Aug 2014 07:11:28 +0200 Subject: [PATCH 14/22] Correct travis --- .../class/html.formventilation.class.php | 87 +++++++++++-------- 1 file changed, 49 insertions(+), 38 deletions(-) diff --git a/htdocs/accountancy/class/html.formventilation.class.php b/htdocs/accountancy/class/html.formventilation.class.php index d6f5ce17404..e9d65943eac 100644 --- a/htdocs/accountancy/class/html.formventilation.class.php +++ b/htdocs/accountancy/class/html.formventilation.class.php @@ -18,30 +18,35 @@ */ /** - * \file htdocs/accountancy/class/html.formventilation.class.php - * \ingroup Accounting Expert - * \brief Class for HML form + * \file htdocs/accountancy/class/html.formventilation.class.php + * \ingroup Accounting Expert + * \brief File of class with all html predefined components */ -class FormVentilation extends Form { + +/** + * Class to manage generation of HTML components for bank module + */ +class FormVentilation extends Form +{ var $db; var $error; /** - * Constructor - * - * @param DoliDB $db handler - */ - function __construct($db) { - $this->db = $db; - return 1; - } - + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + $this->db = $db; + } + /** - * Return select filter with date of transaction + * Return select filter with date of transaction * - * @param string $htmlname of input - * @param string $selectedkey value - * @return string select input + * @param string $htmlname Name of select field + * @param string $selectedkey Value + * @return string HTML edit field */ function select_bookkeeping_importkey($htmlname = 'importkey', $selectedkey) { global $langs; @@ -83,15 +88,17 @@ class FormVentilation extends Form { } /** - * Return list of the accounts with label + * Return list of accounts with label by chart of accounts * - * @param string $selectedid pcg_type - * @param string $htmlname of combo list - * @param int $showempty en empty line - * - * @return string with HTML select + * @param string $selectedid Preselected chart of accounts + * @param string $htmlname Name of field in html form + * @param int $showempty Add an empty field + * @param array $events Event options + * + * @return string String with HTML select */ - function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array()) { + function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array()) + { global $conf, $user, $langs; $out = ''; @@ -142,15 +149,17 @@ class FormVentilation extends Form { } /** - * Return list of pcg with label + * Return list of accounts with label by class of accounts * - * @param string $selectedid pcg_type - * @param string $htmlname of combo list - * @param int $showempty en empty line - * - * @return string with HTML select + * @param string $selectedid Preselected pcg_type + * @param string $htmlname Name of field in html form + * @param int $showempty Add an empty field + * @param array $events Event options + * + * @return string String with HTML select */ - function select_pcgtype($selectid, $htmlname = 'pcg_type', $showempty = 0, $event = array()) { + function select_pcgtype($selectid, $htmlname = 'pcg_type', $showempty = 0, $event = array()) + { global $conf, $user, $langs; $out = ''; @@ -194,15 +203,17 @@ class FormVentilation extends Form { } /** - * Return subtype list of pcg with label + * Return list of accounts with label by sub_class of accounts * - * @param string $selectedid pcg_type - * @param string $htmlname of combo list - * @param int $showempty en empty line - * - * @return string with HTML select + * @param string $selectedid Preselected pcg_type + * @param string $htmlname Name of field in html form + * @param int $showempty Add an empty field + * @param array $events Event options + * + * @return string String with HTML select */ - function select_pcgsubtype($selectid, $htmlname = 'pcg_subtype', $showempty = 0, $event = array()) { + function select_pcgsubtype($selectid, $htmlname = 'pcg_subtype', $showempty = 0, $event = array()) + { global $conf, $user, $langs; $out = ''; From 3b8a3ccb142845dc71552793072f169287421be7 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sat, 30 Aug 2014 07:37:01 +0200 Subject: [PATCH 15/22] Correct travis --- .../class/html.formventilation.class.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/htdocs/accountancy/class/html.formventilation.class.php b/htdocs/accountancy/class/html.formventilation.class.php index e9d65943eac..b6d49e0c36a 100644 --- a/htdocs/accountancy/class/html.formventilation.class.php +++ b/htdocs/accountancy/class/html.formventilation.class.php @@ -48,12 +48,13 @@ class FormVentilation extends Form * @param string $selectedkey Value * @return string HTML edit field */ - function select_bookkeeping_importkey($htmlname = 'importkey', $selectedkey) { + function select_bookkeeping_importkey($htmlname = 'importkey', $selectedkey) + { global $langs; $date_array = array (); - $sql = 'SELECT DISTINCT import_key from ' . MAIN_DB_PREFIX . 'accounting_bookkeeping'; + $sql = 'SELECT DISTINCT import_key from ' . MAIN_DB_PREFIX . 'accounting_bookkeeping'; $sql .= ' ORDER BY import_key DESC'; $out = '' . "\n"; diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index b1bc5b158f1..394a8f20354 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -2,11 +2,11 @@ /* Copyright (C) 2004-2005 Rodolphe Quiedeville * Copyright (C) 2013-2014 Olivier Geffroy * Copyright (C) 2013-2014 Alexandre Spangaro - * Copyright (C) 2013-2014 Florian Henry + * Copyright (C) 2013-2014 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 - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, @@ -21,14 +21,14 @@ /** * \file htdocs/accountancy/class/bookkeeping.class.php * \ingroup Accounting Expert - * \brief Fichier de la classe des comptes comptable + * \brief File of class to manage book keeping */ /** - * \class BookKeeping - * \brief Classe permettant la gestion des comptes generaux de compta + * Class to manage accountancy book keeping */ -class BookKeeping { +class BookKeeping +{ var $db; var $id; var $doc_date; @@ -50,48 +50,27 @@ class BookKeeping { var $linesexport = array (); var $linesmvt = array (); - /** - * \brief Constructeur de la classe - * \param DB handler acces base de donnees - * \param id id compte (0 par defaut) - */ - function BookKeeping($db) { - $this->db = $db; - } + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db; + } /** - * \brief Load record in memory - */ - function fetch_per_mvt($piecenum) { - $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping WHERE "; - $sql .= " piece_num = '" . $piecenum . "'"; - - dol_syslog(get_class($this) . "fetch_per_mvt sql=" . $sql, LOG_DEBUG); - $result = $this->db->query($sql); - if ($result) { - $obj = $this->db->fetch_object($result); - - $this->piece_num = $obj->piece_num; - $this->code_journal = $obj->code_journal; - $this->doc_date = $this->db->jdate($obj->doc_date); - $this->doc_ref = $obj->doc_ref; - $this->doc_type = $obj->doc_type; - } else { - $this->error = "Error " . $this->db->lasterror(); - dol_syslog(get_class($this) . "::fetch_per_mvt " . $this->error, LOG_ERR); - return - 1; - } - - return 1; - } - - /** - * \brief Load record in memory - */ - function fetch($id) { - $sql = "SELECT rowid, doc_date, doc_type, "; - $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; - $sql .= "numero_compte, label_compte, debit, credit, "; + * Load a line into memory from database + * + * @param int $id id of line to get + * @return int <0 if KO, >0 if OK + */ + function fetch($id) + { + $sql = "SELECT rowid, doc_date, doc_type,"; + $sql .= " doc_ref, fk_doc, fk_docdet, code_tiers, "; + $sql .= " numero_compte, label_compte, debit, credit, "; $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; $sql .= " WHERE rowid = '" . $id . "'"; @@ -117,7 +96,9 @@ class BookKeeping { $this->sens = $obj->sens; $this->code_journal = $obj->code_journal; $this->piece_num = $obj->piece_num; - } else { + } + else + { $this->error = "Error " . $this->db->lasterror(); dol_syslog(get_class($this) . "::fetch " . $this->error, LOG_ERR); return - 1; @@ -127,32 +108,73 @@ class BookKeeping { } /** - * \brief Return next num mvt - */ - function next_num_mvt() { - $sql = "SELECT MAX(piece_num)+1 as max FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; + * Load an accounting document into memory from database + * + * @param int $piecenum Accounting document to get + * @return int <0 if KO, >0 if OK + */ + function fetch_per_mvt($piecenum) + { + $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; + $sql .= " WHERE piece_num = '" . $piecenum . "'"; - dol_syslog(get_class($this) . "next_num_mvt sql=" . $sql, LOG_DEBUG); + dol_syslog(get_class($this) . "fetch_per_mvt sql=" . $sql, LOG_DEBUG); $result = $this->db->query($sql); if ($result) { $obj = $this->db->fetch_object($result); - return $obj->max; + $this->piece_num = $obj->piece_num; + $this->code_journal = $obj->code_journal; + $this->doc_date = $this->db->jdate($obj->doc_date); + $this->doc_ref = $obj->doc_ref; + $this->doc_type = $obj->doc_type; } else { $this->error = "Error " . $this->db->lasterror(); dol_syslog(get_class($this) . "::fetch_per_mvt " . $this->error, LOG_ERR); return - 1; } + + return 1; } /** - * \brief Load record in memory - */ - function fetch_all_per_mvt($piecenum) { - $sql = "SELECT rowid, doc_date, doc_type, "; - $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; - $sql .= "numero_compte, label_compte, debit, credit, "; - $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; + * Return next number movement + * + * @return string Last number + */ + function getNextNumMvt() { + $sql = "SELECT MAX(piece_num)+1 as max FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; + + dol_syslog(get_class($this) . "getNextNumMvt sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + + if ($result) + { + $obj = $this->db->fetch_object($result); + + return $obj->max; + } + else + { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::getNextNumMvt " . $this->error, LOG_ERR); + return - 1; + } + } + + /** + * Load all informations of accountancy document + * + * @param int $piecenum id of line to get + * @return int <0 if KO, >0 if OK + */ + function fetch_all_per_mvt($piecenum) + { + $sql = "SELECT rowid, doc_date, doc_type,"; + $sql .= " doc_ref, fk_doc, fk_docdet, code_tiers,"; + $sql .= " numero_compte, label_compte, debit, credit,"; + $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num"; $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; $sql .= " WHERE piece_num = '" . $piecenum . "'"; @@ -224,12 +246,14 @@ class BookKeeping { dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG); $resqlnum = $this->db->query($sqlnum); - if ($resqlnum) { + if ($resqlnum) + { $objnum = $this->db->fetch_object($resqlnum); $this->piece_num = $objnum->piece_num; } dol_syslog(get_class($this) . ":: create this->piece_num=" . $this->piece_num, LOG_DEBUG); - if (empty($this->piece_num)) { + if (empty($this->piece_num)) + { $sqlnum = "SELECT MAX(piece_num)+1 as maxpiecenum"; $sqlnum .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; @@ -317,18 +341,18 @@ class BookKeeping { } /** - * Create object into database + * Create object into database * - * @param User $user that creates - * @param int $notrigger triggers after, 1=disable triggers - * @return int <0 if KO, Id of created object if OK + * @param User $user Object user that create + * @param int $notrigger 1=Does not execute triggers, 0 otherwise + * @return int <0 if KO, >0 if OK */ - function create_std($user, $notrigger = 0) { + function create_std($user, $notrigger = 0) + { global $conf, $langs; $error = 0; // Clean parameters - if (isset($this->doc_type)) $this->doc_type = trim($this->doc_type); if (isset($this->doc_ref)) @@ -360,12 +384,11 @@ class BookKeeping { if (isset($this->piece_num)) $this->piece_num = trim($this->piece_num); - // Check parameters - // Put here code to add control on parameters values + // Check parameters + // Put here code to add control on parameters values // Insert request $sql = "INSERT INTO " . MAIN_DB_PREFIX . "accounting_bookkeeping("; - $sql .= "doc_date,"; $sql .= "doc_type,"; $sql .= "doc_ref,"; @@ -444,18 +467,18 @@ class BookKeeping { } /** - * Update object into database + * Update object into database * - * @param User $user that modifies - * @param int $notrigger triggers after, 1=disable triggers - * @return int <0 if KO, >0 if OK + * @param User $user Object user that create + * @param int $notrigger 1=Does not execute triggers, 0 otherwise + * @return int <0 if KO, >0 if OK */ - function update($user = 0, $notrigger = 0) { + function update($user = 0, $notrigger = 0) + { global $conf, $langs; $error = 0; // Clean parameters - if (isset($this->doc_type)) $this->doc_type = trim($this->doc_type); if (isset($this->doc_ref)) @@ -487,8 +510,8 @@ class BookKeeping { if (isset($this->piece_num)) $this->piece_num = trim($this->piece_num); - // Check parameters - // Put here code to add a control on parameters values + // Check parameters + // Put here code to add a control on parameters values // Update request $sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_bookkeeping SET"; @@ -550,11 +573,11 @@ class BookKeeping { } /** - * Delete object in database + * Delete object in database * - * @param User $user that deletes - * @param int $notrigger triggers after, 1=disable triggers - * @return int <0 if KO, >0 if OK + * @param User $user Object user that create + * @param int $notrigger 1=Does not execute triggers, 0 otherwise + * @return int <0 if KO, >0 if OK */ function delete($user, $notrigger = 0) { global $conf, $langs; @@ -652,7 +675,9 @@ class BookKeeping { } } } -class BookKeepingLine { + +class BookKeepingLine +{ var $id; var $doc_date; var $doc_type; diff --git a/htdocs/accountancy/journal/cashjournal.php b/htdocs/accountancy/journal/cashjournal.php index 1eee5de5fb5..e7e065577c6 100644 --- a/htdocs/accountancy/journal/cashjournal.php +++ b/htdocs/accountancy/journal/cashjournal.php @@ -10,7 +10,7 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, From bf5d2ec336da4253408f6d1745da4098133c7353 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sun, 31 Aug 2014 08:55:10 +0200 Subject: [PATCH 17/22] Add trigger on delete accounting document --- .../accountancy/class/bookkeeping.class.php | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 394a8f20354..8b9666cc0a7 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -579,23 +579,21 @@ class BookKeeping * @param int $notrigger 1=Does not execute triggers, 0 otherwise * @return int <0 if KO, >0 if OK */ - function delete($user, $notrigger = 0) { + function delete($user, $notrigger = 0) + { global $conf, $langs; $error = 0; $this->db->begin(); - if (! $error) { - if (! $notrigger) { - // Uncomment this and change MYOBJECT to your own tag if you - // want this action calls a trigger. - - // // Call triggers - // include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - // $interface=new Interfaces($this->db); - // $result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf); - // if ($result < 0) { $error++; $this->errors=$interface->errors; } - // // End call triggers + if (! $error) + { + if (! $notrigger) + { + // Call trigger + $result=$this->call_trigger('ACCOUNTING_NUMPIECE_DELETE',$user); + if ($result < 0) $error++; + // End call triggers } } @@ -619,7 +617,9 @@ class BookKeeping } $this->db->rollback(); return - 1 * $error; - } else { + } + else + { $this->db->commit(); return 1; } @@ -628,12 +628,13 @@ class BookKeeping /** * \brief Delete bookkepping by importkey */ - function export_bookkeping($model = 'ebp') { - $sql = "SELECT rowid, doc_date, doc_type, "; - $sql .= "doc_ref, fk_doc, fk_docdet, code_tiers, "; - $sql .= "numero_compte, label_compte, debit, credit, "; - $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; + function export_bookkeping($model = 'ebp') + { + $sql = "SELECT rowid, doc_date, doc_type,"; + $sql .= " doc_ref, fk_doc, fk_docdet, code_tiers,"; + $sql .= " numero_compte, label_compte, debit, credit,"; + $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; $resql = $this->db->query($sql); @@ -668,7 +669,9 @@ class BookKeeping $this->db->free($resql); return $num; - } else { + } + else + { $this->error = "Error " . $this->db->lasterror(); dol_syslog(get_class($this) . "::export_bookkeping " . $this->error, LOG_ERR); return - 1; From f9076162b6f373d27c5c5839fc3b010644167f2c Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sun, 31 Aug 2014 08:56:22 +0200 Subject: [PATCH 18/22] Add dynamic link into accountancy menu to bank journal --- htdocs/accountancy/journal/bankjournal.php | 35 +++++++++++++--------- htdocs/core/menus/standard/eldy.lib.php | 28 ++++++++++++++++- 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 259dc35a5b0..f674d1ff157 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -39,21 +39,21 @@ if (! $res && file_exists("../../../main.inc.php")) if (! $res) die("Include of main fails"); - // Class -dol_include_once("/core/lib/report.lib.php"); -dol_include_once("/core/lib/date.lib.php"); -dol_include_once("/core/lib/bank.lib.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.'/core/lib/bank.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; -dol_include_once("/societe/class/societe.class.php"); -dol_include_once("/adherents/class/adherent.class.php"); -dol_include_once("/compta/sociales/class/chargesociales.class.php"); -dol_include_once("/compta/paiement/class/paiement.class.php"); -dol_include_once("/compta/tva/class/tva.class.php"); -dol_include_once("/fourn/class/paiementfourn.class.php"); -dol_include_once("/fourn/class/fournisseur.facture.class.php"); -dol_include_once("/fourn/class/fournisseur.class.php"); -dol_include_once("/accountancy/class/bookkeeping.class.php"); -dol_include_once("/societe/class/client.class.php"); +require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; +require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'; +require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php'; +require_once DOL_DOCUMENT_ROOT.'/societe/class/client.class.php'; // Langs $langs->load("companies"); @@ -63,6 +63,8 @@ $langs->load("bank"); $langs->load('bills'); $langs->load("accountancy"); +$id_accountancy_journal = GETPOST('id_account'); + $date_startmonth = GETPOST('date_startmonth'); $date_startday = GETPOST('date_startday'); $date_startyear = GETPOST('date_startyear'); @@ -80,6 +82,10 @@ if (! $user->rights->accounting->access) /* * View */ +if (empty($id_accountancy_journal)) +{ + accessforbidden(); +} $year_current = strftime("%Y", dol_now()); $pastmonth = strftime("%m", dol_now()) - 1; @@ -109,6 +115,7 @@ $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url bu1 ON bu1.fk_bank = b.rowid $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe soc on bu1.url_id=soc.rowid"; // To isolate the cash of the other accounts $sql .= " WHERE ba.courant <> 2"; +$sql .= " AND rowid=".$id_accountancy_journal; if (! empty($conf->multicompany->enabled)) { $sql .= " AND ba.entity = " . $conf->entity; } diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index de110ff126f..a2e4ce54b46 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1224,7 +1224,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu // We update newmenu for special dynamic menus if (!empty($user->rights->banque->lire) && $mainmenu == 'bank') // Entry for each bank account { - $sql = "SELECT rowid, label, courant, rappro, courant"; + $sql = "SELECT rowid, label, courant, rappro"; $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; $sql.= " WHERE entity = ".$conf->entity; $sql.= " AND clos = 0"; @@ -1252,6 +1252,32 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu else dol_print_error($db); $db->free($resql); } + if (!empty($user->rights->banque->lire) && !empty($user->rights->accounting->mouvements-lire) && $mainmenu == 'accounting') // Entry for each bank journal + { + $sql = "SELECT rowid, label, accountancy_journal"; + $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; + $sql.= " WHERE entity = ".$conf->entity; + $sql.= " AND clos = 0"; + $sql.= " ORDER BY label"; + + $resql = $db->query($sql); + if ($resql) + { + $numr = $db->num_rows($resql); + $i = 0; + + if ($numr > 0) $newmenu->add('/accountancy/journal/bankjournal.php',$langs->trans("BankAccounts"),0,$user->rights->banque->lire); + + while ($i < $numr) + { + $objp = $db->fetch_object($resql); + $newmenu->add('/accountancy/journal/bankjournal.php?id_account='.$objp->rowid,$objp->label,1,$user->rights->banque->lire); + $i++; + } + } + else dol_print_error($db); + $db->free($resql); + } if (!empty($conf->ftp->enabled) && $mainmenu == 'ftp') // Entry for FTP { $MAXFTP=20; From 18a6a3f49916a5c4bda454d90890e38d85d3cacd Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sun, 31 Aug 2014 13:57:30 +0200 Subject: [PATCH 19/22] Update langs - Tks Juanjo for es_ES --- htdocs/langs/en_US/accountancy.lang | 7 +- htdocs/langs/es_ES/accountancy.lang | 164 +++++++++++++++------------- htdocs/langs/fr_FR/accountancy.lang | 35 +++--- 3 files changed, 106 insertions(+), 100 deletions(-) diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 41ccb3b9197..1dabe2cf8e3 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -1,9 +1,6 @@ # Dolibarr language file - en_US - Accounting Expert CHARSET=UTF-8 -Module150000Name=Accounting Expert -Module150000Desc=Advanced management of the accounting - Accounting=Accounting Globalparameters=Global parameters Chartofaccounts=Chart of accounts @@ -13,7 +10,7 @@ Menuthirdpartyaccount=Thirdparty accounts MenuTools=Tools ConfigAccountingExpert=Configuration of the module accounting expert -Journaux=Journaux +Journaux=Journals Exports=Exports About=About Contributors=Contributors @@ -115,7 +112,7 @@ PurchasesJournal=Purchases journal DescSellsJournal=Sells journal DescPurchasesJournal=Purchases journal BankJournal=Bank journal -DescBankJournal=Banl journal including all the types of payments other than cash +DescBankJournal=Bank journal including all the types of payments other than cash CashJournal=Cash journal DescCashJournal=Cash journal including the type of payment cash diff --git a/htdocs/langs/es_ES/accountancy.lang b/htdocs/langs/es_ES/accountancy.lang index af388dd6cff..da8251cd96d 100644 --- a/htdocs/langs/es_ES/accountancy.lang +++ b/htdocs/langs/es_ES/accountancy.lang @@ -1,40 +1,40 @@ # Dolibarr language file - es_ES - Experto de la contabilidad CHARSET=UTF-8 -Module150000Name= Desglose contable -Module150000Desc= Gestión desglose contable - Accounting=Contabilidad Globalparameters=Configuración global Chartofaccounts=Cuentas -Fiscalyear=Los años fiscales +Fiscalyear=Años fiscales Menuaccount=Contabilidad Cuentas Menuthirdpartyaccount=Cuentas de terceros MenuTools=Instrumentos +Configuration=Configuración +Export=Exportación -ConfigAccountingExpert=Módulo de configuración experto en contabilidad -Journaux=Periódicos +ConfigAccountingExpert=Configuración del módulo contable +Journaux=Diarios Exports=Exportaciones About=acerca de -Contributors=Contributors -Investors=Investors +Contributors=Colaboradores +Investors=Inversores Modelcsv=Plantilla de Exportación Selectmodelcsv=Seleccione una plantilla de exportación -Modelcsv_normal=clásico exportación +Modelcsv_normal=Exportación clásica Modelcsv_CEGID=Exportar a Cegid Expert -BackToChartofaccounts=Plan contable Volver +BackToChartofaccounts=Volver al plan contable Definechartofaccounts=Definir la contabilidad -Selectchartofaccounts=Seleccione una contabilidad +Selectchartofaccounts=Seleccione un plan contable Validate=validar Addanaccount=Añadir una cuenta contable -AccountAccounting=cuenta de Contabilidad -Ventilation=ventilación -ToDispatch=Para llevar a cabo -Dispatched=Realizado +ImportAccount=Importar cuentas +AccountAccounting=Cuenta +Ventilation=Contabilización +ToDispatch=A realizar +Dispatched=Realizadas -CustomersVentilation=Los clientes de ventilación -SuppliersVentilation=proveedores de ventilación +CustomersVentilation=Contabilización ventas +SuppliersVentilation=Contabilización compras TradeMargin=margen de beneficio Reports=relaciones ByCustomerInvoice=Por las facturas de los clientes @@ -45,7 +45,7 @@ List=lista Create=crear UpdateAccount=Editar una cuenta UpdateMvts=Modificación de un movimiento -WriteBookKeeping=Asientos contables en el libro mayor +WriteBookKeeping=Registrar los asientos en el libro mayor Bookkeeping=libro mayor AccountBalanceByMonth=Saldo Mensual @@ -54,42 +54,42 @@ VentilationComptableSupplier=Proveedor de cuentas de ventilación Intitule=título Line=línea -CAHTF=Total HT proveedor compra -InvoiceLines=Líneas de factura para ventilar -InvoiceLinesDone=Líneas de factura rotos -IntoAccount=En la cuenta +VentilationComptable=desglose de Contabilidad +VentilationComptableSupplier=Contabilización compras +Intitule=título +Line=línea -Ventilate=ventilar -VentilationAuto=ventilación automática +Ventilate=contabilizar +VentilationAuto=contabilización automática Processing=Tratamiento EndProcessing=Final del tratamiento -AnyLineVentilate=No hay línea para ventilar +AnyLineVentilate=No hay línea para contabilizar SelectedLines=Las líneas seleccionadas Lineofinvoice=Línea de la factura -VentilatedinAccount=Ventilada con éxito en la cuenta contable -NotVentilatedinAccount=Cuenta sin ventilación en la contabilidad +VentilatedinAccount=Contabilizada con éxito en la cuenta contable +NotVentilatedinAccount=Cuenta sin contabilización en la contabilidad -ACCOUNTINGEX_SEPARATORCSV=separador CSV +ACCOUNTING_SEPARATORCSV=separador CSV -ACCOUNTINGEX_LIMIT_LIST_VENTILATION=(El máximo recomendado: 50) Número de elementos que se muestran por página para ventilar -ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO=Páginas de inicio de clasificación de ventilación "desglose" de las pruebas más recientes -ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE=Páginas de inicio de clasificación de ventilación "ventilada" por la evidencia más reciente +ACCOUNTING_LIMIT_LIST_VENTILATION=(El máximo recomendado: 50) Número de elementos que se muestran por página para contabilizar +ACCOUNTING_LIST_SORT_VENTILATION_TODO=Páginas de inicio de clasificación de ventilación "desglose" de las pruebas más recientes +ACCOUNTING_LIST_SORT_VENTILATION_DONE=Páginas de inicio de clasificación de ventilación "ventilada" por la evidencia más reciente AccountLength=Cuentas contables longitud mostrada en Dolibarr AccountLengthDesc=Función para simular una longitud de cuenta contable sustituyendo espacios con el número cero. Esta función sólo afecta a la pantalla, no cambia las cuentas contables registrados en Dolibarr. Para la exportación, esta función se requiere para ser compatible con algunos programas. -ACCOUNTINGEX_LENGTH_GACCOUNT=Longitud de las cuentas generales -ACCOUNTINGEX_LENGTH_AACCOUNT=Duración de subcuentas +ACCOUNTING_LENGTH_GACCOUNT=Longitud de las cuentas generales +ACCOUNTING_LENGTH_AACCOUNT=Duración de subcuentas -ACCOUNTINGEX_SELL_JOURNAL=Diario de Ventas -ACCOUNTINGEX_PURCHASE_JOURNAL=Diario de Compras -ACCOUNTINGEX_BANK_JOURNAL=Diario del Banco -ACCOUNTINGEX_CASH_JOURNAL=Diario de Caso -ACCOUNTINGEX_MISCELLANEOUS_JOURNAL=Diario de Operaciones diversas -ACCOUNTINGEX_SOCIAL_JOURNAL=Diario Social +ACCOUNTING_SELL_JOURNAL=Diario de Ventas +ACCOUNTING_PURCHASE_JOURNAL=Diario de Compras +ACCOUNTING_BANK_JOURNAL=Diario del Banco +ACCOUNTING_CASH_JOURNAL=Diario de Caso +ACCOUNTING_MISCELLANEOUS_JOURNAL=Diario de Operaciones diversas +ACCOUNTING_SOCIAL_JOURNAL=Diario Social -ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH=En caso de transferencia -ACCOUNTINGEX_ACCOUNT_SUSPENSE=Cuenta Suspense +ACCOUNTING_ACCOUNT_TRANSFER_CASH=Cuenta de caja +ACCOUNTING_ACCOUNT_SUSPENSE=Cuenta partidas pendientes de aplicación COMPTA_PRODUCT_BUY_ACCOUNT=Cuenta predeterminada de contabilidad para los productos comprados (si no se define en el producto) COMPTA_PRODUCT_SOLD_ACCOUNT=Cuenta predeterminada de contabilidad para los productos vendidos (si no se define en el producto) @@ -100,62 +100,74 @@ Doctype=Tipo de documento Docdate=fecha Docref=referencia Numerocompte=cuenta -Code_tiers=tercera -Labelcompte=cuenta de fraseología +Code_tiers=tercero +Labelcompte=Descripción Debit=débito Credit=crédito Amount=cantidad Sens=sentido -Codejournal=periódico +Codejournal=diario DelBookKeeping=Eliminar el libro mayor -SellsJournal=Sell journal -PurchasesJournal=Purchase journal -DescSellsJournal=Sell journal -DescPurchasesJournal=Purchase journal +SellsJournal=Diario de ventas +PurchasesJournal=Diario de compras +DescSellsJournal=Diario de ventas +DescPurchasesJournal=Diario de compras BankJournal=Diario de banco -DescBankJournal=Descripción de la revista del Banco +DescBankJournal=Descripción del diario del Banco CashJournal=Libro de Caja DescCashJournal=Descripción Libro de Caja -CashPayment=especies Reglas +CashPayment=Reglas caja -SupplierInvoicePayment=Reglamento Factura -CustomerInvoicePayment=Factura del cliente Reglamento +SupplierInvoicePayment=Pago factura de proveedor +CustomerInvoicePayment=Pago Factura a cliente -ThirdPartyAccount=Thirdparty account +ThirdPartyAccount=Cuenta tercero -NumMvts=Number of movement -ListeMvts=List of the movement -ErrorDebitCredit=Debit and Credit cannot have a value at the same time +NumMvts=Número de movimiento +ListeMvts=Apuntes del movimiento +ErrorDebitCredit=Débito y Crédito no pueden terner valor al mismo tiempo -ReportThirdParty=List thirdparty account +ReportThirdParty=Lista cuentas de terceros DescThirdPartyReport=Consult here the list of the thirdparty customers and the suppliers and their accounting accounts -ListAccounts=List of the accounting accounts +ListAccounts=Lista de cuentas -Pcgversion=Version of the plan -Pcgtype=Class of account -Pcgsubtype=Under class of account -Accountparent=Root of the account -Active=Statement +Pcgversion=Versión del plan +Pcgtype=Tipo de cuenta +Pcgsubtype=tipo de subcuenta +Accountparent=Cuenta padre +Active=Activa -NewFiscalYear=New fiscal year +NewFiscalYear=Nuevo año fiscal +NewMovCompta=Nuevo registro contable -DescVentilCustomer=Consult here the annual accounting ventilation of your invoices customers -TotalVente=Total turnover HT -TotalMarge=Total sales margin -DescVentilDoneCustomer=Consult here the list of the lines of invoices customers and their accounting account -DescVentilTodoCustomer=Ventilate your lines of customer invoice with an accounting account -ChangeAccount=Change the accounting account for lines selected by the account: +DescVentilCustomer=Consulte aquí la contabilidad anual de sus facturas a clientes +TotalVente=Total ventas (base imponible) +TotalMarge=Total margen ventas +DescVentilDoneCustomer=Consulte aquí las líneas de facturas a clientes y sus cuentas contables +DescVentilTodoCustomer=Contabilize sus líneas de facturas a clientes +ChangeAccount=Cambie la cuenta para las líneas seleccionadas a la cuenta: Vide=- -DescVentilSupplier=Consult here the annual accounting ventilation of your invoices suppliers -DescVentilTodoSupplier=Ventilate your lines of invoice supplier with an accounting account -DescVentilDoneSupplier=Consult here the list of the lines of invoices supplier and their accounting account +DescVentilSupplier=Consulte aquí la contabilidad anual de sus facturas de proveedores +DescVentilTodoSupplier=Contabilize sus líneas de facturas de proveedores +DescVentilDoneSupplier=Consulte aquí la lista de facturas de proveedores y sus cuentas contables -ValidateHistory=Validate Automatically +ValidateHistory=Validar automáticamente -ErrorAccountancyCodeIsAlreadyUse=Error, you cannot delete this accounting account because it is used +ErrorAccountancyCodeIsAlreadyUse=Error, no puede eliminar esta cuenta ya que está siendo usada -FicheVentilation=Ventilation card \ No newline at end of file +FicheVentilation=Ficha contable + +Accountancy_code_buy=Código compras +Accountancy_code_buy_suggest=Código compras sugerido +Accountancy_code_sell=Código ventas +Accountancy_code_sell_suggest=Código ventas sugerido +CreateMvts=Crear movimiento +customer_invoice=Factura a cliente + +accountingaccount=Cuenta contable +label=Descripción +Import=Importar \ No newline at end of file diff --git a/htdocs/langs/fr_FR/accountancy.lang b/htdocs/langs/fr_FR/accountancy.lang index 41b2366590e..9ee15ac2720 100644 --- a/htdocs/langs/fr_FR/accountancy.lang +++ b/htdocs/langs/fr_FR/accountancy.lang @@ -1,9 +1,6 @@ -# Dolibarr language file - fr_FR - Accounting Expert +# Dolibarr language file - fr_FR - Accountancy CHARSET=UTF-8 -Module150000Name=Comptabilité Expert -Module150000Desc=Gestion avancée de la comptabilité - Accounting=Comptabilité Globalparameters=Paramètres globaux Chartofaccounts=Plan comptable @@ -70,26 +67,26 @@ Lineofinvoice=Ligne de facture VentilatedinAccount=Ventilée avec succès dans le compte comptable NotVentilatedinAccount=Non ventilée dans le compte comptable -ACCOUNTINGEX_SEPARATORCSV=Séparateur CSV +ACCOUNTING_SEPARATORCSV=Séparateur CSV -ACCOUNTINGEX_LIMIT_LIST_VENTILATION=Nombre d'éléments à ventiler affichés par page (maximum conseillé : 50) -ACCOUNTINGEX_LIST_SORT_VENTILATION_TODO=Commencer le tri des pages de ventilation "A ventiler" par les éléments les plus récents -ACCOUNTINGEX_LIST_SORT_VENTILATION_DONE=Commencer le tri des pages de ventilation "Ventilées" par les éléments les plus récents +ACCOUNTING_LIMIT_LIST_VENTILATION=Nombre d'éléments à ventiler affichés par page (maximum conseillé : 50) +ACCOUNTING_LIST_SORT_VENTILATION_TODO=Commencer le tri des pages de ventilation "A ventiler" par les éléments les plus récents +ACCOUNTING_LIST_SORT_VENTILATION_DONE=Commencer le tri des pages de ventilation "Ventilées" par les éléments les plus récents AccountLength=Longueur des comptes comptables affichés dans Dolibarr AccountLengthDesc=Fonction permettant de simuler une longueur de compte comptable en remplaçant les espaces par le chiffre zéro. Cette fonction touche uniquement à l'affichage, elle ne modifie pas les comptes comptables enregistrés dans Dolibarr. Pour l'export, cette fonction est nécessaire pour être compatible avec certains logiciels. -ACCOUNTINGEX_LENGTH_GACCOUNT=Longueur des comptes généraux -ACCOUNTINGEX_LENGTH_AACCOUNT=Longueur des comptes tiers +ACCOUNTING_LENGTH_GACCOUNT=Longueur des comptes généraux +ACCOUNTING_LENGTH_AACCOUNT=Longueur des comptes tiers -ACCOUNTINGEX_SELL_JOURNAL=Journal des Ventes -ACCOUNTINGEX_PURCHASE_JOURNAL=Journal des Achats -ACCOUNTINGEX_BANK_JOURNAL=Journal de Banque -ACCOUNTINGEX_CASH_JOURNAL=Journal de Caisse -ACCOUNTINGEX_MISCELLANEOUS_JOURNAL=Journal des Opérations Diverses -ACCOUNTINGEX_SOCIAL_JOURNAL=Journal Social +ACCOUNTING_SELL_JOURNAL=Journal des Ventes +ACCOUNTING_PURCHASE_JOURNAL=Journal des Achats +ACCOUNTING_BANK_JOURNAL=Journal de Banque +ACCOUNTING_CASH_JOURNAL=Journal de Caisse +ACCOUNTING_MISCELLANEOUS_JOURNAL=Journal des Opérations Diverses +ACCOUNTING_SOCIAL_JOURNAL=Journal Social -ACCOUNTINGEX_ACCOUNT_TRANSFER_CASH=Compte de transfert espèce -ACCOUNTINGEX_ACCOUNT_SUSPENSE=Compte d'attente +ACCOUNTING_ACCOUNT_TRANSFER_CASH=Compte de transfert espèce +ACCOUNTING_ACCOUNT_SUSPENSE=Compte d'attente COMPTA_PRODUCT_BUY_ACCOUNT=Compte comptable par défaut pour les produits achetés (si non défini dans la fiche produit) COMPTA_PRODUCT_SOLD_ACCOUNT=Compte comptable par défaut pour les produits vendus (si non défini dans la fiche produit) @@ -126,7 +123,7 @@ CustomerInvoicePayment=Règlement de facture client ThirdPartyAccount=Compte tiers -NumMvts=Numero de mouvement +NumMvts=Numéro de mouvement ListeMvts=Liste du mouvement ErrorDebitCredit=Debit et Credit ne peuvent avoir une valeur en même temps From c5a36f67ececcb57cc37ffd5dea2bb668134514a Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sun, 31 Aug 2014 13:57:54 +0200 Subject: [PATCH 20/22] Key language --- htdocs/accountancy/admin/importaccounts.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/admin/importaccounts.php b/htdocs/accountancy/admin/importaccounts.php index 01ce427dc4a..f75f45ab134 100644 --- a/htdocs/accountancy/admin/importaccounts.php +++ b/htdocs/accountancy/admin/importaccounts.php @@ -130,7 +130,7 @@ if ($result) { print ''; print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -153,7 +153,7 @@ if ($result) { print ''; print ''; // Colonne choix du compte From 6d3b16634000d12a12d6bebb924f0ac1b119adf2 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sun, 31 Aug 2014 13:58:42 +0200 Subject: [PATCH 21/22] Update dynamics menu --- htdocs/core/menus/standard/eldy.lib.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index a2e4ce54b46..476c6ebfcb9 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -908,8 +908,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu // Journaux //if ($leftmenu=="ca") $newmenu->add("/compta/journaux/index.php?leftmenu=ca",$langs->trans("Journaux"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); //journaux - if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/journal/sellsjournal.php?leftmenu=ca",$langs->trans("SellsJournal"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/journal/purchasesjournal.php?leftmenu=ca",$langs->trans("PurchasesJournal"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/journal/sellsjournal.php?leftmenu=ca",$langs->trans("SellsJournal"),1,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/journal/purchasesjournal.php?leftmenu=ca",$langs->trans("PurchasesJournal"),1,$user->rights->compta->resultat->lire); } } @@ -1252,7 +1252,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu else dol_print_error($db); $db->free($resql); } - if (!empty($user->rights->banque->lire) && !empty($user->rights->accounting->mouvements-lire) && $mainmenu == 'accounting') // Entry for each bank journal + if (!empty($user->rights->banque->lire) && !empty($user->rights->accounting->mouvements->lire) && $mainmenu == 'accountancy') // Entry for each bank journal { $sql = "SELECT rowid, label, accountancy_journal"; $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; @@ -1266,12 +1266,16 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $numr = $db->num_rows($resql); $i = 0; - if ($numr > 0) $newmenu->add('/accountancy/journal/bankjournal.php',$langs->trans("BankAccounts"),0,$user->rights->banque->lire); + if ($numr > 0) $newmenu->add('/accountancy/journal/bankjournal.php',$langs->trans("Journaux"),0,$user->rights->banque->lire); + + // Add other journal + $newmenu->add("/accountancy/journal/sellsjournal.php",$langs->trans("SellsJournal"),1,$user->rights->accounting->comptarapport->lire); + $newmenu->add("/accountancy/journal/purchasesjournal.php",$langs->trans("PurchasesJournal"),1,$user->rights->accounting->comptarapport->lire); while ($i < $numr) { $objp = $db->fetch_object($resql); - $newmenu->add('/accountancy/journal/bankjournal.php?id_account='.$objp->rowid,$objp->label,1,$user->rights->banque->lire); + $newmenu->add('/accountancy/journal/bankjournal.php?id_account='.$objp->rowid,$objp->label,1,$user->rights->accounting->comptarapport->lire); $i++; } } From def53d92bd5e6d853f459a92e62f8e634f61e7d3 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sun, 31 Aug 2014 14:10:48 +0200 Subject: [PATCH 22/22] Correct error menu --- htdocs/accountancy/journal/bankjournal.php | 2 +- htdocs/core/menus/standard/eldy.lib.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index f674d1ff157..6229468a404 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -115,7 +115,7 @@ $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url bu1 ON bu1.fk_bank = b.rowid $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe soc on bu1.url_id=soc.rowid"; // To isolate the cash of the other accounts $sql .= " WHERE ba.courant <> 2"; -$sql .= " AND rowid=".$id_accountancy_journal; +$sql .= " AND ba.rowid=".$id_accountancy_journal; if (! empty($conf->multicompany->enabled)) { $sql .= " AND ba.entity = " . $conf->entity; } diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 476c6ebfcb9..a38d78f5840 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1266,7 +1266,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $numr = $db->num_rows($resql); $i = 0; - if ($numr > 0) $newmenu->add('/accountancy/journal/bankjournal.php',$langs->trans("Journaux"),0,$user->rights->banque->lire); + if ($numr > 0) $newmenu->add('/accountancy/journal/index.php',$langs->trans("Journaux"),0,$user->rights->banque->lire); // Add other journal $newmenu->add("/accountancy/journal/sellsjournal.php",$langs->trans("SellsJournal"),1,$user->rights->accounting->comptarapport->lire); @@ -1275,7 +1275,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu while ($i < $numr) { $objp = $db->fetch_object($resql); - $newmenu->add('/accountancy/journal/bankjournal.php?id_account='.$objp->rowid,$objp->label,1,$user->rights->accounting->comptarapport->lire); + $newmenu->add('/accountancy/journal/bankjournal.php?id_account='.$objp->rowid,$langs->trans("Journal").' - '.$objp->label,1,$user->rights->accounting->comptarapport->lire); $i++; } }
' . $langs->trans("accountingaccount") . '' . $langs->trans("label") . '' . $langs->trans("parentaccount") . '' . $langs->trans("Accountparent") . '' . $langs->trans("Pcgtype") . '' . $langs->trans("Pcgsubtype") . '' . $langs->trans("Import") . ''; - print ''; + print ''; print '