31require
'../../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
33require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeeping.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/lettering.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeepingtemplate.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeepingtemplateline.class.php';
53$langs->loadLangs(array(
"accountancy",
"bills",
"compta"));
55$action =
GETPOST(
'action',
'aZ09');
56$cancel =
GETPOST(
'cancel',
'alpha');
57$confirm =
GETPOST(
'confirm',
'alpha');
59$type =
GETPOST(
'type',
'alpha');
60$backtopage =
GETPOST(
'backtopage',
'alpha');
61if (empty($backtopage)) {
62 $backtopage = DOL_URL_ROOT .
'/accountancy/bookkeeping/list.php';
65$optioncss =
GETPOST(
'optioncss',
'aZ');
75$accountingaccount_number =
GETPOST(
'accountingaccount_number',
'alphanohtml');
76$accountingaccount->fetch(0, $accountingaccount_number,
true);
77$accountingaccount_label = $accountingaccount->label;
79$journal_code =
GETPOST(
'code_journal',
'alpha');
80$accountingjournal->fetch(0, $journal_code);
81$journal_label = $accountingjournal->label;
83$subledger_account =
GETPOST(
'subledger_account',
'alphanohtml');
84if ($subledger_account == -1) {
85 $subledger_account =
null;
87$subledger_label =
GETPOST(
'subledger_label',
'alphanohtml');
89$label_operation =
GETPOST(
'label_operation',
'alphanohtml');
93$save =
GETPOST(
'save',
'alpha');
97$update =
GETPOST(
'update',
'alpha');
99 $action =
'confirm_update';
103$hookmanager->initHooks(array(
'bookkeepingcard',
'globalcard'));
111if ($user->socid > 0) {
114if (!$user->hasRight(
'accounting',
'mouvements',
'lire')) {
118$permissiontoadd = $user->hasRight(
'accounting',
'mouvements',
'creer');
119$permissiontodelete = $user->hasRight(
'accounting',
'mouvements',
'supprimer');
126$parameters = array();
127$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
131if (empty($reshook)) {
135 header(
"Location: ". $backtopage . (!empty($type) ?
'?type=sub' :
''));
139 if ($action ==
"confirm_update" && $permissiontoadd) {
140 if (((
float) $debit != 0.0) && ((
float) $credit != 0.0)) {
145 if (empty($accountingaccount_number) || $accountingaccount_number ==
'-1') {
147 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"AccountAccountingShort")),
null,
'errors');
154 $result =
$object->fetch($id,
null, $mode);
159 $object->numero_compte = $accountingaccount_number;
160 $object->subledger_account = $subledger_account;
161 $object->subledger_label = $subledger_label;
162 $object->label_compte = $accountingaccount_label;
163 $object->label_operation = $label_operation;
167 if ((
float) $debit != 0.0) {
172 if ((
float) $credit != 0.0) {
178 $result =
$object->update($user, 0, $mode);
182 if ($mode !=
'_tmp') {
193 } elseif ($action ==
"add" && $permissiontoadd) {
194 if (((
float) $debit != 0.0) && ((
float) $credit != 0.0)) {
199 if (empty($accountingaccount_number) || $accountingaccount_number ==
'-1') {
201 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"AccountAccountingShort")),
null,
'errors');
204 $subledger_account_str = is_array($subledger_account) ? reset($subledger_account) : (
string) $subledger_account;
207 setEventMessages($langs->trans(
"ErrorAccountNotCentralized").
". " . $langs->trans(
"RemoveSubsidiaryAccountOrAdjustTheGeneralAccount"),
null,
'errors');
219 $object->numero_compte = $accountingaccount_number;
220 $object->subledger_account = $subledger_account;
221 $object->subledger_label = $subledger_label;
222 $object->label_compte = $accountingaccount_label;
223 $object->label_operation = $label_operation;
228 $object->piece_num = $piece_num;
231 $object->code_journal = $journal_code;
232 $object->journal_label = $journal_label;
236 if ((
float) $debit != 0.0) {
242 if ((
float) $credit != 0.0) {
248 $result =
$object->createStd($user, 0, $mode);
253 if ($mode !=
'_tmp') {
263 } elseif ($action ==
"confirm_delete" && $permissiontoadd) {
266 $result =
$object->fetch($id,
null, $mode);
267 $piece_num = (int)
$object->piece_num;
272 } elseif ($result > 0) {
273 $result =
$object->delete($user, 0, $mode);
279 } elseif ($action ==
"confirm_create" && $permissiontoadd) {
282 if (!$journal_code || $journal_code ==
'-1') {
283 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Journal")),
null,
'errors');
287 if (!
GETPOST(
'doc_ref',
'alpha')) {
288 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Piece")),
null,
'errors');
303 $object->code_journal = $journal_code;
304 $object->journal_label = $journal_label;
311 $result =
$object->createStd($user, 0, $mode);
319 $piece_num =
$object->piece_num;
324 if ($template_id > 0) {
325 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeepingtemplate.class.php';
326 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeepingtemplateline.class.php';
329 $result_template = $template->fetch($template_id);
331 if ($result_template > 0 && !empty($template->lines)) {
335 foreach ($template->lines as $templateline) {
340 $bookkeeping->doc_type =
GETPOST(
'doctype',
'alpha');
341 $bookkeeping->piece_num = $piece_num;
342 $bookkeeping->doc_ref =
GETPOST(
'docref',
'alpha');
343 $bookkeeping->code_journal = $journal_code;
344 $bookkeeping->journal_label = $journal_label;
345 $bookkeeping->fk_doc = 0;
346 $bookkeeping->fk_docdet = 0;
350 $bookkeeping->numero_compte = $templateline->general_account;
351 $bookkeeping->label_compte = $templateline->general_label;
352 $bookkeeping->subledger_account = $templateline->subledger_account;
353 $bookkeeping->subledger_label = $templateline->subledger_label;
354 $bookkeeping->label_operation = $templateline->operation_label;
355 $bookkeeping->debit = (float) $templateline->debit;
356 $bookkeeping->credit = (float) $templateline->credit;
359 if ((
float) $bookkeeping->debit != 0.0) {
360 $bookkeeping->montant = $bookkeeping->debit;
361 $bookkeeping->amount = $bookkeeping->debit;
362 $bookkeeping->sens =
'D';
364 if ((
float) $bookkeeping->credit != 0.0) {
365 $bookkeeping->montant = $bookkeeping->credit;
366 $bookkeeping->amount = $bookkeeping->credit;
367 $bookkeeping->sens =
'C';
370 $result_line = $bookkeeping->createStd($user, 0,
'_tmp');
372 if ($result_line < 0) {
379 if (!$error_template) {
381 setEventMessages($langs->trans(
'TemplateLinesLoaded', count($template->lines)),
null,
'mesgs');
389 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?piece_num=".$piece_num.
"&mode=_tmp");
395 if ($action ==
'setdate' && $permissiontoadd) {
397 $result =
$object->updateByMvt($piece_num,
'doc_date',
$db->idate($datedoc), $mode);
401 if ($mode !=
'_tmp') {
408 if ($action ==
'setjournal' && $permissiontoadd) {
409 $result =
$object->updateByMvt($piece_num,
'code_journal', $journal_code, $mode);
410 $result =
$object->updateByMvt($piece_num,
'journal_label', $journal_label, $mode);
414 if ($mode !=
'_tmp') {
421 if ($action ==
'setdocref' && $permissiontoadd) {
422 $refdoc =
GETPOST(
'doc_ref',
'alpha');
423 $result =
$object->updateByMvt($piece_num,
'doc_ref', $refdoc, $mode);
427 if ($mode !=
'_tmp') {
434 if ($action ==
'setref' && $permissiontoadd && $numRefModel ===
'mod_bookkeeping_neon') {
435 $newref =
GETPOST(
'ref',
'alpha');
436 $result =
$object->updateByMvt($piece_num,
'ref', $newref, $mode);
440 if ($mode !=
'_tmp') {
448 if ($action ==
'valid' && $permissiontoadd) {
449 $result =
$object->transformTransaction(0, $piece_num);
454 $piece_num =
$object->piece_num;
456 $linkEntry =
'<a href="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.(int) $piece_num.
'">'.$langs->trans(
'NumMvts').
': '.(int) $piece_num.
'</a>';
457 setEventMessages($langs->trans(
'RecordSaved').
' - '.$linkEntry,
null,
'mesgs',
'', 1);
461 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?piece_num=".(
int) $piece_num);
464 header(
"Location: ".$backtopage.
"?sortfield=t.piece_num&sortorder=asc".($type ?
'&type='.$type :
''));
471 $toselect_str = explode(
',',
GETPOST(
'toselect',
'alphanohtml'));
473 foreach ($toselect_str as $i) {
474 $toselect[] = (int) $i;
477 if ($action ==
'deletebookkeepingwriting' && $confirm ==
"yes" && $permissiontodelete) {
482 $nb_lettering = $lettering->bookkeepingLetteringAll($toselect,
true);
483 if ($nb_lettering < 0) {
492 foreach ($toselect as $toselectid) {
493 $result =
$object->fetch($toselectid);
494 if ($result >= 0 && (!isset(
$object->date_validation) ||
$object->date_validation ===
'')) {
503 } elseif ($result < 0) {
507 } elseif (isset(
$object->date_validation) &&
$object->date_validation !=
'') {
508 setEventMessages($langs->trans(
"ValidatedRecordWhereFound"),
null,
'errors');
521 } elseif ($nbok > 0) {
527 header(
"Location: ".DOL_URL_ROOT.
'/accountancy/bookkeeping/list.php?noreset=1');
534 if ($action ==
'clonebookkeepingwriting' && $confirm ==
"yes" && $permissiontoadd) {
536 $piece_num =
GETPOST(
'piece_num',
'alpha');
537 $journal_code =
GETPOST(
'code_journal',
'alpha');
542 $result =
$object->newClone($piece_num, $journal_code, $clonedate);
550 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?piece_num=" . (
$object->getNextNumMvt() - 1));
567$title = $langs->trans(
"CreateMvts");
568$help_url =
'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double';
570llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-accountancy accountancy-consultation page-card');
573if ($action ==
'delete') {
574 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$id.
'&mode='.$mode, $langs->trans(
'DeleteMvt'), $langs->trans(
'ConfirmDeleteMvt', $langs->transnoentitiesnoconv(
"RegistrationInAccounting")),
'confirm_delete',
'', 0, 1);
579if (!empty(
$conf->use_javascript_ajax)) {
580 print
"\n" .
'<script type="text/javascript">';
581 print
'$(document).ready(function () {
582 function toggleSubledger() {
583 var isCentral = $("#accountingaccount_number option:selected").data("centralized");
584 console.log("the selected general ledger account is centralised?", isCentral);
586 var isAjaxMode = $("#search_subledger_account").length > 0;
587 var $visibleSubledger = isAjaxMode
588 ? $("#search_subledger_account")
589 : $("#subledger_account");
592 $visibleSubledger.prop("disabled", false);
594 $("#subledger_account").prop("disabled", false).trigger("change");
596 $("#subledger_label").prop("disabled", false);
598 $visibleSubledger.prop("disabled", true).val("");
600 $("#subledger_account").val("").prop("disabled", true).trigger("change");
602 $("#subledger_account").val("");
604 $("#subledger_label").val("").prop("disabled", true);
610 $("#accountingaccount_number").on("change", toggleSubledger);
611 $("#accountingaccount_number").on("select2:select", toggleSubledger);
614 print
' </script>' .
"\n";
617if ($action ==
'create') {
621 $next_num_mvt =
$object->getNextNumMvt(
'_tmp');
623 if (empty($next_num_mvt)) {
627 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" name="create_mvt" method="POST">';
628 if ($optioncss !=
'') {
629 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
631 print
'<input type="hidden" name="token" value="'.newToken().
'">';
632 print
'<input type="hidden" name="action" value="confirm_create">'.
"\n";
633 print
'<input type="hidden" name="next_num_mvt" value="'.$next_num_mvt.
'">'.
"\n";
634 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
635 print
'<input type="hidden" name="type" value="'.$type.
'">';
636 print
'<input type="hidden" name="mode" value="_tmp">'.
"\n";
640 print
'<table class="border centpercent">';
643 print
'<td class="fieldrequired">'.$langs->trans(
"Docdate").
'</td>';
645 print $form->selectDate(
'',
'doc_date', 0, 0, 0,
"create_mvt", 1, 1);
650 print
'<td class="fieldrequired">'.$langs->trans(
"Codejournal").
'</td>';
651 print
'<td>'.$formaccounting->select_journal($journal_code,
'code_journal', 0, 0, 1, 1).
'</td>';
655 print
'<td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"Piece"), $langs->trans(
"PieceDesc")).
'</td>';
656 print
'<td><input type="text" class="minwidth200" name="doc_ref" value="'.GETPOST(
'doc_ref',
'alpha').
'"></td>';
661 print
'<td>'.$form->textwithpicto($langs->trans(
"Ref"), $langs->trans(
"BankTransactionRef")).
'</td>';
663 if ($numRefModel ===
'mod_bookkeeping_neon') {
664 print
'<input type="text" class="minwidth200" name="ref" value="">';
666 print
'<span class="opacitymedium">'.$langs->trans(
"Automatic").
'</span>';
672 print
'<td>'.$langs->trans(
"BookkeepingTemplate").
'</td>';
674 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeepingtemplate.class.php';
676 $sql =
"SELECT rowid, code, label";
677 $sql .=
" FROM ".MAIN_DB_PREFIX.
"accounting_transaction_template";
678 $sql .=
" WHERE entity IN (".getEntity(
'accounting').
")";
679 $sql .=
" ORDER BY code ASC";
681 $resql =
$db->query($sql);
682 $templates = array();
685 $num =
$db->num_rows($resql);
688 $obj =
$db->fetch_object($resql);
689 $templates[$obj->rowid] = $obj->code.
' - '.$obj->label;
695 if (count($templates) > 0) {
696 print
'<select class="flat minwidth300" name="template_id" id="template_id">';
697 print
'<option value=""></option>';
698 foreach ($templates as $key => $label) {
703 print
'<span class="opacitymedium">'.$langs->trans(
"NoTemplateAvailable").
'</span>';
709 $reshookAddLine = $hookmanager->executeHooks(
'bookkeepingAddLine', $parameters, $object, $action);
715 print $form->buttonsSaveCancel(
"Create");
721 $result =
$object->fetchPerMvt($piece_num, $mode);
726 if (!empty(
$object->piece_num)) {
727 $backlink =
'<a href="'.DOL_URL_ROOT.
'/accountancy/bookkeeping/list.php?restore_lastsearch_values=1">'.$langs->trans(
'BackToList').
'</a>';
740 if ($mode ==
'_tmp') {
741 $object->context[
'mode'] = $mode;
742 $object->next_prev_filter =
'1=0';
746 $morehtmlref =
'<div style="clear: both;"></div>';
747 $morehtmlref .=
'<div class="refidno opacitymedium">';
748 $morehtmlref .=
$object->label;
749 $morehtmlref .=
'</div>';
751 dol_banner_tab($object,
'ref', $backlink, 1,
'piece_num',
'piece_num', $morehtmlref);
754 if ($action ==
'clonebookkeepingwriting' && $confirm !=
'yes' && $permissiontoadd) {
755 $piece_num =
GETPOST(
'piece_num',
'alpha');
759 $input1 = $form->selectDate(
'',
'clonedate', 0, 0, 0,
"", 1, 1);
760 $input2 = $formaccounting->select_journal($journal_code,
'code_journal', 0, 0, 1, 1);
762 $formquestion = array(
765 'name' =>
'clonedate',
766 'label' =>
'<span class="fieldrequired">' . $langs->trans(
"Docdate") .
'</span>',
771 $formquestion[] = array(
'type' =>
'hidden',
'name' =>
'piece_num',
'value' => $piece_num);
774 $formquestion[] = array(
776 'name' =>
'code_journal',
777 'label' =>
'<span class="fieldrequired">' . $langs->trans(
"Codejournal") .
'</span>',
782 print $form->formconfirm(
783 $_SERVER[
"PHP_SELF"],
784 $langs->trans(
"ConfirmMassCloneBookkeepingWriting"),
785 $langs->trans(
"ConfirmMassCloneBookkeepingWritingQuestion", 1),
786 "clonebookkeepingwriting",
793 print
'<div class="fichecenter">';
795 print
'<div class="fichehalfleft">';
797 print
'<div class="underbanner clearboth"></div>';
798 print
'<table class="border tableforfield centpercent">';
809 print
'<tr><td class="titlefieldmiddle">';
810 print
'<table class="nobordernopadding centpercent"><tr><td>';
811 print $langs->trans(
'Ref');
813 if ($action !=
'editref' && empty(
$object->date_validation)) {
814 print
'<td class="right">';
815 if ($permissiontoadd && $numRefModel ===
'mod_bookkeeping_neon') {
816 print
'<a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=editref&token='.newToken().
'&piece_num='.((int)
$object->piece_num).
'&mode='.urlencode((
string) $mode).
'">'.
img_edit($langs->transnoentitiesnoconv(
'Edit'), 1).
'</a>';
820 print
'</tr></table>';
822 if ($action ==
'editref' && empty(
$object->date_validation)) {
823 print
'<form name="setref" action="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.((int)
$object->piece_num).
'" method="POST">';
824 if ($optioncss !=
'') {
825 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
827 print
'<input type="hidden" name="token" value="'.newToken().
'">';
828 print
'<input type="hidden" name="action" value="setref">';
829 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
830 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
831 print
'<input type="hidden" name="type" value="'.$type.
'">';
832 print
'<input type="text" size="20" name="ref" value="'.dol_escape_htmltag(
$object->ref).
'">';
833 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Modify').
'">';
843 print
'<table class="nobordernopadding centpercent"><tr><td>';
844 print $form->textwithpicto($langs->trans(
'Piece'), $langs->trans(
'PieceDesc'));
846 if ($action !=
'editdocref') {
847 print
'<td class="right">';
848 if ($permissiontoadd && empty(
$object->date_validation)) {
849 print
'<a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdocref&token='.newToken().
'&piece_num='.((int)
$object->piece_num).
'&mode='.urlencode((
string) $mode).
'">'.
img_edit($langs->transnoentitiesnoconv(
'Edit'), 1).
'</a>';
853 print
'</tr></table>';
855 if ($action ==
'editdocref' && empty(
$object->date_validation)) {
856 print
'<form name="setdocref" action="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.((int)
$object->piece_num).
'" method="POST">';
857 if ($optioncss !=
'') {
858 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
860 print
'<input type="hidden" name="token" value="'.newToken().
'">';
861 print
'<input type="hidden" name="action" value="setdocref">';
862 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
863 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
864 print
'<input type="hidden" name="type" value="'.$type.
'">';
865 print
'<input type="text" size="20" name="doc_ref" value="'.dol_escape_htmltag(
$object->doc_ref).
'">';
866 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Modify').
'">';
870 if (
$object->doc_type ===
'customer_invoice' && !empty(
$object->fk_doc)) {
872 $result = $invoicestatic->fetch(
$object->fk_doc);
875 $label_element = $invoicestatic->getNomUrl(1);
877 $label_element =
$object->doc_ref;
879 } elseif (
$object->doc_type ===
'supplier_invoice' && !empty(
$object->fk_doc)) {
881 $result = $supplierinvoicestatic->fetch(
$object->fk_doc);
884 $label_element = $supplierinvoicestatic->getNomUrl(1);
886 $label_element =
$object->doc_ref;
888 } elseif (
$object->doc_type ===
'expense_report' && !empty(
$object->fk_doc)) {
890 $result = $expensereportstatic->fetch(
$object->fk_doc);
893 $label_element = $expensereportstatic->getNomUrl(1);
895 $label_element =
$object->doc_ref;
898 $label_element =
$object->doc_ref;
900 print $label_element;
907 print
'<table class="nobordernopadding centpercent"><tr><td>';
908 print $langs->trans(
'Docdate');
910 if ($action !=
'editdate') {
911 print
'<td class="right">';
912 if ($permissiontoadd && empty(
$object->date_validation)) {
913 print
'<a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdate&token='.newToken().
'&piece_num='.((int)
$object->piece_num).
'&mode='.urlencode((
string) $mode).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetDate'), 1).
'</a>';
917 print
'</tr></table>';
918 print
'</td><td colspan="3">';
919 if ($action ==
'editdate' && empty(
$object->date_validation)) {
920 print
'<form name="setdate" action="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.((int)
$object->piece_num).
'" method="POST">';
921 if ($optioncss !=
'') {
922 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
924 print
'<input type="hidden" name="token" value="'.newToken().
'">';
925 print
'<input type="hidden" name="action" value="setdate">';
926 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
927 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
928 print
'<input type="hidden" name="type" value="'.$type.
'">';
929 print $form->selectDate(
$object->doc_date ?
$object->doc_date : -1,
'doc_date', 0, 0, 0,
"setdate");
930 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
940 print
'<table class="nobordernopadding centpercent"><tr><td>';
941 print $langs->trans(
'Codejournal');
943 if ($action !=
'editjournal') {
944 print
'<td class="right">';
945 if ($permissiontoadd && empty(
$object->date_validation)) {
946 print
'<a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=editjournal&token='.newToken().
'&piece_num='.((int)
$object->piece_num).
'&mode='.urlencode((
string) $mode).
'">'.
img_edit($langs->transnoentitiesnoconv(
'Edit'), 1).
'</a>';
950 print
'</tr></table>';
952 if ($action ==
'editjournal' && empty(
$object->date_validation)) {
953 print
'<form name="setjournal" action="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.((int)
$object->piece_num).
'" method="POST">';
954 if ($optioncss !=
'') {
955 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
957 print
'<input type="hidden" name="token" value="'.newToken().
'">';
958 print
'<input type="hidden" name="action" value="setjournal">';
959 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
960 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
961 print
'<input type="hidden" name="type" value="'.$type.
'">';
962 print $formaccounting->select_journal(
$object->code_journal,
'code_journal', 0, 0, 0, 1,
'');
963 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
968 $accountingjournalstatic->fetch(0,
$object->code_journal);
969 $journal = $accountingjournalstatic->code;
970 $journal_label = $accountingjournalstatic->label;
972 print $accountingjournalstatic->getNomUrl(1, 1, 1);
982 print
'<div class="fichehalfright">';
984 print
'<div class="underbanner clearboth"></div>';
985 print
'<table class="border tableforfield centpercent">';
988 if (!empty(
$object->doc_type)) {
990 print
'<td class="titlefield">'.$langs->trans(
"Doctype").
'</td>';
991 print
'<td>'.$object->doc_type.
'</td>';
997 print
'<td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
1006 print
'<td class="titlefield">' . $form->textwithpicto($langs->trans(
'DateDue'), $langs->trans(
"IfTransactionHasDueDate")) .
'</td>';
1014 if ($mode !=
"_tmp") {
1017 print
'<td class="titlefield">' . $langs->trans(
"DateExport") .
'</td>';
1019 print
$object->date_export ?
img_picto($langs->trans(
"TransactionExportDesc"),
'fa-file-export',
'class="pictofixedwidth opacitymedium"').dol_print_date(
$object->date_export,
'dayhour') :
' ';
1025 print
'<td class="titlefield">' . $langs->trans(
"DateValidation") .
'</td>';
1027 print
$object->date_validation ?
img_picto($langs->trans(
"TransactionBlockedLockedDesc"),
'fa-lock',
'class="pictofixedwidth opacitymedium"').dol_print_date(
$object->date_validation,
'dayhour') :
' ';
1032 if (!empty(
$object->import_key)) {
1034 print
'<td class="titlefield">' . $langs->trans(
"ImportId") .
'</td>';
1087 print
'<div class="clearboth"></div>';
1093 $result =
$object->fetchAllPerMvt($piece_num, $mode);
1099 $tmptoselect = array();
1100 $atleastonevalidated = 0;
1101 $atleastoneexported = 0;
1102 foreach (
$object->linesmvt as $line) {
1103 $tmptoselect[] = $line->id;
1104 if (!empty($line->date_validation)) {
1105 $atleastonevalidated = 1;
1107 if (!empty($line->date_export) || !empty($line->date_validation)) {
1108 $atleastoneexported = 1;
1112 if ($mode !=
'_tmp' && !$atleastonevalidated) {
1113 print
"\n".
'<div class="tabsAction">'.
"\n";
1115 $parameters = array();
1116 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1117 if (empty($reshook)) {
1118 if ($permissiontodelete) {
1119 if (!isset($hookmanager->resArray[
'no_button_edit']) || $hookmanager->resArray[
'no_button_edit'] != 1) {
1120 print dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', DOL_URL_ROOT.
'/accountancy/bookkeeping/card.php?action=deletebookkeepingwriting&confirm=yes&token='.newToken().
'&piece_num='.((
int)
$object->piece_num).
'&toselect='.implode(
',', $tmptoselect),
'', $permissiontodelete);
1123 if ($permissiontoadd) {
1124 print dolGetButtonAction(
'', $langs->trans(
'Clone'),
'clone', DOL_URL_ROOT.
'/accountancy/bookkeeping/card.php?action=clonebookkeepingwriting&token=' . newToken() .
'&piece_num=' . ((
int)
$object->piece_num) .
'&toselect=' . implode(
',', $tmptoselect),
'action-clone', $permissiontoadd);
1134 if (empty(
$object->date_validation)) {
1135 print
'<form action="' . $_SERVER[
"PHP_SELF"] .
'?piece_num=' . ((int)
$object->piece_num) .
'" method="POST">';
1136 if ($optioncss !=
'') {
1137 print
'<input type="hidden" name="optioncss" value="' . $optioncss .
'">';
1139 print
'<input type="hidden" name="token" value="' . newToken() .
'">';
1140 print
'<input type="hidden" name="doc_date" value="' .
$object->doc_date .
'">' .
"\n";
1141 print
'<input type="hidden" name="doc_type" value="' .
$object->doc_type .
'">' .
"\n";
1142 print
'<input type="hidden" name="doc_ref" value="' .
$object->doc_ref .
'">' .
"\n";
1143 print
'<input type="hidden" name="ref" value="' .
$object->ref .
'">' .
"\n";
1144 print
'<input type="hidden" name="code_journal" value="' .
$object->code_journal .
'">' .
"\n";
1145 print
'<input type="hidden" name="fk_doc" value="' .
$object->fk_doc .
'">' .
"\n";
1146 print
'<input type="hidden" name="fk_docdet" value="' .
$object->fk_docdet .
'">' .
"\n";
1147 print
'<input type="hidden" name="mode" value="' . $mode .
'">' .
"\n";
1148 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
1149 print
'<input type="hidden" name="type" value="' . $type .
'">';
1152 if (count(
$object->linesmvt) > 0) {
1153 print
'<div class="div-table-responsive-no-min">';
1154 print
'<table class="noborder centpercent">';
1159 print
'<tr class="liste_titre">';
1166 if (empty(
$object->date_validation)) {
1175 if (!empty(
$object->linesmvt[0]) && empty(
$object->date_validation)) {
1176 $tmpline =
$object->linesmvt[0];
1177 if (!empty($tmpline->numero_compte)) {
1183 foreach (
$object->linesmvt as $line) {
1184 $total_debit += $line->debit;
1185 $total_credit += $line->credit;
1187 if ($action ==
'update' && $line->id == $id && empty(
$object->date_validation)) {
1188 print
'<tr class="oddeven" data-lineid="'.((int) $line->id).
'">';
1189 print
'<!-- td columns in edit mode -->';
1191 print $formaccounting->select_account((GETPOSTISSET(
"accountingaccount_number") ?
GETPOST(
"accountingaccount_number",
"alpha") : $line->numero_compte),
'accountingaccount_number', 1, array(), 1, 1,
'minwidth200 maxwidth500');
1194 print $formaccounting->select_auxaccount((GETPOSTISSET(
"subledger_account") ?
GETPOST(
"subledger_account",
"alpha") : $line->subledger_account),
'subledger_account', 1,
'maxwidth250',
'',
'subledger_label');
1196 print
'<br><input type="text" class="maxwidth150" name="subledger_label" id="subledger_label" value="'.(GETPOSTISSET(
"subledger_label") ?
GETPOST(
"subledger_label",
"alpha") : $line->subledger_label).
'" placeholder="'.
dol_escape_htmltag($langs->trans(
"SubledgerAccountLabel")).
'">';
1198 print
'<td><input type="text" class="minwidth200" name="label_operation" value="'.(GETPOSTISSET(
"label_operation") ?
GETPOST(
"label_operation",
"alpha") : $line->label_operation).
'"></td>';
1199 print
'<td class="right"><input type="text" class="right width50" name="debit" value="'.(GETPOSTISSET(
"debit") ?
GETPOST(
"debit",
"alpha") :
price($line->debit)).
'"></td>';
1200 print
'<td class="right"><input type="text" class="right width50" name="credit" value="'.(GETPOSTISSET(
"credit") ?
GETPOST(
"credit",
"alpha") :
price($line->credit)).
'"></td>';
1202 print
'<input type="hidden" name="id" value="'.$line->id.
'">'.
"\n";
1203 print
'<input type="submit" class="button" name="update" value="'.$langs->trans(
"Update").
'">';
1206 } elseif ((empty($line->numero_compte) || (empty($line->debit) && empty($line->credit))) && empty(
$object->date_validation)) {
1207 if (($action ==
"" || $action ==
'add') && $permissiontoadd) {
1208 print
'<tr class="oddeven" data-lineid="'.((int) $line->id).
'">';
1209 print
'<!-- td columns in add mode -->';
1211 print $formaccounting->select_account($action ==
'add' ?
GETPOST(
'accountingaccount_number') :
'',
'accountingaccount_number', 1, array(), 1, 1,
'minwidth200 maxwidth500');
1214 print $formaccounting->select_auxaccount(
'',
'subledger_account', 1,
'maxwidth250',
'',
'subledger_label');
1215 print
'<br><input type="text" class="maxwidth150" name="subledger_label" id="subledger_label" value="" placeholder="' .
dol_escape_htmltag($langs->trans(
"SubledgerAccountLabel")) .
'">';
1217 print
'<td><input type="text" class="minwidth200" name="label_operation" value="' .
dol_escape_htmltag($label_operation) .
'"/></td>';
1218 print
'<td class="right"><input type="text" class="right width50" name="debit" value=""/></td>';
1219 print
'<td class="right"><input type="text" class="right width50" name="credit" value=""/></td>';
1220 print
'<td class="center"><input type="submit" class="button small" name="save" value="' . $langs->trans(
"Add") .
'"></td>';
1224 print
'<tr class="oddeven" data-lineid="'.((int) $line->id).
'">';
1225 print
'<!-- td columns in display mode -->';
1226 $resultfetch = $accountingaccount->fetch(0, $line->numero_compte,
true);
1228 if ($resultfetch > 0) {
1229 print $accountingaccount->getNomUrl(0, 1, 1,
'', 0);
1231 print
dol_escape_htmltag($line->numero_compte).
' <span class="warning">('.$langs->trans(
"AccountRemovedFromCurrentChartOfAccount").
')</span>';
1234 print
'<td>'.length_accounta($line->subledger_account);
1235 if ($line->subledger_label) {
1236 print
' - <span class="opacitymedium">'.dol_escape_htmltag($line->subledger_label).
'</span>';
1239 print
'<td>'.$line->label_operation.
'</td>';
1240 print
'<td class="right nowraponall amount">'.($line->debit != 0 ?
price($line->debit) :
'').
'</td>';
1241 print
'<td class="right nowraponall amount">'.($line->credit != 0 ?
price($line->credit) :
'').
'</td>';
1243 print
'<td class="center nowraponall">';
1244 if ($permissiontoadd) {
1245 if (empty($line->date_export) && empty($line->date_validation)) {
1246 print
'<a class="editfielda reposition" href="' . $_SERVER[
"PHP_SELF"] .
'?action=update&id=' . $line->id .
'&piece_num=' . ((int) $line->piece_num) .
'&mode=' . urlencode((
string) $mode) .
'&token=' . urlencode(newToken()) .
'">';
1247 print
img_edit(
'', 0,
'class="marginrightonly"');
1248 print
'</a> ';
1250 print
'<a class="editfielda nohover cursornotallowed reposition disabled" href="#" title="'.dol_escape_htmltag($langs->trans(
"ForbiddenTransactionAlreadyExported")).
'">';
1251 print
img_edit($langs->trans(
"ForbiddenTransactionAlreadyExported"), 0,
'class="marginrightonly"');
1252 print
'</a> ';
1255 if (empty($line->date_validation)) {
1256 $actiontodelete =
'delete';
1257 if ($mode ==
'_tmp' || $action !=
'delmouv') {
1258 $actiontodelete =
'confirm_delete';
1261 print
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?action=' . $actiontodelete .
'&id=' . $line->id .
'&piece_num=' . ((int) $line->piece_num) .
'&mode=' . urlencode((
string) $mode) .
'&token=' . urlencode(newToken()) .
'">';
1265 print
'<a class="editfielda nohover cursornotallowed disabled" href="#" title="'.dol_escape_htmltag($langs->trans(
"ForbiddenTransactionAlreadyExported")).
'">';
1266 print
img_delete($langs->trans(
"ForbiddenTransactionAlreadyValidated"));
1275 $total_debit =
price2num($total_debit,
'MT');
1276 $total_credit =
price2num($total_credit,
'MT');
1278 if ($total_debit != $total_credit) {
1279 setEventMessages(
null, array($langs->trans(
'MvtNotCorrectlyBalanced', $total_debit, $total_credit)),
'warnings');
1285 if ($mode ==
'_tmp' && $action ==
'' && $permissiontoadd) {
1287 print
'<div class="center">';
1288 if (empty($total_debit) && empty($total_credit)) {
1289 print
'<a class="button disabled cursornotallowed" disabled="disabled" href="#" title="'.dol_escape_htmltag($langs->trans(
"EnterNonEmptyLinesFirst")).
'">'.
dol_escape_htmltag($langs->trans(
"ValidTransaction")).
'</a>';
1290 } elseif ($total_debit == $total_credit) {
1291 print
'<a class="button" href="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.((int)
$object->piece_num).(!empty($type) ?
'&type=sub' :
'').
'&backtopage='.urlencode($backtopage).
'&action=valid&token='.newToken().
'">'.$langs->trans(
"ValidTransaction").
'</a>';
1293 print
'<a class="button disabled cursornotallowed" disabled="disabled" href="#" title="'.dol_escape_htmltag($langs->trans(
"MvtNotCorrectlyBalanced", $total_debit, $total_credit)).
'">'.
dol_escape_htmltag($langs->trans(
"ValidTransaction")).
'</a>';
1297 print
'<a class="button button-cancel" href="'.$backtopage.(!empty($type) ?
'?type=sub' :
'').
'">'.$langs->trans(
"Cancel").
'</a>';
1306 print $langs->trans(
"NoRecordFound");
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
accounting_transaction_prepare_head(BookKeeping $object, $mode='', $type='', $backtopage='/accountancy/bookkeeping/listbyaccount.php')
Prepare array with list of tabs for accounting transaction.
checkGeneralAccountAllowsAuxiliary($db, $general_account, $auxiliary_account, $general_account_id=0)
Check if a general accounting account allows the use of an auxiliary account.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage accounting accounts.
Class to manage accounting journals.
Class to manage Ledger (General Ledger and Subledger)
Class for BookkeepingTemplate.
Class to manage Trips and Expenses.
Class to manage suppliers invoices.
Class to manage invoices.
$date_start
Variables from include:
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.