|
@@ -98,6 +98,98 @@ if ($action == 'getProducts') {
|
|
|
exit;
|
|
|
}
|
|
|
|
|
|
+ if (!empty($conf->barcode->enabled) && !empty($conf->global->TAKEPOS_BARCODE_RULE_TO_INSERT_PRODUCT)) {
|
|
|
+ $barcode_rules = $conf->global->TAKEPOS_BARCODE_RULE_TO_INSERT_PRODUCT;
|
|
|
+ $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']) . "'";
|
|
|
+
|
|
|
+ $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();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// Define $filteroncategids, the filter on category ID if there is a Root category defined.
|
|
|
$filteroncategids = '';
|
|
|
if ($conf->global->TAKEPOS_ROOT_CATEGORY_ID > 0) { // A root category is defined, we must filter on products inside this category tree
|