function preprocess() { global $FANNIE_OP_DB; // custom: can delete items from report results if (isset($_REQUEST['deleteItem'])) { $upc = FormLib::get_form_value('deleteItem', ''); if (is_numeric($upc)) { $upc = BarcodeLib::padUPC($upc); } $dbc = FannieDB::get($FANNIE_OP_DB); $model = new ProductsModel($dbc); $model->upc($upc); $model->store_id(1); $model->delete(); echo 'Deleted'; return false; } elseif (FormLib::get('deactivate') !== '') { $upc = BarcodeLib::padUPC(FormLib::get('deactivate')); $dbc = FannieDB::get($FANNIE_OP_DB); $model = new ProductsModel($dbc); $model->upc($upc); $model->store_id(1); $model->inUse(0); $model->save(); echo 'Deactivated'; } $ret = parent::preprocess(); // custom: needs extra JS for delete option if ($this->content_function == 'report_content' && $this->report_format == 'html') { $this->add_script("../../src/javascript/jquery.js"); $this->add_script('delete.js'); } return $ret; }
/** For each store, examine all items. For all items in a given store, check whether it exists in all other stores. Copy the item to store(s) where it does not exist if needed. This may be better suited to a cron/CLI approach. Time required to check every item scales rapidly with both number of items and number of stores. */ public function post_view() { $dbc = $this->connection; $dbc->selectDB($this->config->get('OP_DB')); $model = new StoresModel(); $stores = array(); foreach ($model->find() as $s) { $stores[] = $s->storeID(); } $product = new ProductsModel(); $chkP = $dbc->prepare(' SELECT upc FROM products WHERE upc=? AND store_id=?'); for ($i = 0; $i < count($stores); $i++) { $store_id = $stores[$i]; $product->store_id($store_id); foreach ($product->find() as $p) { for ($j = 0; $j < count($stores); $j++) { if ($i == $j) { continue; } $chkR = $dbc->execute($chkP, array($p->upc(), $stores[$j])); if ($dbc->numRows($chkR) == 0) { $p->store_id($stores[$j]); $p->save(); } } } } header('Location: ' . $_SERVER['PHP_SELF']); return false; }
function post_id_handler() { global $FANNIE_OP_DB; $dbc = FannieDB::get($FANNIE_OP_DB); $upc = BarcodeLib::padUPC($this->id); $model = new ProductsModel($dbc); $model->upc($upc); $model->store_id(1); $model->discounttype(0); $model->special_price(0); $model->modified(date('Y-m-d H:i:s')); $model->save(); $batchID = FormLib::get_form_value('batchID'); $batchUPC = FormLib::get_form_value('batchUPC'); if ($batchID !== '' && $batchUPC !== '') { if (substr($batchUPC, 0, 2) != 'LC') { $batchUPC = BarcodeLib::padUPC($batchUPC); } $batchP = $dbc->prepare_statement('DELETE FROM batchList WHERE upc=? AND batchID=?'); $batchR = $dbc->exec_statement($batchP, array($batchUPC, $batchID)); } require 'laneUpdates.php'; updateProductAllLanes($upc); header('Location: ItemEditorPage.php?searchupc=' . $upc); return False; }
public function testItemFlags() { $config = FannieConfig::factory(); $connection = FannieDB::get($config->OP_DB); /** Setup preconditions for the test */ $upc = BarcodeLib::padUPC('16'); $product = new ProductsModel($connection); $product->upc($upc); $product->store_id(0); $product->load(); if ($product->numflag() != 0) { $product->numflag(0); } $product->save(); $module = new ItemFlagsModule(); $module->setConnection($connection); $module->setConfig($config); $form = new \COREPOS\common\mvc\ValueContainer(); $module->setForm($form); $saved = $module->saveFormData($upc); $this->assertEquals(true, $saved, 'Handled empty input'); $product->reset(); $product->upc($upc); $product->load(); $this->assertEquals(0, $product->numflag(), 'Wrong numflag value ' . $product->numflag()); /** Simulate real form input */ $form = new \COREPOS\common\mvc\ValueContainer(); $form->flags = array(1, 3); // 0b101 == 5 $module->setForm($form); $saved = $module->saveFormData($upc); $this->assertEquals(true, $saved, 'Saving item flags failed'); $product->reset(); $product->upc($upc); $product->load(); $this->assertEquals(5, $product->numflag(), 'Wrong numflag value ' . $product->numflag()); /* put record back to normal */ $product->numflag(0); $product->save(); $form = new \COREPOS\common\mvc\ValueContainer(); $form->flags = 'not_an_array'; $module->setForm($form); $saved = $module->saveFormData($upc); $this->assertEquals(false, $saved, 'Accepted invalid input'); }
public function post_id_handler() { $dbc = FannieDB::get($this->config->get('OP_DB')); $new = FormLib::get('new-upc'); if ($new == '') { $this->addOnloadCommand("showBootstrapAlert('#alert-area', 'danger', 'New UPC cannot be blank');\n"); return true; } $new = BarcodeLib::padUPC($new); $model = new ProductsModel($dbc); $model->upc($new); if ($model->load()) { $this->addOnloadCommand("showBootstrapAlert('#alert-area', 'danger', 'New item {$new} already exists');\n"); return true; } $model->reset(); $model->upc(BarcodeLib::padUPC($this->id)); if (!$model->load()) { $this->addOnloadCommand("showBootstrapAlert('#alert-area', 'danger', 'Source item " . $model->upc() . " not found');\n"); return true; } $model->upc($new); $description = substr('CLONE ' . $model->description(), 0, 30); $model->description($description); $model->store_id(1); $model->save(); if ($dbc->tableExists('prodExtra')) { $extra = new ProdExtraModel($dbc); $extra->upc(BarcodeLib::padUPC($this->id)); $extra->load(); $extra->upc($new); $extra->save(); } if ($dbc->tableExists('productUser')) { $user = new ProductUserModel($dbc); $user->upc(BarcodeLib::padUPC($this->id)); $user->load(); $user->upc($new); $user->save(); } header('Location: ItemEditorPage.php?searchupc=' . $new); return false; }
public function post_start_number_handler() { global $FANNIE_OP_DB; $dbc = FannieDB::get($FANNIE_OP_DB); $dept_no = FormLib::get('department', 0); $desc = FormLib::get('description', 'NEW PLU'); if (empty($desc)) { $desc = 'NEW PLU'; } $dept = new DepartmentsModel($dbc); $dept->dept_no($dept_no); $dept->load(); $model = new ProductsModel($dbc); $model->normal_price(0); $model->pricemethod(0); $model->quantity(0); $model->groupprice(0); $model->special_price(0); $model->specialpricemethod(0); $model->specialquantity(0); $model->specialgroupprice(0); $model->advertised(0); $model->tareweight(0); $model->start_date(''); $model->end_date(''); $model->discounttype(0); $model->wicable(0); $model->inUse(1); $model->tax($dept->dept_tax()); $model->foodstamp($dept->dept_fs()); $model->discount($dept->dept_discount()); $model->department($dept_no); for ($i = 0; $i < $this->number; $i++) { $upc = BarcodeLib::padUPC($this->start + $i); $model->upc($upc); $model->store_id(1); $model->description($desc . ' ' . ($i + 1)); $model->save(); } header('Location: ItemEditorPage.php?searchupc=' . $this->start); return false; }
public function SaveFormData($upc) { $upc = BarcodeLib::padUPC($upc); $dbc = $this->db(); $model = new ProductsModel($dbc); $model->upc($upc); $model->store_id(1); $method = FormLib::get_form_value('vp_method', 0); $qty = FormLib::get_form_value('vp_qty', 0); $price = FormLib::get_form_value('vp_price', 0); $mixmatch = FormLib::get_form_value('vp_mm', 0); $model->pricemethod($method); $model->quantity($qty); $model->groupprice($price); $model->mixmatchcode($mixmatch); $r1 = $model->save(); if ($r1 === false) { return false; } else { return true; } }
public function logUpdate($type = 'UNKNOWN', $user = false) { if (!$user) { $user = FannieAuth::getUID(FannieAuth::checkLogin()); } $product = new ProductsModel($this->connection); $product->upc($this->upc()); $exists = $product->load(); if (!$exists) { return false; } $this->storeID($product->store_id()); $this->updateType($type); $this->description($product->description()); $this->price($product->normal_price()); $this->salePrice($product->special_price()); $this->cost($product->cost()); $this->dept($product->department()); $this->tax($product->tax()); $this->fs($product->foodstamp()); $this->scale($product->scale()); $this->modified($product->modified()); $this->forceQty($product->qttyEnforced()); $this->noDisc($product->discount()); $this->inUse($product->inUse()); $this->user($user); $likecode = 0; if ($this->connection->table_exists('upcLike')) { $upcQ = $this->connection->prepare('SELECT likeCode FROM upcLike WHERE upc=?'); $upcR = $this->connection->execute($upcQ, array($this->upc())); if ($this->connection->num_rows($upcR) > 0) { $upcW = $this->connection->fetch_row($upcR); $this->likeCode($upcW['likeCode']); } } $this->save(); return true; }
public function showEditForm($upc, $display_mode = 1, $expand_mode = 1) { $upc = BarcodeLib::padUPC($upc); $dbc = $this->db(); $prod = new ProductsModel($dbc); $prod->upc($upc); if (FannieConfig::config('STORE_MODE') == 'HQ') { $prod->store_id(FannieConfig::config('STORE_ID')); } $prod->load(); $ret = '<div id="FreshDealsFieldset" class="panel panel-default">'; $ret .= "<div class=\"panel-heading\">\n <a href=\"\" onclick=\"\$('#FreshDealsDiv').toggle();return false;\">\n Fresh Deals</a>\n </div>"; $ret .= '<div id="FreshDealsDiv" class="panel-body">'; $ret .= sprintf('<table class="table table-bordered"><tr> <td>%s</td> <td>%s</td> <td>%s</td> <td>$%.2f</td> <td>$%.2f</td> </tr></table>', $prod->brand(), $prod->description(), $prod->upc(), $prod->cost(), $prod->normal_price()); $ret .= '</div></div>'; return $ret; }
function ajax_response() { global $FANNIE_OP_DB; $dbc = FannieDB::get($FANNIE_OP_DB); switch (FormLib::get_form_value('ajax')) { case 'save': $upc = FormLib::get_form_value('upc'); $store_id = FormLib::get('store_id'); $upc = BarcodeLib::padUPC($upc); $values = array(); $model = new ProductsModel($dbc); $model->upc($upc); $model->store_id($store_id); $brand = FormLib::get('brand'); if ($brand !== '') { $model->brand($brand); } $desc = FormLib::get_form_value('desc'); if ($desc !== '') { $model->description($desc); } $dept = FormLib::get_form_value('dept'); if ($dept !== '') { $model->department($dept); } $price = rtrim(FormLib::get_form_value('price'), ' '); if ($price !== '') { $model->normal_price($price); } $cost = rtrim(FormLib::get_form_value('cost'), ' '); if ($cost !== '') { $model->cost($cost); } $tax = FormLib::get_form_value('tax'); if ($tax !== '') { $model->tax($tax); } $fsx = FormLib::get_form_value('fs'); if ($fsx !== '') { $model->foodstamp($fsx); } $disc = FormLib::get_form_value('disc'); if ($disc !== '') { $model->discount($disc); } $wgt = FormLib::get_form_value('wgt'); if ($wgt !== '') { $model->scale($wgt); } $loc = FormLib::get_form_value('local'); if ($loc !== '') { $model->local($loc); } $supplier = FormLib::get_form_value('supplier'); /** Normalize free-form supplier text Look up corresponding vendor ID */ $vendorID = ''; $vendors = new VendorsModel($dbc); $vendors->vendorName($supplier); foreach ($vendors->find() as $obj) { $vendorID = $obj->vendorID(); break; } if ($vendorID !== '') { $model->default_vendor_id($vendorID); } $model->save(); $chkP = $dbc->prepare('SELECT upc FROM prodExtra WHERE upc=?'); $chkR = $dbc->execute($chkP, array($upc)); if ($dbc->num_rows($chkR) > 0) { $extraP = $dbc->prepare_statement('UPDATE prodExtra SET manufacturer=?, distributor=? WHERE upc=?'); $dbc->exec_statement($extraP, array($brand, $supplier, $upc)); } else { $extraP = $dbc->prepare('INSERT INTO prodExtra (upc, variable_pricing, margin, manufacturer, distributor) VALUES (?, 0, 0, ?, ?)'); $dbc->execute($extraP, array($upc, $brand, $supplier)); } if ($vendorID !== '') { $item = new VendorItemsModel($dbc); $item->createIfMissing($upc, $vendorID); $item->updateCostByUPC($upc, $cost, $vendorID); } updateProductAllLanes($upc); break; case 'deleteCheck': $upc = FormLib::get_form_value('upc'); $upc = BarcodeLib::padUPC($upc); $encoded_desc = FormLib::get_form_value('desc'); $desc = base64_decode($encoded_desc); $fetchP = $dbc->prepare_statement("select normal_price,\n special_price,t.description,\n case when foodstamp = 1 then 'Yes' else 'No' end as fs,\n case when scale = 1 then 'Yes' else 'No' end as s\n from products as p left join taxrates as t\n on p.tax = t.id\n where upc=? and p.description=?"); $fetchR = $dbc->exec_statement($fetchP, array($upc, $desc)); $fetchW = $dbc->fetch_array($fetchR); $ret = "Delete item {$upc} - {$desc}?\n"; $ret .= "Normal price: " . rtrim($fetchW[0]) . "\n"; $ret .= "Sale price: " . rtrim($fetchW[1]) . "\n"; $ret .= "Tax: " . rtrim($fetchW[2]) . "\n"; $ret .= "Foodstamp: " . rtrim($fetchW[3]) . "\n"; $ret .= "Scale: " . rtrim($fetchW[4]) . "\n"; $json = array('alertBox' => $ret, 'upc' => ltrim($upc, '0'), 'enc_desc' => $encoded_desc); echo json_encode($json); break; case 'doDelete': $upc = FormLib::get_form_value('upc'); $upc = BarcodeLib::padUPC($upc); $desc = base64_decode(FormLib::get_form_value('desc')); $update = new ProdUpdateModel($dbc); $update->upc($upc); $update->logUpdate(ProdUpdateModel::UPDATE_DELETE); $model = new ProductsModel($dbc); $model->upc($upc); $model->delete(); $model = new ProductUserModel($dbc); $model->upc($upc); $model->delete(); $model = new ScaleItemsModel($dbc); $model->plu($upc); $model->delete(); $delP = $dbc->prepare_statement("delete from prodExtra where upc=?"); $delXR = $dbc->exec_statement($delP, array($upc)); $delP = $dbc->prepare_statement("DELETE FROM upcLike WHERE upc=?"); $delR = $dbc->exec_statement($delP, array($upc)); deleteProductAllLanes($upc); break; default: echo 'Unknown Action'; break; } }
function SaveFormData($upc) { $upc = BarcodeLib::padUPC($upc); $deposit = FormLib::get_form_value('deposit', 0); $inUse = FormLib::get_form_value('inUse', 0); $local = FormLib::get_form_value('local', 0); $idReq = FormLib::get_form_value('idReq', 0); $dbc = $this->db(); $pm = new ProductsModel($dbc); $pm->upc($upc); $pm->store_id(1); $pm->deposit($deposit); $pm->local($local); $pm->inUse($inUse); $pm->idEnforced($idReq); $r1 = $pm->save(); if ($r1 === false) { return false; } else { return true; } }
private function addToPos($upc, $vid, $price, $dept, $tags = -1) { global $FANNIE_OP_DB; $dbc = FannieDB::get($FANNIE_OP_DB); $p = $dbc->prepare_statement("SELECT i.*,v.vendorName FROM vendorItems AS i\n LEFT JOIN vendors AS v ON v.vendorID=i.vendorID\n WHERE i.vendorID=? AND upc=?"); $vinfo = $dbc->exec_statement($p, array($vid, $upc)); $vinfo = $dbc->fetch_row($vinfo); $p = $dbc->prepare_statement("SELECT * FROM departments WHERE dept_no=?"); $dinfo = $dbc->exec_statement($p, array($dept)); $dinfo = $dbc->fetch_row($dinfo); $model = new ProductsModel($dbc); $model->upc(BarcodeLib::padUPC($upc)); $model->description($vinfo['description']); $model->normal_price($price); $model->department($dept); $model->tax($dinfo['dept_tax']); $model->foodstamp($dinfo['dept_fs']); $model->cost($vinfo['cost']); $model->default_vendor_id($vid); $model->brand($vinfo['brand']); $model->store_id(1); $model->save(); $xInsQ = $dbc->prepare_statement("INSERT INTO prodExtra (upc,manufacturer,distributor,cost,margin,variable_pricing,location,\n case_quantity,case_cost,case_info) VALUES\n (?,?,?,?,0.00,0,'','',0.00,'')"); $args = array($upc, $vinfo['brand'], $vinfo['vendorName'], $vinfo['cost']); $dbc->exec_statement($xInsQ, $args); if ($tags !== -1) { $tag = new ShelftagsModel($dbc); $tag->id($tags); $tag->upc($upc); $info = $model->getTagData(); $tag->normal_price($info['normal_price']); $tag->description($info['description']); $tag->brand($info['brand']); $tag->vendor($info['vendor']); $tag->sku($info['sku']); $tag->size($info['size']); $tag->units($info['units']); $tag->pricePerUnit($info['pricePerUnit']); $tag->save(); } echo "Item added"; }
public function saveFormData($upc) { try { $flags = $this->form->flags; } catch (Exception $ex) { $flags = array(); } if (!is_array($flags)) { return false; } $numflag = 0; foreach ($flags as $f) { if ($f != (int) $f) { continue; } $numflag = $numflag | 1 << $f - 1; } $dbc = $this->connection; $model = new ProductsModel($dbc); $model->upc($upc); $model->store_id(1); $model->numflag($numflag); $saved = $model->save(); return $saved ? true : false; }
function process_file($linedata) { global $FANNIE_OP_DB; $dbc = FannieDB::get($FANNIE_OP_DB); $defaults_table = array(); $defQ = $dbc->prepare_statement("SELECT dept_no,dept_tax,dept_fs,dept_discount FROM departments"); $defR = $dbc->exec_statement($defQ); while ($defW = $dbc->fetch_row($defR)) { $defaults_table[$defW['dept_no']] = array('tax' => $defW['dept_tax'], 'fs' => $defW['dept_fs'], 'discount' => $defW['dept_discount']); } $upc_index = $this->get_column_index('upc'); $desc_index = $this->get_column_index('desc'); $price_index = $this->get_column_index('price'); $dept_index = $this->get_column_index('dept'); $ret = true; $linecount = 0; $checks = FormLib::get_form_value('checks') == 'yes' ? true : false; $skipExisting = FormLib::get('skipExisting', 0); $model = new ProductsModel($dbc); foreach ($linedata as $line) { // get info from file and member-type default settings // if applicable $upc = $line[$upc_index]; $desc = $line[$desc_index]; $price = $line[$price_index]; $price = str_replace('$', '', $price); $price = trim($price); $dept = $dept_index !== false ? $line[$dept_index] : 0; $tax = 0; $fs = 0; $discount = 1; if ($dept_index !== false) { if (isset($defaults_table[$dept]['tax'])) { $tax = $defaults_table[$dept]['tax']; } if (isset($defaults_table[$dept]['discount'])) { $discount = $defaults_table[$dept]['discount']; } if (isset($defaults_table[$dept]['fs'])) { $fs = $defaults_table[$dept]['fs']; } } // upc cleanup $upc = str_replace(" ", "", $upc); $upc = str_replace("-", "", $upc); if (!is_numeric($upc)) { continue; } // skip header(s) or blank rows if ($checks) { $upc = substr($upc, 0, strlen($upc) - 1); } $upc = BarcodeLib::padUPC($upc); if (strlen($desc) > 35) { $desc = substr($desc, 0, 35); } $model->reset(); $model->upc($upc); $model->store_id(1); if ($model->load() && $skipExisting) { continue; } $model->description($desc); $model->normal_price($price); $model->department($dept); $model->tax($tax); $model->foodstamp($fs); $model->discount($discount); // fully init new record $model->pricemethod(0); $model->special_price(0); $model->specialpricemethod(0); $model->specialquantity(0); $model->specialgroupprice(0); $model->advertised(0); $model->tareweight(0); $model->start_date('0000-00-00'); $model->end_date('0000-00-00'); $model->discounttype(0); $model->wicable(0); $model->inUse(1); $try = $model->save(); if ($try) { $this->stats['imported']++; } else { $this->stats['errors'][] = 'Error importing UPC ' . $upc; } if ($linecount++ % 100 == 0) { set_time_limit(30); } } return $ret; }
function post_save_handler() { global $FANNIE_OP_DB; $upcs = FormLib::get('upc', array()); if (!is_array($upcs) || empty($upcs)) { echo 'Error: invalid data'; return false; } $dept = FormLib::get('dept'); $tax = FormLib::get('tax'); $local = FormLib::get('local'); $brand = FormLib::get('brand'); $vendor = FormLib::get('vendor'); $dbc = FannieDB::get($FANNIE_OP_DB); $vlookup = new VendorsModel($dbc); for ($i = 0; $i < count($upcs); $i++) { $model = new ProductsModel($dbc); $upc = BarcodeLib::padUPC($upcs[$i]); $model->upc($upc); $model->store_id(1); if (isset($dept[$i])) { $model->department($dept[$i]); } if (isset($tax[$i])) { $model->tax($tax[$i]); } if (isset($local[$i])) { $model->local($local[$i]); } if (isset($brand[$i])) { $model->brand($brand[$i]); } if (isset($vendor[$i])) { $vlookup->reset(); $vlookup->vendorName($vendor[$i]); foreach ($vlookup->find('vendorID') as $obj) { $model->default_vendor_id($obj->vendorID()); break; } } if (in_array($upc, FormLib::get('fs', array()))) { $model->foodstamp(1); } else { $model->foodstamp(0); } if (in_array($upc, FormLib::get('disc', array()))) { $model->discount(1); } else { $model->discount(0); } if (in_array($upc, FormLib::get('scale', array()))) { $model->scale(1); } else { $model->scale(0); } $model->modified(date('Y-m-d H:i:s')); $try = $model->save(); if ($try) { $model->pushToLanes(); } else { $this->save_results[] = 'Error saving item ' . $upc; } if (isset($vendor[$i]) && $vendor[$i] != '' || isset($brand[$i]) && $brand[$i] != '') { $extra = new ProdExtraModel($dbc); $extra->upc($upc); if (isset($vendor[$i]) && $vendor[$i] != '') { $extra->distributor($vendor[$i]); } if (isset($brand[$i]) && $brand[$i] != '') { $extra->manufacturer($brand[$i]); } $extra->save(); } $this->upcs[] = $upc; } return true; }
public function run() { global $FANNIE_OP_DB; $dbc = FannieDB::get($FANNIE_OP_DB); $now = date('Y-m-d 00:00:00'); $sale_upcs = array(); // ensure likecode items are mixmatch-able if ($dbc->dbms_name() == 'mssql') { $dbc->query("UPDATE products\n SET mixmatchcode=convert(varchar,u.likecode+500)\n FROM \n products AS p\n INNER JOIN upcLike AS u\n ON p.upc=u.upc"); } else { $dbc->query("UPDATE products AS p\n INNER JOIN upcLike AS u ON p.upc=u.upc\n SET p.mixmatchcode=convert(u.likeCode+500,char)"); } $likeP = $dbc->prepare('SELECT u.upc FROM upcLike AS u INNER JOIN products AS p ON u.upc=p.upc WHERE likeCode=?'); $product = new ProductsModel($dbc); $b_def = $dbc->tableDefinition('batches'); // lookup current batches $query = 'SELECT l.upc, l.batchID, l.pricemethod, l.salePrice, l.groupSalePrice, l.quantity, b.startDate, b.endDate, b.discounttype ' . (isset($b_def['transLimit']) ? ',b.transLimit' : ',0 AS transLimit') . ' FROM batches AS b INNER JOIN batchList AS l ON b.batchID = l.batchID WHERE b.discounttype <> 0 AND b.startDate <= ? AND b.endDate >= ? ORDER BY l.upc, l.salePrice DESC'; $t_def = $dbc->tableDefinition('batchList'); if (!isset($t_def['groupSalePrice'])) { $query = str_replace('l.groupSalePrice', 'NULL AS groupSalePrice', $query); } /** In HQ mode, join on junction table to get UPC+storeID rows when applying sale pricing */ if ($this->config->get('STORE_MODE') === 'HQ') { $query = str_replace('WHERE', ' LEFT JOIN StoreBatchMap AS s ON b.batchID=s.batchID WHERE ', $query); $query = str_replace('SELECT', 'SELECT s.storeID,', $query); } $prep = $dbc->prepare($query); $result = $dbc->execute($prep, array($now, $now)); while ($row = $dbc->fetch_row($result)) { // all items affected by this bathcList record // could be more than one in the case of likecodes $item_upcs = array(); // use products column names for readability below $special_price = $row['salePrice']; $specialpricemethod = $row['pricemethod']; if ($row['groupSalePrice'] != null) { $specialgroupprice = $row['groupSalePrice']; } else { $specialgroupprice = abs($row['salePrice']); } $specialquantity = $row['quantity']; $special_limit = $row['transLimit']; $start_date = $row['startDate']; $end_date = $row['endDate']; $discounttype = $row['discounttype']; $batchID = $row['batchID']; // pricemethod 3 and 4 (AB pricing, typically) // has some overly complicated rules $mixmatch = false; if ($specialpricemethod == 3 || $specialpricemethod == 4) { if ($special_price >= 0) { $mixmatch = $row['batchID']; } else { $mixmatch = -1 * $row['batchID']; } } // unpack likecodes, if needed if (substr($row['upc'], 0, 2) == 'LC') { $likeCode = substr($row['upc'], 2); $likeR = $dbc->execute($likeP, array($likeCode)); while ($likeW = $dbc->fetch_row($likeR)) { $item_upcs[] = $likeW['upc']; if ($mixmatch !== false) { $mixmatch = $likeCode + 500; } } } else { $item_upcs[] = $row['upc']; } // check each item to see if it is on // sale with the correct parameters foreach ($item_upcs as $upc) { $product->reset(); $product->upc($upc); $this->cronMsg('Checking item ' . $upc, FannieLogger::INFO); /** Transistion mechanism. A batch that is set to apply to zero stores really should apply to zero stores. For now it fails over to using the local store's ID */ if ($this->config->get('STORE_MODE') === 'HQ') { $storeID = $row['storeID']; if ($storeID == null) { $storeID = $this->config->get('STORE_ID'); } $product->store_id($storeID); } if (!$product->load()) { $this->cronMsg("\tError: item does not exist in products", FannieLogger::NOTICE); continue; } // list of UPCs that should be on sale $sale_upcs[] = $upc; $changed = false; if ($product->special_price() != $special_price) { $changed = true; $product->special_price($special_price); } if ($product->specialpricemethod() != $specialpricemethod) { $changed = true; $product->specialpricemethod($specialpricemethod); } if ($product->specialgroupprice() != $specialgroupprice) { $changed = true; $product->specialgroupprice($specialgroupprice); } if ($product->specialquantity() != $specialquantity) { $changed = true; $product->specialquantity($specialquantity); } if ($product->special_limit() != $special_limit) { $changed = true; $product->special_limit($special_limit); } if ($product->start_date() != $start_date) { $changed = true; $product->start_date($start_date); } if ($product->end_date() != $end_date) { $changed = true; $product->end_date($end_date); } if ($product->discounttype() != $discounttype) { $changed = true; $product->discounttype($discounttype); } if ($mixmatch !== false && $product->mixmatchcode() != $mixmatch) { $changed = true; $product->mixmatchcode($mixmatch); } if ($product->batchID() != $batchID) { $changed = true; $product->batchID($batchID); } if ($changed) { $product->save(); $this->cronMsg("\tUpdated item", FannieLogger::INFO); } } // end loop on batchList record items } // end loop on batchList records // No sale items; need a filler value for // the query below if (count($sale_upcs) == 0) { $this->cronMsg('Notice: nothing is currently on sale', FannieLogger::WARNING); $sale_upcs[] = 'notValidUPC'; } // now look for anything on sale that should not be // and take those items off sale $upc_in = ''; foreach ($sale_upcs as $upc) { $upc_in .= '?,'; } $upc_in = substr($upc_in, 0, strlen($upc_in) - 1); $lookupQ = 'SELECT p.upc FROM products AS p WHERE upc NOT IN (' . $upc_in . ') AND ( p.discounttype <> 0 OR p.special_price <> 0 OR p.specialpricemethod <> 0 OR p.specialgroupprice <> 0 OR p.specialquantity <> 0 )'; $lookupP = $dbc->prepare($lookupQ); $lookupR = $dbc->execute($lookupP, $sale_upcs); while ($lookupW = $dbc->fetch_row($lookupR)) { $this->cronMsg('Taking ' . $lookupW['upc'] . ' off sale', FannieLogger::INFO); $product->reset(); if ($this->config->get('STORE_MODE') === 'HQ') { $product->store_id($this->config->get('STORE_ID')); } $product->upc($lookupW['upc']); $product->discounttype(0); $product->special_price(0); $product->specialgroupprice(0); $product->specialquantity(0); $product->start_date(''); $product->end_date(''); $product->batchID(0); $product->save(); } }
public function saveFormData($upc) { $db = $this->db(); $new_rule = FormLib::get('price-rule-id', 0); $old_rule = FormLib::get('current-price-rule-id', 0); if ($new_rule != $old_rule) { $prod = new ProductsModel($db); $prod->upc(BarcodeLib::padUPC($upc)); $prod->store_id(1); $rule = new PriceRulesModel($db); switch ($new_rule) { case 0: // no custom rule // no custom rule case 1: // generic variable pricing /** Update the product with the generic rule ID If it was previously set to a custom rule, that custom rule can be deleted */ $prod->price_rule_id($new_rule); if ($old_rule > 1) { $rule->priceRuleID($old_rule); $rule->delete(); } break; default: // custom rule /** If the product is already using a custom rule, just update that rule record. Otherwise create a new one. */ $rule->reviewDate(FormLib::get('rule-review-date')); $rule->details(FormLib::get('rule-details')); $rule->priceRuleTypeID(FormLib::get('price-rule-type')); if ($old_rule > 1) { $rule->priceRuleID($old_rule); $prod->price_rule_id($old_rule); // just in case } else { $new_rule_id = $rule->save(); $prod->price_rule_id($new_rule_id); } } $prod->save(); } return true; }
function SaveFormData($upc) { $FANNIE_PRODUCT_MODULES = FannieConfig::config('PRODUCT_MODULES', array()); $upc = BarcodeLib::padUPC($upc); $dbc = $this->db(); $model = new ProductsModel($dbc); $model->upc($upc); if (!$model->load()) { // fully init new record $model->special_price(0); $model->specialpricemethod(0); $model->specialquantity(0); $model->specialgroupprice(0); $model->advertised(0); $model->tareweight(0); $model->start_date('0000-00-00'); $model->end_date('0000-00-00'); $model->discounttype(0); $model->wicable(0); $model->scaleprice(0); $model->inUse(1); } $stores = FormLib::get('store_id', array()); for ($i = 0; $i < count($stores); $i++) { $model->store_id($stores[$i]); $taxes = FormLib::get('tax'); if (isset($taxes[$i])) { $model->tax($taxes[$i]); } $fs = FormLib::get('FS', array()); if (in_array($stores[$i], $fs)) { $model->foodstamp(1); } else { $model->foodstamp(0); } $scale = FormLib::get('Scale', array()); if (in_array($stores[$i], $scale)) { $model->scale(1); } else { $model->scale(0); } $qtyFrc = FormLib::get('QtyFrc', array()); if (in_array($stores[$i], $qtyFrc)) { $model->qttyEnforced(1); } else { $model->qttyEnforced(0); } $wic = FormLib::get('prod-wicable', array()); if (in_array($stores[$i], $wic)) { $model->wicable(1); } else { $model->wicable(0); } $discount_setting = FormLib::get('discount'); if (isset($discount_setting[$i])) { switch ($discount_setting[$i]) { case 0: $model->discount(0); $model->line_item_discountable(0); break; case 1: $model->discount(1); $model->line_item_discountable(1); break; case 2: $model->discount(1); $model->line_item_discountable(0); break; case 3: $model->discount(0); $model->line_item_discountable(1); break; } } $price = FormLib::get('price'); if (isset($price[$i])) { $model->normal_price($price[$i]); } $cost = FormLib::get('cost'); if (isset($cost[$i])) { $model->cost($cost[$i]); } $desc = FormLib::get('descript'); if (isset($desc[$i])) { $model->description(str_replace("'", '', $desc[$i])); } $brand = FormLib::get('manufacturer'); if (isset($brand[$i])) { $model->brand(str_replace("'", '', $brand[$i])); } $model->pricemethod(0); $model->groupprice(0.0); $model->quantity(0); $dept = FormLib::get('department'); if (isset($dept[$i])) { $model->department($dept[$i]); } $size = FormLib::get('size'); if (isset($size[$i])) { $model->size($size[$i]); } $model->modified(date('Y-m-d H:i:s')); $unit = FormLib::get('unitm'); if (isset($unit[$i])) { $model->unitofmeasure($unit[$i]); } $subdept = FormLib::get('subdept'); if (isset($subdept[$i])) { $model->subdept($subdept[$i]); } // lookup vendorID by name $vendorID = 0; $v_input = FormLib::get('distributor'); if (isset($v_input[$i])) { $vendor = new VendorsModel($dbc); $vendor->vendorName($v_input[$i]); foreach ($vendor->find('vendorID') as $obj) { $vendorID = $obj->vendorID(); break; } } $model->default_vendor_id($vendorID); $inUse = FormLib::get('prod-in-use', array()); if (in_array($stores[$i], $inUse)) { $model->inUse(1); } else { $model->inUse(0); } $idEnf = FormLib::get('id-enforced', array()); if (isset($idEnf[$i])) { $model->idEnforced($idEnf[$i]); } $local = FormLib::get('prod-local'); if (isset($local[$i])) { $model->local($local[$i]); } $deposit = FormLib::get('deposit-upc'); if (isset($deposit[$i])) { if ($deposit[$i] == '') { $deposit[$i] = 0; } $model->deposit($deposit[$i]); } /* products.formatted_name is intended to be maintained automatically. * Get all enabled plugins and standard modules of the base. * Run plugins first, then standard modules. */ $formatters = FannieAPI::ListModules('ProductNameFormatter'); $fmt_name = ""; $fn_params = array('index' => $i); foreach ($formatters as $formatter_name) { $formatter = new $formatter_name(); $fmt_name = $formatter->compose($fn_params); if (isset($formatter->this_mod_only) && $formatter->this_mod_only) { break; } } $model->formatted_name($fmt_name); $model->save(); } /** If a vendor is selected, intialize a vendorItems record */ if ($vendorID != 0) { $vitem = new VendorItemsModel($dbc); $vitem->vendorID($vendorID); $vitem->upc($upc); $sku = FormLib::get('vendorSKU'); if (empty($sku)) { $sku = $upc; } else { /** If a SKU is provided, update any old record that used the UPC as a placeholder SKU. */ $existsP = $dbc->prepare(' SELECT sku FROM vendorItems WHERE sku=? AND upc=? AND vendorID=?'); $existsR = $dbc->execute($existsP, array($sku, $upc, $vendorID)); if ($dbc->numRows($existsR) > 0 && $sku != $upc) { $delP = $dbc->prepare(' DELETE FROM vendorItems WHERE sku =? AND upc=? AND vendorID=?'); $dbc->execute($delP, array($upc, $upc, $vendorID)); } else { $fixSkuP = $dbc->prepare(' UPDATE vendorItems SET sku=? WHERE sku=? AND vendorID=?'); $dbc->execute($fixSkuP, array($sku, $upc, $vendorID)); } } $vitem->sku($sku); $vitem->size($model->size()); $vitem->description($model->description()); $vitem->brand($model->brand()); $vitem->units(FormLib::get('caseSize', 1)); $vitem->cost($model->cost()); $vitem->save(); } if ($dbc->table_exists('prodExtra')) { $extra = new ProdExtraModel($dbc); $extra->upc($upc); if (!$extra->load()) { $extra->variable_pricing(0); $extra->margin(0); $extra->case_quantity(''); $extra->case_cost(0.0); $extra->case_info(''); } $brand = FormLib::get('manufacturer'); if (isset($brand[0])) { $extra->manufacturer(str_replace("'", '', $brand[0])); } $dist = FormLib::get('distributor'); if (isset($dist[0])) { $extra->distributor(str_replace("'", '', $dist[0])); } $cost = FormLib::get('cost'); if (isset($cost[0])) { $extra->cost($cost[0]); } $extra->save(); } if (!isset($FANNIE_PRODUCT_MODULES['ProdUserModule'])) { if ($dbc->table_exists('productUser')) { $ldesc = FormLib::get_form_value('puser_description'); $model = new ProductUserModel($dbc); $model->upc($upc); $model->description($ldesc); $model->save(); } } }
$upQ = $sql->prepare("update prodExtra set variable_pricing=? where upc=?"); $upR = $sql->execute($upQ, array($val, $upc)); if ($val == 1) { $prod = new ProductsModel($sql); $prod->upc($upc); $prod->store_id(1); $prod->load(); // make sure another rule isn't overwritten with a generic one if ($prod->price_rule_id() == 0) { $prod->price_rule_id(1); } $prod->save(); } else { $prod = new ProductsModel($sql); $prod->upc($upc); $prod->store_id(1); $prod->load(); $ruleID = 0; // remove the rule but save its ID if ($prod->price_rule_id() != 0) { $ruleID = $prod->price_rule_id(); $prod->price_rule_id(0); } $prod->save(); // make sure no other item is using the same // rule before deleting it if ($ruleID > 1) { $prod->reset(); $prod->price_rule_id($ruleID); if (count($prod->find()) == 0) { // no products are using this rule
function SaveFormData($upc) { /* check if data was submitted */ if (FormLib::get('s_plu') === '') { return False; } $desc = FormLib::get('descript', ''); if (is_array($desc)) { $desc = array_pop($desc); } $longdesc = FormLib::get('s_longdesc', ''); if (trim($longdesc) !== '') { $desc = $longdesc; } $price = FormLib::get('price', 0); if (is_array($price)) { $price = array_pop($price); } $tare = FormLib::get('s_tare', 0); $shelf = FormLib::get('s_shelflife', 0); $bycount = FormLib::get('s_bycount', 0); $graphics = FormLib::get('s_graphics', 0); $type = FormLib::get('s_type', 'Random Weight'); $weight = $type == 'Random Weight' ? 0 : 1; $text = FormLib::get('s_text', ''); $align = FormLib::get('s_label', 'horizontal'); $netWeight = FormLib::get('s_netwt', 0); $label = \COREPOS\Fannie\API\item\ServiceScaleLib::attributesToLabel($align, $type == 'Fixed Weight' ? true : false, $graphics != 0 ? true : false); $dbc = $this->db(); // apostrophes might make a mess // double quotes definitely will // DGW quotes text fields w/o any escaping $desc = str_replace("'", "", $desc); $text = str_replace("'", "", $text); $desc = str_replace("\"", "", $desc); $text = str_replace("\"", "", $text); /** Safety check: A fixed-weight item sticked by the each flagged as scalable will interact with the register's quantity * upc functionality incorrectly */ if ($weight == 1 && $bycount == 1) { $p = new ProductsModel($dbc); $p->upc($upc); $p->store_id(1); if ($p->load()) { $p->Scale(0); $p->save(); } } $scaleItem = new ScaleItemsModel($dbc); $scaleItem->plu($upc); $action = 'ChangeOneItem'; if (!$scaleItem->load()) { // new record $action = "WriteOneItem"; } $scaleItem->price($price); $scaleItem->itemdesc($desc); $scaleItem->weight($type == 'Fixed Weight' ? 1 : 0); $scaleItem->bycount($bycount); $scaleItem->tare($tare); $scaleItem->shelflife($shelf); $scaleItem->text($text); $scaleItem->label($label); $scaleItem->graphics($graphics ? 121 : 0); $scaleItem->netWeight($netWeight); $scaleItem->save(); // extract scale PLU preg_match("/^002(\\d\\d\\d\\d)0/", $upc, $matches); $s_plu = $matches[1]; if ($s_plu == '0000') { preg_match("/^0020(\\d\\d\\d\\d)/", $upc, $matches); $s_plu = $matches[1]; } $item_info = array('RecordType' => $action, 'PLU' => $s_plu, 'Description' => $desc, 'Tare' => $tare, 'ShelfLife' => $shelf, 'Price' => $price, 'Label' => $label, 'ExpandedText' => $text, 'ByCount' => $bycount); if ($netWeight != 0) { $item_info['NetWeight'] = $netWeight; } if ($graphics) { $item_info['Graphics'] = 121; } // normalize type + bycount; they need to match if ($item_info['ByCount'] && $type == 'Random Weight') { $item_info['Type'] = 'By Count'; } else { if ($type == 'Fixed Weight') { $item_info['Type'] = 'Fixed Weight'; $item_info['ByCount'] = 1; } else { $item_info['Type'] = 'Random Weight'; $item_info['ByCount'] = 0; } } $scales = array(); $scaleIDs = FormLib::get('scaleID', array()); $model = new ServiceScalesModel($dbc); /** Send item to requested scales */ if (count($scaleIDs) > 0) { $chkMap = $dbc->prepare('SELECT upc FROM ServiceScaleItemMap WHERE serviceScaleID=? AND upc=?'); $addMap = $dbc->prepare('INSERT INTO ServiceScaleItemMap (serviceScaleID, upc) VALUES (?, ?)'); foreach ($scaleIDs as $scaleID) { $model->reset(); $model->serviceScaleID($scaleID); if (!$model->load()) { // scale doesn't exist continue; } $repr = array('host' => $model->host(), 'dept' => $model->scaleDeptName(), 'type' => $model->scaleType(), 'new' => false); $exists = $dbc->execute($chkMap, array($scaleID, $upc)); if ($dbc->num_rows($exists) == 0) { $repr['new'] = true; $dbc->execute($addMap, array($scaleID, $upc)); } $scales[] = $repr; } HobartDgwLib::writeItemsToScales($item_info, $scales); EpScaleLib::writeItemsToScales($item_info, $scales); } /** Delete item from scales if that option was unchecked */ $mapP = $dbc->prepare(' SELECT serviceScaleID FROM ServiceScaleItemMap WHERE upc=?'); $mapR = $dbc->execute($mapP, array($upc)); $delP = $dbc->prepare(' DELETE FROM ServiceScaleItemMap WHERE serviceScaleID=? AND upc=?'); if ($mapR && $dbc->numRows($mapR)) { $scales = array(); while ($mapW = $dbc->fetchRow($mapR)) { if (in_array($mapW['serviceScaleID'], $scaleIDs)) { // item sent to that scale continue; } $model->reset(); $model->serviceScaleID($mapW['serviceScaleID']); if (!$model->load()) { // scale doesn't exist continue; } $repr = array('host' => $model->host(), 'dept' => $model->scaleDeptName(), 'type' => $model->scaleType(), 'new' => false); $scales[] = $repr; $dbc->execute($delP, array($mapW['serviceScaleID'], $upc)); } if (count($scales) > 0) { HobartDgwLib::deleteItemsFromScales($item_info['PLU'], $scales); } } }
/** Do whatever the service is supposed to do. Should override this. @param $args array of data @return an array of data */ public function run($args = array()) { $ret = array(); if (!property_exists($args, 'upc')) { // missing required arguments $ret['error'] = array('code' => -32602, 'message' => 'Invalid parameters needs type'); return $ret; } if (!is_array($args->upc)) { $args->upc = array($args->upc); } $dbc = \FannieDB::get(\FannieConfig::config('OP_DB')); $storeID = \FannieConfig::get('STORE_ID'); /** In "fast" mode, look up the items and run UPDATE queries on each lane. This reduces overhead substantially but will overlook brand-new items since there's no check whether the item exists on the lane. If "fast" is not specified, each UPC record is copied to the lane exactly using models. This mode is preferrable unless performance becomes an issue. */ if (property_exists($args, 'fast')) { $upc_data = array(); $query = ' SELECT normal_price, pricemethod, quantity, groupprice, special_price, specialpricemethod, specialquantity, specialgroupprice, discounttype, mixmatchcode, department, tax, foodstamp, discount, qttyEnforced, idEnforced, inUse, upc FROM products WHERE store_id=? AND upc IN ('; $params = array($storeID); foreach ($args->upc as $upc) { $query .= '?,'; $params[] = \BarcodeLib::padUPC($upc); } $query = substr($query, 0, strlen($query) - 1); $prep = $dbc->prepare($query); $result = $dbc->execute($prep, $params); while ($w = $dbc->fetchRow($result)) { $upc_data[$w['upc']] = $w; } $updateQ = ' UPDATE products AS p SET p.normal_price = ?, p.pricemethod = ?, p.quantity = ?, p.groupprice = ?, p.special_price = ?, p.specialpricemethod = ?, p.specialquantity = ?, p.specialgroupprice = ?, p.discounttype = ?, p.mixmatchcode = ?, p.department = ?, p.tax = ?, p.foodstamp = ?, p.discount=?, p.qttyEnforced=?, p.idEnforced=?, p.inUse=? WHERE p.upc = ?'; $FANNIE_LANES = \FannieConfig::config('LANES'); for ($i = 0; $i < count($FANNIE_LANES); $i++) { $lane_sql = new \SQLManager($FANNIE_LANES[$i]['host'], $FANNIE_LANES[$i]['type'], $FANNIE_LANES[$i]['op'], $FANNIE_LANES[$i]['user'], $FANNIE_LANES[$i]['pw']); if (!isset($lane_sql->connections[$FANNIE_LANES[$i]['op']]) || $lane_sql->connections[$FANNIE_LANES[$i]['op']] === false) { // connect failed continue; } $updateP = $lane_sql->prepare($updateQ); foreach ($upc_data as $upc => $data) { $lane_args = array($data['normal_price'], $data['pricemethod'], $data['quantity'], $data['groupprice'], $data['special_price'], $data['specialpricemethod'], $data['specialquantity'], $data['specialgroupprice'], $data['discounttype'], $data['mixmatchcode'], $data['department'], $data['tax'], $data['foodstamp'], $data['discount'], $data['qttyEnforced'], $data['idEnforced'], $data['inUse'], $upc); $lane_sql->execute($updateP, $lane_args); } } } else { $product = new \ProductsModel($dbc); $ret['synced'] = array(); foreach ($args->upc as $upc) { $upc = \BarcodeLib::padUPC($upc); $product->upc($upc); $product->store_id($storeID); if ($product->load()) { $product->pushToLanes(); $ret['synced'][] = $upc; } } } return $ret; }
function SaveFormData($upc) { $upc = BarcodeLib::padUPC($upc); $brand = FormLib::get('lf_brand'); $desc = FormLib::get('lf_desc'); $origin = FormLib::get('origin', 0); $floorID = FormLib::get('floor-id', 0); $text = FormLib::get('lf_text'); $text = str_replace("\r", '', $text); $text = str_replace("\n", '<br />', $text); // strip non-ASCII (word copy/paste artifacts) $text = preg_replace("/[^-]/", "", $text); $signs = FormLib::get('sign-count', 1); if ($signs < 1) { $signs = 1; } $dbc = $this->db(); $loc = new ProdPhysicalLocationModel($dbc); $loc->upc($upc); $loc->floorSectionID($floorID); $loc->save(); $model = new ProductUserModel($dbc); $model->upc($upc); $model->brand($brand); $model->description($desc); $model->long_text($text); $model->signCount($signs); $multiOrigin = FormLib::get('otherOrigin', array()); $originMap = array(); if ($origin != 0) { $originMap[] = $origin; } foreach ($multiOrigin as $originID) { if ($originID != 0) { $originMap[] = $originID; } } $mapP = $dbc->prepare('DELETE FROM ProductOriginsMap WHERE upc=?'); $addP = $dbc->prepare('INSERT INTO ProductOriginsMap (originID, upc, active) VALUES (?, ?, 1)'); $lcP = $dbc->prepare('SELECT u.upc FROM upcLike AS u ' . DTrans::joinProducts('u', 'p', 'INNER') . ' WHERE u.likeCode IN ( SELECT l.likeCode FROM upcLike AS l WHERE l.upc = ? )'); $lcR = $dbc->execute($lcP, array($upc)); $items = array($upc); while ($w = $dbc->fetch_row($lcR)) { if ($w['upc'] == $upc) { continue; } $items[] = $w['upc']; } $prod = new ProductsModel($dbc); $stores = new StoresModel($dbc); foreach ($items as $item) { $prod->upc($item); $prod->store_id(1); $prod->current_origin_id($origin); $prod->save(); $dbc->execute($mapP, array($item)); foreach ($originMap as $originID) { $dbc->execute($addP, array($originID, $item)); } } return $model->save(); }
function SaveFormData($upc) { $lc = FormLib::get_form_value('likeCode'); $dbc = $this->db(); $delP = $dbc->prepare_statement('DELETE FROM upcLike WHERE upc=?'); $delR = $dbc->exec_statement($delP, array($upc)); if ($lc == -1) { return $delR === False ? False : True; } $insP = 'INSERT INTO upcLike (upc,likeCode) VALUES (?,?)'; $insR = $dbc->exec_statement($insP, array($upc, $lc)); if (FormLib::get_form_value('LikeCodeNoUpdate') == 'noupdate') { return $insR === False ? False : True; } /* get values for current item */ $valuesP = $dbc->prepare_statement('SELECT normal_price,pricemethod,groupprice,quantity, department,scale,tax,foodstamp,discount,qttyEnforced,local,wicable FROM products WHERE upc=?'); $valuesR = $dbc->exec_statement($valuesP, array($upc)); if ($dbc->num_rows($valuesR) == 0) { return False; } $values = $dbc->fetch_row($valuesR); /* apply current values to other other items in the like code */ $upcP = $dbc->prepare_statement('SELECT upc FROM upcLike WHERE likeCode=? AND upc<>?'); $upcR = $dbc->exec_statement($upcP, array($lc, $upc)); $isHQ = FannieConfig::config('STORE_MODE') == 'HQ' ? true : false; $stores = new StoresModel($dbc); $stores = array_map(array_filter($stores->find(), function ($obj) { return $obj->hasOwnItems(); }), function ($obj) { return $obj->storeID(); }); $model = new ProductsModel($dbc); $model->upc($upc); $model->mixmatchcode($lc + 500); if ($isHQ) { foreach ($stores as $store_id) { $model->store_id($store_id); $model->save(); } } else { $model->save(); } while ($upcW = $dbc->fetch_row($upcR)) { $model->reset(); $model->upc($upcW['upc']); $model->normal_price($values['normal_price']); $model->pricemethod($values['pricemethod']); $model->groupprice($values['groupprice']); $model->quantity($values['quantity']); $model->department($values['department']); $model->scale($values['scale']); $model->tax($values['tax']); $model->foodstamp($values['foodstamp']); $model->discount($values['discount']); $model->qttyEnforced($values['qttyEnforced']); $model->local($values['local']); $model->wicable($values['wicable']); $model->mixmatchcode($lc + 500); if ($isHQ) { foreach ($stores as $store_id) { $model->store_id($store_id); $model->save(); } } else { $model->save(); } updateProductAllLanes($upcW['upc']); } return true; }