29require
'../../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
40require_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$confirm =
GETPOST(
'confirm',
'alpha');
48$toselect =
GETPOST(
'toselect',
'array');
49$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'accountancysupplierlist';
50$optioncss =
GETPOST(
'optioncss',
'alpha');
52$default_account =
GETPOST(
'default_account',
'int');
55$mesCasesCochees =
GETPOST(
'toselect',
'array');
58$search_societe =
GETPOST(
'search_societe',
'alpha');
59$search_lineid =
GETPOST(
'search_lineid',
'int');
60$search_ref =
GETPOST(
'search_ref',
'alpha');
61$search_ref_supplier =
GETPOST(
'search_ref_supplier',
'alpha');
62$search_invoice =
GETPOST(
'search_invoice',
'alpha');
63$search_label =
GETPOST(
'search_label',
'alpha');
64$search_desc =
GETPOST(
'search_desc',
'alpha');
65$search_amount =
GETPOST(
'search_amount',
'alpha');
66$search_account =
GETPOST(
'search_account',
'alpha');
67$search_vat =
GETPOST(
'search_vat',
'alpha');
68$search_date_startday =
GETPOST(
'search_date_startday',
'int');
69$search_date_startmonth =
GETPOST(
'search_date_startmonth',
'int');
70$search_date_startyear =
GETPOST(
'search_date_startyear',
'int');
71$search_date_endday =
GETPOST(
'search_date_endday',
'int');
72$search_date_endmonth =
GETPOST(
'search_date_endmonth',
'int');
73$search_date_endyear =
GETPOST(
'search_date_endyear',
'int');
74$search_date_start =
dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
75$search_date_end =
dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
76$search_country =
GETPOST(
'search_country',
'alpha');
77$search_tvaintra =
GETPOST(
'search_tvaintra',
'alpha');
81$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
82$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
83$page = GETPOSTISSET(
'pageplusone') ? (
GETPOST(
'pageplusone') - 1) :
GETPOST(
"page",
'int');
84if (empty($page) || $page < 0) {
87$offset = $limit * $page;
91 $sortfield =
"f.datef, f.ref, l.rowid";
102$hookmanager->initHooks(array(
'accountancysupplierlist'));
110if (!isModEnabled(
'accounting')) {
113if ($user->socid > 0) {
116if (!$user->hasRight(
'accounting',
'mouvements',
'lire')) {
121if (empty($search_date_start) &&
getDolGlobalString(
'ACCOUNTING_DATE_START_BINDING')) {
130if (
GETPOST(
'cancel',
'alpha')) {
134if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
138$parameters = array();
139$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
144if (empty($reshook)) {
146 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
147 $search_societe =
'';
150 $search_ref_supplier =
'';
151 $search_invoice =
'';
155 $search_account =
'';
157 $search_date_startday =
'';
158 $search_date_startmonth =
'';
159 $search_date_startyear =
'';
160 $search_date_endday =
'';
161 $search_date_endmonth =
'';
162 $search_date_endyear =
'';
163 $search_date_start =
'';
164 $search_date_end =
'';
165 $search_country =
'';
166 $search_tvaintra =
'';
170 $objectclass =
'AccountingAccount';
171 $permissiontoread = $user->hasRight(
'accounting',
'read');
172 $permissiontodelete = $user->hasRight(
'accounting',
'delete');
173 $uploaddir = $conf->accounting->dir_output;
174 include DOL_DOCUMENT_ROOT.
'/core/actions_massactions.inc.php';
178if ($massaction ==
'ventil' && $user->hasRight(
'accounting',
'bind',
'write')) {
181 if (!empty($mesCasesCochees)) {
182 $msg =
'<div>'.$langs->trans(
"SelectedLines").
': '.count($mesCasesCochees).
'</div>';
183 $msg .=
'<div class="detail">';
188 foreach ($mesCasesCochees as $maLigneCochee) {
189 $maLigneCourante = explode(
"_", $maLigneCochee);
190 $monId = $maLigneCourante[0];
191 $monCompte =
GETPOST(
'codeventil'.$monId);
193 if ($monCompte <= 0) {
194 $msg .=
'<div><span class="error">'.$langs->trans(
"Lineofinvoice").
' '.$monId.
' - '.$langs->trans(
"NoAccountSelected").
'</span></div>';
197 $sql =
" UPDATE ".MAIN_DB_PREFIX.
"facture_fourn_det";
198 $sql .=
" SET fk_code_ventilation = ".((int) $monCompte);
199 $sql .=
" WHERE rowid = ".((int) $monId);
202 $accountventilated->fetch($monCompte,
'', 1);
204 dol_syslog(
'accountancy/supplier/list.php', LOG_DEBUG);
205 if ($db->query($sql)) {
206 $msg .=
'<div><span class="green">'.$langs->trans(
"Lineofinvoice").
' '.$monId.
' - '.$langs->trans(
"VentilatedinAccount").
' : '.
length_accountg($accountventilated->account_number).
'</span></div>';
209 $msg .=
'<div><span class="error">'.$langs->trans(
"ErrorDB").
' : '.$langs->trans(
"Lineofinvoice").
' '.$monId.
' - '.$langs->trans(
"NotVentilatedinAccount").
' : '.
length_accountg($accountventilated->account_number).
'<br> <pre>'.$sql.
'</pre></span></div>';
217 $msg .=
'<div>'.$langs->trans(
"EndProcessing").
'</div>';
221if (
GETPOST(
'sortfield') ==
'f.datef, f.ref, l.rowid') {
222 $value = (
GETPOST(
'sortorder') ==
'asc,asc,asc' ? 0 : 1);
223 require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
224 $res =
dolibarr_set_const($db,
"ACCOUNTING_LIST_SORT_VENTILATION_TODO", $value,
'yesno', 0,
'', $conf->entity);
232$form =
new Form($db);
235$help_url =
'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables';
237llxHeader(
'', $langs->trans(
"SuppliersVentilation"), $help_url);
239if (empty($chartaccountcode)) {
240 print $langs->trans(
"ErrorChartOfAccountSystemNotSelected");
248$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,";
249$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,";
250$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,";
252 $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,";
253 $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,";
255 $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,";
256 $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,";
258$sql .=
" p.tosell as status, p.tobuy as status_buy,";
259$sql .=
" aa.rowid as aarowid, aa2.rowid as aarowid_intra, aa3.rowid as aarowid_export, aa4.rowid as aarowid_thirdparty,";
260$sql .=
" co.code as country_code, co.label as country_label,";
261$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,";
263 $sql .=
" spe.accountancy_code_customer as code_compta_client,";
264 $sql .=
" spe.accountancy_code_supplier as code_compta_fournisseur,";
265 $sql .=
" spe.accountancy_code_buy as company_code_buy";
267 $sql .=
" s.code_compta as code_compta_client,";
268 $sql .=
" s.code_compta_fournisseur,";
269 $sql .=
" s.accountancy_code_buy as company_code_buy";
271$parameters = array();
272$reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters);
273$sql .= $hookmanager->resPrint;
274$sql .=
" FROM ".MAIN_DB_PREFIX.
"facture_fourn as f";
275$sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"societe as s ON s.rowid = f.fk_soc";
277 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = " . ((int) $conf->entity);
279$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_country as co ON co.rowid = s.fk_pays ";
280$sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"facture_fourn_det as l ON f.rowid = l.fk_facture_fourn";
281$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON p.rowid = l.fk_product";
283 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"product_perentity as ppe ON ppe.fk_product = p.rowid AND ppe.entity = " . ((int) $conf->entity);
285$alias_societe_perentity = !
getDolGlobalString(
'MAIN_COMPANY_PERENTITY_SHARED') ?
"s" :
"spe";
286$alias_product_perentity = !
getDolGlobalString(
'MAIN_PRODUCT_PERENTITY_SHARED') ?
"p" :
"ppe";
287$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;
288$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;
289$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;
290$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;
291$sql .=
" WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0";
292$sql .=
" AND l.product_type <= 2";
294if ($search_societe) {
300if (strlen(trim($search_invoice))) {
301 $sql .=
natural_search(array(
"f.ref",
"f.ref_supplier"), $search_invoice);
303if (strlen(trim($search_ref))) {
309if (strlen(trim($search_label))) {
310 $sql .=
natural_search(array(
"p.label",
"f.libelle"), $search_label);
312if (strlen(trim($search_desc))) {
315if (strlen(trim($search_amount))) {
318if (strlen(trim($search_account))) {
321if (strlen(trim($search_vat))) {
324if ($search_date_start) {
325 $sql .=
" AND f.datef >= '".$db->idate($search_date_start).
"'";
327if ($search_date_end) {
328 $sql .=
" AND f.datef <= '".$db->idate($search_date_end).
"'";
330if (strlen(trim($search_country))) {
332 $country_code_in_EEC = $country_code_in_EEC_without_me =
'';
333 foreach ($arrayofcode as $key => $value) {
334 $country_code_in_EEC .= ($country_code_in_EEC ?
"," :
"").
"'".$value.
"'";
335 if ($value != $mysoc->country_code) {
336 $country_code_in_EEC_without_me .= ($country_code_in_EEC_without_me ?
"," :
"").
"'".$value.
"'";
339 if ($search_country ==
'special_allnotme') {
340 $sql .=
" AND co.code <> '".$db->escape($mysoc->country_code).
"'";
341 } elseif ($search_country ==
'special_eec') {
342 $sql .=
" AND co.code IN (".$db->sanitize($country_code_in_EEC, 1).
")";
343 } elseif ($search_country ==
'special_eecnotme') {
344 $sql .=
" AND co.code IN (".$db->sanitize($country_code_in_EEC_without_me, 1).
")";
345 } elseif ($search_country ==
'special_noteec') {
346 $sql .=
" AND co.code NOT IN (".$db->sanitize($country_code_in_EEC, 1).
")";
351if (strlen(trim($search_tvaintra))) {
359$sql .=
" AND f.entity IN (".getEntity(
'facture_fourn', 0).
")";
362$parameters = array();
363$reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
364$sql .= $hookmanager->resPrint;
366$sql .= $db->order($sortfield, $sortorder);
369$nbtotalofrecords =
'';
371 $result = $db->query($sql);
372 $nbtotalofrecords = $db->num_rows($result);
373 if (($page * $limit) > $nbtotalofrecords) {
379$sql .= $db->plimit($limit + 1, $offset);
381dol_syslog(
'accountancy/supplier/list.php', LOG_DEBUG);
384if ($db->type ==
'mysqli') {
385 $db->query(
"SET SQL_BIG_SELECTS=1");
388$result = $db->query($sql);
390 $num_lines = $db->num_rows($result);
393 $arrayofselected = is_array($toselect) ? $toselect : array();
396 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
397 $param .=
'&contextpage='.urlencode($contextpage);
399 if ($limit > 0 && $limit != $conf->liste_limit) {
400 $param .=
'&limit='.((int) $limit);
402 if ($search_societe) {
403 $param .=
'&search_societe='.urlencode($search_societe);
405 if ($search_lineid) {
406 $param .=
'&search_lineid='.urlencode($search_lineid);
408 if ($search_date_startday) {
409 $param .=
'&search_date_startday='.urlencode($search_date_startday);
411 if ($search_date_startmonth) {
412 $param .=
'&search_date_startmonth='.urlencode($search_date_startmonth);
414 if ($search_date_startyear) {
415 $param .=
'&search_date_startyear='.urlencode($search_date_startyear);
417 if ($search_date_endday) {
418 $param .=
'&search_date_endday='.urlencode($search_date_endday);
420 if ($search_date_endmonth) {
421 $param .=
'&search_date_endmonth='.urlencode($search_date_endmonth);
423 if ($search_date_endyear) {
424 $param .=
'&search_date_endyear='.urlencode($search_date_endyear);
426 if ($search_invoice) {
427 $param .=
'&search_invoice='.urlencode($search_invoice);
430 $param .=
'&search_ref='.urlencode($search_ref);
432 if ($search_ref_supplier) {
433 $param .=
'&search_ref_supplier='.urlencode($search_ref_supplier);
436 $param .=
'&search_label='.urlencode($search_label);
439 $param .=
'&search_desc='.urlencode($search_desc);
441 if ($search_amount) {
442 $param .=
'&search_amount='.urlencode($search_amount);
445 $param .=
'&search_vat='.urlencode($search_vat);
447 if ($search_country) {
448 $param .=
"&search_country=".urlencode($search_country);
450 if ($search_tvaintra) {
451 $param .=
"&search_tvaintra=".urlencode($search_tvaintra);
454 $arrayofmassactions = array(
455 'ventil'=>
img_picto(
'',
'check',
'class="pictofixedwidth"').$langs->trans(
"Ventilate")
456 ,
'set_default_account'=>
img_picto(
'',
'check',
'class="pictofixedwidth"').$langs->trans(
"ConfirmPreselectAccount")
462 if ($massaction !==
'set_default_account') {
463 $massactionbutton = $form->selectMassAction(
'ventil', $arrayofmassactions, 1);
466 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">'.
"\n";
467 print
'<input type="hidden" name="action" value="ventil">';
468 if ($optioncss !=
'') {
469 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
471 print
'<input type="hidden" name="token" value="'.newToken().
'">';
472 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
473 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
474 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
475 print
'<input type="hidden" name="page" value="'.$page.
'">';
477 print_barre_liste($langs->trans(
"InvoiceLines"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num_lines, $nbtotalofrecords,
'title_accountancy', 0,
'',
'', $limit);
479 if ($massaction ==
'set_default_account') {
480 $formquestion[]=array(
'type' =>
'other',
481 'name' =>
'set_default_account',
482 'label' => $langs->trans(
"AccountancyCode"),
483 'value' => $formaccounting->select_account(
'',
'default_account', 1, array(), 0, 0,
'maxwidth200 maxwidthonsmartphone',
'cachewithshowemptyone'));
484 print $form->formconfirm($_SERVER[
"PHP_SELF"], $langs->trans(
"ConfirmPreselectAccount"), $langs->trans(
"ConfirmPreselectAccountQuestion", count($toselect)),
"confirm_set_default_account", $formquestion, 1, 0, 200, 500, 1);
487 print
'<span class="opacitymedium">'.$langs->trans(
"DescVentilTodoCustomer").
'</span></br><br>';
495 print
'<div class="div-table-responsive">';
496 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
499 print
'<tr class="liste_titre_filter">';
500 print
'<td class="liste_titre"><input type="text" class="flat maxwidth25" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).
'"></td>';
501 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="'.dol_escape_htmltag($search_invoice).
'"></td>';
503 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="'.dol_escape_htmltag($search_label).
'"></td>';
504 print
'<td class="liste_titre center">';
505 print
'<div class="nowrapfordate">';
506 print $form->selectDate($search_date_start ? $search_date_start : -1,
'search_date_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
508 print
'<div class="nowrapfordate">';
509 print $form->selectDate($search_date_end ? $search_date_end : -1,
'search_date_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
512 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'"></td>';
513 print
'<td class="liste_titre"><input type="text" class="flat maxwidth100" name="search_desc" value="'.dol_escape_htmltag($search_desc).
'"></td>';
514 print
'<td class="liste_titre right"><input type="text" class="flat maxwidth50 right" name="search_amount" value="'.dol_escape_htmltag($search_amount).
'"></td>';
515 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>';
516 print
'<td class="liste_titre"><input type="text" class="flat maxwidth75imp" name="search_societe" value="'.dol_escape_htmltag($search_societe).
'"></td>';
517 print
'<td class="liste_titre">';
518 print $form->select_country($search_country,
'search_country',
'', 0,
'maxwidth100',
'code2', 1, 0, 1);
521 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="'.dol_escape_htmltag($search_tvaintra).
'"></td>';
522 print
'<td class="liste_titre"></td>';
523 print
'<td class="liste_titre"></td>';
524 print
'<td class="center liste_titre">';
525 $searchpicto = $form->showFilterButtons();
530 print
'<tr class="liste_titre">';
534 print_liste_field_titre(
"InvoiceLabel", $_SERVER[
"PHP_SELF"],
"f.libelle",
"", $param,
'', $sortfield, $sortorder);
535 print_liste_field_titre(
"Date", $_SERVER[
"PHP_SELF"],
"f.datef, f.ref, l.rowid",
"", $param,
'', $sortfield, $sortorder,
'center ');
538 print_liste_field_titre(
"ProductDescription", $_SERVER[
"PHP_SELF"],
"l.description",
"", $param,
'', $sortfield, $sortorder);
539 print_liste_field_titre(
"Amount", $_SERVER[
"PHP_SELF"],
"l.total_ht",
"", $param,
'', $sortfield, $sortorder,
'right maxwidth50 ');
540 print_liste_field_titre(
"VATRate", $_SERVER[
"PHP_SELF"],
"l.tva_tx",
"", $param,
'', $sortfield, $sortorder,
'right ',
'', 1);
543 print_liste_field_titre(
"VATIntraShort", $_SERVER[
"PHP_SELF"],
"s.tva_intra",
"", $param,
'', $sortfield, $sortorder);
547 if ($massactionbutton) {
548 $checkpicto = $form->showCheckAddButtons(
'checkforselect', 1);
553 $thirdpartystatic =
new Societe($db);
556 $product_static =
new Product($db);
559 $accountingaccount_codetotid_cache = array();
561 while ($i < min($num_lines, $limit)) {
562 $objp = $db->fetch_object($result);
571 $thirdpartystatic->id = $objp->socid;
572 $thirdpartystatic->name = $objp->name;
573 $thirdpartystatic->client = $objp->client;
574 $thirdpartystatic->fournisseur = $objp->fournisseur;
575 $thirdpartystatic->code_client = $objp->code_client;
576 $thirdpartystatic->code_compta_client = $objp->code_compta_client;
577 $thirdpartystatic->code_fournisseur = $objp->code_fournisseur;
578 $thirdpartystatic->code_compta_fournisseur = $objp->code_compta_fournisseur;
579 $thirdpartystatic->email = $objp->email;
580 $thirdpartystatic->country_code = $objp->country_code;
581 $thirdpartystatic->tva_intra = $objp->tva_intra;
582 $thirdpartystatic->code_compta_product = $objp->company_code_buy;
584 $product_static->ref = $objp->product_ref;
585 $product_static->id = $objp->product_id;
586 $product_static->type = $objp->type;
587 $product_static->label = $objp->product_label;
588 $product_static->status = $objp->status;
589 $product_static->status_buy = $objp->status_buy;
590 $product_static->accountancy_code_sell = $objp->code_sell;
591 $product_static->accountancy_code_sell_intra = $objp->code_sell_intra;
592 $product_static->accountancy_code_sell_export = $objp->code_sell_export;
593 $product_static->accountancy_code_buy = $objp->code_buy;
594 $product_static->accountancy_code_buy_intra = $objp->code_buy_intra;
595 $product_static->accountancy_code_buy_export = $objp->code_buy_export;
596 $product_static->tva_tx = $objp->tva_tx_prod;
598 $facturefourn_static->ref = $objp->ref;
599 $facturefourn_static->id = $objp->facid;
600 $facturefourn_static->type = $objp->ftype;
601 $facturefourn_static->ref_supplier = $objp->ref_supplier;
602 $facturefourn_static->label = $objp->invoice_label;
603 $facturefourn_static->date = $db->jdate($objp->datef);
604 $facturefourn_static->fk_facture_source = $objp->fk_facture_source;
606 $facturefourn_static_det->id = $objp->rowid;
607 $facturefourn_static_det->total_ht = $objp->total_ht;
608 $facturefourn_static_det->tva_tx = $objp->tva_tx_line;
609 $facturefourn_static_det->vat_src_code = $objp->vat_src_code;
610 $facturefourn_static_det->product_type = $objp->type_l;
611 $facturefourn_static_det->desc = $objp->description;
613 $accountingAccountArray = array(
614 'dom'=>$objp->aarowid,
615 'intra'=>$objp->aarowid_intra,
616 'export'=>$objp->aarowid_export,
617 'thirdparty' =>$objp->aarowid_thirdparty);
619 $code_buy_p_notset =
'';
620 $code_buy_t_notset =
'';
624 $return=$accountingAccount->getAccountingCodeToBind($mysoc, $thirdpartystatic, $product_static, $facturefourn_static, $facturefourn_static_det, $accountingAccountArray,
'supplier');
625 if (!is_array($return) && $return<0) {
628 $suggestedid=$return[
'suggestedid'];
629 $suggestedaccountingaccountfor=$return[
'suggestedaccountingaccountfor'];
630 $suggestedaccountingaccountbydefaultfor=$return[
'suggestedaccountingaccountbydefaultfor'];
631 $code_buy_l=$return[
'code_l'];
632 $code_buy_p=$return[
'code_p'];
633 $code_buy_t=$return[
'code_t'];
637 if (!empty($code_buy_p)) {
640 $code_buy_p_notset =
'color:orange';
642 if (empty($code_buy_l) && empty($code_buy_p)) {
643 $code_buy_p_notset =
'color:red';
654 print
'<tr class="oddeven">';
657 print
'<td>'.$facturefourn_static_det->id.
'</td>';
660 print
'<td class="nowraponall">'.$facturefourn_static->getNomUrl(1);
661 if ($objp->ref_supplier) {
662 print
'<br><span class="opacitymedium small">'.dol_escape_htmltag($objp->ref_supplier).
'</span>';
672 print
'<td class="tdoverflowmax100 small" title="'.dol_escape_htmltag($objp->invoice_label).
'">';
677 print
'<td class="center">'.dol_print_date($facturefourn_static->date,
'day').
'</td>';
680 print
'<td class="tdoverflowmax100">';
681 if ($product_static->id > 0) {
682 print $product_static->getNomUrl(1);
684 if ($product_static->label) {
685 print
'<br><span class="opacitymedium small">'.dol_escape_htmltag($product_static->label).
'</span>';
690 print
'<td class="tdoverflowonsmartphone small">';
693 print $form->textwithtooltip(
dol_trunc($text, $trunclength), $facturefourn_static_det->desc);
696 print
'<td class="right nowraponall amount">';
697 print
price($objp->total_ht);
701 $code_vat_differ =
'';
705 print
'<td class="right'.($code_vat_differ ?
' '.$code_vat_differ :
'').
'">';
706 print
vatrate($facturefourn_static_det->tva_tx.($facturefourn_static_det->vat_src_code ?
' ('.$facturefourn_static_det->vat_src_code.
')' :
''), false, 0, 0, 1);
710 print
'<td class="tdoverflowmax100">'.$thirdpartystatic->getNomUrl(1,
'supplier').
'</td>';
713 $labelcountry = ($objp->country_code && ($langs->trans(
"Country".$objp->country_code) !=
"Country".$objp->country_code)) ? $langs->trans(
"Country".$objp->country_code) : $objp->country_label;
714 print
'<td class="tdoverflowmax100" title="'.dol_escape_htmltag($labelcountry).
'">';
719 print
'<td class="tdoverflowmax80" title="'.dol_escape_htmltag($objp->tva_intra).
'">'.
dol_escape_htmltag($objp->tva_intra).
'</td>';
722 print
'<td class="small">';
723 $s =
'1. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans(
"DefaultForService") : $langs->trans(
"DefaultForProduct")).
': ';
726 if ($suggestedaccountingaccountbydefaultfor ==
'eec') {
727 $shelp .= $langs->trans(
"SaleEEC");
728 } elseif ($suggestedaccountingaccountbydefaultfor ==
'eecwithvat') {
729 $shelp = $langs->trans(
"SaleEECWithVAT");
730 } elseif ($suggestedaccountingaccountbydefaultfor ==
'eecwithoutvatnumber') {
731 $shelp = $langs->trans(
"SaleEECWithoutVATNumber");
733 } elseif ($suggestedaccountingaccountbydefaultfor ==
'export') {
734 $shelp .= $langs->trans(
"SaleExport");
736 $s .= ($code_buy_l > 0 ?
length_accountg($code_buy_l) :
'<span style="'.$code_buy_p_notset.
'">'.$langs->trans(
"NotDefined").
'</span>');
737 print $form->textwithpicto($s, $shelp, 1, $ttype,
'', 0, 2,
'', 1);
738 if ($product_static->id > 0) {
740 $s =
'2. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans(
"ThisService") : $langs->trans(
"ThisProduct")).
': ';
743 if ($suggestedaccountingaccountfor ==
'eec') {
744 $shelp = $langs->trans(
"SaleEEC");
745 } elseif ($suggestedaccountingaccountfor ==
'eecwithvat') {
746 $shelp = $langs->trans(
"SaleEECWithVAT");
747 } elseif ($suggestedaccountingaccountfor ==
'eecwithoutvatnumber') {
748 $shelp = $langs->trans(
"SaleEECWithoutVATNumber");
750 } elseif ($suggestedaccountingaccountfor ==
'export') {
751 $shelp = $langs->trans(
"SaleExport");
753 $s .= (empty($code_buy_p) ?
'<span style="'.$code_buy_p_notset.
'">'.$langs->trans(
"NotDefined").
'</span>' :
length_accountg($code_buy_p));
754 print $form->textwithpicto($s, $shelp, 1, $ttype,
'', 0, 2,
'', 1);
757 $s =
'2. '.(($objp->type_l == 1) ? $langs->trans(
"ThisService") : $langs->trans(
"ThisProduct")).
': ';
759 $s .= $langs->trans(
"NotDefined");
760 print $form->textwithpicto($s, $shelp, 1,
'help',
'', 0, 2,
'', 1);
764 $s =
'3. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans(
"ServiceForThisThirdparty") : $langs->trans(
"ProductForThisThirdparty")).
': ';
766 $s .= ($code_buy_t > 0 ?
length_accountg($code_buy_t) :
'<span style="'.$code_buy_t_notset.
'">'.$langs->trans(
"NotDefined").
'</span>');
767 print $form->textwithpicto($s, $shelp, 1,
'help',
'', 0, 2,
'', 1);
773 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');
777 print
'<td class="center">';
779 if (!empty($suggestedid) && $suggestedaccountingaccountfor !=
'' && $suggestedaccountingaccountfor !=
'eecwithoutvatnumber') {
783 if (!empty($toselect)) {
785 if (in_array($objp->rowid.
"_".$i, $toselect)) {
790 print
'<input type="checkbox" class="flat checkforselect checkforselect'.$facturefourn_static_det->id.
'" name="toselect[]" value="'.$facturefourn_static_det->id.
"_".$i.
'"'.($ischecked ?
" checked" :
"").
'/>';
796 if ($num_lines == 0) {
797 print
'<tr><td colspan="14"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
807if ($db->type ==
'mysqli') {
808 $db->query(
"SET SQL_BIG_SELECTS=0");
812print
'<script type="text/javascript">
813jQuery(document).ready(function() {
814 jQuery(".codeventil").change(function() {
815 var s=$(this).attr("id").replace("codeventil", "")
816 console.log(s+" "+$(this).val());
817 if ($(this).val() == -1) jQuery(".checkforselect"+s).prop("checked", false);
818 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).
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...
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.
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 '.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0)
Set event message in dol_events session object.
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...
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.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages 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.
getDolGlobalString($key, $default='')
Return 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...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.