FIX conflict and integrate Lionel fix

This commit is contained in:
melina 2022-04-20 08:13:01 +02:00
parent a85f542668
commit 0faec59f56

View File

@ -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)
);
}