31require
'../../main.inc.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
53$langs->loadLangs(array(
"bills",
"companies",
"compta",
"accountancy",
"other",
"productbatch",
"products"));
55$action =
GETPOST(
'action',
'aZ09');
56$massaction =
GETPOST(
'massaction',
'alpha');
57$confirm =
GETPOST(
'confirm',
'alpha');
58$toselect =
GETPOST(
'toselect',
'array');
59$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'accountancycustomerlist';
60$optioncss =
GETPOST(
'optioncss',
'alpha');
62$default_account =
GETPOSTINT(
'default_account');
65$mesCasesCochees =
GETPOST(
'toselect',
'array');
68$search_societe =
GETPOST(
'search_societe',
'alpha');
69$search_lineid =
GETPOST(
'search_lineid',
'alpha');
70$search_ref =
GETPOST(
'search_ref',
'alpha');
71$search_invoice =
GETPOST(
'search_invoice',
'alpha');
72$search_label =
GETPOST(
'search_label',
'alpha');
73$search_desc =
GETPOST(
'search_desc',
'alpha');
74$search_amount =
GETPOST(
'search_amount',
'alpha');
75$search_account =
GETPOST(
'search_account',
'alpha');
76$search_vat =
GETPOST(
'search_vat',
'alpha');
77$search_date_startday =
GETPOSTINT(
'search_date_startday');
78$search_date_startmonth =
GETPOSTINT(
'search_date_startmonth');
79$search_date_startyear =
GETPOSTINT(
'search_date_startyear');
80$search_date_endday =
GETPOSTINT(
'search_date_endday');
81$search_date_endmonth =
GETPOSTINT(
'search_date_endmonth');
82$search_date_endyear =
GETPOSTINT(
'search_date_endyear');
83$search_date_start =
dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
84$search_date_end =
dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
85$search_country =
GETPOST(
'search_country',
'aZ09');
86$search_tvaintra =
GETPOST(
'search_tvaintra',
'alpha');
89if (empty($search_date_start) &&
getDolGlobalInt(
'ACCOUNTING_DATE_START_BINDING')) {
90 $search_date_start = $db->idate(
getDolGlobalInt(
'ACCOUNTING_DATE_START_BINDING'));
95$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
96$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
98if (empty($page) || $page < 0) {
101$offset = $limit * $page;
102$pageprev = $page - 1;
103$pagenext = $page + 1;
105 $sortfield =
"f.datef, f.ref, l.rowid";
116$hookmanager->initHooks(array($contextpage));
124if (!isModEnabled(
'accounting')) {
127if ($user->socid > 0) {
130if (!$user->hasRight(
'accounting',
'bind',
'write')) {
135 'l.rowid' => array(
'label' =>
"LineId",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
136 'f.ref' => array(
'label' =>
"Invoice",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
137 'f.datef' => array(
'label' =>
"Date",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
138 'p.ref' => array(
'label' =>
"ProductRef",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
139 'l.description' => array(
'label' =>
"ProductDescription",
'position' => 1,
'checked' =>
'-1',
'enabled' =>
'1'),
140 'l.total_ht' => array(
'label' =>
"Amount",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
141 'l.tva_tx' => array(
'label' =>
"VATRate",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
142 's.nom' => array(
'label' =>
"ThirdParty",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
143 'co.label' => array(
'label' =>
"Country",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
144 's.tva_intra' => array(
'label' =>
"VATIntraShort",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
145 'aa.data_suggest' => array(
'label' =>
"DataUsedToSuggestAccount",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
146 'aa.account_number' => array(
'label' =>
"AccountAccountingSuggest",
'position' => 1,
'checked' =>
'1',
'enabled' =>
'1'),
156if (
GETPOST(
'cancel',
'alpha')) {
160if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
164$parameters = array(
'arrayfields' => &$arrayfields);
165$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
170if (empty($reshook)) {
172 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
175 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
176 $search_societe =
'';
179 $search_invoice =
'';
183 $search_account =
'';
185 $search_date_startday =
'';
186 $search_date_startmonth =
'';
187 $search_date_startyear =
'';
188 $search_date_endday =
'';
189 $search_date_endmonth =
'';
190 $search_date_endyear =
'';
191 $search_date_start =
'';
192 $search_date_end =
'';
193 $search_country =
'';
194 $search_tvaintra =
'';
198 $objectclass =
'AccountingAccount';
199 $permissiontoread = $user->hasRight(
'accounting',
'read');
200 $permissiontodelete = $user->hasRight(
'accounting',
'delete');
201 $uploaddir =
$conf->accounting->dir_output;
202 include DOL_DOCUMENT_ROOT.
'/core/actions_massactions.inc.php';
206if ($massaction ==
'ventil' && $user->hasRight(
'accounting',
'bind',
'write')) {
210 if (!empty($mesCasesCochees)) {
211 $msg =
'<div>'.$langs->trans(
"SelectedLines").
': '.count($mesCasesCochees).
'</div>';
212 $msg .=
'<div class="detail">';
217 foreach ($mesCasesCochees as $maLigneCochee) {
218 $maLigneCourante = explode(
"_", $maLigneCochee);
219 $monId = $maLigneCourante[0];
222 if ($monCompte <= 0) {
223 $msg .=
'<div><span style="color:red">'.$langs->trans(
"Lineofinvoice").
' '.$monId.
' - '.$langs->trans(
"NoAccountSelected").
'</span></div>';
226 $sql =
" UPDATE ".MAIN_DB_PREFIX.
"facturedet";
227 $sql .=
" SET fk_code_ventilation = ".((int) $monCompte);
228 $sql .=
" WHERE rowid = ".((int) $monId);
231 $accountventilated->fetch($monCompte,
'', 1);
233 dol_syslog(
"accountancy/customer/list.php", LOG_DEBUG);
234 if ($db->query($sql)) {
235 $msg .=
'<div><span style="color:green">'.$langs->trans(
"Lineofinvoice").
' '.$monId.
' - '.$langs->trans(
"VentilatedinAccount").
' : '.
length_accountg($accountventilated->account_number).
'</span></div>';
238 $msg .=
'<div><span style="color:red">'.$langs->trans(
"ErrorDB").
' : '.$langs->trans(
"Lineofinvoice").
' '.$monId.
' - '.$langs->trans(
"NotVentilatedinAccount").
' : '.
length_accountg($accountventilated->account_number).
'<br> <pre>'.$sql.
'</pre></span></div>';
246 $msg .=
'<div>'.$langs->trans(
"EndProcessing").
'</div>';
250if (
GETPOST(
'sortfield') ==
'f.datef, f.ref, l.rowid') {
251 $value = (
GETPOST(
'sortorder') ==
'asc,asc,asc' ? 0 : 1);
252 require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
253 $res =
dolibarr_set_const($db,
"ACCOUNTING_LIST_SORT_VENTILATION_TODO", $value,
'yesno', 0,
'',
$conf->entity);
261$form =
new Form($db);
264$help_url =
'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables';
266llxHeader(
'', $langs->trans(
"CustomersVentilation"), $help_url,
'', 0, 0,
'',
'',
'',
'bodyforlist mod-accountancy accountancy-customer page-list');
268if (empty($chartaccountcode)) {
269 print $langs->trans(
"ErrorChartOfAccountSystemNotSelected");
277$sql =
"SELECT f.rowid as facid, f.ref, f.datef, f.type as ftype, f.situation_cycle_ref, f.fk_facture_source,";
278$sql .=
" l.rowid, l.fk_product, l.description, l.total_ht, l.situation_percent, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,";
279$sql .=
" p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.tva_tx as tva_tx_prod,";
281 $sql .=
" ppe.accountancy_code_sell as code_sell, ppe.accountancy_code_sell_intra as code_sell_intra, ppe.accountancy_code_sell_export as code_sell_export,";
282 $sql .=
" ppe.accountancy_code_buy as code_buy, ppe.accountancy_code_buy_intra as code_buy_intra, ppe.accountancy_code_buy_export as code_buy_export,";
284 $sql .=
" p.accountancy_code_sell as code_sell, p.accountancy_code_sell_intra as code_sell_intra, p.accountancy_code_sell_export as code_sell_export,";
285 $sql .=
" p.accountancy_code_buy as code_buy, p.accountancy_code_buy_intra as code_buy_intra, p.accountancy_code_buy_export as code_buy_export,";
287$sql .=
" p.tosell as status, p.tobuy as status_buy,";
288$sql .=
" aa.rowid as aarowid, aa2.rowid as aarowid_intra, aa3.rowid as aarowid_export, aa4.rowid as aarowid_thirdparty,";
289$sql .=
" co.code as country_code, co.label as country_label,";
290$sql .=
" s.rowid as socid, s.nom as name, s.tva_intra, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur,";
292 $sql .=
" spe.accountancy_code_customer as code_compta_client,";
293 $sql .=
" spe.accountancy_code_supplier as code_compta_fournisseur,";
294 $sql .=
" spe.accountancy_code_sell as company_code_sell";
296 $sql .=
" s.code_compta as code_compta_client,";
297 $sql .=
" s.code_compta_fournisseur,";
298 $sql .=
" s.accountancy_code_sell as company_code_sell";
300$parameters = array();
301$reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters);
302$sql .= $hookmanager->resPrint;
303$sql .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
304$sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"societe as s ON s.rowid = f.fk_soc";
306 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = " . ((int)
$conf->entity);
308$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_country as co ON co.rowid = s.fk_pays ";
309$sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"facturedet as l ON f.rowid = l.fk_facture";
310$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON p.rowid = l.fk_product";
312 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"product_perentity as ppe ON ppe.fk_product = p.rowid AND ppe.entity = " . ((int)
$conf->entity);
314$alias_societe_perentity = !
getDolGlobalString(
'MAIN_COMPANY_PERENTITY_SHARED') ?
"s" :
"spe";
315$alias_product_perentity = !
getDolGlobalString(
'MAIN_PRODUCT_PERENTITY_SHARED') ?
"p" :
"ppe";
316$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa ON " . $alias_product_perentity .
".accountancy_code_sell = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '".$db->escape($chartaccountcode).
"' AND aa.entity = ".
$conf->entity;
317$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa2 ON " . $alias_product_perentity .
".accountancy_code_sell_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '".$db->escape($chartaccountcode).
"' AND aa2.entity = ".
$conf->entity;
318$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa3 ON " . $alias_product_perentity .
".accountancy_code_sell_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '".$db->escape($chartaccountcode).
"' AND aa3.entity = ".
$conf->entity;
319$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa4 ON " . $alias_societe_perentity .
".accountancy_code_sell = aa4.account_number AND aa4.active = 1 AND aa4.fk_pcg_version = '".$db->escape($chartaccountcode).
"' AND aa4.entity = ".
$conf->entity;
321$parameters = array();
322$reshook = $hookmanager->executeHooks(
'printFieldListFrom', $parameters, $object, $action);
323$sql .= $hookmanager->resPrint;
325$sql .=
" WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0";
326$sql .=
" AND l.product_type <= 2";
328if ($search_societe) {
334if (strlen(trim($search_invoice))) {
337if (strlen(trim($search_ref))) {
340if (strlen(trim($search_label))) {
343if (strlen(trim($search_desc))) {
346if (strlen(trim($search_amount))) {
349if (strlen(trim($search_account))) {
352if (strlen(trim($search_vat))) {
355if ($search_date_start) {
356 $sql .=
" AND f.datef >= '".$db->idate($search_date_start).
"'";
358if ($search_date_end) {
359 $sql .=
" AND f.datef <= '".$db->idate($search_date_end).
"'";
361if (strlen(trim($search_country))) {
363 $country_code_in_EEC = $country_code_in_EEC_without_me =
'';
364 foreach ($arrayofcode as $key => $value) {
365 $country_code_in_EEC .= ($country_code_in_EEC ?
"," :
"").
"'".$value.
"'";
366 if ($value != $mysoc->country_code) {
367 $country_code_in_EEC_without_me .= ($country_code_in_EEC_without_me ?
"," :
"").
"'".$value.
"'";
370 if ($search_country ==
'special_allnotme') {
371 $sql .=
" AND co.code <> '".$db->escape($mysoc->country_code).
"'";
372 } elseif ($search_country ==
'special_eec') {
373 $sql .=
" AND co.code IN (".$db->sanitize($country_code_in_EEC, 1).
")";
374 } elseif ($search_country ==
'special_eecnotme') {
375 $sql .=
" AND co.code IN (".$db->sanitize($country_code_in_EEC_without_me, 1).
")";
376 } elseif ($search_country ==
'special_noteec') {
377 $sql .=
" AND co.code NOT IN (".$db->sanitize($country_code_in_EEC, 1).
")";
382if (strlen(trim($search_tvaintra))) {
390$sql .=
" AND f.entity IN (".getEntity(
'invoice', 0).
")";
393$parameters = array();
394$reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
395$sql .= $hookmanager->resPrint;
397$sql .= $db->order($sortfield, $sortorder);
400$nbtotalofrecords =
'';
402 $result = $db->query($sql);
403 $nbtotalofrecords = $db->num_rows($result);
404 if (($page * $limit) > $nbtotalofrecords) {
410$sql .= $db->plimit($limit + 1, $offset);
412dol_syslog(
"accountancy/customer/list.php", LOG_DEBUG);
415if ($db->type ==
'mysqli') {
416 $db->query(
"SET SQL_BIG_SELECTS=1");
419$result = $db->query($sql);
421 $num_lines = $db->num_rows($result);
424 $arrayofselected = is_array($toselect) ? $toselect : array();
427 if ($contextpage != $_SERVER[
"PHP_SELF"]) {
428 $param .=
'&contextpage='.urlencode($contextpage);
430 if ($limit > 0 && $limit !=
$conf->liste_limit) {
431 $param .=
'&limit='.((int) $limit);
433 if ($search_societe) {
434 $param .=
'&search_societe='.urlencode($search_societe);
436 if ($search_lineid) {
437 $param .=
'&search_lineid='.urlencode((
string) ($search_lineid));
439 if ($search_date_startday) {
440 $param .=
'&search_date_startday='.urlencode((
string) ($search_date_startday));
442 if ($search_date_startmonth) {
443 $param .=
'&search_date_startmonth='.urlencode((
string) ($search_date_startmonth));
445 if ($search_date_startyear) {
446 $param .=
'&search_date_startyear='.urlencode((
string) ($search_date_startyear));
448 if ($search_date_endday) {
449 $param .=
'&search_date_endday='.urlencode((
string) ($search_date_endday));
451 if ($search_date_endmonth) {
452 $param .=
'&search_date_endmonth='.urlencode((
string) ($search_date_endmonth));
454 if ($search_date_endyear) {
455 $param .=
'&search_date_endyear='.urlencode((
string) ($search_date_endyear));
457 if ($search_invoice) {
458 $param .=
'&search_invoice='.urlencode($search_invoice);
461 $param .=
'&search_ref='.urlencode($search_ref);
464 $param .=
'&search_label='.urlencode($search_label);
467 $param .=
'&search_desc='.urlencode($search_desc);
469 if ($search_amount) {
470 $param .=
'&search_amount='.urlencode($search_amount);
473 $param .=
'&search_vat='.urlencode($search_vat);
475 if ($search_country) {
476 $param .=
"&search_country=".urlencode($search_country);
478 if ($search_tvaintra) {
479 $param .=
"&search_tvaintra=".urlencode($search_tvaintra);
482 $parameters = array(
'param' => &$param);
483 $reshook = $hookmanager->executeHooks(
'printFieldListSearchParam', $parameters, $object, $action);
484 $param .= $hookmanager->resPrint;
486 $arrayofmassactions = array(
487 'set_default_account' =>
img_picto(
'',
'check',
'class="pictofixedwidth"').$langs->trans(
"ConfirmPreselectAccount"),
488 'ventil' =>
img_picto(
'',
'check',
'class="pictofixedwidth"').$langs->trans(
"Ventilate")
494 $massactionbutton =
'';
495 if ($massaction !==
'set_default_account') {
496 $massactionbutton = $form->selectMassAction(
'ventil', $arrayofmassactions, 1);
499 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">'.
"\n";
500 print
'<input type="hidden" name="action" value="ventil">';
501 if ($optioncss !=
'') {
502 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
504 print
'<input type="hidden" name="token" value="'.newToken().
'">';
505 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
506 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
507 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
508 print
'<input type="hidden" name="page" value="'.$page.
'">';
511 print_barre_liste($langs->trans(
"InvoiceLines").
'<br><span class="opacitymedium small">'.$langs->trans(
"DescVentilTodoCustomer").
'</span>', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, (
string) $massactionbutton, $num_lines, $nbtotalofrecords,
'title_accountancy', 0,
'',
'', $limit, 0, 0, 1);
513 if ($massaction ==
'set_default_account') {
514 $formquestion = array();
515 $formquestion[] = array(
'type' =>
'other',
516 'name' =>
'set_default_account',
517 'label' => $langs->trans(
"AccountancyCode"),
518 'value' => $formaccounting->select_account(
'',
'default_account', 1, array(), 0, 0,
'maxwidth200 maxwidthonsmartphone',
'cachewithshowemptyone'));
519 print $form->formconfirm($_SERVER[
"PHP_SELF"], $langs->trans(
"ConfirmPreselectAccount"), $langs->trans(
"ConfirmPreselectAccountQuestion", count($toselect)),
"confirm_set_default_account", $formquestion, 1, 0, 200, 500, 1);
528 $varpage = $contextpage;
529 $htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
$conf->main_checkbox_left_column);
530 $selectedfields = $htmlofselectarray;
531 $selectedfields .= $form->showCheckAddButtons(
'checkforselect', 1);
533 print
'<div class="div-table-responsive">';
534 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
537 print
'<tr class="liste_titre_filter">';
539 if (
$conf->main_checkbox_left_column) {
540 print
'<td class="liste_titre maxwidthsearch center actioncolumn">';
541 $searchpicto = $form->showFilterButtons(
'left');
546 if (!empty($arrayfields[
'l.rowid'][
'checked'])) {
547 print
'<td class="liste_titre" data-key="lineid">';
548 print
'<input type="text" class="flat maxwidth40" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).
'">';
552 if (!empty($arrayfields[
'f.ref'][
'checked'])) {
553 print
'<td class="liste_titre" data-key="invoice">';
554 print
'<input type="text" class="flat maxwidth50" name="search_invoice" value="'.dol_escape_htmltag($search_invoice).
'">';
558 if (!empty($arrayfields[
'f.datef'][
'checked'])) {
559 print
'<td class="liste_titre center">';
560 print
'<div class="nowrapfordate">';
561 print $form->selectDate($search_date_start ? $search_date_start : -1,
'search_date_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
563 print
'<div class="nowrapfordate">';
564 print $form->selectDate($search_date_end ? $search_date_end : -1,
'search_date_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
569 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
570 print
'<td class="liste_titre" data-key="ref">';
571 print
'<input type="text" class="flat maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'">';
575 if (!empty($arrayfields[
'l.description'][
'checked'])) {
576 print
'<td class="liste_titre" data-key="desc">';
577 print
'<input type="text" class="flat maxwidth50" name="search_desc" value="'.dol_escape_htmltag($search_desc).
'">';
581 if (!empty($arrayfields[
'l.total_ht'][
'checked'])) {
582 print
'<td class="liste_titre" data-key="amount">';
583 print
'<input type="text" class="right flat maxwidth50" name="search_amount" value="'.dol_escape_htmltag($search_amount).
'">';
587 if (!empty($arrayfields[
'l.tva_tx'][
'checked'])) {
588 print
'<td class="liste_titre" data-key="vat">';
589 print
'<input type="text" class="right flat maxwidth50" placeholder="%" name="search_vat" size="1" value="'.dol_escape_htmltag($search_vat).
'">';
593 if (!empty($arrayfields[
's.nom'][
'checked'])) {
594 print
'<td class="liste_titre" data-key="societe">';
595 print
'<input type="text" class="flat maxwidth75imp" name="search_societe" value="'.dol_escape_htmltag($search_societe).
'">';
599 if (!empty($arrayfields[
'co.label'][
'checked'])) {
600 print
'<td class="liste_titre" data-key="country">';
601 print $form->select_country($search_country,
'search_country',
'', 0,
'maxwidth125',
'code2', 1, 0, 1);
605 if (!empty($arrayfields[
's.tva_intra'][
'checked'])) {
606 print
'<td class="liste_titre">';
607 print
'<input type="text" class="flat maxwidth50" name="search_tvaintra" value="'.dol_escape_htmltag($search_tvaintra).
'">';
611 if (!empty($arrayfields[
'aa.data_suggest'][
'checked'])) {
612 print
'<td class="liste_titre"></td>';
615 if (!empty($arrayfields[
'aa.account_number'][
'checked'])) {
616 print
'<td class="liste_titre"></td>';
619 $parameters = array(
'arrayfields' => $arrayfields);
620 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters, $object, $action);
621 print $hookmanager->resPrint;
624 if (!
$conf->main_checkbox_left_column) {
625 print
'<td class="liste_titre center maxwidthsearch actioncolumn">';
626 $searchpicto = $form->showFilterButtons();
637 print
'<tr class="liste_titre">';
639 if (
$conf->main_checkbox_left_column) {
640 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
644 if (!empty($arrayfields[
'l.rowid'][
'checked'])) {
645 print_liste_field_titre($arrayfields[
'l.rowid'][
'label'], $_SERVER[
"PHP_SELF"],
"l.rowid",
"", $param,
'', $sortfield, $sortorder);
649 if (!empty($arrayfields[
'f.ref'][
'checked'])) {
650 print_liste_field_titre($arrayfields[
'f.ref'][
'label'], $_SERVER[
"PHP_SELF"],
"f.ref",
"", $param,
'', $sortfield, $sortorder);
654 if (!empty($arrayfields[
'f.datef'][
'checked'])) {
655 print_liste_field_titre($arrayfields[
'f.datef'][
'label'], $_SERVER[
"PHP_SELF"],
"f.datef, f.ref, l.rowid",
"", $param,
'', $sortfield, $sortorder,
'center ');
659 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
660 print_liste_field_titre($arrayfields[
'p.ref'][
'label'], $_SERVER[
"PHP_SELF"],
"p.ref",
"", $param,
'', $sortfield, $sortorder);
664 if (!empty($arrayfields[
'l.description'][
'checked'])) {
665 print_liste_field_titre($arrayfields[
'l.description'][
'label'], $_SERVER[
"PHP_SELF"],
"l.description",
"", $param,
'', $sortfield, $sortorder);
669 if (!empty($arrayfields[
'l.total_ht'][
'checked'])) {
670 print_liste_field_titre($arrayfields[
'l.total_ht'][
'label'], $_SERVER[
"PHP_SELF"],
"l.total_ht",
"", $param,
'', $sortfield, $sortorder,
'right ');
674 if (!empty($arrayfields[
'l.tva_tx'][
'checked'])) {
675 print_liste_field_titre($arrayfields[
'l.tva_tx'][
'label'], $_SERVER[
"PHP_SELF"],
"l.tva_tx",
"", $param,
'', $sortfield, $sortorder,
'right ');
679 if (!empty($arrayfields[
's.nom'][
'checked'])) {
680 print_liste_field_titre($arrayfields[
's.nom'][
'label'], $_SERVER[
"PHP_SELF"],
"s.nom",
"", $param,
'', $sortfield, $sortorder);
684 if (!empty($arrayfields[
'co.label'][
'checked'])) {
685 print_liste_field_titre($arrayfields[
'co.label'][
'label'], $_SERVER[
"PHP_SELF"],
"co.label",
"", $param,
'', $sortfield, $sortorder);
689 if (!empty($arrayfields[
's.tva_intra'][
'checked'])) {
690 print_liste_field_titre($arrayfields[
's.tva_intra'][
'label'], $_SERVER[
"PHP_SELF"],
"s.tva_intra",
"", $param,
'', $sortfield, $sortorder);
694 if (!empty($arrayfields[
'aa.data_suggest'][
'checked'])) {
695 print_liste_field_titre($arrayfields[
'aa.data_suggest'][
'label'], $_SERVER[
"PHP_SELF"],
"aa.account_number",
"", $param,
'', $sortfield, $sortorder);
699 if (!empty($arrayfields[
'aa.account_number'][
'checked'])) {
700 print_liste_field_titre($arrayfields[
'aa.account_number'][
'label'], $_SERVER[
"PHP_SELF"],
"aa.account_number",
"", $param,
'', $sortfield, $sortorder);
704 $parameters = array(
'arrayfields' => $arrayfields,
'param' => $param,
'sortfield' => $sortfield,
'sortorder' => $sortorder);
705 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
706 print $hookmanager->resPrint;
708 if (!
$conf->main_checkbox_left_column) {
709 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
714 $thirdpartystatic =
new Societe($db);
715 $facture_static =
new Facture($db);
717 $product_static =
new Product($db);
720 $accountingaccount_codetotid_cache = array();
721 $suggestedaccountingaccountfor =
'';
722 $suggestedaccountingaccountbydefaultfor =
'';
724 while ($i < min($num_lines, $limit)) {
725 $objp = $db->fetch_object($result);
734 $thirdpartystatic->id = $objp->socid;
735 $thirdpartystatic->name = $objp->name;
736 $thirdpartystatic->client = $objp->client;
737 $thirdpartystatic->fournisseur = $objp->fournisseur;
738 $thirdpartystatic->code_client = $objp->code_client;
739 $thirdpartystatic->code_compta = $objp->code_compta_client;
740 $thirdpartystatic->code_compta_client = $objp->code_compta_client;
741 $thirdpartystatic->code_fournisseur = $objp->code_fournisseur;
742 $thirdpartystatic->code_compta_fournisseur = $objp->code_compta_fournisseur;
743 $thirdpartystatic->email = $objp->email;
744 $thirdpartystatic->country_code = $objp->country_code;
745 $thirdpartystatic->tva_intra = $objp->tva_intra;
746 $thirdpartystatic->code_compta_product = $objp->company_code_sell;
748 $product_static->ref = $objp->product_ref;
749 $product_static->id = $objp->product_id;
750 $product_static->type = $objp->type;
751 $product_static->label = $objp->product_label;
752 $product_static->status = $objp->status;
753 $product_static->status_buy = $objp->status_buy;
754 $product_static->accountancy_code_sell = $objp->code_sell;
755 $product_static->accountancy_code_sell_intra = $objp->code_sell_intra;
756 $product_static->accountancy_code_sell_export = $objp->code_sell_export;
757 $product_static->accountancy_code_buy = $objp->code_buy;
758 $product_static->accountancy_code_buy_intra = $objp->code_buy_intra;
759 $product_static->accountancy_code_buy_export = $objp->code_buy_export;
760 $product_static->tva_tx = $objp->tva_tx_prod;
762 $facture_static->ref = $objp->ref;
763 $facture_static->id = $objp->facid;
764 $facture_static->type = $objp->ftype;
765 $facture_static->date = $db->jdate($objp->datef);
766 $facture_static->fk_facture_source = $objp->fk_facture_source;
768 $facture_static_det->id = $objp->rowid;
769 $facture_static_det->total_ht = $objp->total_ht;
770 $facture_static_det->tva_tx = $objp->tva_tx_line;
771 $facture_static_det->vat_src_code = $objp->vat_src_code;
772 $facture_static_det->product_type = $objp->type_l;
773 $facture_static_det->desc = $objp->description;
775 $accountingAccountArray = array(
776 'dom' => $objp->aarowid,
777 'intra' => $objp->aarowid_intra,
778 'export' => $objp->aarowid_export,
779 'thirdparty' => $objp->aarowid_thirdparty);
781 $code_sell_p_notset =
'';
782 $code_sell_t_notset =
'';
786 $return = $accountingAccount->getAccountingCodeToBind($thirdpartystatic, $mysoc, $product_static, $facture_static, $facture_static_det, $accountingAccountArray,
'customer');
787 if (!is_array($return) && $return < 0) {
790 $suggestedid = $return[
'suggestedid'];
791 $suggestedaccountingaccountfor = $return[
'suggestedaccountingaccountfor'];
792 $suggestedaccountingaccountbydefaultfor = $return[
'suggestedaccountingaccountbydefaultfor'];
793 $code_sell_l = $return[
'code_l'];
794 $code_sell_p = $return[
'code_p'];
795 $code_sell_t = $return[
'code_t'];
799 if (!empty($code_sell_p)) {
802 $code_sell_p_notset =
'color:orange';
804 if (empty($code_sell_l) && empty($code_sell_p)) {
805 $code_sell_p_notset =
'color:red';
807 if ($suggestedaccountingaccountfor ==
'eecwithoutvatnumber' && empty($code_sell_p_notset)) {
808 $code_sell_p_notset =
'color:orange';
816 print
'<tr class="oddeven">';
818 if (
$conf->main_checkbox_left_column) {
819 print
'<td class="nowrap center actioncolumn">';
820 $selected = in_array($objp->rowid.
"_".$i, $toselect);
821 print
'<input type="checkbox" class="flat checkforselect checkforselect'.$facture_static_det->id.
'" name="toselect[]" value="'.$facture_static_det->id.
"_".$i.
'"'.($selected ?
" checked" :
"").
'/>';
828 if (!empty($arrayfields[
'l.rowid'][
'checked'])) {
829 print
'<td>'.$facture_static_det->id.
'</td>';
833 if (!empty($arrayfields[
'f.ref'][
'checked'])) {
834 print
'<td class="nowraponall">'.$facture_static->getNomUrl(1).
'</td>';
838 if (!empty($arrayfields[
'f.datef'][
'checked'])) {
839 print
'<td class="center">'.dol_print_date($facture_static->date,
'day').
'</td>';
843 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
844 print
'<td class="tdoverflowmax125">';
845 if ($product_static->id > 0) {
846 print $product_static->getNomUrl(1);
848 if ($product_static->label) {
849 print
'<br><span class="opacitymedium small">'.dol_escape_htmltag($product_static->label).
'</span>';
855 if (!empty($arrayfields[
'l.description'][
'checked'])) {
857 print
'<td class="tdoverflowmax150 small classfortooltip" title="'.dol_escape_htmltag($text).
'">';
864 if (!empty($arrayfields[
'l.total_ht'][
'checked'])) {
865 print
'<td class="right nowraponall amount">';
868 $situation_ratio = 1;
870 if ($objp->situation_cycle_ref) {
872 if ($objp->situation_percent == 0) {
873 $situation_ratio = 0;
876 $line->fetch($objp->rowid);
879 $prev_progress = $line->get_prev_progress($objp->facid);
881 $situation_ratio = ($objp->situation_percent - $prev_progress) / $objp->situation_percent;
884 print
price($objp->total_ht * $situation_ratio);
886 print
price($objp->total_ht);
892 if (!empty($arrayfields[
'l.tva_tx'][
'checked'])) {
893 $code_vat_differ =
'';
894 if ($product_static->tva_tx !== $facture_static_det->tva_tx &&
price2num($product_static->tva_tx) &&
price2num($facture_static_det->tva_tx)) {
895 $code_vat_differ =
'warning bold';
897 print
'<td class="right'.($code_vat_differ ?
' '.$code_vat_differ :
'').
'">';
898 print
vatrate($facture_static_det->tva_tx.($facture_static_det->vat_src_code ?
' ('.$facture_static_det->vat_src_code.
')' :
''));
903 if (!empty($arrayfields[
's.nom'][
'checked'])) {
904 print
'<td class="tdoverflowmax125">'.$thirdpartystatic->getNomUrl(1,
'customer').
'</td>';
908 if (!empty($arrayfields[
'co.label'][
'checked'])) {
909 $labelcountry = ($objp->country_code && ($langs->trans(
"Country".$objp->country_code) !=
"Country".$objp->country_code)) ? $langs->trans(
"Country".$objp->country_code) : $objp->country_label;
910 print
'<td class="tdoverflowmax100" title="'.dol_escape_htmltag($labelcountry).
'">';
916 if (!empty($arrayfields[
's.tva_intra'][
'checked'])) {
917 print
'<td class="tdoverflowmax80" title="'.dol_escape_htmltag($objp->tva_intra).
'">'.
dol_escape_htmltag($objp->tva_intra).
'</td>';
921 if (!empty($arrayfields[
'aa.data_suggest'][
'checked'])) {
922 print
'<td class="small">';
924 $s =
'1. '.(($facture_static_det->product_type == 1) ? $langs->trans(
"DefaultForService") : $langs->trans(
"DefaultForProduct")).
': ';
927 if ($suggestedaccountingaccountbydefaultfor ==
'eec') {
928 $shelp .= $langs->trans(
"SaleEEC");
929 } elseif ($suggestedaccountingaccountbydefaultfor ==
'eecwithvat') {
930 $shelp = $langs->trans(
"SaleEECWithVAT");
931 } elseif ($suggestedaccountingaccountbydefaultfor ==
'eecwithoutvatnumber') {
932 $shelp = $langs->trans(
"SaleEECWithoutVATNumber");
934 } elseif ($suggestedaccountingaccountbydefaultfor ==
'export') {
935 $shelp .= $langs->trans(
"SaleExport");
937 $s .= ($code_sell_l > 0 ?
length_accountg($code_sell_l) :
'<span style="'.$code_sell_p_notset.
'">'.$langs->trans(
"NotDefined").
'</span>');
938 $textforrule = $form->textwithpicto($s, $shelp, 1, $ttype,
'', 0, 2,
'', 1);
940 if ($product_static->id > 0) {
941 $textforrule .=
'<br>';
942 $s =
'2. '.(($facture_static_det->product_type == 1) ? $langs->trans(
"ThisService") : $langs->trans(
"ThisProduct")).
': ';
945 if ($suggestedaccountingaccountbydefaultfor ==
'eec') {
946 $shelp .= $langs->trans(
"SaleEEC");
947 } elseif ($suggestedaccountingaccountbydefaultfor ==
'eecwithvat') {
948 $shelp = $langs->trans(
"SaleEECWithVAT");
949 } elseif ($suggestedaccountingaccountbydefaultfor ==
'eecwithoutvatnumber') {
950 $shelp = $langs->trans(
"SaleEECWithoutVATNumber");
952 } elseif ($suggestedaccountingaccountbydefaultfor ==
'export') {
953 $shelp .= $langs->trans(
"SaleExport");
955 $s .= (empty($code_sell_p) ?
'<span style="'.$code_sell_p_notset.
'">'.$langs->trans(
"NotDefined").
'</span>' :
length_accountg($code_sell_p));
956 $textforrule .= $form->textwithpicto($s, $shelp, 1, $ttype,
'', 0, 2,
'', 1);
958 $textforrule .=
'<br>';
959 $s =
'2. '.(($objp->type_l == 1) ? $langs->trans(
"ThisService") : $langs->trans(
"ThisProduct")).
': ';
961 $s .= $langs->trans(
"NotDefined");
962 $textforrule .= $form->textwithpicto($s, $shelp, 1,
'help',
'', 0, 2,
'', 1);
965 $textforrule .=
'<br>';
966 $s =
'3. '.(($facture_static_det->product_type == 1) ? $langs->trans(
"ServiceForThisThirdparty") : $langs->trans(
"ProductForThisThirdparty")).
': ';
968 $s .= ($code_sell_t > 0 ?
length_accountg($code_sell_t) :
'<span style="'.$code_sell_t_notset.
'">'.$langs->trans(
"NotDefined").
'</span>');
969 $textforrule .= $form->textwithpicto($s, $shelp, 1,
'help',
'', 0, 2,
'', 1);
976 if (!empty($arrayfields[
'aa.account_number'][
'checked'])) {
978 print $formaccounting->select_account(($default_account > 0 && $confirm ===
'yes' && in_array($objp->rowid.
"_".$i, $toselect)) ? (
string) $default_account : (string) $suggestedid,
'codeventil'.$facture_static_det->id, 1, array(), 0, 0,
'codeventil minwidth125onall maxwidth150',
'cachewithshowemptyone');
983 $parameters = array(
'arrayfields' => $arrayfields,
'obj' => $objp,
'i' => $i,
'totalarray' => &$totalarray);
984 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object, $action);
985 print $hookmanager->resPrint;
987 if (!
$conf->main_checkbox_left_column) {
988 print
'<td class="nowrap center actioncolumn">';
989 $selected = in_array($objp->rowid.
"_".$i, $toselect);
990 print
'<input type="checkbox" class="flat checkforselect checkforselect'.$facture_static_det->id.
'" name="toselect[]" value="'.$facture_static_det->id.
"_".$i.
'"'.($selected ?
" checked" :
"").
'/>';
1000 if ($num_lines == 0) {
1002 foreach ($arrayfields as $key => $val) {
1003 if (!empty($val[
'checked'])) {
1007 print
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
1010 $parameters = array(
'arrayfields' => $arrayfields,
'sql' => $sql);
1011 $reshook = $hookmanager->executeHooks(
'printFieldListFooter', $parameters, $object, $action);
1012 print $hookmanager->resPrint;
1021if ($db->type ==
'mysqli') {
1022 $db->query(
"SET SQL_BIG_SELECTS=0");
1026print
'<script type="text/javascript">
1027jQuery(document).ready(function() {
1028 jQuery(".codeventil").change(function() {
1029 var s=$(this).attr("id").replace("codeventil", "")
1030 console.log(s+" "+$(this).val());
1031 if ($(this).val() == -1) jQuery(".checkforselect"+s).prop("checked", false);
1032 else jQuery(".checkforselect"+s).prop("checked", true);
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
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 invoices.
const TYPE_REPLACEMENT
Replacement invoice.
const TYPE_SITUATION
Situation invoice.
const TYPE_DEPOSIT
Deposit invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
Class to manage invoice lines.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
getCountriesInEEC()
Return list of countries that are inside the EEC (European Economic Community) Note: Try to keep this...
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...
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='', $useCache=true)
Return an id or code from a code or id.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
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)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dolGetFirstLineOfText($text, $nboflines=1, $charset='UTF-8')
Return first line of text.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
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.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.