28 require
'../../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
30 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeeping.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
35 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
38 $langs->loadLangs(array(
"accountancy",
"bills",
"compta"));
40 $action =
GETPOST(
'action',
'aZ09');
41 $optioncss =
GETPOST(
'optioncss',
'aZ');
44 $mode =
GETPOST(
'mode',
'aZ09');
45 $piece_num =
GETPOST(
"piece_num",
'int');
48 if ($user->socid > 0) {
57 $accountingaccount_number =
GETPOST(
'accountingaccount_number',
'alphanohtml');
58 $accountingaccount->fetch(null, $accountingaccount_number,
true);
59 $accountingaccount_label = $accountingaccount->label;
61 $journal_code =
GETPOST(
'code_journal',
'alpha');
62 $accountingjournal->fetch(null, $journal_code);
63 $journal_label = $accountingjournal->label;
65 $subledger_account =
GETPOST(
'subledger_account',
'alphanohtml');
66 if ($subledger_account == -1) {
67 $subledger_account = null;
69 $subledger_label =
GETPOST(
'subledger_label',
'alphanohtml');
71 $label_operation =
GETPOST(
'label_operation',
'alphanohtml');
75 $save =
GETPOST(
'save',
'alpha');
76 if (!empty($save)) $action =
'add';
77 $update =
GETPOST(
'update',
'alpha');
78 if (!empty($update)) $action =
'confirm_update';
87 if ($action ==
"confirm_update") {
90 if ((floatval($debit) != 0.0) && (floatval($credit) != 0.0)) {
95 if (empty($accountingaccount_number) || $accountingaccount_number ==
'-1')
98 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"AccountAccountingShort")), null,
'errors');
106 $result = $object->fetch($id, null, $mode);
111 $object->numero_compte = $accountingaccount_number;
112 $object->subledger_account = $subledger_account;
113 $object->subledger_label = $subledger_label;
114 $object->label_compte = $accountingaccount_label;
115 $object->label_operation = $label_operation;
116 $object->debit = $debit;
117 $object->credit = $credit;
119 if (floatval($debit) != 0.0) {
120 $object->montant = $debit;
121 $object->amount = $debit;
124 if (floatval($credit) != 0.0) {
125 $object->montant = $credit;
126 $object->amount = $credit;
130 $result = $object->update($user,
false, $mode);
134 if ($mode !=
'_tmp') {
145 } elseif ($action ==
"add") {
148 if ((floatval($debit) != 0.0) && (floatval($credit) != 0.0))
154 if (empty($accountingaccount_number) || $accountingaccount_number ==
'-1')
157 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"AccountAccountingShort")), null,
'errors');
164 $object->numero_compte = $accountingaccount_number;
165 $object->subledger_account = $subledger_account;
166 $object->subledger_label = $subledger_label;
167 $object->label_compte = $accountingaccount_label;
168 $object->label_operation = $label_operation;
169 $object->debit = $debit;
170 $object->credit = $credit;
171 $object->doc_date = (string)
GETPOST(
'doc_date',
'alpha');
172 $object->doc_type = (string)
GETPOST(
'doc_type',
'alpha');
173 $object->piece_num = $piece_num;
174 $object->doc_ref = (string)
GETPOST(
'doc_ref',
'alpha');
175 $object->code_journal = $journal_code;
176 $object->journal_label = $journal_label;
180 if (floatval($debit) != 0.0) {
181 $object->montant = $debit;
182 $object->amount = $debit;
186 if (floatval($credit) != 0.0) {
187 $object->montant = $credit;
188 $object->amount = $credit;
192 $result = $object->createStd($user,
false, $mode);
196 if ($mode !=
'_tmp') {
206 } elseif ($action ==
"confirm_delete") {
209 $result = $object->fetch($id, null, $mode);
210 $piece_num = $object->piece_num;
215 $result = $object->delete($user,
false, $mode);
221 } elseif ($action ==
"confirm_create") {
226 if (!$journal_code || $journal_code ==
'-1') {
227 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Journal")), null,
'errors');
231 if (!
GETPOST(
'doc_ref',
'alpha'))
233 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Piece")), null,
'errors');
240 $object->label_compte =
'';
244 $object->doc_type =
GETPOST(
'doc_type',
'alpha');
245 $object->piece_num =
GETPOST(
'next_num_mvt',
'alpha');
246 $object->doc_ref =
GETPOST(
'doc_ref',
'alpha');
247 $object->code_journal = $journal_code;
248 $object->journal_label = $journal_label;
250 $object->fk_docdet = 0;
251 $object->montant = 0;
254 $result = $object->createStd($user, 0, $mode);
264 $piece_num = $object->piece_num;
269 if ($action ==
'setdate') {
271 $result = $object->updateByMvt($piece_num,
'doc_date', $db->idate($datedoc), $mode);
283 if ($action ==
'setjournal') {
284 $result = $object->updateByMvt($piece_num,
'code_journal', $journal_code, $mode);
285 $result = $object->updateByMvt($piece_num,
'journal_label', $journal_label, $mode);
297 if ($action ==
'setdocref') {
298 $refdoc =
GETPOST(
'doc_ref',
'alpha');
299 $result = $object->updateByMvt($piece_num,
'doc_ref', $refdoc, $mode);
312 if ($action ==
'valid') {
313 $result = $object->transformTransaction(0, $piece_num);
317 header(
"Location: list.php?sortfield=t.piece_num&sortorder=asc");
327 $html =
new Form($db);
330 llxHeader(
'', $langs->trans(
"CreateMvts"));
333 if ($action ==
'delete') {
334 $formconfirm = $html->formconfirm(
$_SERVER[
"PHP_SELF"].
'?id='.$id.
'&mode='.$mode, $langs->trans(
'DeleteMvt'), $langs->trans(
'ConfirmDeleteMvt', $langs->transnoentitiesnoconv(
"RegistrationInAccounting")),
'confirm_delete',
'', 0, 1);
338 if ($action ==
'create')
343 $next_num_mvt = $object->getNextNumMvt(
'_tmp');
345 if (empty($next_num_mvt))
350 print '<form action="'.$_SERVER[
"PHP_SELF"].
'" name="create_mvt" method="POST">';
351 if ($optioncss !=
'')
print '<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
352 print '<input type="hidden" name="token" value="'.newToken().
'">';
353 print '<input type="hidden" name="action" value="confirm_create">'.
"\n";
354 print '<input type="hidden" name="next_num_mvt" value="'.$next_num_mvt.
'">'.
"\n";
355 print '<input type="hidden" name="mode" value="_tmp">'.
"\n";
359 print '<table class="border centpercent">';
367 print '<td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Docdate").
'</td>';
369 print $html->selectDate(
'',
'doc_date',
'',
'',
'',
"create_mvt", 1, 1);
374 print '<td class="fieldrequired">'.$langs->trans(
"Codejournal").
'</td>';
375 print '<td>'.$formaccounting->select_journal($journal_code,
'code_journal', 0, 0, 1, 1).
'</td>';
379 print '<td class="fieldrequired">'.$langs->trans(
"Piece").
'</td>';
380 print '<td><input type="text" class="minwidth200" name="doc_ref" value="'.GETPOST(
'doc_ref',
'alpha').
'"></td>';
394 print '<div class="center">';
395 print '<input type="submit" class="button" value="'.$langs->trans(
"Create").
'">';
396 print ' ';
397 print '<input type="button" value="'.$langs->trans(
"Cancel").
'" class="button button-cancel" onclick="history.go(-1)" />';
403 $result = $object->fetchPerMvt($piece_num, $mode);
408 if (!empty($object->piece_num))
410 $backlink =
'<a href="'.DOL_URL_ROOT.
'/accountancy/bookkeeping/list.php?restore_lastsearch_values=1">'.$langs->trans(
'BackToList').
'</a>';
416 $head[$h][0] =
$_SERVER[
'PHP_SELF'].
'?piece_num='.$object->piece_num.($mode ?
'&mode='.$mode :
'');
417 $head[$h][1] = $langs->trans(
"Transaction");
418 $head[$h][2] =
'transaction';
425 print '<div class="fichecenter">';
426 print '<div class="fichehalfleft">';
428 print '<div class="underbanner clearboth"></div>';
429 print '<table class="border tableforfield" width="100%">';
433 print '<td class="titlefield">'.$langs->trans(
"NumMvts").
'</td>';
434 print '<td>'.$object->piece_num.
'</td>';
439 print '<table class="nobordernopadding" width="100%"><tr><td>';
440 print $langs->trans(
'Docdate');
442 if ($action !=
'editdate')
443 print '<td class="right"><a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdate&piece_num='.$object->piece_num.
'&mode='.$mode.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetDate'), 1).
'</a></td>';
444 print '</tr></table>';
445 print
'</td><td colspan="3">';
446 if ($action ==
'editdate') {
447 print
'<form name="setdate" action="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.$object->piece_num.
'" method="post">';
448 if ($optioncss !=
'') print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
449 print
'<input type="hidden" name="token" value="'.newToken().
'">';
450 print
'<input type="hidden" name="action" value="setdate">';
451 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
452 print $form->selectDate($object->doc_date ? $object->doc_date : - 1,
'doc_date',
'',
'',
'',
"setdate");
453 print
'<input type="submit" class="button" value="'.$langs->trans(
'Modify').
'">';
456 print $object->doc_date ?
dol_print_date($object->doc_date,
'day') :
' ';
463 print
'<table class="nobordernopadding" width="100%"><tr><td>';
464 print $langs->trans(
'Codejournal');
466 if ($action !=
'editjournal')
467 print
'<td class="right"><a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=editjournal&piece_num='.$object->piece_num.
'&mode='.$mode.
'">'.
img_edit($langs->transnoentitiesnoconv(
'Edit'), 1).
'</a></td>';
468 print
'</tr></table>';
470 if ($action ==
'editjournal') {
471 print
'<form name="setjournal" action="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.$object->piece_num.
'" method="post">';
472 if ($optioncss !=
'') print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
473 print
'<input type="hidden" name="token" value="'.newToken().
'">';
474 print
'<input type="hidden" name="action" value="setjournal">';
475 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
476 print $formaccounting->select_journal($object->code_journal,
'code_journal', 0, 0, array(), 1, 1);
477 print
'<input type="submit" class="button" value="'.$langs->trans(
'Modify').
'">';
480 print $object->code_journal;
487 print
'<table class="nobordernopadding" width="100%"><tr><td>';
488 print $langs->trans(
'Piece');
490 if ($action !=
'editdocref')
491 print
'<td class="right"><a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdocref&piece_num='.$object->piece_num.
'&mode='.$mode.
'">'.
img_edit($langs->transnoentitiesnoconv(
'Edit'), 1).
'</a></td>';
492 print
'</tr></table>';
494 if ($action ==
'editdocref') {
495 print
'<form name="setdocref" action="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.$object->piece_num.
'" method="post">';
496 if ($optioncss !=
'') print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
497 print
'<input type="hidden" name="token" value="'.newToken().
'">';
498 print
'<input type="hidden" name="action" value="setdocref">';
499 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
500 print
'<input type="text" size="20" name="doc_ref" value="'.dol_escape_htmltag($object->doc_ref).
'">';
501 print
'<input type="submit" class="button" value="'.$langs->trans(
'Modify').
'">';
504 print $object->doc_ref;
513 print
'<div class="fichehalfright"><div class="ficheaddleft">';
515 print
'<div class="underbanner clearboth"></div>';
516 print
'<table class="border tableforfield" width="100%">';
519 if (!empty($object->doc_type))
522 print
'<td class="titlefield">'.$langs->trans(
"Doctype").
'</td>';
523 print
'<td>'.$object->doc_type.
'</td>';
529 print
'<td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
531 print $object->date_creation ?
dol_print_date($object->date_creation,
'day') :
' ';
577 print
'</div></div><!-ee-->';
581 print
'<div style="clear:both"></div>';
585 $result = $object->fetchAllPerMvt($piece_num, $mode);
591 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.$object->piece_num.
'" method="post">';
592 if ($optioncss !=
'') print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
593 print
'<input type="hidden" name="token" value="'.newToken().
'">';
594 print
'<input type="hidden" name="doc_date" value="'.$object->doc_date.
'">'.
"\n";
595 print
'<input type="hidden" name="doc_type" value="'.$object->doc_type.
'">'.
"\n";
596 print
'<input type="hidden" name="doc_ref" value="'.$object->doc_ref.
'">'.
"\n";
597 print
'<input type="hidden" name="code_journal" value="'.$object->code_journal.
'">'.
"\n";
598 print
'<input type="hidden" name="fk_doc" value="'.$object->fk_doc.
'">'.
"\n";
599 print
'<input type="hidden" name="fk_docdet" value="'.$object->fk_docdet.
'">'.
"\n";
600 print
'<input type="hidden" name="mode" value="'.$mode.
'">'.
"\n";
602 print
'<table class="noborder centpercent">';
604 if (count($object->linesmvt) > 0) {
608 print
'<tr class="liste_titre">';
619 foreach ($object->linesmvt as $line) {
620 print
'<tr class="oddeven">';
621 $total_debit += $line->debit;
622 $total_credit += $line->credit;
624 if ($action ==
'update' && $line->id == $id) {
625 print
'<!-- td columns in edit mode -->';
627 print $formaccounting->select_account((
GETPOSTISSET(
"accountingaccount_number") ?
GETPOST(
"accountingaccount_number",
"alpha") : $line->numero_compte),
'accountingaccount_number', 1, array(), 1, 1,
'');
634 if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
635 print $formaccounting->select_auxaccount((
GETPOSTISSET(
"subledger_account") ?
GETPOST(
"subledger_account",
"alpha") : $line->subledger_account),
'subledger_account', 1);
637 print
'<input type="text" class="maxwidth150" name="subledger_account" value="'.(GETPOSTISSET(
"subledger_account") ?
GETPOST(
"subledger_account",
"alpha") : $line->subledger_account).
'" placeholder="'.
dol_escape_htmltag($langs->trans(
"SubledgerAccount")).
'">';
640 print
'<br><input type="text" class="maxwidth150" name="subledger_label" value="'.(GETPOSTISSET(
"subledger_label") ?
GETPOST(
"subledger_label",
"alpha") : $line->subledger_label).
'" placeholder="'.
dol_escape_htmltag($langs->trans(
"SubledgerAccountLabel")).
'">';
642 print
'<td><input type="text" class="minwidth200" name="label_operation" value="'.(GETPOSTISSET(
"label_operation") ?
GETPOST(
"label_operation",
"alpha") : $line->label_operation).
'"></td>';
643 print
'<td class="right"><input type="text" size="6" class="right" name="debit" value="'.(GETPOSTISSET(
"debit") ?
GETPOST(
"debit",
"alpha") :
price($line->debit)).
'"></td>';
644 print
'<td class="right"><input type="text" size="6" class="right" name="credit" value="'.(GETPOSTISSET(
"credit") ?
GETPOST(
"credit",
"alpha") :
price($line->credit)).
'"></td>';
646 print
'<input type="hidden" name="id" value="'.$line->id.
'">'.
"\n";
647 print
'<input type="submit" class="button" name="update" value="'.$langs->trans(
"Update").
'">';
650 $accountingaccount->fetch(null, $line->numero_compte,
true);
651 print
'<td>'.$accountingaccount->getNomUrl(0, 1, 1,
'', 0).
'</td>';
652 print
'<td>'.length_accounta($line->subledger_account);
653 if ($line->subledger_label) {
654 print
' - <span class="opacitymedium">'.$line->subledger_label.
'</span>';
657 print
'<td>'.$line->label_operation.
'</td>';
658 print
'<td class="nowrap right">'.price($line->debit).
'</td>';
659 print
'<td class="nowrap right">'.price($line->credit).
'</td>';
661 print
'<td class="center">';
662 print
'<a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=update&id='.$line->id.
'&piece_num='.urlencode($line->piece_num).
'&mode='.urlencode($mode).
'&token='.urlencode(
newToken()).
'">';
663 print
img_edit(
'', 0,
'class="marginrightonly"');
666 $actiontodelete =
'delete';
667 if ($mode ==
'_tmp' || $action !=
'delmouv') $actiontodelete =
'confirm_delete';
669 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?action='.$actiontodelete.
'&id='.$line->id.
'&piece_num='.urlencode($line->piece_num).
'&mode='.urlencode($mode).
'&token='.urlencode(
newToken()).
'">';
678 $total_debit =
price2num($total_debit,
'MT');
679 $total_credit =
price2num($total_credit,
'MT');
681 if ($total_debit != $total_credit)
683 setEventMessages(null, array($langs->trans(
'MvtNotCorrectlyBalanced', $total_debit, $total_credit)),
'warnings');
686 if ($action ==
"" || $action ==
'add') {
687 print
'<tr class="oddeven">';
688 print
'<!-- td columns in add mode -->';
690 print $formaccounting->select_account(
'',
'accountingaccount_number', 1, array(), 1, 1,
'');
697 if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
698 print $formaccounting->select_auxaccount(
'',
'subledger_account', 1);
700 print
'<input type="text" class="maxwidth150" name="subledger_account" value="" placeholder="'.dol_escape_htmltag($langs->trans(
"SubledgerAccount")).
'">';
702 print
'<br><input type="text" class="maxwidth150" name="subledger_label" value="" placeholder="'.dol_escape_htmltag($langs->trans(
"SubledgerAccountLabel")).
'">';
704 print
'<td><input type="text" class="minwidth200" name="label_operation" value="'.$label_operation.
'"/></td>';
705 print
'<td class="right"><input type="text" size="6" class="right" name="debit" value=""/></td>';
706 print
'<td class="right"><input type="text" size="6" class="right" name="credit" value=""/></td>';
707 print
'<td><input type="submit" class="button" name="save" value="'.$langs->trans(
"Add").
'"></td>';
713 if ($mode ==
'_tmp' && $action ==
'')
716 print
'<div class="center">';
717 if ($total_debit == $total_credit)
719 print
'<a class="button" href="'.$_SERVER[
"PHP_SELF"].
'?piece_num='.$object->piece_num.
'&action=valid">'.$langs->trans(
"ValidTransaction").
'</a>';
721 print
'<input type="submit" class="button" disabled="disabled" href="#" title="'.dol_escape_htmltag($langs->trans(
"MvtNotCorrectlyBalanced", $debit, $credit)).
'" value="'.
dol_escape_htmltag($langs->trans(
"ValidTransaction")).
'">';
725 print
'<a class="button button-cancel" href="'.DOL_URL_ROOT.
'/accountancy/bookkeeping/list.php">'.$langs->trans(
"Cancel").
'</a>';
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
img_edit($titlealt= 'default', $float=0, $other= '')
Show logo editer/modifier fiche.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm= 'auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
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...
Class to manage Ledger (General Ledger and Subledger)
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
price2num($amount, $rounding= '', $option=0)
Function that return a number with universal decimal format (decimal separator is '...
accessforbidden($message= '', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
print $_SERVER["PHP_SELF"]
Edit parameters.
GETPOSTINT($paramname, $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_get_fiche_head($links=array(), $active= '', $title= '', $notab=0, $picto= '', $pictoisfullpath=0, $morehtmlright= '', $morecss= '', $limittoshow=0, $moretabssuffix= '')
Show tabs of a record.
print
Draft customers invoices.
dol_print_date($time, $format= '', $tzoutput= 'auto', $outputlangs= '', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
Class to manage accounting accounts.
Class to manage accounting accounts.
img_delete($titlealt= 'default', $other= 'class="pictodelete"', $morecss= '')
Show delete logo.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $keepmoretags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...