From e3a18d117ec6ac115d9205c6a2ebd57d62aa6d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Mon, 13 Dec 2021 10:32:07 +0100 Subject: [PATCH 01/16] Only the products in stock --- htdocs/takepos/ajax/ajax.php | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 6cfbf4b3c1a..6cc9ef7f5fd 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -67,13 +67,21 @@ if ($action == 'getProducts') { if ($result > 0) { $prods = $object->getObjectsInCateg("product", 0, 0, 0, getDolGlobalString('TAKEPOS_SORTPRODUCTFIELD'), 'ASC'); // Removed properties we don't need + $res = array(); if (is_array($prods) && count($prods) > 0) { foreach ($prods as $prod) { + if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { + $prod->load_stock('nobatch,novirtual'); + if ($prod->stock_warehouse[$conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}]->real <= 0) { + continue; + } + } unset($prod->fields); unset($prod->db); + $res[] = $prod; } } - echo json_encode($prods); + echo json_encode($res); } else { echo 'Failed to load category with id='.$category; } @@ -109,12 +117,24 @@ if ($action == 'getProducts') { } } - $sql = 'SELECT rowid, ref, label, tosell, tobuy, barcode, price FROM '.MAIN_DB_PREFIX.'product as p'; + $sql = 'SELECT rowid, ref, label, tosell, tobuy, barcode, price '; + if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { + $sql .= ', reel'; + } + $sql .= ' FROM '.MAIN_DB_PREFIX.'product as p'; + if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { + $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as ps'; + $sql .= ' ON p.rowid = ps.fk_product'; + } $sql .= ' WHERE entity IN ('.getEntity('product').')'; if ($filteroncategids) { $sql .= ' AND EXISTS (SELECT cp.fk_product FROM '.MAIN_DB_PREFIX.'categorie_product as cp WHERE cp.fk_product = p.rowid AND cp.fk_categorie IN ('.$db->sanitize($filteroncategids).'))'; } $sql .= ' AND tosell = 1'; + if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { + $sql .= ' AND reel > 0'; + $sql .= ' AND fk_entrepot ='.$conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}; + } $sql .= natural_search(array('ref', 'label', 'barcode'), $term); $resql = $db->query($sql); if ($resql) { From 631de455a4d542d48bb2aff3806858d222e64c0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Mon, 13 Dec 2021 16:51:53 +0100 Subject: [PATCH 02/16] Change line 136 --- htdocs/takepos/ajax/ajax.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 6cc9ef7f5fd..556c1a25646 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -133,7 +133,8 @@ if ($action == 'getProducts') { $sql .= ' AND tosell = 1'; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' AND reel > 0'; - $sql .= ' AND fk_entrepot ='.$conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}; + $sql .= ' AND fk_entrepot ='.$db->escape($conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}); + } $sql .= natural_search(array('ref', 'label', 'barcode'), $term); $resql = $db->query($sql); From b9f750198f86e532f3dad77627f80a63db65a9ee Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 13 Dec 2021 15:52:38 +0000 Subject: [PATCH 03/16] Fixing style errors. --- htdocs/takepos/ajax/ajax.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 556c1a25646..87741dacf6f 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -134,7 +134,6 @@ if ($action == 'getProducts') { if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' AND reel > 0'; $sql .= ' AND fk_entrepot ='.$db->escape($conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}); - } $sql .= natural_search(array('ref', 'label', 'barcode'), $term); $resql = $db->query($sql); From a28ddb5ac6b1293f7e68e518883dfd3354afe268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Tue, 14 Dec 2021 09:18:44 +0100 Subject: [PATCH 04/16] sql correction --- htdocs/takepos/ajax/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 556c1a25646..031bed03f0f 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -133,7 +133,7 @@ if ($action == 'getProducts') { $sql .= ' AND tosell = 1'; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' AND reel > 0'; - $sql .= ' AND fk_entrepot ='.$db->escape($conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}); + $sql .= " AND fk_entrepot = '" . $db->escape($conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}) . "'"; } $sql .= natural_search(array('ref', 'label', 'barcode'), $term); From f21f15fa140928591f051d48e73a18c487706311 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 14 Dec 2021 08:25:37 +0000 Subject: [PATCH 05/16] Fixing style errors. --- htdocs/takepos/ajax/ajax.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 031bed03f0f..e8d6da7ac9a 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -134,7 +134,6 @@ if ($action == 'getProducts') { if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' AND reel > 0'; $sql .= " AND fk_entrepot = '" . $db->escape($conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}) . "'"; - } $sql .= natural_search(array('ref', 'label', 'barcode'), $term); $resql = $db->query($sql); From 882bf4b12dfcc9d06f4475f5cfa0d5bf2d4bb12c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Mon, 20 Dec 2021 10:02:58 +0100 Subject: [PATCH 06/16] cast fk_entrepot --- htdocs/takepos/ajax/ajax.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 031bed03f0f..5eb558e9224 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -133,8 +133,7 @@ if ($action == 'getProducts') { $sql .= ' AND tosell = 1'; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' AND reel > 0'; - $sql .= " AND fk_entrepot = '" . $db->escape($conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}) . "'"; - + $sql .= " AND fk_entrepot = ".((int) $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}); } $sql .= natural_search(array('ref', 'label', 'barcode'), $term); $resql = $db->query($sql); From dccd74b0efb8db7a62f6fec47d0ec90fe305b016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Mon, 20 Dec 2021 10:42:10 +0100 Subject: [PATCH 07/16] fix prefix --- htdocs/takepos/ajax/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 5eb558e9224..0c6b90907de 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -132,7 +132,7 @@ if ($action == 'getProducts') { } $sql .= ' AND tosell = 1'; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { - $sql .= ' AND reel > 0'; + $sql .= ' AND ps.reel > 0'; $sql .= " AND fk_entrepot = ".((int) $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}); } $sql .= natural_search(array('ref', 'label', 'barcode'), $term); From 8738dc93b57e4898252e28bec2cfac7993ed0837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Mon, 20 Dec 2021 11:06:53 +0100 Subject: [PATCH 08/16] fix prefix --- htdocs/takepos/ajax/ajax.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 0c6b90907de..2e0f35041c1 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -117,25 +117,26 @@ if ($action == 'getProducts') { } } - $sql = 'SELECT rowid, ref, label, tosell, tobuy, barcode, price '; + $sql = 'SELECT p.rowid, p.ref, p.label, p.tosell, p.tobuy, p.barcode, p.price '; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { - $sql .= ', reel'; + $sql .= ', ps.reel'; } $sql .= ' FROM '.MAIN_DB_PREFIX.'product as p'; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as ps'; - $sql .= ' ON p.rowid = ps.fk_product'; + $sql .= ' ON (p.rowid = ps.fk_product'; + $sql .= " AND ps.fk_entrepot = ".((int) $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}) . ')'; } $sql .= ' WHERE entity IN ('.getEntity('product').')'; if ($filteroncategids) { $sql .= ' AND EXISTS (SELECT cp.fk_product FROM '.MAIN_DB_PREFIX.'categorie_product as cp WHERE cp.fk_product = p.rowid AND cp.fk_categorie IN ('.$db->sanitize($filteroncategids).'))'; } - $sql .= ' AND tosell = 1'; + $sql .= ' AND p.tosell = 1'; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' AND ps.reel > 0'; - $sql .= " AND fk_entrepot = ".((int) $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}); + } - $sql .= natural_search(array('ref', 'label', 'barcode'), $term); + $sql .= natural_search(array('p.ref', 'p.label', 'p.barcode'), $term); $resql = $db->query($sql); if ($resql) { $rows = array(); From ce752fe437ad50244123a4902084686d32393fc4 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 20 Dec 2021 10:07:25 +0000 Subject: [PATCH 09/16] Fixing style errors. --- htdocs/takepos/ajax/ajax.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 2e0f35041c1..6463f65b327 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -134,7 +134,6 @@ if ($action == 'getProducts') { $sql .= ' AND p.tosell = 1'; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' AND ps.reel > 0'; - } $sql .= natural_search(array('p.ref', 'p.label', 'p.barcode'), $term); $resql = $db->query($sql); From e90c382345082fc5d70371013128c0938100c181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Mon, 20 Dec 2021 11:09:54 +0100 Subject: [PATCH 10/16] fix prefix --- htdocs/takepos/ajax/ajax.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 2e0f35041c1..6463f65b327 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -134,7 +134,6 @@ if ($action == 'getProducts') { $sql .= ' AND p.tosell = 1'; if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' AND ps.reel > 0'; - } $sql .= natural_search(array('p.ref', 'p.label', 'p.barcode'), $term); $resql = $db->query($sql); From d267d90ef76c47f516878945c7161bb59eeab8d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Mon, 20 Dec 2021 14:22:35 +0100 Subject: [PATCH 11/16] escape constant --- htdocs/takepos/ajax/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 6463f65b327..99529e8b46f 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -125,7 +125,7 @@ if ($action == 'getProducts') { if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as ps'; $sql .= ' ON (p.rowid = ps.fk_product'; - $sql .= " AND ps.fk_entrepot = ".((int) $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}) . ')'; + $sql .= " AND ps.fk_entrepot = ".((int) $db->escape($conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']})) . ')'; } $sql .= ' WHERE entity IN ('.getEntity('product').')'; if ($filteroncategids) { From 9e247859726aa7adacaa95e2acc5847f7e7d73bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Tue, 28 Dec 2021 11:23:46 +0100 Subject: [PATCH 12/16] add getDolGlobalInt --- htdocs/takepos/ajax/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 99529e8b46f..d99d8311ea2 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -125,7 +125,7 @@ if ($action == 'getProducts') { if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as ps'; $sql .= ' ON (p.rowid = ps.fk_product'; - $sql .= " AND ps.fk_entrepot = ".((int) $db->escape($conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']})) . ')'; + $sql .= " AND ps.fk_entrepot = ".((int) getDolGlobalInt('CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal'])); } $sql .= ' WHERE entity IN ('.getEntity('product').')'; if ($filteroncategids) { From 2729bd32e666bff46ccdb00a80f54c2afff49006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Thu, 30 Dec 2021 16:14:06 +0100 Subject: [PATCH 13/16] Single quotes --- htdocs/takepos/ajax/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index d99d8311ea2..3d2979c21f8 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -125,7 +125,7 @@ if ($action == 'getProducts') { if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as ps'; $sql .= ' ON (p.rowid = ps.fk_product'; - $sql .= " AND ps.fk_entrepot = ".((int) getDolGlobalInt('CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal'])); + $sql .= ' AND ps.fk_entrepot = '.((int) getDolGlobalInt('CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal'])); } $sql .= ' WHERE entity IN ('.getEntity('product').')'; if ($filteroncategids) { From a85f542668a785aa0a60ffb7c2fc7a97f7703820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lina?= Date: Fri, 31 Dec 2021 09:29:56 +0100 Subject: [PATCH 14/16] double quotes --- htdocs/takepos/ajax/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 3d2979c21f8..ab4c9af2904 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -125,7 +125,7 @@ if ($action == 'getProducts') { if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as ps'; $sql .= ' ON (p.rowid = ps.fk_product'; - $sql .= ' AND ps.fk_entrepot = '.((int) getDolGlobalInt('CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal'])); + $sql .= " AND ps.fk_entrepot = ".((int) getDolGlobalInt("CASHDESK_ID_WAREHOUSE".$_SESSION['takeposterminal'])); } $sql .= ' WHERE entity IN ('.getEntity('product').')'; if ($filteroncategids) { From 0faec59f56c5c72e54146fe3c773610be16717fe Mon Sep 17 00:00:00 2001 From: melina Date: Wed, 20 Apr 2022 08:13:01 +0200 Subject: [PATCH 15/16] FIX conflict and integrate Lionel fix --- htdocs/takepos/ajax/ajax.php | 133 ++++++++++++++++++++++++++++++++--- 1 file changed, 125 insertions(+), 8 deletions(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index ab4c9af2904..3ec334bd703 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -53,6 +53,8 @@ if (empty($user->rights->takepos->run)) { accessforbidden(); } +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks +$hookmanager->initHooks(array('takeposproductsearch')); /* * View @@ -70,9 +72,10 @@ if ($action == 'getProducts') { $res = array(); if (is_array($prods) && count($prods) > 0) { foreach ($prods as $prod) { - if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { + if (getDolGlobalInt('TAKEPOS_PRODUCT_IN_STOCK') == 1) { + // remove products without stock $prod->load_stock('nobatch,novirtual'); - if ($prod->stock_warehouse[$conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal']}]->real <= 0) { + if ($prod->stock_warehouse[getDolGlobalString('CASHDESK_ID_WAREHOUSE'.$_SESSION['takeposterminal'])]->real <= 0) { continue; } } @@ -117,25 +120,138 @@ if ($action == 'getProducts') { } } - $sql = 'SELECT p.rowid, p.ref, p.label, p.tosell, p.tobuy, p.barcode, p.price '; - if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { + $barcode_rules = getDolGlobalString('TAKEPOS_BARCODE_RULE_TO_INSERT_PRODUCT'); + if (!empty($conf->barcode->enabled) && !empty($barcode_rules)) { + $barcode_rules_list = array(); + + // get barcode rules + $barcode_char_nb = 0; + $barcode_rules_arr = explode('+', $barcode_rules); + foreach ($barcode_rules_arr as $barcode_rules_values) { + $barcode_rules_values_arr = explode(':', $barcode_rules_values); + if (count($barcode_rules_values_arr) == 2) { + $char_nb = intval($barcode_rules_values_arr[1]); + $barcode_rules_list[] = array('code' => $barcode_rules_values_arr[0], 'char_nb' => $char_nb); + $barcode_char_nb += $char_nb; + } + } + + $barcode_value_list = array(); + $barcode_offset = 0; + $barcode_length = dol_strlen($term); + if ($barcode_length == $barcode_char_nb) { + $rows = array(); + + // split term with barcode rules + foreach ($barcode_rules_list as $barcode_rule_arr) { + $code = $barcode_rule_arr['code']; + $char_nb = $barcode_rule_arr['char_nb']; + $barcode_value_list[$code] = substr($term, $barcode_offset, $char_nb); + $barcode_offset += $char_nb; + } + + if (isset($barcode_value_list['ref'])) { + // search product from reference + $sql = "SELECT rowid, ref, label, tosell, tobuy, barcode, price"; + $sql .= " FROM " . $db->prefix() . "product as p"; + $sql .= " WHERE entity IN (" . getEntity('product') . ")"; + $sql .= " AND ref = '" . $db->escape($barcode_value_list['ref']) . "'"; + if ($filteroncategids) { + $sql .= " AND EXISTS (SELECT cp.fk_product FROM " . $db->prefix() . "categorie_product as cp WHERE cp.fk_product = p.rowid AND cp.fk_categorie IN (".$db->sanitize($filteroncategids)."))"; + } + $sql .= " AND tosell = 1"; + $sql .= " AND (barcode IS NULL OR barcode != '" . $db->escape($term) . "')"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) == 1) { + if ($obj = $db->fetch_object($resql)) { + $qty = 1; + if (isset($barcode_value_list['qu'])) { + $qty_str = $barcode_value_list['qu']; + if (isset($barcode_value_list['qd'])) { + $qty_str .= '.' . $barcode_value_list['qd']; + } + $qty = floatval($qty_str); + } + + $ig = '../public/theme/common/nophoto.png'; + if (empty($conf->global->TAKEPOS_HIDE_PRODUCT_IMAGES)) { + $objProd = new Product($db); + $objProd->fetch($obj->rowid); + $image = $objProd->show_photos('product', $conf->product->multidir_output[$objProd->entity], 'small', 1); + + $match = array(); + preg_match('@src="([^"]+)"@', $image, $match); + $file = array_pop($match); + + if ($file != '') { + if (!defined('INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE')) { + $ig = $file.'&cache=1'; + } else { + $ig = $file.'&cache=1&publictakepos=1&modulepart=product'; + } + } + } + + $rows[] = array( + 'rowid' => $obj->rowid, + 'ref' => $obj->ref, + 'label' => $obj->label, + 'tosell' => $obj->tosell, + 'tobuy' => $obj->tobuy, + 'barcode' => $obj->barcode, + 'price' => $obj->price, + 'object' => 'product', + 'img' => $ig, + 'qty' => $qty, + ); + } + $db->free($resql); + } + } + + if (count($rows) == 1) { + echo json_encode($rows); + exit(); + } + } + } + + $sql = 'SELECT rowid, ref, label, tosell, tobuy, barcode, price' ; + if (getDolGlobalInt('TAKEPOS_PRODUCT_IN_STOCK') == 1) { $sql .= ', ps.reel'; } + // Add fields from hooks + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook + $sql .= $hookmanager->resPrint; + $sql .= ' FROM '.MAIN_DB_PREFIX.'product as p'; - if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { + if (getDolGlobalInt('TAKEPOS_PRODUCT_IN_STOCK') == 1) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as ps'; $sql .= ' ON (p.rowid = ps.fk_product'; $sql .= " AND ps.fk_entrepot = ".((int) getDolGlobalInt("CASHDESK_ID_WAREHOUSE".$_SESSION['takeposterminal'])); } + + // Add tables from hooks + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldListTables', $parameters); // Note that $action and $object may have been modified by hook + $sql .= $hookmanager->resPrint; + $sql .= ' WHERE entity IN ('.getEntity('product').')'; if ($filteroncategids) { $sql .= ' AND EXISTS (SELECT cp.fk_product FROM '.MAIN_DB_PREFIX.'categorie_product as cp WHERE cp.fk_product = p.rowid AND cp.fk_categorie IN ('.$db->sanitize($filteroncategids).'))'; } - $sql .= ' AND p.tosell = 1'; - if ($conf->global->TAKEPOS_PRODUCT_IN_STOCK == 1) { + $sql .= ' AND tosell = 1'; + if (getDolGlobalInt('TAKEPOS_PRODUCT_IN_STOCK') == 1) { $sql .= ' AND ps.reel > 0'; } - $sql .= natural_search(array('p.ref', 'p.label', 'p.barcode'), $term); + $sql .= natural_search(array('ref', 'label', 'barcode'), $term); + // Add where from hooks + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook + $sql .= $hookmanager->resPrint; + $resql = $db->query($sql); if ($resql) { $rows = array(); @@ -168,6 +284,7 @@ if ($action == 'getProducts') { 'price' => $obj->price, 'object' => 'product', 'img' => $ig, + 'qty' => 1, //'price_formated' => price(price2num($obj->price, 'MU'), 1, $langs, 1, -1, -1, $conf->currency) ); } From 6d79d03cb2a275d4b41845752030e6be261ec9d0 Mon Sep 17 00:00:00 2001 From: melina Date: Fri, 29 Apr 2022 10:43:35 +0200 Subject: [PATCH 16/16] add comment to fix stickler --- htdocs/takepos/ajax/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/ajax/ajax.php b/htdocs/takepos/ajax/ajax.php index 3ec334bd703..3af186813e2 100644 --- a/htdocs/takepos/ajax/ajax.php +++ b/htdocs/takepos/ajax/ajax.php @@ -54,7 +54,7 @@ if (empty($user->rights->takepos->run)) { } // Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks -$hookmanager->initHooks(array('takeposproductsearch')); +$hookmanager->initHooks(array('takeposproductsearch')); // new context for product search hooks /* * View