32 require
'../../main.inc.php';
33 require_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/paymentvat.class.php';
35 require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
36 require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/paymentsocialcontribution.class.php';
37 require_once DOL_DOCUMENT_ROOT.
'/salaries/class/salary.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
39 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
45 $hookmanager->initHooks(array(
'specialexpensesindex'));
48 $langs->loadLangs(array(
'compta',
'bills'));
52 $socid = $user->socid;
54 $result =
restrictedArea($user,
'tax|salaries',
'',
'',
'charges|');
56 $mode =
GETPOST(
"mode",
'alpha');
58 $filtre =
GETPOST(
"filtre",
'alpha');
60 $year = date(
"Y", time());
62 $optioncss =
GETPOST(
'optioncss',
'aZ');
64 $search_account =
GETPOST(
'search_account',
'int');
66 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
67 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
68 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
70 if (empty($page) || $page == -1) {
73 $offset = $limit * $page;
74 $pageprev = $page - 1;
75 $pagenext = $page + 1;
77 $sortfield =
"cs.date_ech";
88 $tva_static =
new Tva($db);
92 $sal_static =
new Salary($db);
93 $accountstatic =
new Account($db);
95 llxHeader(
'', $langs->trans(
"SpecialExpensesArea"));
97 $title = $langs->trans(
"SpecialExpensesArea");
100 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
101 $param .=
'&contextpage='.$contextpage;
103 if ($limit > 0 && $limit != $conf->liste_limit) {
104 $param .=
'&limit='.$limit;
107 $param .=
'&sortfield='.$sortfield;
110 $param .=
'&sortorder='.$sortorder;
116 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
117 if ($optioncss !=
'') {
118 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
120 print
'<input type="hidden" name="token" value="'.newToken().
'">';
121 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
122 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
123 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
124 print
'<input type="hidden" name="page" value="'.$page.
'">';
125 print
'<input type="hidden" name="mode" value="'.$mode.
'">';
127 $nav = ($year ?
'<a href="index.php?year='.($year - 1).$param.
'">'.
img_previous($langs->trans(
"Previous"),
'class="valignbottom"').
"</a> ".$langs->trans(
"Year").
' '.$year.
' <a href="index.php?year='.($year + 1).$param.
'">'.
img_next($langs->trans(
"Next"),
'class="valignbottom"').
"</a>" :
"");
128 print_barre_liste($title, $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', $num, $totalnboflines,
'object_payment', 0, $nav,
'', $limit, 1);
131 $param .=
'&year='.$year;
134 print
'<span class="opacitymedium">'.$langs->trans(
"DescTaxAndDividendsArea").
'</span><br>';
137 if (
isModEnabled(
'tax') && $user->rights->tax->charges->lire) {
139 print
load_fiche_titre($langs->trans(
"SocialContributions").($year ?
' ('.$langs->trans(
"Year").
' '.$year.
')' :
''),
'',
'');
141 print
'<table class="noborder centpercent">';
142 print
'<tr class="liste_titre">';
143 print_liste_field_titre(
"PeriodEndDate", $_SERVER[
"PHP_SELF"],
"cs.date_ech",
"", $param,
'', $sortfield, $sortorder,
'nowraponall ');
146 print_liste_field_titre(
"ExpectedToPay", $_SERVER[
"PHP_SELF"],
"cs.amount",
"", $param,
'class="right"', $sortfield, $sortorder);
147 print_liste_field_titre(
"RefPayment", $_SERVER[
"PHP_SELF"],
"pc.rowid",
"", $param,
'', $sortfield, $sortorder);
148 print_liste_field_titre(
"DatePayment", $_SERVER[
"PHP_SELF"],
"pc.datep",
"", $param,
'align="center"', $sortfield, $sortorder);
153 print_liste_field_titre(
"PayedByThisPayment", $_SERVER[
"PHP_SELF"],
"pc.amount",
"", $param,
'class="right"', $sortfield, $sortorder);
156 $sql =
"SELECT c.id, c.libelle as label,";
157 $sql .=
" cs.rowid, cs.libelle, cs.fk_type as type, cs.periode, cs.date_ech, cs.amount as total,";
158 $sql .=
" pc.rowid as pid, pc.datep, pc.amount as totalpaid, pc.num_paiement as num_payment, pc.fk_bank,";
159 $sql .=
" pct.code as payment_code,";
160 $sql .=
" ba.rowid as bid, ba.ref as bref, ba.number as bnumber, ba.account_number, ba.fk_accountancy_journal, ba.label as blabel";
161 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_chargesociales as c,";
162 $sql .=
" ".MAIN_DB_PREFIX.
"chargesociales as cs";
163 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiementcharge as pc ON pc.fk_charge = cs.rowid";
164 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_paiement as pct ON pc.fk_typepaiement = pct.id";
165 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank as b ON pc.fk_bank = b.rowid";
166 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_account as ba ON b.fk_account = ba.rowid";
167 $sql .=
" WHERE cs.fk_type = c.id";
168 $sql .=
" AND cs.entity IN (".getEntity(
"tax").
")";
177 if (preg_match(
'/^cs\./', $sortfield) || preg_match(
'/^c\./', $sortfield) || preg_match(
'/^pc\./', $sortfield) || preg_match(
'/^pct\./', $sortfield)) {
178 $sql .= $db->order($sortfield, $sortorder);
183 dol_syslog(
"compta/charges/index.php: select payment", LOG_DEBUG);
184 $resql = $db->query(
$sql);
186 $num = $db->num_rows($resql);
191 while ($i < min($num, $limit)) {
192 $obj = $db->fetch_object($resql);
193 print
'<tr class="oddeven">';
195 $date = $obj->periode;
197 $date = $obj->date_ech;
199 print
'<td>'.dol_print_date($date,
'day').
'</td>';
202 $socialcontrib->id = $obj->rowid;
203 $socialcontrib->ref = $obj->label;
204 $socialcontrib->label = $obj->label;
205 print $socialcontrib->getNomUrl(1,
'20');
208 print
'<td><a href="'.DOL_URL_ROOT.
'/compta/sociales/list.php?filtre=cs.fk_type:'.$obj->type.
'">'.$obj->label.
'</a></td>';
210 print
'<td class="right"><span class="amount">'.price($obj->total).
'</span></td>';
212 $payment_sc_static->id = $obj->pid;
213 $payment_sc_static->ref = $obj->pid;
214 print
'<td>'.$payment_sc_static->getNomUrl(1).
"</td>\n";
216 print
'<td class="center">'.dol_print_date($db->jdate($obj->datep),
'day').
'</td>';
219 if ($obj->payment_code) {
220 print $langs->trans(
"PaymentTypeShort".$obj->payment_code).
' ';
222 print $obj->num_payment.
'</td>';
226 if ($obj->fk_bank > 0) {
228 $accountstatic->id = $obj->bid;
229 $accountstatic->ref = $obj->bref;
230 $accountstatic->number = $obj->bnumber;
231 $accountstatic->account_number = $obj->account_number;
232 $accountstatic->fk_accountancy_journal = $obj->fk_accountancy_journal;
233 $accountstatic->label = $obj->blabel;
235 print $accountstatic->getNomUrl(1);
242 print
'<td class="right">';
243 if ($obj->totalpaid) {
244 print
price($obj->totalpaid);
249 $total = $total + $obj->total;
250 $totalpaid = $totalpaid + $obj->totalpaid;
253 print
'<tr class="liste_total"><td colspan="3" class="liste_total">'.$langs->trans(
"Total").
'</td>';
254 print
'<td class="liste_total right"></td>';
255 print
'<td align="center" class="liste_total"> </td>';
256 print
'<td align="center" class="liste_total"> </td>';
257 print
'<td align="center" class="liste_total"> </td>';
261 print
'<td class="liste_total right">'.price($totalpaid).
"</td>";
270 if (
isModEnabled(
'tax') && $user->rights->tax->charges->lire) {
275 print
load_fiche_titre($langs->trans(
"VATDeclarations").($year ?
' ('.$langs->trans(
"Year").
' '.$year.
')' :
''),
'',
'');
277 $sql =
"SELECT ptva.rowid, pv.rowid as id_tva, pv.amount as amount_tva, ptva.amount, pv.label, pv.datev as dm, ptva.datep as date_payment, ptva.fk_bank, ptva.num_paiement as num_payment,";
278 $sql .=
" pct.code as payment_code,";
279 $sql .=
" ba.rowid as bid, ba.ref as bref, ba.number as bnumber, ba.account_number, ba.fk_accountancy_journal, ba.label as blabel";
280 $sql .=
" FROM ".MAIN_DB_PREFIX.
"tva as pv";
281 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"payment_vat as ptva ON (ptva.fk_tva = pv.rowid)";
282 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank as b ON (ptva.fk_bank = b.rowid)";
283 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_account as ba ON b.fk_account = ba.rowid";
284 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_paiement as pct ON ptva.fk_typepaiement = pct.id";
285 $sql .=
" WHERE pv.entity IN (".getEntity(
"tax").
")";
291 if (preg_match(
'/^pv\./', $sortfield) || preg_match(
'/^ptva\./', $sortfield)) {
292 $sql .= $db->order($sortfield, $sortorder);
295 $result = $db->query(
$sql);
297 $num = $db->num_rows($result);
300 print
'<table class="noborder centpercent">';
301 print
'<tr class="liste_titre">';
302 print_liste_field_titre(
"PeriodEndDate", $_SERVER[
"PHP_SELF"],
"pv.datev",
"", $param,
'', $sortfield, $sortorder,
'nowraponall ');
304 print_liste_field_titre(
"ExpectedToPay", $_SERVER[
"PHP_SELF"],
"pv.amount",
"", $param,
'class="right"', $sortfield, $sortorder);
305 print_liste_field_titre(
"RefPayment", $_SERVER[
"PHP_SELF"],
"ptva.rowid",
"", $param,
'', $sortfield, $sortorder);
306 print_liste_field_titre(
"DatePayment", $_SERVER[
"PHP_SELF"],
"ptva.datep",
"", $param,
'align="center"', $sortfield, $sortorder);
311 print_liste_field_titre(
"PayedByThisPayment", $_SERVER[
"PHP_SELF"],
"ptva.amount",
"", $param,
'class="right"', $sortfield, $sortorder);
315 $obj = $db->fetch_object($result);
317 $total = $total + $obj->amount;
320 print
'<tr class="oddeven">';
321 print
'<td class="left">'.dol_print_date($db->jdate($obj->dm),
'day').
'</td>'.
"\n";
323 $tva_static->id = $obj->id_tva;
324 $tva_static->ref = $obj->label;
325 print
"<td>".$tva_static->getNomUrl(1).
"</td>\n";
327 print
'<td class="right"><span class="amount">'.price($obj->amount_tva).
"</span></td>";
330 $ptva_static->id = $obj->rowid;
331 $ptva_static->ref = $obj->rowid;
332 print
'<td class="left">'.$ptva_static->getNomUrl(1).
"</td>\n";
335 print
'<td class="center">'.dol_print_date($db->jdate($obj->date_payment),
'day').
"</td>\n";
339 if ($obj->payment_code) {
340 print $langs->trans(
"PaymentTypeShort".$obj->payment_code).
' ';
342 print $obj->num_payment.
'</td>';
347 if ($obj->fk_bank > 0) {
349 $accountstatic->id = $obj->bid;
350 $accountstatic->ref = $obj->bref;
351 $accountstatic->number = $obj->bnumber;
352 $accountstatic->account_number = $obj->account_number;
353 $accountstatic->fk_accountancy_journal = $obj->fk_accountancy_journal;
354 $accountstatic->label = $obj->blabel;
356 print $accountstatic->getNomUrl(1);
364 print
'<td class="right"><span class="amount">'.price($obj->amount).
"</span></td>";
369 print
'<tr class="liste_total"><td colspan="2">'.$langs->trans(
"Total").
'</td>';
370 print
'<td> </td>';
371 print
'<td> </td>';
372 print
'<td> </td>';
373 print
'<td> </td>';
374 print
'<td> </td>';
375 print
'<td class="right">'.price($total).
"</td>";
386 if ($mysoc->localtax1_assuj ==
"1" && $mysoc->localtax2_assuj ==
"1") {
389 } elseif ($mysoc->localtax1_assuj ==
"1") {
392 } elseif ($mysoc->localtax2_assuj ==
"1") {
400 while ($j < $numlt) {
405 print
load_fiche_titre($langs->transcountry(($j == 1 ?
"LT1Payments" :
"LT2Payments"), $mysoc->country_code).($year ?
' ('.$langs->trans(
"Year").
' '.$year.
')' :
''),
'',
'');
408 $sql =
"SELECT pv.rowid, pv.amount, pv.label, pv.datev as dm, pv.datep as dp";
409 $sql .=
" FROM ".MAIN_DB_PREFIX.
"localtax as pv";
410 $sql .=
" WHERE pv.entity = ".$conf->entity.
" AND localtaxtype = ".((int) $j);
416 if (preg_match(
'/^pv/', $sortfield)) {
417 $sql .= $db->order($sortfield, $sortorder);
420 $result = $db->query(
$sql);
422 $num = $db->num_rows($result);
426 print
'<div class="div-table-responsive-no-min">';
427 print
'<table class="noborder centpercent">';
428 print
'<tr class="liste_titre">';
429 print_liste_field_titre(
"PeriodEndDate", $_SERVER[
"PHP_SELF"],
"pv.datev",
"", $param,
'width="120"', $sortfield, $sortorder);
431 print_liste_field_titre(
"ExpectedToPay", $_SERVER[
"PHP_SELF"],
"pv.amount",
"", $param,
'class="right"', $sortfield, $sortorder);
432 print_liste_field_titre(
"RefPayment", $_SERVER[
"PHP_SELF"],
"pv.rowid",
"", $param,
'', $sortfield, $sortorder);
433 print_liste_field_titre(
"DatePayment", $_SERVER[
"PHP_SELF"],
"pv.datep",
"", $param,
'align="center"', $sortfield, $sortorder);
434 print_liste_field_titre(
"PayedByThisPayment", $_SERVER[
"PHP_SELF"],
"pv.amount",
"", $param,
'class="right"', $sortfield, $sortorder);
438 $obj = $db->fetch_object($result);
440 $total = $total + $obj->amount;
442 print
'<tr class="oddeven">';
443 print
'<td class="left">'.dol_print_date($db->jdate($obj->dm),
'day').
'</td>'.
"\n";
445 print
"<td>".$obj->label.
"</td>\n";
447 print
'<td class="right"><span class="amount">'.price($obj->amount).
"</span></td>";
450 $ptva_static->id = $obj->rowid;
451 $ptva_static->ref = $obj->rowid;
452 print
'<td class="left">'.$ptva_static->getNomUrl(1).
"</td>\n";
454 print
'<td class="center">'.dol_print_date($db->jdate($obj->dp),
'day').
"</td>\n";
455 print
'<td class="right"><span class="amount">'.price($obj->amount).
"</span></td>";
460 print
'<tr class="liste_total"><td class="right" colspan="2">'.$langs->trans(
"Total").
'</td>';
461 print
'<td class="right">'.price($total).
"</td>";
462 print
'<td align="center"> </td>';
463 print
'<td align="center"> </td>';
464 print
'<td class="right">'.price($total).
"</td>";
480 $parameters = array(
'user' => $user);
481 $reshook = $hookmanager->executeHooks(
'dashboardSpecialBills', $parameters, $object);