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; }
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; }
$vendor->vendorName($distributor); foreach ($vendor->find('vendorID') as $obj) { $vendorID = $obj->vendorID(); break; } $stamp = date("Y-m-d H:i:s"); $model = new ProductsModel($sql); $model->upc($upc); $model->description($descript); $model->brand($manufacturer); $model->normal_price($price); $model->tax($tax); $model->scale($Scale); $model->foodstamp($FS); $model->department($dept); $model->inUse($inUse); $model->modified($stamp); $model->qttyEnforced($QtyFrc); $model->discount($NoDisc); $model->pricemethod($price_method); $model->groupprice($vol_price); $model->quantity($vol_qtty); $model->local($local); $model->default_vendor_id($vendorID); $model->save(); $checkP = $sql->prepare("SELECT upc FROM prodExtra WHERE upc=?"); $checkR = $sql->execute($checkP, array($upc)); if ($sql->num_rows($checkR) == 0) { $extraQ = $sql->prepare("insert into prodExtra values (?,?,?,0,0,0,'','',0,'')"); $extraR = $sql->execute($extraQ, array($upc, $distributor, $manufacturer)); } else {
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 run() { global $FANNIE_OP_DB, $FANNIE_TRANS_DB; $dbc = FannieDB::get($FANNIE_OP_DB); // look up item daily movement for last quarter $salesQ = 'SELECT ' . DTrans::sumQuantity('d') . ' AS qty, ' . $dbc->datediff($dbc->now(), 'MIN(tdate)') . ' AS diff, MAX(discounttype) AS onSale FROM ' . $FANNIE_TRANS_DB . $dbc->sep() . 'dlog_90_view AS d WHERE d.upc=? AND charflag <> \'SO\' AND trans_status <> \'R\' GROUP BY year(tdate), month(tdate), day(tdate) ORDER BY year(tdate), month(tdate), day(tdate) DESC'; $salesP = $dbc->prepare($salesQ); $prodP = $dbc->prepare('UPDATE products SET auto_par=? WHERE upc=?'); $product = new ProductsModel($dbc); $product->inUse(1); $prodR = $dbc->query(' SELECT upc FROM products WHERE inUse=1 '); $lambda = 0.25; // average daily sales for items at retail price // sale days are discarded from both quantity sold // and number of days while ($prodW = $dbc->fetchRow($prodR)) { $upc = $prodW['upc']; $salesR = $dbc->execute($salesP, array($upc)); if ($dbc->numRows($salesR) == 0) { $dbc->execute($prodP, array(0, $upc)); continue; } $max = 0; $days = array(); $last_nonsale_qty = 0.1; $nonsale_qty = 0.1; $nonsale_count = 0; while ($w = $dbc->fetchRow($salesR)) { $index = $w['diff']; if ($index > $max) { $max = $index; } $days[$index] = $w['qty']; if ($w['onSale']) { $days[$index] = $nonsale_count == 0 ? $nonsale_qty : $nonsale_qty / $nonsale_count; } else { $nonsale_qty += $w['qty']; $nonsale_count++; } } $sum = 0; $count = 0; for ($i = 1; $i <= $max; $i++) { if (isset($days[$i]) && $days[$i] == 'skip') { continue; } $sum += isset($days[$i]) ? $days[$i] : 0; $count++; } $avg = $count == 0 ? 0 : $sum / $count; $dbc->execute($prodP, array($avg, $upc)); } }
$model->tax($tax); $model->foodstamp($FS); $model->scale($Scale); $model->scaleprice(0); $model->mixmatchcode(0); $model->modified($stamp); $model->advertised(0); $model->tareweight(0); $model->discount($NoDisc); $model->discounttype(0); $model->unitofmeasure(0); $model->wicable(0); $model->qttyEnforced(0); $model->idEnforced(0); $model->cost(0.0); $model->inUse(1); $model->numflag(0); $model->subdept(0); $model->deposit(0.0); $model->local($local); $model->default_vendor_id($vendorID); $model->save(); $model->upc($upc); $model->pushToLanes(); $checkQ = $sql->prepare("select * from prodExtra where upc=?"); $checkR = $sql->execute($checkQ, array($upc)); if ($sql->num_rows($checkR) == 0) { $extraQ = $sql->prepare("insert into prodExtra values (?,?,?,0,0,0,'','',0,'')"); $extraR = $sql->execute($extraQ, array($upc, $distributor, $manufacturer)); } if (isset($likeCode) && $likeCode > 0) {
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(); } } }
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 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; } }