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');
44 $piece_num =
GETPOST(
"piece_num",
'int');
47 if ($user->societe_id > 0) {
56 $accountingaccount_number =
GETPOST(
'accountingaccount_number',
'alphanohtml');
57 $accountingaccount->fetch(null, $accountingaccount_number,
true);
58 $accountingaccount_label = $accountingaccount->label;
60 $journal_code =
GETPOST(
'code_journal',
'alpha');
61 $accountingjournal->fetch(null, $journal_code);
62 $journal_label = $accountingjournal->label;
64 $subledger_account =
GETPOST(
'subledger_account',
'alphanohtml');
65 if ($subledger_account == - 1) {
66 $subledger_account = null;
68 $label_operation=
GETPOST(
'label_operation',
'alphanohtml');
72 $save =
GETPOST(
'save',
'alpha');
73 if (! empty($save)) $action =
'add';
74 $update =
GETPOST(
'update',
'alpha');
75 if (! empty($update)) $action =
'confirm_update';
84 if ($action ==
"confirm_update") {
88 if ((floatval($debit) != 0.0) && (floatval($credit) != 0.0)) {
93 if (empty($accountingaccount_number) || $accountingaccount_number ==
'-1')
96 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"AccountAccountingShort")), null,
'errors');
104 $result = $object->fetch($id, null, $mode);
109 $object->numero_compte = $accountingaccount_number;
110 $object->subledger_account = $subledger_account;
111 $object->label_compte = $accountingaccount_label;
112 $object->label_operation= $label_operation;
113 $object->debit = $debit;
114 $object->credit = $credit;
116 if (floatval($debit) != 0.0) {
117 $object->montant = $debit;
120 if (floatval($credit) != 0.0) {
121 $object->montant = $credit;
125 $result = $object->update($user,
false, $mode);
143 else if ($action ==
"add") {
146 if ((floatval($debit) != 0.0) && (floatval($credit) != 0.0))
152 if (empty($accountingaccount_number) || $accountingaccount_number ==
'-1')
155 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"AccountAccountingShort")), null,
'errors');
162 $object->numero_compte = $accountingaccount_number;
163 $object->subledger_account = $subledger_account;
164 $object->label_compte = $accountingaccount_label;
165 $object->label_operation= $label_operation;
166 $object->debit = $debit;
167 $object->credit = $credit;
168 $object->doc_date =
GETPOST(
'doc_date',
'alpha');
169 $object->doc_type =
GETPOST(
'doc_type',
'alpha');
170 $object->piece_num = $piece_num;
171 $object->doc_ref =
GETPOST(
'doc_ref',
'alpha');
172 $object->code_journal = $journal_code;
173 $object->journal_label = $journal_label;
174 $object->fk_doc =
GETPOST(
'fk_doc',
'alpha');
175 $object->fk_docdet =
GETPOST(
'fk_docdet',
'alpha');
177 if (floatval($debit) != 0.0) {
178 $object->montant = $debit;
182 if (floatval($credit) != 0.0) {
183 $object->montant = $credit;
187 $result = $object->createStd($user,
false, $mode);
204 else if ($action ==
"confirm_delete") {
207 $result = $object->fetch($id, null, $mode);
208 $piece_num = $object->piece_num;
213 $result = $object->delete($user,
false, $mode);
221 else if ($action ==
"confirm_create") {
226 if (! $journal_code || $journal_code ==
'-1') {
227 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Journal")), null,
'errors');
231 if (!
GETPOST(
'next_num_mvt',
'alpha'))
233 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NumPiece")), null,
'errors');
239 $object->label_compte =
'';
243 $object->doc_type =
GETPOST(
'doc_type',
'alpha');
244 $object->piece_num =
GETPOST(
'next_num_mvt',
'alpha');
245 $object->doc_ref =
GETPOST(
'doc_ref',
'alpha');
246 $object->code_journal = $journal_code;
247 $object->journal_label = $journal_label;
249 $object->fk_docdet = 0;
250 $object->montant = 0;
252 $result = $object->createStd($user,0, $mode);
262 $piece_num = $object->piece_num;
267 if ($action ==
'setdate') {
269 $result = $object->updateByMvt($piece_num,
'doc_date',$db->idate($datedoc),$mode);
281 if ($action ==
'setjournal') {
282 $result = $object->updateByMvt($piece_num,
'code_journal', $journal_code, $mode);
283 $result = $object->updateByMvt($piece_num,
'journal_label', $journal_label, $mode);
295 if ($action ==
'setdocref') {
296 $refdoc = trim(
GETPOST(
'doc_ref',
'alpha'));
297 $result = $object->updateByMvt($piece_num,
'doc_ref',$refdoc,$mode);
310 if ($action ==
'valid') {
311 $result = $object->transformTransaction(0,$piece_num);
315 header(
"Location: list.php?sortfield=t.piece_num&sortorder=asc");
325 $html =
new Form($db);
328 llxHeader(
'', $langs->trans(
"CreateMvts"));
331 if ($action ==
'delete') {
332 $formconfirm = $html->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' . $id.
'&mode='. $mode, $langs->trans(
'DeleteMvt'), $langs->trans(
'ConfirmDeleteMvt'),
'confirm_delete',
'', 0, 1);
336 if ($action ==
'create')
341 $next_num_mvt = $object->getNextNumMvt(
'_tmp');
343 if (empty($next_num_mvt))
348 print '<form action="' . $_SERVER[
"PHP_SELF"] .
'" name="create_mvt" method="POST">';
349 print '<input type="hidden" name="action" value="confirm_create">' .
"\n";
350 print '<input type="hidden" name="next_num_mvt" value="' . $next_num_mvt .
'">' .
"\n";
351 print '<input type="hidden" name="mode" value="_tmp">' .
"\n";
355 print '<table class="border" width="100%">';
363 print '<td class="titlefieldcreate fieldrequired">' . $langs->trans(
"Docdate") .
'</td>';
365 print $html->selectDate(
'',
'doc_date',
'',
'',
'',
"create_mvt", 1, 1);
370 print '<td class="fieldrequired">' . $langs->trans(
"Codejournal") .
'</td>';
371 print '<td>' . $formaccounting->select_journal($journal_code,
'code_journal',0,0,1,1) .
'</td>';
375 print '<td>' . $langs->trans(
"Piece") .
'</td>';
376 print '<td><input type="text" class="minwidth200" name="doc_ref" value=""/></td>';
390 print '<div class="center">';
391 print '<input type="submit" class="button" value="' . $langs->trans(
"Create") .
'">';
392 print ' ';
393 print '<input type="button" value="' . $langs->trans(
"Cancel") .
'" class="button" onclick="history.go(-1)" />';
399 $result = $object->fetchPerMvt($piece_num, $mode);
404 if (! empty($object->piece_num))
406 $backlink =
'<a href="'.DOL_URL_ROOT.
'/accountancy/bookkeeping/list.php?restore_lastsearch_values=1">' . $langs->trans(
'BackToList') .
'</a>';
412 $head[$h][0] = $_SERVER[
'PHP_SELF'].
'?piece_num='.$object->piece_num.($mode?
'&mode='.$mode:
'');
413 $head[$h][1] = $langs->trans(
"Transaction");
414 $head[$h][2] =
'transaction';
421 print '<div class="fichecenter">';
422 print '<div class="fichehalfleft">';
424 print '<div class="underbanner clearboth"></div>';
425 print '<table class="border tableforfield" width="100%">';
429 print '<td class="titlefield">' . $langs->trans(
"NumMvts") .
'</td>';
430 print '<td>' . $object->piece_num .
'</td>';
435 print '<table class="nobordernopadding" width="100%"><tr><td>';
436 print $langs->trans(
'Docdate');
438 if ($action !=
'editdate')
439 print '<td align="right"><a href="'.$_SERVER[
"PHP_SELF"].
'?action=editdate&piece_num='. $object->piece_num .
'&mode='. $mode .
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetDate'),1).
'</a></td>';
440 print '</tr></table>';
441 print
'</td><td colspan="3">';
442 if ($action ==
'editdate') {
443 print
'<form name="setdate" action="' . $_SERVER[
"PHP_SELF"] .
'?piece_num=' . $object->piece_num .
'" method="post">';
444 print
'<input type="hidden" name="token" value="' . $_SESSION [
'newtoken'] .
'">';
445 print
'<input type="hidden" name="action" value="setdate">';
446 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
447 print
$form->selectDate($object->doc_date ? $object->doc_date : - 1,
'doc_date',
'',
'',
'',
"setdate");
448 print
'<input type="submit" class="button" value="' . $langs->trans(
'Modify') .
'">';
451 print $object->doc_date ?
dol_print_date($object->doc_date,
'day') :
' ';
458 print
'<table class="nobordernopadding" width="100%"><tr><td>';
459 print $langs->trans(
'Codejournal');
461 if ($action !=
'editjournal')
462 print
'<td align="right"><a href="'.$_SERVER[
"PHP_SELF"].
'?action=editjournal&piece_num='.$object->piece_num.
'&mode='. $mode .
'">'.
img_edit($langs->transnoentitiesnoconv(
'Edit'),1).
'</a></td>';
463 print
'</tr></table>';
465 if ($action ==
'editjournal') {
466 print
'<form name="setjournal" action="' . $_SERVER[
"PHP_SELF"] .
'?piece_num=' . $object->piece_num .
'" method="post">';
467 print
'<input type="hidden" name="token" value="' . $_SESSION [
'newtoken'] .
'">';
468 print
'<input type="hidden" name="action" value="setjournal">';
469 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
470 print $formaccounting->select_journal($object->code_journal,
'code_journal',0,0,array(),1,1);
471 print
'<input type="submit" class="button" value="' . $langs->trans(
'Modify') .
'">';
474 print $object->code_journal ;
481 print
'<table class="nobordernopadding" width="100%"><tr><td>';
482 print $langs->trans(
'Piece');
484 if ($action !=
'editdocref')
485 print
'<td align="right"><a href="'.$_SERVER[
"PHP_SELF"].
'?action=editdocref&piece_num='.$object->piece_num.
'&mode='. $mode .
'">'.
img_edit($langs->transnoentitiesnoconv(
'Edit'),1).
'</a></td>';
486 print
'</tr></table>';
488 if ($action ==
'editdocref') {
489 print
'<form name="setdocref" action="' . $_SERVER[
"PHP_SELF"] .
'?piece_num=' . $object->piece_num .
'" method="post">';
490 print
'<input type="hidden" name="token" value="' . $_SESSION [
'newtoken'] .
'">';
491 print
'<input type="hidden" name="action" value="setdocref">';
492 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
493 print
'<input type="text" size="20" name="doc_ref" value="'.dol_escape_htmltag($object->doc_ref).
'">';
494 print
'<input type="submit" class="button" value="' . $langs->trans(
'Modify') .
'">';
497 print $object->doc_ref ;
506 print
'<div class="fichehalfright"><div class="ficheaddleft">';
508 print
'<div class="underbanner clearboth"></div>';
509 print
'<table class="border tableforfield" width="100%">';
512 if(! empty($object->doc_type))
515 print
'<td class="titlefield">' . $langs->trans(
"Doctype") .
'</td>';
516 print
'<td>' . $object->doc_type .
'</td>';
522 print
'<td class="titlefield">' . $langs->trans(
"DateCreation") .
'</td>';
524 print $object->date_creation ?
dol_print_date($object->date_creation,
'day') :
' ';
570 print
'</div></div><!-ee-->';
574 print
'<div style="clear:both"></div>';
578 $result = $object->fetchAllPerMvt($piece_num, $mode);
585 print
'<form action="' . $_SERVER[
"PHP_SELF"] .
'?piece_num=' . $object->piece_num .
'" method="post">';
586 print
'<input type="hidden" name="doc_date" value="' . $object->doc_date .
'">' .
"\n";
587 print
'<input type="hidden" name="doc_type" value="' . $object->doc_type .
'">' .
"\n";
588 print
'<input type="hidden" name="doc_ref" value="' . $object->doc_ref .
'">' .
"\n";
589 print
'<input type="hidden" name="code_journal" value="' . $object->code_journal .
'">' .
"\n";
590 print
'<input type="hidden" name="fk_doc" value="' . $object->fk_doc .
'">' .
"\n";
591 print
'<input type="hidden" name="fk_docdet" value="' . $object->fk_docdet .
'">' .
"\n";
592 print
'<input type="hidden" name="mode" value="' . $mode .
'">' .
"\n";
594 print
"<table class=\"noborder\" width=\"100%\">";
595 if (count($object->linesmvt) > 0) {
600 print
'<tr class="liste_titre">';
611 foreach ($object->linesmvt as $line) {
612 print
'<tr class="oddeven">';
613 $total_debit += $line->debit;
614 $total_credit += $line->credit;
616 if ($action ==
'update' && $line->id == $id) {
618 print $formaccounting->select_account($line->numero_compte,
'accountingaccount_number', 1, array (), 1, 1,
'');
623 if (! empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX))
625 print $formaccounting->select_auxaccount($line->subledger_account,
'subledger_account', 1);
629 print
'<input type="text" name="subledger_account" value="'.$line->subledger_account.
'">';
632 print
'<td><input type="text" class="minwidth200" name="label_operation" value="' . $line->label_operation.
'"/></td>';
633 print
'<td align="right"><input type="text" size="6" class="right" name="debit" value="' .
price($line->debit) .
'"/></td>';
634 print
'<td align="right"><input type="text" size="6" class="right" name="credit" value="' .
price($line->credit) .
'"/></td>';
636 print
'<input type="hidden" name="id" value="' . $line->id .
'">' .
"\n";
637 print
'<input type="submit" class="button" name="update" value="' . $langs->trans(
"Update") .
'">';
640 $accountingaccount->fetch(null, $line->numero_compte,
true);
641 print
'<td>' . $accountingaccount->getNomUrl(0,1,1,
'',0) .
'</td>';
643 print
'<td>' . $line->label_operation.
'</td>';
644 print
'<td align="right">' .
price($line->debit) .
'</td>';
645 print
'<td align="right">' .
price($line->credit) .
'</td>';
647 print
'<td align="center">';
648 print
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?action=update&id=' . $line->id .
'&piece_num=' . $line->piece_num .
'&mode='.$mode.
'">';
652 $actiontodelete=
'delete';
653 if ($mode ==
'_tmp' || $action !=
'delmouv') $actiontodelete=
'confirm_delete';
655 print
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?action='.$actiontodelete.
'&id=' . $line->id .
'&piece_num=' . $line->piece_num .
'&mode='.$mode.
'">';
665 $total_credit =
price2num($total_credit);
667 if ($total_debit != $total_credit)
669 setEventMessages(null, array($langs->trans(
'MvtNotCorrectlyBalanced', $total_debit, $total_credit)),
'warnings');
672 if ($action ==
"" || $action ==
'add') {
673 print
'<tr class="oddeven">';
675 print $formaccounting->select_account($accountingaccount_number,
'accountingaccount_number', 1, array (), 1, 1,
'');
680 if (! empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX))
682 print $formaccounting->select_auxaccount($subledger_account,
'subledger_account', 1);
686 print
'<input type="text" name="subledger_account" value="">';
689 print
'<td><input type="text" class="minwidth200" name="label_operation" value=""/></td>';
690 print
'<td align="right"><input type="text" size="6" class="right" name="debit" value=""/></td>';
691 print
'<td align="right"><input type="text" size="6" class="right" name="credit" value=""/></td>';
692 print
'<td><input type="submit" class="button" name="save" value="' . $langs->trans(
"Add") .
'"></td>';
698 if ($mode==
'_tmp' && $action==
'')
701 print
'<div class="center">';
702 if ($total_debit == $total_credit)
704 print
'<a class="button" href="' . $_SERVER[
"PHP_SELF"] .
'?piece_num=' . $object->piece_num .
'&action=valid">'.$langs->trans(
"ValidTransaction").
'</a>';
708 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")).
'">';
712 print
'<a class="button" href="' . DOL_URL_ROOT.
'/accountancy/bookkeeping/list.php">'.$langs->trans(
"Cancel").
'</a>';
load_fiche_titre($titre, $morehtmlright='', $picto='title_generic.png', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
GETPOST($paramname, $check='none', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
print
Draft customers invoices.
setEventMessages($mesg, $mesgs, $style='mesgs')
Set event messages in dol_events session object.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm=false, $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
img_edit($titlealt='default', $float=0, $other='class="pictoedit"')
Show logo editer/modifier fiche.
dol_print_error($db='', $error='', $errors=null)
Affiche message erreur system avec toutes les informations pour faciliter le diagnostic et la remonte...
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...
img_delete($titlealt='default', $other='class="pictodelete"')
Show delete logo.
Class to manage Ledger (General Ledger and Subledger)
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
dol_fiche_end($notab=0)
Show tab footer of a card.
length_accounta($accounta)
Return Auxiliary accounting account of thirdparties with defined length.
if($_POST["cancel"]==$langs->trans("Cancel") &&! $id) if($action=='add' && $_POST["cancel"]<> $langs->trans("Cancel")) if($action=='delete') if($id) $form
Actions.
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...
dol_print_date($time, $format='', $tzoutput='tzserver', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="")
Show title line of an array.
Class to manage accounting accounts.
Class to manage accounting accounts.
price2num($amount, $rounding='', $alreadysqlnb=0)
Function that return a number with universal decimal format (decimal separator is '...
dol_fiche_head($links=array(), $active='0', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='')
Show tab header of a card.