29 require
'../../main.inc.php';
31 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
35 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
36 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
37 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
43 $langs->loadLangs(array(
"bills",
"companies",
"compta",
"accountancy",
"other",
"productbatch",
"products"));
45 $action =
GETPOST(
'action',
'aZ09');
46 $massaction =
GETPOST(
'massaction',
'alpha');
47 $show_files =
GETPOST(
'show_files',
'int');
48 $confirm =
GETPOST(
'confirm',
'alpha');
49 $toselect =
GETPOST(
'toselect',
'array');
50 $optioncss =
GETPOST(
'optioncss',
'alpha');
51 $default_account =
GETPOST(
'default_account',
'int');
54 $mesCasesCochees =
GETPOST(
'toselect',
'array');
57 $search_societe =
GETPOST(
'search_societe',
'alpha');
58 $search_lineid =
GETPOST(
'search_lineid',
'int');
59 $search_ref =
GETPOST(
'search_ref',
'alpha');
60 $search_ref_supplier =
GETPOST(
'search_ref_supplier',
'alpha');
61 $search_invoice =
GETPOST(
'search_invoice',
'alpha');
62 $search_label =
GETPOST(
'search_label',
'alpha');
63 $search_desc =
GETPOST(
'search_desc',
'alpha');
64 $search_amount =
GETPOST(
'search_amount',
'alpha');
65 $search_account =
GETPOST(
'search_account',
'alpha');
66 $search_vat =
GETPOST(
'search_vat',
'alpha');
67 $search_date_startday =
GETPOST(
'search_date_startday',
'int');
68 $search_date_startmonth =
GETPOST(
'search_date_startmonth',
'int');
69 $search_date_startyear =
GETPOST(
'search_date_startyear',
'int');
70 $search_date_endday =
GETPOST(
'search_date_endday',
'int');
71 $search_date_endmonth =
GETPOST(
'search_date_endmonth',
'int');
72 $search_date_endyear =
GETPOST(
'search_date_endyear',
'int');
73 $search_date_start =
dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
74 $search_date_end =
dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
75 $search_country =
GETPOST(
'search_country',
'alpha');
76 $search_tvaintra =
GETPOST(
'search_tvaintra',
'alpha');
78 $btn_ventil =
GETPOST(
'ventil',
'alpha');
81 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : (empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION) ? $conf->liste_limit : $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION);
82 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
83 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
85 if (empty($page) || $page < 0) {
88 $offset = $limit * $page;
89 $pageprev = $page - 1;
90 $pagenext = $page + 1;
92 $sortfield =
"f.datef, f.ref, l.rowid";
95 if ($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_TODO > 0) {
101 $hookmanager->initHooks(array(
'accountancysupplierlist'));
106 $chartaccountcode =
dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS,
'accounting_system',
'rowid',
'pcg_version');
112 if ($user->socid > 0) {
115 if (empty($user->rights->accounting->mouvements->lire)) {
124 if (
GETPOST(
'cancel',
'alpha')) {
125 $action =
'list'; $massaction =
'';
127 if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
131 $parameters = array();
132 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
137 if (empty($reshook)) {
139 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
140 $search_societe =
'';
143 $search_ref_supplier =
'';
144 $search_invoice =
'';
148 $search_account =
'';
150 $search_date_startday =
'';
151 $search_date_startmonth =
'';
152 $search_date_startyear =
'';
153 $search_date_endday =
'';
154 $search_date_endmonth =
'';
155 $search_date_endyear =
'';
156 $search_date_start =
'';
157 $search_date_end =
'';
158 $search_country =
'';
159 $search_tvaintra =
'';
163 $objectclass =
'AccountingAccount';
164 $permissiontoread = $user->hasRight(
'accounting',
'read');
165 $permissiontodelete = $user->hasRight(
'accounting',
'delete');
166 $uploaddir = $conf->accounting->dir_output;
167 include DOL_DOCUMENT_ROOT.
'/core/actions_massactions.inc.php';
171 if ($massaction ==
'ventil' && $user->rights->accounting->bind->write) {
175 if (!empty($mesCasesCochees)) {
176 $msg =
'<div>'.$langs->trans(
"SelectedLines").
': '.count($mesCasesCochees).
'</div>';
177 $msg .=
'<div class="detail">';
182 foreach ($mesCasesCochees as $maLigneCochee) {
183 $maLigneCourante = explode(
"_", $maLigneCochee);
184 $monId = $maLigneCourante[0];
185 $monCompte =
GETPOST(
'codeventil'.$monId);
187 if ($monCompte <= 0) {
188 $msg .=
'<div><span style="color:red">'.$langs->trans(
"Lineofinvoice").
' '.$monId.
' - '.$langs->trans(
"NoAccountSelected").
'</span></div>';
191 $sql =
" UPDATE ".MAIN_DB_PREFIX.
"facture_fourn_det";
192 $sql .=
" SET fk_code_ventilation = ".((int) $monCompte);
193 $sql .=
" WHERE rowid = ".((int) $monId);
196 $accountventilated->fetch($monCompte,
'', 1);
198 dol_syslog(
'accountancy/supplier/list.php', LOG_DEBUG);
199 if ($db->query($sql)) {
200 $msg .=
'<div><span style="color:green">'.$langs->trans(
"Lineofinvoice").
' '.$monId.
' - '.$langs->trans(
"VentilatedinAccount").
' : '.
length_accountg($accountventilated->account_number).
'</span></div>';
203 $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>';
211 $msg .=
'<div>'.$langs->trans(
"EndProcessing").
'</div>';
224 llxHeader(
'', $langs->trans(
"SuppliersVentilation"));
226 if (empty($chartaccountcode)) {
227 print $langs->trans(
"ErrorChartOfAccountSystemNotSelected");
235 $sql =
"SELECT f.rowid as facid, f.ref, f.ref_supplier, f.libelle as invoice_label, f.datef, f.type as ftype, f.fk_facture_source,";
236 $sql .=
" l.rowid, l.fk_product, l.description, l.total_ht, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,";
237 $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,";
238 if (!empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED)) {
239 $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,";
240 $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,";
242 $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,";
243 $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,";
245 $sql .=
" p.tosell as status, p.tobuy as status_buy,";
246 $sql .=
" aa.rowid as aarowid, aa2.rowid as aarowid_intra, aa3.rowid as aarowid_export, aa4.rowid as aarowid_thirdparty,";
247 $sql .=
" co.code as country_code, co.label as country_label,";
248 $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,";
249 if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
250 $sql .=
" spe.accountancy_code_customer as code_compta_client,";
251 $sql .=
" spe.accountancy_code_supplier as code_compta_fournisseur,";
252 $sql .=
" spe.accountancy_code_buy as company_code_buy";
254 $sql .=
" s.code_compta as code_compta_client,";
255 $sql .=
" s.code_compta_fournisseur,";
256 $sql .=
" s.accountancy_code_buy as company_code_buy";
258 $parameters = array();
259 $reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters);
260 $sql .= $hookmanager->resPrint;
261 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facture_fourn as f";
262 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"societe as s ON s.rowid = f.fk_soc";
263 if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
264 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = " . ((int) $conf->entity);
266 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_country as co ON co.rowid = s.fk_pays ";
267 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"facture_fourn_det as l ON f.rowid = l.fk_facture_fourn";
268 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON p.rowid = l.fk_product";
269 if (!empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED)) {
270 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"product_perentity as ppe ON ppe.fk_product = p.rowid AND ppe.entity = " . ((int) $conf->entity);
272 $alias_societe_perentity = empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED) ?
"s" :
"spe";
273 $alias_product_perentity = empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED) ?
"p" :
"ppe";
274 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa ON " . $alias_product_perentity .
".accountancy_code_buy = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '".$db->escape($chartaccountcode).
"' AND aa.entity = ".$conf->entity;
275 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa2 ON " . $alias_product_perentity .
".accountancy_code_buy_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '".$db->escape($chartaccountcode).
"' AND aa2.entity = ".$conf->entity;
276 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa3 ON " . $alias_product_perentity .
".accountancy_code_buy_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '".$db->escape($chartaccountcode).
"' AND aa3.entity = ".$conf->entity;
277 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa4 ON " . $alias_societe_perentity .
".accountancy_code_buy = aa4.account_number AND aa4.active = 1 AND aa4.fk_pcg_version = '".$db->escape($chartaccountcode).
"' AND aa4.entity = ".$conf->entity;
278 $sql .=
" WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0";
279 $sql .=
" AND l.product_type <= 2";
281 if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) {
282 $sql .=
" AND f.datef >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING).
"'";
285 if ($search_societe) {
288 if ($search_lineid) {
291 if (strlen(trim($search_invoice))) {
292 $sql .=
natural_search(array(
"f.ref",
"f.ref_supplier"), $search_invoice);
294 if (strlen(trim($search_ref))) {
300 if (strlen(trim($search_label))) {
301 $sql .=
natural_search(array(
"p.label",
"f.libelle"), $search_label);
303 if (strlen(trim($search_desc))) {
306 if (strlen(trim($search_amount))) {
309 if (strlen(trim($search_account))) {
312 if (strlen(trim($search_vat))) {
315 if ($search_date_start) {
316 $sql .=
" AND f.datef >= '".$db->idate($search_date_start).
"'";
318 if ($search_date_end) {
319 $sql .=
" AND f.datef <= '".$db->idate($search_date_end).
"'";
321 if (strlen(trim($search_country))) {
323 $country_code_in_EEC = $country_code_in_EEC_without_me =
'';
324 foreach ($arrayofcode as $key => $value) {
325 $country_code_in_EEC .= ($country_code_in_EEC ?
"," :
"").
"'".$value.
"'";
326 if ($value != $mysoc->country_code) {
327 $country_code_in_EEC_without_me .= ($country_code_in_EEC_without_me ?
"," :
"").
"'".$value.
"'";
330 if ($search_country ==
'special_allnotme') {
331 $sql .=
" AND co.code <> '".$db->escape($mysoc->country_code).
"'";
332 } elseif ($search_country ==
'special_eec') {
333 $sql .=
" AND co.code IN (".$db->sanitize($country_code_in_EEC, 1).
")";
334 } elseif ($search_country ==
'special_eecnotme') {
335 $sql .=
" AND co.code IN (".$db->sanitize($country_code_in_EEC_without_me, 1).
")";
336 } elseif ($search_country ==
'special_noteec') {
337 $sql .=
" AND co.code NOT IN (".$db->sanitize($country_code_in_EEC, 1).
")";
342 if (strlen(trim($search_tvaintra))) {
345 if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
350 $sql .=
" AND f.entity IN (".getEntity(
'facture_fourn', 0).
")";
353 $parameters = array();
354 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
355 $sql .= $hookmanager->resPrint;
357 $sql .= $db->order($sortfield, $sortorder);
361 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
362 $result = $db->query($sql);
370 $sql .= $db->plimit($limit + 1, $offset);
372 dol_syslog(
'accountancy/supplier/list.php', LOG_DEBUG);
375 if ($db->type ==
'mysqli') {
376 $db->query(
"SET SQL_BIG_SELECTS=1");
379 $result = $db->query($sql);
381 $num_lines = $db->num_rows($result);
384 $arrayofselected = is_array($toselect) ? $toselect : array();
387 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
388 $param .=
'&contextpage='.urlencode($contextpage);
390 if ($limit > 0 && $limit != $conf->liste_limit) {
391 $param .=
'&limit='.urlencode($limit);
393 if ($search_societe) {
394 $param .=
'&search_societe='.urlencode($search_societe);
396 if ($search_lineid) {
397 $param .=
'&search_lineid='.urlencode($search_lineid);
399 if ($search_date_startday) {
400 $param .=
'&search_date_startday='.urlencode($search_date_startday);
402 if ($search_date_startmonth) {
403 $param .=
'&search_date_startmonth='.urlencode($search_date_startmonth);
405 if ($search_date_startyear) {
406 $param .=
'&search_date_startyear='.urlencode($search_date_startyear);
408 if ($search_date_endday) {
409 $param .=
'&search_date_endday='.urlencode($search_date_endday);
411 if ($search_date_endmonth) {
412 $param .=
'&search_date_endmonth='.urlencode($search_date_endmonth);
414 if ($search_date_endyear) {
415 $param .=
'&search_date_endyear='.urlencode($search_date_endyear);
417 if ($search_invoice) {
418 $param .=
'&search_invoice='.urlencode($search_invoice);
421 $param .=
'&search_ref='.urlencode($search_ref);
423 if ($search_ref_supplier) {
424 $param .=
'&search_ref_supplier='.urlencode($search_ref_supplier);
427 $param .=
'&search_label='.urlencode($search_label);
430 $param .=
'&search_desc='.urlencode($search_desc);
432 if ($search_amount) {
433 $param .=
'&search_amount='.urlencode($search_amount);
436 $param .=
'&search_vat='.urlencode($search_vat);
438 if ($search_country) {
439 $param .=
"&search_country=".urlencode($search_country);
441 if ($search_tvaintra) {
442 $param .=
"&search_tvaintra=".urlencode($search_tvaintra);
445 $arrayofmassactions = array(
446 'ventil'=>
img_picto(
'',
'check',
'class="pictofixedwidth"').$langs->trans(
"Ventilate")
447 ,
'set_default_account'=>
img_picto(
'',
'check',
'class="pictofixedwidth"').$langs->trans(
"ConfirmPreselectAccount")
453 if ($massaction !==
'set_default_account') {
454 $massactionbutton =
$form->selectMassAction(
'ventil', $arrayofmassactions, 1);
457 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">'.
"\n";
458 print
'<input type="hidden" name="action" value="ventil">';
459 if ($optioncss !=
'') {
460 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
462 print
'<input type="hidden" name="token" value="'.newToken().
'">';
463 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
464 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
465 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
466 print
'<input type="hidden" name="page" value="'.$page.
'">';
468 print_barre_liste($langs->trans(
"InvoiceLines"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num_lines,
$nbtotalofrecords,
'title_accountancy', 0,
'',
'', $limit);
470 if ($massaction ==
'set_default_account') {
471 $formquestion[]=array(
'type' =>
'other',
472 'name' =>
'set_default_account',
473 'label' => $langs->trans(
"AccountancyCode"),
474 'value' => $formaccounting->select_account(
'',
'default_account', 1, array(), 0, 0,
'maxwidth200 maxwidthonsmartphone',
'cachewithshowemptyone'));
475 print
$form->formconfirm($_SERVER[
"PHP_SELF"], $langs->trans(
"ConfirmPreselectAccount"), $langs->trans(
"ConfirmPreselectAccountQuestion", count($toselect)),
"confirm_set_default_account", $formquestion, 1, 0, 200, 500, 1);
478 print
'<span class="opacitymedium">'.$langs->trans(
"DescVentilTodoCustomer").
'</span></br><br>';
486 print
'<div class="div-table-responsive">';
487 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
490 print
'<tr class="liste_titre_filter">';
491 print
'<td class="liste_titre"><input type="text" class="flat maxwidth25" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).
'"></td>';
492 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="'.dol_escape_htmltag($search_invoice).
'"></td>';
494 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="'.dol_escape_htmltag($search_label).
'"></td>';
495 print
'<td class="liste_titre center">';
496 print
'<div class="nowrap">';
497 print
$form->selectDate($search_date_start ? $search_date_start : -1,
'search_date_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
499 print
'<div class="nowrap">';
500 print
$form->selectDate($search_date_end ? $search_date_end : -1,
'search_date_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
503 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'"></td>';
504 print
'<td class="liste_titre"><input type="text" class="flat maxwidth100" name="search_desc" value="'.dol_escape_htmltag($search_desc).
'"></td>';
505 print
'<td class="liste_titre right"><input type="text" class="flat maxwidth50 right" name="search_amount" value="'.dol_escape_htmltag($search_amount).
'"></td>';
506 print
'<td class="liste_titre right"><input type="text" class="flat maxwidth50 right" name="search_vat" placeholder="%" size="1" value="'.dol_escape_htmltag($search_vat).
'"></td>';
507 print
'<td class="liste_titre"><input type="text" class="flat maxwidth75imp" name="search_societe" value="'.dol_escape_htmltag($search_societe).
'"></td>';
508 print
'<td class="liste_titre">';
509 print
$form->select_country($search_country,
'search_country',
'', 0,
'maxwidth100',
'code2', 1, 0, 1);
512 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="'.dol_escape_htmltag($search_tvaintra).
'"></td>';
513 print
'<td class="liste_titre"></td>';
514 print
'<td class="liste_titre"></td>';
515 print
'<td class="center liste_titre">';
516 $searchpicto =
$form->showFilterButtons();
521 print
'<tr class="liste_titre">';
525 print_liste_field_titre(
"InvoiceLabel", $_SERVER[
"PHP_SELF"],
"f.libelle",
"", $param,
'', $sortfield, $sortorder);
526 print_liste_field_titre(
"Date", $_SERVER[
"PHP_SELF"],
"f.datef, f.ref, l.rowid",
"", $param,
'', $sortfield, $sortorder,
'center ');
529 print_liste_field_titre(
"ProductDescription", $_SERVER[
"PHP_SELF"],
"l.description",
"", $param,
'', $sortfield, $sortorder);
530 print_liste_field_titre(
"Amount", $_SERVER[
"PHP_SELF"],
"l.total_ht",
"", $param,
'', $sortfield, $sortorder,
'right maxwidth50 ');
531 print_liste_field_titre(
"VATRate", $_SERVER[
"PHP_SELF"],
"l.tva_tx",
"", $param,
'', $sortfield, $sortorder,
'right ',
'', 1);
534 print_liste_field_titre(
"VATIntraShort", $_SERVER[
"PHP_SELF"],
"s.tva_intra",
"", $param,
'', $sortfield, $sortorder);
538 if ($massactionbutton) {
539 $checkpicto =
$form->showCheckAddButtons(
'checkforselect', 1);
544 $thirdpartystatic =
new Societe($db);
547 $product_static =
new Product($db);
550 $accountingaccount_codetotid_cache = array();
552 while ($i < min($num_lines, $limit)) {
553 $objp = $db->fetch_object($result);
562 $thirdpartystatic->id = $objp->socid;
563 $thirdpartystatic->name = $objp->name;
564 $thirdpartystatic->client = $objp->client;
565 $thirdpartystatic->fournisseur = $objp->fournisseur;
566 $thirdpartystatic->code_client = $objp->code_client;
567 $thirdpartystatic->code_compta_client = $objp->code_compta_client;
568 $thirdpartystatic->code_fournisseur = $objp->code_fournisseur;
569 $thirdpartystatic->code_compta_fournisseur = $objp->code_compta_fournisseur;
570 $thirdpartystatic->email = $objp->email;
571 $thirdpartystatic->country_code = $objp->country_code;
572 $thirdpartystatic->tva_intra = $objp->tva_intra;
573 $thirdpartystatic->code_compta_product = $objp->company_code_buy;
575 $product_static->ref = $objp->product_ref;
576 $product_static->id = $objp->product_id;
577 $product_static->type = $objp->type;
578 $product_static->label = $objp->product_label;
579 $product_static->status = $objp->status;
580 $product_static->status_buy = $objp->status_buy;
581 $product_static->accountancy_code_sell = $objp->code_sell;
582 $product_static->accountancy_code_sell_intra = $objp->code_sell_intra;
583 $product_static->accountancy_code_sell_export = $objp->code_sell_export;
584 $product_static->accountancy_code_buy = $objp->code_buy;
585 $product_static->accountancy_code_buy_intra = $objp->code_buy_intra;
586 $product_static->accountancy_code_buy_export = $objp->code_buy_export;
587 $product_static->tva_tx = $objp->tva_tx_prod;
589 $facturefourn_static->ref = $objp->ref;
590 $facturefourn_static->id = $objp->facid;
591 $facturefourn_static->type = $objp->ftype;
592 $facturefourn_static->ref_supplier = $objp->ref_supplier;
593 $facturefourn_static->label = $objp->invoice_label;
594 $facturefourn_static->date = $db->jdate($objp->datef);
595 $facturefourn_static->fk_facture_source = $objp->fk_facture_source;
597 $facturefourn_static_det->id = $objp->rowid;
598 $facturefourn_static_det->total_ht = $objp->total_ht;
599 $facturefourn_static_det->tva_tx = $objp->tva_tx_line;
600 $facturefourn_static_det->vat_src_code = $objp->vat_src_code;
601 $facturefourn_static_det->product_type = $objp->type_l;
602 $facturefourn_static_det->desc = $objp->description;
604 $accountingAccountArray = array(
605 'dom'=>$objp->aarowid,
606 'intra'=>$objp->aarowid_intra,
607 'export'=>$objp->aarowid_export,
608 'thirdparty' =>$objp->aarowid_thirdparty);
610 $code_buy_p_notset =
'';
611 $code_buy_t_notset =
'';
615 $return=$accountingAccount->getAccountingCodeToBind($mysoc, $thirdpartystatic, $product_static, $facturefourn_static, $facturefourn_static_det, $accountingAccountArray,
'supplier');
616 if (!is_array($return) && $return<0) {
619 $suggestedid=$return[
'suggestedid'];
620 $suggestedaccountingaccountfor=$return[
'suggestedaccountingaccountfor'];
621 $suggestedaccountingaccountbydefaultfor=$return[
'suggestedaccountingaccountbydefaultfor'];
622 $code_buy_l=$return[
'code_l'];
623 $code_buy_p=$return[
'code_p'];
624 $code_buy_t=$return[
'code_t'];
628 if (!empty($code_buy_p)) {
631 $code_buy_p_notset =
'color:orange';
633 if (empty($code_buy_l) && empty($code_buy_p)) {
634 $code_buy_p_notset =
'color:red';
645 print
'<tr class="oddeven">';
648 print
'<td>'.$facturefourn_static_det->id.
'</td>';
651 print
'<td class="nowraponall">'.$facturefourn_static->getNomUrl(1);
652 if ($objp->ref_supplier) {
653 print
'<br><span class="opacitymedium small">'.dol_escape_htmltag($objp->ref_supplier).
'</span>';
663 print
'<td class="tdoverflowmax100 small" title="'.dol_escape_htmltag($objp->invoice_label).
'">';
668 print
'<td class="center">'.dol_print_date($facturefourn_static->date,
'day').
'</td>';
671 print
'<td class="tdoverflowmax100">';
672 if ($product_static->id > 0) {
673 print $product_static->getNomUrl(1);
675 if ($product_static->label) {
676 print
'<br><span class="opacitymedium small">'.dol_escape_htmltag($product_static->label).
'</span>';
681 print
'<td class="tdoverflowonsmartphone small">';
683 $trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION;
684 print
$form->textwithtooltip(
dol_trunc($text, $trunclength), $facturefourn_static_det->desc);
687 print
'<td class="right nowraponall amount">';
688 print
price($objp->total_ht);
692 $code_vat_differ =
'';
696 print
'<td class="right'.($code_vat_differ?
' '.$code_vat_differ:
'').
'">';
697 print
vatrate($facturefourn_static_det->tva_tx.($facturefourn_static_det->vat_src_code ?
' ('.$facturefourn_static_det->vat_src_code.
')' :
''),
false, 0, 0, 1);
701 print
'<td class="tdoverflowmax100">'.$thirdpartystatic->getNomUrl(1,
'supplier').
'</td>';
704 $labelcountry = ($objp->country_code && ($langs->trans(
"Country".$objp->country_code) !=
"Country".$objp->country_code)) ? $langs->trans(
"Country".$objp->country_code) : $objp->country_label;
705 print
'<td class="tdoverflowmax100" title="'.dol_escape_htmltag($labelcountry).
'">';
710 print
'<td class="tdoverflowmax80" title="'.dol_escape_htmltag($objp->tva_intra).
'">'.
dol_escape_htmltag($objp->tva_intra).
'</td>';
713 print
'<td class="small">';
714 $s =
'1. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans(
"DefaultForService") : $langs->trans(
"DefaultForProduct")).
': ';
716 if ($suggestedaccountingaccountbydefaultfor ==
'eec') {
717 $shelp .= $langs->trans(
"SaleEEC");
718 } elseif ($suggestedaccountingaccountbydefaultfor ==
'export') {
719 $shelp .= $langs->trans(
"SaleExport");
721 $s .= ($code_buy_l > 0 ?
length_accountg($code_buy_l) :
'<span style="'.$code_buy_p_notset.
'">'.$langs->trans(
"NotDefined").
'</span>');
722 print
$form->textwithpicto($s, $shelp, 1,
'help',
'', 0, 2,
'', 1);
723 if ($product_static->id > 0) {
725 $s =
'2. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans(
"ThisService") : $langs->trans(
"ThisProduct")).
': ';
726 $shelp =
''; $ttype =
'help';
727 if ($suggestedaccountingaccountfor ==
'eec') {
728 $shelp = $langs->trans(
"SaleEEC");
729 } elseif ($suggestedaccountingaccountfor ==
'eecwithvat') {
730 $shelp = $langs->trans(
"SaleEECWithVAT");
731 } elseif ($suggestedaccountingaccountfor ==
'eecwithoutvatnumber') {
732 $shelp = $langs->trans(
"SaleEECWithoutVATNumber");
734 } elseif ($suggestedaccountingaccountfor ==
'export') {
735 $shelp = $langs->trans(
"SaleExport");
737 $s .= (empty($code_buy_p) ?
'<span style="'.$code_buy_p_notset.
'">'.$langs->trans(
"NotDefined").
'</span>' :
length_accountg($code_buy_p));
738 print
$form->textwithpicto($s, $shelp, 1, $ttype,
'', 0, 2,
'', 1);
741 $s =
'2. '.(($objp->type_l == 1) ? $langs->trans(
"ThisService") : $langs->trans(
"ThisProduct")).
': ';
743 $s .= $langs->trans(
"NotDefined");
744 print
$form->textwithpicto($s, $shelp, 1,
'help',
'', 0, 2,
'', 1);
746 if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) {
748 $s =
'3. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans(
"ServiceForThisThirdparty") : $langs->trans(
"ProductForThisThirdparty")).
': ';
750 $s .= ($code_buy_t > 0 ?
length_accountg($code_buy_t) :
'<span style="'.$code_buy_t_notset.
'">'.$langs->trans(
"NotDefined").
'</span>');
751 print
$form->textwithpicto($s, $shelp, 1,
'help',
'', 0, 2,
'', 1);
757 print $formaccounting->select_account(($default_account > 0 && $confirm ===
'yes' && in_array($objp->rowid.
"_".$i, $toselect)) ? $default_account : $suggestedid,
'codeventil'.$facturefourn_static_det->id, 1, array(), 0, 0,
'codeventil maxwidth150 maxwidthonsmartphone',
'cachewithshowemptyone');
761 print
'<td class="center">';
763 if (!empty($suggestedid) && $suggestedaccountingaccountfor !=
'' && $suggestedaccountingaccountfor !=
'eecwithoutvatnumber') {
767 if (!empty($toselect)) {
769 if (in_array($objp->rowid.
"_".$i, $toselect)) {
774 print
'<input type="checkbox" class="flat checkforselect checkforselect'.$facturefourn_static_det->id.
'" name="toselect[]" value="'.$facturefourn_static_det->id.
"_".$i.
'"'.($ischecked ?
" checked" :
"").
'/>';
780 if ($num_lines == 0) {
781 print
'<tr><td colspan="14"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
791 if ($db->type ==
'mysqli') {
792 $db->query(
"SET SQL_BIG_SELECTS=0");
796 print
'<script type="text/javascript">
797 jQuery(document).ready(function() {
798 jQuery(".codeventil").change(function() {
799 var s=$(this).attr("id").replace("codeventil", "")
800 console.log(s+" "+$(this).val());
801 if ($(this).val() == -1) jQuery(".checkforselect"+s).prop("checked", false);
802 else jQuery(".checkforselect"+s).prop("checked", true);
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage accounting accounts.
const TYPE_SITUATION
Situation invoice.
Class to manage suppliers invoices.
const TYPE_DEPOSIT
Deposit invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
const TYPE_REPLACEMENT
Replacement invoice.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage line invoices.
getCountriesInEEC()
Return list of countries that are inside the EEC (European Economic Community) Note: Try to keep this...
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
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...
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formated for view output Used into pdf and HTML pages.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
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...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages 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.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show 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.
setEventMessage($mesgs, $style='mesgs')
Set event message in dol_events session object.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
$nbtotalofrecords
Count total nb of records.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.