diff --git a/.gitignore b/.gitignore
index b49fdf8dc86..371c8be2f5e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,7 @@ default.properties
.DS_Store
.idea
*.iml
+*.orig
Thumbs.db
/dolibarr_genesis.mp4
# Log files
diff --git a/ChangeLog b/ChangeLog
index 322372ab8a2..aff7be3c35e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -250,6 +250,7 @@ Following changes may create regressions for some external modules, but were nec
* Function showStripePaymentUrl, getStripePaymentUrl, showPaypalPaymentUrl and getPaypalPaymentUrl has been removed. The generic one showOnlinePaymentUrl and getOnlinePaymentUrl are always used.
* Context for hook showSocinfoOnPrint has been moved from "showsocinfoonprint" to "main"
* Library htdocs/includes/phpoffice/phpexcel as been removed (replaced with htdocs/includes/phpoffice/PhpSpreadsheet)
+* Databse transaction in your triggers must be correctly balanced (one close for one open). If not, an error will be returned by the trigger, even if trigger did return error code.
***** ChangeLog for 12.0.4 compared to 12.0.3 *****
diff --git a/dev/resources/dbmodel/dolibarr_schema.mwb b/dev/resources/dbmodel/dolibarr_schema.mwb
index 27bc4ab2403..37929762bab 100644
Binary files a/dev/resources/dbmodel/dolibarr_schema.mwb and b/dev/resources/dbmodel/dolibarr_schema.mwb differ
diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php
index 2f92cd5842e..b93d82a59c0 100644
--- a/htdocs/accountancy/admin/productaccount.php
+++ b/htdocs/accountancy/admin/productaccount.php
@@ -372,26 +372,26 @@ if ($result)
print '
';
print ''.$langs->trans('Options').' '.$langs->trans('Description').' ';
print " \n";
- print ' '.$langs->trans('OptionModeProductSell').' ';
+ print ' '.$langs->trans('OptionModeProductSell').' ';
print ''.$langs->trans('OptionModeProductSellDesc');
print " \n";
if ($mysoc->isInEEC())
{
- print ' '.$langs->trans('OptionModeProductSellIntra').' ';
+ print ' '.$langs->trans('OptionModeProductSellIntra').' ';
print ''.$langs->trans('OptionModeProductSellIntraDesc');
print " \n";
}
- print ' '.$langs->trans('OptionModeProductSellExport').' ';
+ print ' '.$langs->trans('OptionModeProductSellExport').' ';
print ''.$langs->trans('OptionModeProductSellExportDesc');
print " \n";
- print ' '.$langs->trans('OptionModeProductBuy').' ';
+ print ' '.$langs->trans('OptionModeProductBuy').' ';
print ''.$langs->trans('OptionModeProductBuyDesc')." \n";
if ($mysoc->isInEEC())
{
- print ' '.$langs->trans('OptionModeProductBuyIntra').' ';
+ print ' '.$langs->trans('OptionModeProductBuyIntra').' ';
print ''.$langs->trans('OptionModeProductBuyDesc')." \n";
}
- print ' '.$langs->trans('OptionModeProductBuyExport').' ';
+ print ' '.$langs->trans('OptionModeProductBuyExport').' ';
print ''.$langs->trans('OptionModeProductBuyDesc')." \n";
print "\n";
diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php
index d0f43cfe3dd..21077dececd 100644
--- a/htdocs/accountancy/bookkeeping/card.php
+++ b/htdocs/accountancy/bookkeeping/card.php
@@ -224,9 +224,10 @@ if ($action == "confirm_update") {
$action = 'create';
$error++;
}
- if (!GETPOST('next_num_mvt', 'alpha'))
+ if (!GETPOST('doc_ref', 'alpha'))
{
- setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NumPiece")), null, 'errors');
+ setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Piece")), null, 'errors');
+ $action = 'create';
$error++;
}
@@ -371,7 +372,7 @@ if ($action == 'create')
print '';
print '';
- print ''.$langs->trans("Piece").' ';
+ print ''.$langs->trans("Piece").' ';
print ' ';
print ' ';
@@ -594,7 +595,8 @@ if ($action == 'create')
print ' '."\n";
print ' '."\n";
- print "";
+ print '';
+
if (count($object->linesmvt) > 0) {
$total_debit = 0;
$total_credit = 0;
@@ -616,18 +618,21 @@ if ($action == 'create')
$total_credit += $line->credit;
if ($action == 'update' && $line->id == $id) {
+ print '';
print '';
print $formaccounting->select_account((GETPOSTISSET("accountingaccount_number") ? GETPOST("accountingaccount_number", "alpha") : $line->numero_compte), 'accountingaccount_number', 1, array(), 1, 1, '');
print ' ';
print '';
- // TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because it does not
- // use setup of keypress to select thirdparty and this hang browser on large database.
- if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX))
- {
+ // TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because:
+ // It does not use the setup of "key pressed" to select a thirdparty and this hang browser on large databases.
+ // Also, it is not possible to use a value that is not in the list.
+ // Also, the label is not automatically filled when a value is selected.
+ if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
print $formaccounting->select_auxaccount((GETPOSTISSET("subledger_account") ? GETPOST("subledger_account", "alpha") : $line->subledger_account), 'subledger_account', 1);
} else {
print ' subledger_account).'">';
}
+ // TODO Add also the label
print ' ';
print ' label_operation).'"> ';
print ' debit)).'"> ';
@@ -671,18 +676,21 @@ if ($action == 'create')
if ($action == "" || $action == 'add') {
print '';
+ print '';
print '';
print $formaccounting->select_account('', 'accountingaccount_number', 1, array(), 1, 1, '');
print ' ';
print '';
- // TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because it does not
- // use setup of keypress to select thirdparty and this hang browser on large database.
- if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX))
- {
+ // TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because:
+ // It does not use the setup of "key pressed" to select a thirdparty and this hang browser on large databases.
+ // Also, it is not possible to use a value that is not in the list.
+ // Also, the label is not automatically filled when a value is selected.
+ if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
print $formaccounting->select_auxaccount('', 'subledger_account', 1);
} else {
print ' ';
}
+ // TODO Add also the label
print ' ';
print ' ';
print ' ';
diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php
index b66e10c0f71..9c4142daf58 100644
--- a/htdocs/accountancy/bookkeeping/list.php
+++ b/htdocs/accountancy/bookkeeping/list.php
@@ -140,6 +140,7 @@ if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !GE
$arrayfields = array(
't.piece_num'=>array('label'=>$langs->trans("TransactionNumShort"), 'checked'=>1),
+ 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1),
't.doc_date'=>array('label'=>$langs->trans("Docdate"), 'checked'=>1),
't.doc_ref'=>array('label'=>$langs->trans("Piece"), 'checked'=>1),
't.numero_compte'=>array('label'=>$langs->trans("AccountAccountingShort"), 'checked'=>1),
@@ -148,7 +149,6 @@ $arrayfields = array(
't.debit'=>array('label'=>$langs->trans("Debit"), 'checked'=>1),
't.credit'=>array('label'=>$langs->trans("Credit"), 'checked'=>1),
't.lettering_code'=>array('label'=>$langs->trans("LetteringCode"), 'checked'=>1),
- 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1),
't.date_creation'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0),
't.tms'=>array('label'=>$langs->trans("DateModification"), 'checked'=>0),
't.date_export'=>array('label'=>$langs->trans("DateExport"), 'checked'=>1),
@@ -638,11 +638,11 @@ if (empty($reshook)) {
}
$newcardbutton .= ''.$langs->trans("IncludeDocsAlreadyExported").' ';
- $newcardbutton .= dolGetButtonTitle($buttonLabel, $langs->trans("ExportFilteredList").' ('.$listofformat[$formatexportset].')', 'fa fa-file-export paddingleft', $_SERVER["PHP_SELF"].'?action=export_file'.($param ? '&'.$param : ''), $user->rights->accounting->mouvements->export);
+ if (!empty($user->rights->accounting->mouvements->export)) $newcardbutton .= dolGetButtonTitle($buttonLabel, $langs->trans("ExportFilteredList").' ('.$listofformat[$formatexportset].')', 'fa fa-file-export paddingleft', $_SERVER["PHP_SELF"].'?action=export_file'.($param ? '&'.$param : ''), $user->rights->accounting->mouvements->export);
$newcardbutton .= dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
- $newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php', '', 1, array('morecss' => 'marginleftonly'));
+ $newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
$url = './card.php?action=create';
if (!empty($socid)) $url .= '&socid='.$socid;
@@ -665,11 +665,17 @@ print '';
// Filters lines
print '';
+
// Movement number
if (!empty($arrayfields['t.piece_num']['checked']))
{
print ' ';
}
+// Code journal
+if (!empty($arrayfields['t.code_journal']['checked']))
+{
+ print ' ';
+}
// Date document
if (!empty($arrayfields['t.doc_date']['checked']))
{
@@ -758,11 +764,7 @@ if (!empty($arrayfields['t.lettering_code']['checked']))
print ' '.$langs->trans("NotReconciled").' ';
print '';
}
-// Code journal
-if (!empty($arrayfields['t.code_journal']['checked']))
-{
- print ' ';
-}
+
// Fields from hook
$parameters = array('arrayfields'=>$arrayfields);
@@ -814,6 +816,7 @@ print " \n";
print '';
if (!empty($arrayfields['t.piece_num']['checked'])) print_liste_field_titre($arrayfields['t.piece_num']['label'], $_SERVER['PHP_SELF'], "t.piece_num", "", $param, "", $sortfield, $sortorder);
+if (!empty($arrayfields['t.code_journal']['checked'])) print_liste_field_titre($arrayfields['t.code_journal']['label'], $_SERVER['PHP_SELF'], "t.code_journal", "", $param, '', $sortfield, $sortorder, 'center ');
if (!empty($arrayfields['t.doc_date']['checked'])) print_liste_field_titre($arrayfields['t.doc_date']['label'], $_SERVER['PHP_SELF'], "t.doc_date", "", $param, '', $sortfield, $sortorder, 'center ');
if (!empty($arrayfields['t.doc_ref']['checked'])) print_liste_field_titre($arrayfields['t.doc_ref']['label'], $_SERVER['PHP_SELF'], "t.doc_ref", "", $param, "", $sortfield, $sortorder);
if (!empty($arrayfields['t.numero_compte']['checked'])) print_liste_field_titre($arrayfields['t.numero_compte']['label'], $_SERVER['PHP_SELF'], "t.numero_compte", "", $param, "", $sortfield, $sortorder);
@@ -822,7 +825,6 @@ if (!empty($arrayfields['t.label_operation']['checked'])) print_liste_field_tit
if (!empty($arrayfields['t.debit']['checked'])) print_liste_field_titre($arrayfields['t.debit']['label'], $_SERVER['PHP_SELF'], "t.debit", "", $param, '', $sortfield, $sortorder, 'right ');
if (!empty($arrayfields['t.credit']['checked'])) print_liste_field_titre($arrayfields['t.credit']['label'], $_SERVER['PHP_SELF'], "t.credit", "", $param, '', $sortfield, $sortorder, 'right ');
if (!empty($arrayfields['t.lettering_code']['checked'])) print_liste_field_titre($arrayfields['t.lettering_code']['label'], $_SERVER['PHP_SELF'], "t.lettering_code", "", $param, '', $sortfield, $sortorder, 'center ');
-if (!empty($arrayfields['t.code_journal']['checked'])) print_liste_field_titre($arrayfields['t.code_journal']['label'], $_SERVER['PHP_SELF'], "t.code_journal", "", $param, '', $sortfield, $sortorder, 'center ');
// Hook fields
$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder);
$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook
@@ -888,6 +890,16 @@ while ($i < min($num, $limit))
if (!$i) $totalarray['nbfield']++;
}
+ // Journal code
+ if (!empty($arrayfields['t.code_journal']['checked']))
+ {
+ $accountingjournal = new AccountingJournal($db);
+ $result = $accountingjournal->fetch('', $line->code_journal);
+ $journaltoshow = (($result > 0) ? $accountingjournal->getNomUrl(0, 0, 0, '', 0) : $line->code_journal);
+ print ''.$journaltoshow.' ';
+ if (!$i) $totalarray['nbfield']++;
+ }
+
// Document date
if (!empty($arrayfields['t.doc_date']['checked']))
{
@@ -1006,16 +1018,6 @@ while ($i < min($num, $limit))
if (!$i) $totalarray['nbfield']++;
}
- // Journal code
- if (!empty($arrayfields['t.code_journal']['checked']))
- {
- $accountingjournal = new AccountingJournal($db);
- $result = $accountingjournal->fetch('', $line->code_journal);
- $journaltoshow = (($result > 0) ? $accountingjournal->getNomUrl(0, 0, 0, '', 0) : $line->code_journal);
- print ''.$journaltoshow.' ';
- if (!$i) $totalarray['nbfield']++;
- }
-
// Fields from hook
$parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
$reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook
diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php
index 6bab55f0f52..55e57b4463f 100644
--- a/htdocs/accountancy/bookkeeping/listbyaccount.php
+++ b/htdocs/accountancy/bookkeeping/listbyaccount.php
@@ -128,8 +128,8 @@ if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('searc
$arrayfields = array(
// 't.subledger_account'=>array('label'=>$langs->trans("SubledgerAccount"), 'checked'=>1),
- 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1),
't.piece_num'=>array('label'=>$langs->trans("TransactionNumShort"), 'checked'=>1),
+ 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1),
't.doc_date'=>array('label'=>$langs->trans("Docdate"), 'checked'=>1),
't.doc_ref'=>array('label'=>$langs->trans("Piece"), 'checked'=>1),
't.label_operation'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
@@ -426,7 +426,7 @@ $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $obj
if (empty($reshook)) {
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
- $newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php', '', 1, array('morecss' => 'marginleftonly'));
+ $newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?action=create');
}
@@ -471,6 +471,11 @@ print '';
// Filters lines
print '';
+// Movement number
+if (!empty($arrayfields['t.piece_num']['checked']))
+{
+ print ' ';
+}
// Code journal
if (!empty($arrayfields['t.code_journal']['checked'])) {
print ' ';
@@ -486,11 +491,6 @@ if (!empty($arrayfields['t.doc_date']['checked'])) {
print '';
print '';
}
-// Movement number
-if (!empty($arrayfields['t.piece_num']['checked']))
-{
- print ' ';
-}
// Ref document
if (!empty($arrayfields['t.doc_ref']['checked'])) {
print ' ';
@@ -540,9 +540,9 @@ print '';
print " \n";
print '';
+if (!empty($arrayfields['t.piece_num']['checked'])) print_liste_field_titre($arrayfields['t.piece_num']['label'], $_SERVER['PHP_SELF'], "t.piece_num", "", $param, '', $sortfield, $sortorder);
if (!empty($arrayfields['t.code_journal']['checked'])) print_liste_field_titre($arrayfields['t.code_journal']['label'], $_SERVER['PHP_SELF'], "t.code_journal", "", $param, '', $sortfield, $sortorder, 'center ');
if (!empty($arrayfields['t.doc_date']['checked'])) print_liste_field_titre($arrayfields['t.doc_date']['label'], $_SERVER['PHP_SELF'], "t.doc_date", "", $param, '', $sortfield, $sortorder, 'center ');
-if (!empty($arrayfields['t.piece_num']['checked'])) print_liste_field_titre($arrayfields['t.piece_num']['label'], $_SERVER['PHP_SELF'], "t.piece_num", "", $param, '', $sortfield, $sortorder);
if (!empty($arrayfields['t.doc_ref']['checked'])) print_liste_field_titre($arrayfields['t.doc_ref']['label'], $_SERVER['PHP_SELF'], "t.doc_ref", "", $param, "", $sortfield, $sortorder);
if (!empty($arrayfields['t.label_operation']['checked'])) print_liste_field_titre($arrayfields['t.label_operation']['label'], $_SERVER['PHP_SELF'], "t.label_operation", "", $param, "", $sortfield, $sortorder);
if (!empty($arrayfields['t.debit']['checked'])) print_liste_field_titre($arrayfields['t.debit']['label'], $_SERVER['PHP_SELF'], "t.debit", "", $param, '', $sortfield, $sortorder, 'right ');
@@ -633,6 +633,17 @@ while ($i < min($num, $limit))
print ' ';
+ // Piece number
+ if (!empty($arrayfields['t.piece_num']['checked']))
+ {
+ print '';
+ $object->id = $line->id;
+ $object->piece_num = $line->piece_num;
+ print $object->getNomUrl(1, '', 0, '', 1);
+ print ' ';
+ if (!$i) $totalarray['nbfield']++;
+ }
+
// Journal code
if (!empty($arrayfields['t.code_journal']['checked']))
{
@@ -650,17 +661,6 @@ while ($i < min($num, $limit))
if (!$i) $totalarray['nbfield']++;
}
- // Piece number
- if (!empty($arrayfields['t.piece_num']['checked']))
- {
- print '';
- $object->id = $line->id;
- $object->piece_num = $line->piece_num;
- print $object->getNomUrl(1, '', 0, '', 1);
- print ' ';
- if (!$i) $totalarray['nbfield']++;
- }
-
// Document ref
if (!empty($arrayfields['t.doc_ref']['checked']))
{
diff --git a/htdocs/accountancy/bookkeeping/listbysubaccount.php b/htdocs/accountancy/bookkeeping/listbysubaccount.php
index f010e9efbcf..be7eacfe8c6 100644
--- a/htdocs/accountancy/bookkeeping/listbysubaccount.php
+++ b/htdocs/accountancy/bookkeeping/listbysubaccount.php
@@ -128,8 +128,8 @@ if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('searc
$arrayfields = array(
// 't.subledger_account'=>array('label'=>$langs->trans("SubledgerAccount"), 'checked'=>1),
- 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1),
't.piece_num'=>array('label'=>$langs->trans("TransactionNumShort"), 'checked'=>1),
+ 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1),
't.doc_date'=>array('label'=>$langs->trans("Docdate"), 'checked'=>1),
't.doc_ref'=>array('label'=>$langs->trans("Piece"), 'checked'=>1),
't.label_operation'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
@@ -427,8 +427,8 @@ $parameters = array();
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
if (empty($reshook)) {
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
- $newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php', '', 1, array('morecss' => 'marginleftonly'));
- $newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php', '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
+ $newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
+ $newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?action=create');
}
@@ -475,6 +475,11 @@ print '';
// Filters lines
print '';
+// Movement number
+if (!empty($arrayfields['t.piece_num']['checked']))
+{
+ print ' ';
+}
// Code journal
if (!empty($arrayfields['t.code_journal']['checked'])) {
print ' ';
@@ -490,11 +495,6 @@ if (!empty($arrayfields['t.doc_date']['checked'])) {
print '';
print '';
}
-// Movement number
-if (!empty($arrayfields['t.piece_num']['checked']))
-{
- print ' ';
-}
// Ref document
if (!empty($arrayfields['t.doc_ref']['checked'])) {
print ' ';
@@ -544,9 +544,9 @@ print '';
print " \n";
print '';
+if (!empty($arrayfields['t.piece_num']['checked'])) print_liste_field_titre($arrayfields['t.piece_num']['label'], $_SERVER['PHP_SELF'], "t.piece_num", "", $param, '', $sortfield, $sortorder);
if (!empty($arrayfields['t.code_journal']['checked'])) print_liste_field_titre($arrayfields['t.code_journal']['label'], $_SERVER['PHP_SELF'], "t.code_journal", "", $param, '', $sortfield, $sortorder, 'center ');
if (!empty($arrayfields['t.doc_date']['checked'])) print_liste_field_titre($arrayfields['t.doc_date']['label'], $_SERVER['PHP_SELF'], "t.doc_date", "", $param, '', $sortfield, $sortorder, 'center ');
-if (!empty($arrayfields['t.piece_num']['checked'])) print_liste_field_titre($arrayfields['t.piece_num']['label'], $_SERVER['PHP_SELF'], "t.piece_num", "", $param, '', $sortfield, $sortorder);
if (!empty($arrayfields['t.doc_ref']['checked'])) print_liste_field_titre($arrayfields['t.doc_ref']['label'], $_SERVER['PHP_SELF'], "t.doc_ref", "", $param, "", $sortfield, $sortorder);
if (!empty($arrayfields['t.label_operation']['checked'])) print_liste_field_titre($arrayfields['t.label_operation']['label'], $_SERVER['PHP_SELF'], "t.label_operation", "", $param, "", $sortfield, $sortorder);
if (!empty($arrayfields['t.debit']['checked'])) print_liste_field_titre($arrayfields['t.debit']['label'], $_SERVER['PHP_SELF'], "t.debit", "", $param, '', $sortfield, $sortorder, 'right ');
@@ -627,8 +627,12 @@ while ($i < min($num, $limit))
} else {
// Should not happen: subledger account must be null or a non empty value
print ''.$langs->trans("Unknown");
- if ($line->subledger_label) print ' ('.$line->subledger_label.')';
- $htmltext = 'EmptyStringForSubledgerAccountButSubledgerLabelDefined';
+ if ($line->subledger_label) {
+ print ' ('.$line->subledger_label.')';
+ $htmltext = 'EmptyStringForSubledgerAccountButSubledgerLabelDefined';
+ } else {
+ $htmltext = 'EmptyStringForSubledgerAccountAndSubledgerLabel';
+ }
print $form->textwithpicto('', $htmltext);
print ' ';
}
@@ -645,6 +649,17 @@ while ($i < min($num, $limit))
print ' ';
+ // Piece number
+ if (!empty($arrayfields['t.piece_num']['checked']))
+ {
+ print '';
+ $object->id = $line->id;
+ $object->piece_num = $line->piece_num;
+ print $object->getNomUrl(1, '', 0, '', 1);
+ print ' ';
+ if (!$i) $totalarray['nbfield']++;
+ }
+
// Journal code
if (!empty($arrayfields['t.code_journal']['checked']))
{
@@ -662,17 +677,6 @@ while ($i < min($num, $limit))
if (!$i) $totalarray['nbfield']++;
}
- // Piece number
- if (!empty($arrayfields['t.piece_num']['checked']))
- {
- print '';
- $object->id = $line->id;
- $object->piece_num = $line->piece_num;
- print $object->getNomUrl(1, '', 0, '', 1);
- print ' ';
- if (!$i) $totalarray['nbfield']++;
- }
-
// Document ref
if (!empty($arrayfields['t.doc_ref']['checked']))
{
diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php
index 1bcc4129821..c57ee343b00 100644
--- a/htdocs/accountancy/class/accountancyexport.class.php
+++ b/htdocs/accountancy/class/accountancyexport.class.php
@@ -820,6 +820,8 @@ class AccountancyExport
*/
public function exportFEC($objectLines)
{
+ global $langs;
+
$separator = "\t";
$end_line = "\r\n";
@@ -853,55 +855,55 @@ class AccountancyExport
$date_validation = dol_print_date($line->date_validated, '%Y%m%d');
// FEC:JournalCode
- print $line->code_journal.$separator;
+ print $line->code_journal . $separator;
// FEC:JournalLib
- print $line->journal_label.$separator;
+ print dol_string_unaccent($langs->transnoentities($line->journal_label)) . $separator;
// FEC:EcritureNum
- print $line->piece_num.$separator;
+ print $line->piece_num . $separator;
// FEC:EcritureDate
- print $date_document.$separator;
+ print $date_document . $separator;
// FEC:CompteNum
- print $line->numero_compte.$separator;
+ print $line->numero_compte . $separator;
// FEC:CompteLib
- print dol_string_unaccent($line->label_compte).$separator;
+ print dol_string_unaccent($line->label_compte) . $separator;
// FEC:CompAuxNum
- print $line->subledger_account.$separator;
+ print $line->subledger_account . $separator;
// FEC:CompAuxLib
- print dol_string_unaccent($line->subledger_label).$separator;
+ print dol_string_unaccent($line->subledger_label) . $separator;
// FEC:PieceRef
- print $line->doc_ref.$separator;
+ print $line->doc_ref . $separator;
// FEC:PieceDate
- print dol_string_unaccent($date_creation).$separator;
+ print dol_string_unaccent($date_creation) . $separator;
// FEC:EcritureLib
- print dol_string_unaccent($line->label_operation).$separator;
+ print dol_string_unaccent($line->label_operation) . $separator;
// FEC:Debit
- print price2fec($line->debit).$separator;
+ print price2fec($line->debit) . $separator;
// FEC:Credit
- print price2fec($line->credit).$separator;
+ print price2fec($line->credit) . $separator;
// FEC:EcritureLet
- print $line->lettering_code.$separator;
+ print $line->lettering_code . $separator;
// FEC:DateLet
- print $date_lettering.$separator;
+ print $date_lettering . $separator;
// FEC:ValidDate
- print $date_validation.$separator;
+ print $date_validation . $separator;
// FEC:Montantdevise
- print $line->multicurrency_amount.$separator;
+ print $line->multicurrency_amount . $separator;
// FEC:Idevise
print $line->multicurrency_code;
@@ -919,6 +921,8 @@ class AccountancyExport
*/
public function exportFEC2($objectLines)
{
+ global $langs;
+
$separator = "\t";
$end_line = "\r\n";
@@ -955,7 +959,7 @@ class AccountancyExport
print $line->code_journal . $separator;
// FEC:JournalLib
- print $line->journal_label . $separator;
+ print dol_string_unaccent($langs->transnoentities($line->journal_label)) . $separator;
// FEC:EcritureNum
print $line->piece_num . $separator;
@@ -1634,15 +1638,15 @@ class AccountancyExport
($line->doc_type == 'supplier_invoice' && !isset($supplier_invoices_infos[$line->fk_doc]))) {
if ($line->doc_type == 'customer_invoice') {
// Get new customer invoice ref and company name
- $sql = 'SELECT f.facnumber, s.nom FROM ' . MAIN_DB_PREFIX . 'facture as f';
+ $sql = 'SELECT f.ref, s.nom FROM ' . MAIN_DB_PREFIX . 'facture as f';
$sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'societe AS s ON f.fk_soc = s.rowid';
$sql .= ' WHERE f.rowid = ' . $line->fk_doc;
$resql = $this->db->query($sql);
if ($resql) {
if ($obj = $this->db->fetch_object($resql)) {
// Save invoice infos
- $invoices_infos[$line->fk_doc] = array('ref' => $obj->facnumber, 'company_name' => $obj->nom);
- $invoice_ref = $obj->facnumber;
+ $invoices_infos[$line->fk_doc] = array('ref' => $obj->ref, 'company_name' => $obj->nom);
+ $invoice_ref = $obj->ref;
$company_name = $obj->nom;
}
}
diff --git a/htdocs/accountancy/class/accountingjournal.class.php b/htdocs/accountancy/class/accountingjournal.class.php
index a76be081471..6ee8a03d8ff 100644
--- a/htdocs/accountancy/class/accountingjournal.class.php
+++ b/htdocs/accountancy/class/accountingjournal.class.php
@@ -126,7 +126,7 @@ class AccountingJournal extends CommonObject
$this->rowid = $obj->rowid;
$this->code = $obj->code;
- $this->ref = $obj->code;
+ $this->ref = $obj->code;
$this->label = $obj->label;
$this->nature = $obj->nature;
$this->active = $obj->active;
diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php
index 8261a5f4173..40af8784817 100644
--- a/htdocs/accountancy/class/bookkeeping.class.php
+++ b/htdocs/accountancy/class/bookkeeping.class.php
@@ -315,6 +315,7 @@ class BookKeeping extends CommonObject
$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";
@@ -327,8 +328,8 @@ class BookKeeping extends CommonObject
$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);
}
- dol_syslog(get_class($this).":: create this->piece_num=".$this->piece_num, LOG_DEBUG);
if (empty($this->piece_num)) {
$this->piece_num = 1;
}
@@ -383,7 +384,6 @@ class BookKeeping extends CommonObject
$sql .= ", ".(!isset($this->entity) ? $conf->entity : $this->entity);
$sql .= ")";
- 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.$this->table_element);
@@ -831,7 +831,11 @@ class BookKeeping extends CommonObject
} elseif ($key == 't.reconciled_option') {
$sqlwhere[] = 't.lettering_code IS NULL';
} elseif ($key == 't.code_journal' && !empty($value)) {
- $sqlwhere[] = natural_search("t.code_journal", join(',', $value), 3, 1);
+ if (is_array($value)) {
+ $sqlwhere[] = natural_search("t.code_journal", join(',', $value), 3, 1);
+ } else {
+ $sqlwhere[] = natural_search("t.code_journal", $value, 3, 1);
+ }
} else {
$sqlwhere[] = natural_search($key, $value, 0, 1);
}
diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php
index 9a78ea3bfc9..af636c5609d 100644
--- a/htdocs/accountancy/customer/lines.php
+++ b/htdocs/accountancy/customer/lines.php
@@ -176,7 +176,8 @@ print '