public function showEditForm($upc, $display_mode = 1, $expand_mode = 1) { $upc = BarcodeLib::padUPC($upc); $ret = '<div id="ExtraInfoFieldset" class="panel panel-default">'; $ret .= "<div class=\"panel-heading\">\n <a href=\"\" onclick=\"\$('#ExtraInfoFieldsetContent').toggle();return false;\">\n Extra Info\n </a></div>"; $css = $expand_mode == 1 ? '' : ' collapse'; $ret .= '<div id="ExtraInfoFieldsetContent" class="panel-body' . $css . '">'; $info = array('cost' => 0.0, 'deposit' => 0, 'local' => 0, 'inUse' => 1, 'modified' => 'Unknown', 'idEnforced' => 0); $dbc = $this->db(); $p = $dbc->prepare_statement('SELECT cost,deposit,local,inUse,modified,idEnforced FROM products WHERE upc=?'); $r = $dbc->exec_statement($p, array($upc)); if ($dbc->num_rows($r) > 0) { $info = $dbc->fetch_row($r); } $local_opts = array(0 => 'No'); $origin = new OriginsModel($dbc); $local_opts = array_merge($local_opts, $origin->getLocalOrigins()); if (count($local_opts) == 1) { $local_opts[1] = 'Yes'; // generic local if no origins defined } $localSelect = '<select name="local" id="local-origin-id" class="form-control" onchange="$(\'#prod-local\').val(this.value);">'; foreach ($local_opts as $id => $val) { $localSelect .= sprintf('<option value="%d" %s>%s</option>', $id, $id == $info['local'] ? 'selected' : '', $val); } $localSelect .= '</select>'; $ageSelect = '<select name="idReq" id="idReq" class="form-control" onchange="$(\'#id-enforced\').val(this.value);">'; $ages = array('n/a' => 0, 18 => 18, 21 => 21); foreach ($ages as $label => $age) { $ageSelect .= sprintf('<option %s value="%d">%s</option>', $age == $info['idEnforced'] ? 'selected' : '', $age, $label); } $ageSelect .= '</select>'; $ret .= "<table class=\"table table-bordered\" width='100%'><tr>"; $ret .= '<tr><th>Deposit' . \COREPOS\Fannie\API\lib\FannieHelp::ToolTip('PLU/UPC of linked deposit item') . '</th> <th>Age Req.</th> <th>Local</th> <th>In Use' . \COREPOS\Fannie\API\lib\FannieHelp::ToolTip('Uncheck to temporarily disable') . '</th></tr>'; $ret .= sprintf('<tr> <td align="center"><input type="text" class="form-control" value="%d" name="deposit" id="deposit" onchange="$(\'#deposit-upc\').val(this.value);" /></td> <td align="center">%s</td> <td align="center">%s</td> <td align="center"> <input type="checkbox" id="extra-in-use-checkbox" name="inUse" value="1" %s onchange="$(\'#in-use-checkbox\').prop(\'checked\', $(this).prop(\'checked\'));" /> </td></tr>', $info['deposit'], $ageSelect, $localSelect, $info['inUse'] == 1 ? 'checked' : ''); $ret .= '</table> </div> </div>'; return $ret; }
function post_u_view() { global $FANNIE_OP_DB, $FANNIE_URL; $ret = ''; $dbc = FannieDB::get($FANNIE_OP_DB); $taxes = array(0 => 'NoTax'); $taxerates = $dbc->query('SELECT id, description FROM taxrates'); while ($row = $dbc->fetch_row($taxerates)) { $taxes[$row['id']] = $row['description']; } $locales = array(0 => 'No'); $origin = new OriginsModel($dbc); $locales = array_merge($locales, $origin->getLocalOrigins()); $depts = array(); $deptlist = $dbc->query('SELECT dept_no, dept_name FROM departments ORDER BY dept_no'); while ($row = $dbc->fetch_row($deptlist)) { $depts[$row['dept_no']] = $row['dept_name']; } $ret .= '<form action="EditItemsFromSearch.php" method="post">'; $ret .= '<table class="table small">'; $ret .= '<tr> <th>UPC</th> <th>Description</th> <th>Brand</th> <th>Vendor</th> <th>Department</th> <th>Tax</th> <th>FS</th> <th>Scale</th> <th>%Disc</th> <th>Local</th> </tr>'; $ret .= '<tr><th colspan="2">Change All <button type="reset" class="btn btn-default">Reset</button></th>'; /** List known brands from vendorItems as a drop down selection rather than free text entry. prodExtra remains an imperfect solution but this can at least start normalizing that data */ $ret .= '<td><select class="form-control input-sm" onchange="updateAll(this.value, \'.brandField\');">'; $ret .= '<option value=""></option>'; $brands = $dbc->query(' SELECT brand FROM vendorItems WHERE brand IS NOT NULL AND brand <> \'\' GROUP BY brand UNION SELECT brand FROM products WHERE brand IS NOT NULL AND brand <> \'\' GROUP BY brand ORDER BY brand'); while ($row = $dbc->fetch_row($brands)) { $ret .= '<option>' . $row['brand'] . '</option>'; } $ret .= '</select></td>'; /** See brand above */ $ret .= '<td><select class="form-control input-sm" onchange="updateAll(this.value, \'.vendorField\');">'; $ret .= '<option value=""></option><option>DIRECT</option>'; $vendors = $dbc->query('SELECT vendorName FROM vendors GROUP BY vendorName ORDER BY vendorName'); while ($row = $dbc->fetch_row($vendors)) { $ret .= '<option>' . $row['vendorName'] . '</option>'; } $ret .= '</select></td>'; $ret .= '<td><select class="form-control input-sm" onchange="updateAll(this.value, \'.deptSelect\');">'; foreach ($depts as $num => $name) { $ret .= sprintf('<option value="%d">%d %s</option>', $num, $num, $name); } $ret .= '</select></td>'; $ret .= '<td><select class="form-control input-sm" onchange="updateAll(this.value, \'.taxSelect\');">'; foreach ($taxes as $num => $name) { $ret .= sprintf('<option value="%d">%s</option>', $num, $name); } $ret .= '</select></td>'; $ret .= '<td><input type="checkbox" onchange="toggleAll(this, \'.fsCheckBox\');" /></td>'; $ret .= '<td><input type="checkbox" onchange="toggleAll(this, \'.scaleCheckBox\');" /></td>'; $ret .= '<td><input type="checkbox" onchange="toggleAll(this, \'.discCheckBox\');" /></td>'; $ret .= '<td><select class="form-control input-sm" onchange="updateAll(this.value, \'.localSelect\');">'; foreach ($locales as $num => $name) { $ret .= sprintf('<option value="%d">%s</option>', $num, $name); } $ret .= '</select></td>'; $ret .= '</tr>'; list($in_sql, $args) = $dbc->safeInClause($this->upcs); $query = 'SELECT p.upc, p.description, p.department, d.dept_name, p.tax, p.foodstamp, p.discount, p.scale, p.local, x.manufacturer, x.distributor FROM products AS p LEFT JOIN departments AS d ON p.department=d.dept_no LEFT JOIN prodExtra AS x ON p.upc=x.upc WHERE p.upc IN (' . $in_sql . ') ORDER BY p.upc'; $prep = $dbc->prepare($query); $result = $dbc->execute($prep, $args); while ($row = $dbc->fetch_row($result)) { $deptOpts = ''; foreach ($depts as $num => $name) { $deptOpts .= sprintf('<option %s value="%d">%d %s</option>', $num == $row['department'] ? 'selected' : '', $num, $num, $name); } $taxOpts = ''; foreach ($taxes as $num => $name) { $taxOpts .= sprintf('<option %s value="%d">%s</option>', $num == $row['tax'] ? 'selected' : '', $num, $name); } $localOpts = ''; foreach ($locales as $num => $name) { $localOpts .= sprintf('<option %s value="%d">%s</option>', $num == $row['local'] ? 'selected' : '', $num, $name); } $ret .= sprintf('<tr> <td> <a href="ItemEditorPage.php?searchupc=%s" target="_edit%s">%s</a> <input type="hidden" class="upcInput" name="upc[]" value="%s" /> </td> <td>%s</td> <td><input type="text" name="brand[]" class="brandField form-control input-sm" value="%s" /></td> <td><input type="text" name="vendor[]" class="vendorField form-control input-sm" value="%s" /></td> <td><select name="dept[]" class="deptSelect form-control input-sm">%s</select></td> <td><select name="tax[]" class="taxSelect form-control input-sm">%s</select></td> <td><input type="checkbox" name="fs[]" class="fsCheckBox" value="%s" %s /></td> <td><input type="checkbox" name="scale[]" class="scaleCheckBox" value="%s" %s /></td> <td><input type="checkbox" name="disc[]" class="discCheckBox" value="%s" %s /></td> <td><select name="local[]" class="localSelect form-control input-sm">%s</select></td> </tr>', $row['upc'], $row['upc'], $row['upc'], $row['upc'], $row['description'], $row['manufacturer'], $row['distributor'], $deptOpts, $taxOpts, $row['upc'], $row['foodstamp'] == 1 ? 'checked' : '', $row['upc'], $row['scale'] == 1 ? 'checked' : '', $row['upc'], $row['discount'] == 1 ? 'checked' : '', $localOpts); } $ret .= '</table>'; $ret .= '<p>'; $ret .= '<button type="submit" name="save" class="btn btn-default" value="1">Save Changes</button>'; $ret .= '</form>'; return $ret; }
function javascript_content() { global $FANNIE_URL, $FANNIE_OP_DB; if ($this->excel) { return ''; } $dbc = FannieDB::get($FANNIE_OP_DB); $depts = array(); $prep = $dbc->prepare_statement('SELECT dept_no,dept_name FROM departments ORDER BY dept_no'); $result = $dbc->exec_statement($prep); while ($row = $dbc->fetch_row($result)) { $depts[$row[0]] = $row[1]; } $taxes = array('-' => array(0, 'NoTax')); $prep = $dbc->prepare_statement('SELECT id, description FROM taxrates ORDER BY id'); $result = $dbc->exec_statement($prep); while ($row = $dbc->fetch_row($result)) { if ($row['id'] == 1) { $taxes['X'] = array(1, 'Regular'); } else { $taxes[strtoupper(substr($row[1], 0, 1))] = array($row[0], $row[1]); } } $local_opts = array('-' => array(0, 'No')); $origins = new OriginsModel($dbc); $local_origins = $origins->getLocalOrigins(); foreach ($local_origins as $originID => $shortName) { $local_opts[substr($shortName, 0, 1)] = array($originID, $shortName); } if (count($local_opts) == 1) { $local_opts['X'] = array(1, 'Yes'); } // generic local if no origins defined $vendors = array('', 'DIRECT'); $vModel = new VendorsModel($dbc); foreach ($vModel->find('vendorName') as $v) { $vendors[] = $v->vendorName(); } ob_start(); ?> var deptObj = <?php echo json_encode($depts); ?> ; var taxObj = <?php echo json_encode($taxes); ?> ; var localObj = <?php echo json_encode($local_opts); ?> ; var vendorObj = <?php echo json_encode($vendors); ?> ; function edit(elem){ var brand = elem.find('.td_brand:first').html(); var content = "<input type=text class=\"in_brand form-control input-sm\" size=8 value=\""+brand+"\" />"; elem.find('.td_brand:first').html(content); var desc = elem.find('.td_desc:first').html(); var content = "<input type=text class=\"in_desc form-control input-sm\" size=10 value=\""+desc+"\" />"; elem.find('.td_desc:first').html(content); var dept = elem.find('.td_dept:first').text(); var content = '<select class=\"in_dept form-control input-sm\"><optgroup style="font-size: 90%;">'; for(dept_no in deptObj){ content += "<option value=\""+dept_no+"\" "+((dept==deptObj[dept_no])?'selected':'')+">"; content += deptObj[dept_no]+"</option>"; } content += '</optgroup></select>'; elem.find('.td_dept:first').html(content); var supplier = elem.find('.td_supplier:first').text(); var content = '<select class=\"in_supplier form-control input-sm\"><optgroup style="font-size: 90%;">'; for(var i in vendorObj){ content += "<option "+((supplier==vendorObj[i])?'selected':'')+">"; content += vendorObj[i]+"</option>"; } content += '</optgroup></select>'; elem.find('.td_supplier:first').html(content); var cost = elem.find('.td_cost:first').html(); var content = "<input type=text class=\"in_cost form-control input-sm\" size=4 value=\""+cost+"\" />"; elem.find('.td_cost:first').html(content); var price = elem.find('.td_price:first').html(); var content = "<input type=text class=\"in_price form-control input-sm\" size=4 value=\""+price+"\" />"; elem.find('.td_price:first').html(content); var tax = elem.find('.td_tax:first').html(); var content = '<select class=\"in_tax form-control input-sm\">'; for (ch in taxObj){ var sel = (tax == ch) ? 'selected' : ''; content += "<option value=\""+ch+":"+taxObj[ch][0]+"\" "+sel+">"; content += taxObj[ch][1]+"</option>"; } elem.find('.td_tax:first').html(content); var fs = elem.find('.td_fs:first').html(); var content = "<input type=checkbox class=in_fs "+((fs=='X')?'checked':'')+" />"; elem.find('.td_fs:first').html(content); var disc = elem.find('.td_disc:first').html(); var content = "<input type=checkbox class=in_disc "+((disc=='X')?'checked':'')+" />"; elem.find('.td_disc:first').html(content); var wgt = elem.find('.td_wgt:first').html(); var content = "<input type=checkbox class=in_wgt "+((wgt=='X')?'checked':'')+" />"; elem.find('.td_wgt:first').html(content); var local = elem.find('.td_local:first').html(); //var content = "<input type=checkbox class=in_local "+((local=='X')?'checked':'')+" />"; var content = '<select class=\"in_local form-control input-sm\">'; for (ch in localObj){ var sel = (local == ch) ? 'selected' : ''; content += "<option value=\""+ch+":"+localObj[ch][0]+"\" "+sel+">"; content += localObj[ch][1]+"</option>"; } elem.find('.td_local:first').html(content); elem.find('.td_cmd:first .edit-link').hide(); elem.find('.td_cmd:first .save-link').show(); elem.find('input:text').keydown(function(event) { if (event.which == 13) { save(elem); } }); elem.find('.clickable input:text').click(function(event){ // do nothing event.stopPropagation(); }); elem.find('.clickable select').click(function(event){ // do nothing event.stopPropagation(); }); } function save(elem){ var upc = elem.find('.hidden_upc:first').val(); var store_id = elem.find('.hidden_store_id:first').val(); var brand = elem.find('.in_brand:first').val(); elem.find('.td_brand:first').html(brand); var desc = elem.find('.in_desc:first').val(); elem.find('.td_desc:first').html(desc); var dept = elem.find('.in_dept:first').val(); elem.find('.td_dept:first').html(deptObj[dept]); var supplier = elem.find('.in_supplier:first').val(); elem.find('.td_supplier:first').html(supplier); mathField(elem.find('.in_cost:first').get(0)); var cost = elem.find('.in_cost:first').val(); elem.find('.td_cost:first').html(cost); var price = elem.find('.in_price:first').val(); elem.find('.td_price:first').html(price); var tax = elem.find('.in_tax:first').val().split(':'); elem.find('.td_tax:first').html(tax[0]); var fs = elem.find('.in_fs:first').is(':checked') ? 1 : 0; elem.find('.td_fs:first').html((fs==1)?'X':'-'); var disc = elem.find('.in_disc:first').is(':checked') ? 1 : 0; elem.find('.td_disc:first').html((disc==1)?'X':'-'); var wgt = elem.find('.in_wgt:first').is(':checked') ? 1 : 0; elem.find('.td_wgt:first').html((wgt==1)?'X':'-'); var local = elem.find('.in_local:first').val().split(':'); elem.find('.td_local:first').html(local[0]); elem.find('.td_cmd:first .edit-link').show(); elem.find('.td_cmd:first .save-link').hide(); var dstr = 'ajax=save&upc='+upc+'&desc='+desc+'&dept='+dept+'&price='+price+'&cost='+cost; dstr += '&tax='+tax[1]+'&fs='+fs+'&disc='+disc+'&wgt='+wgt+'&supplier='+supplier+'&local='+local[1]; dstr += '&brand='+encodeURIComponent(brand); dstr += '&store_id='+store_id; $.ajax({ url: 'ProductListPage.php', data: dstr, cache: false, type: 'post', success: function(data){ } }); } function deleteCheck(upc,desc){ $.ajax({ url: 'ProductListPage.php', data: 'ajax=deleteCheck&upc='+upc+'&desc='+desc, dataType: 'json', cache: false, type: 'post', success: function(data){ if (data.alertBox && data.upc && data.enc_desc){ if (confirm(data.alertBox)){ $.ajax({ url: 'ProductListPage.php', data: 'ajax=doDelete&upc='+upc+'&desc='+data.enc_desc, cache: false, type: 'post', success: function(data){ $('#' + upc).remove(); } }); } } else alert('Data error: cannot delete'); } }); } <?php if ($this->canEditItems) { ?> $(document).ready(function(){ $('tr').each(function(){ if ($(this).find('.hidden_upc').length != 0) { var upc = $(this).find('.hidden_upc').val(); $(this).find('.clickable').click(function() { if ($(this).find(':input').length == 0) { edit($(this).closest('tr')); $(this).find(':input').select(); } }); } }); }); <?php } return ob_get_clean(); }
protected function get_view() { global $FANNIE_OP_DB, $FANNIE_URL; $dbc = FannieDB::get($FANNIE_OP_DB); $this->addScript('search.js'); $ret = '<div class="col-sm-10">'; $ret .= '<form method="post" id="searchform" onsubmit="getResults(); return false;" onreset="formReset();">'; $ret .= '<table class="table table-bordered">'; $ret .= '<tr>'; $ret .= '<td class="text-right"> <label class="small control-label"> <a href="" class="btn btn-default btn-xs" onclick="$(\'.upc-in\').toggle(); return false;">+</a> UPC </label> </td> <td> <textarea class="upc-in form-control input-sm collapse" name="upcs"></textarea> <input type="text" name="upc" class="upc-in form-control input-sm" placeholder="UPC or PLU" /> </td>'; $ret .= '<td class="text-right"> <label class="control-label small">Descript.</label> </td> <td> <input type="text" name="description" class="form-control input-sm" placeholder="Item Description" /> </td>'; $ret .= '<td class="text-right"> <label class="control-label small">Brand</label> </td> <td> <input type="text" name="brand" class="form-control input-sm" placeholder="Brand Name" id="brand-field" /> </td>'; $ret .= '</tr><tr>'; $ret .= '<td class="text-right"> <label class="control-label small">Super Dept</label> </td> <td> <select name="superID" class="form-control input-sm" onchange="chainSuper(this.value);" > <option value="">Select Super...</option>'; $supers = $dbc->query('SELECT superID, super_name FROM superDeptNames order by superID'); while ($row = $dbc->fetch_row($supers)) { $ret .= sprintf('<option value="%d">%s</option>', $row['superID'], $row['super_name']); } $ret .= '</select></td>'; $ret .= '<td class="text-right"> <label class="control-label small">Dept Start</label> </td> <td> <select name="deptStart" id="dept-start" class="form-control input-sm"> <option value="">Select Start...</option>'; $supers = $dbc->query('SELECT dept_no, dept_name FROM departments order by dept_no'); while ($row = $dbc->fetch_row($supers)) { $ret .= sprintf('<option value="%d">%d %s</option>', $row['dept_no'], $row['dept_no'], $row['dept_name']); } $ret .= '</select></td>'; $ret .= '<td class="text-right"> <label class="control-label small">Dept End</label> </td> <td> <select name="deptEnd" id="dept-end" class="form-control input-sm"> <option value="">Select End...</option>'; $supers = $dbc->query('SELECT dept_no, dept_name FROM departments order by dept_no'); while ($row = $dbc->fetch_row($supers)) { $ret .= sprintf('<option value="%d">%d %s</option>', $row['dept_no'], $row['dept_no'], $row['dept_name']); } $ret .= '</select></td>'; $ret .= '</tr><tr>'; // end row $ret .= '<td> <select class="form-control input-sm" name="modOp"> <option>Modified On</option> <option>Modified Before</option> <option>Modified After</option> </select> </td> <td> <input type="text" name="modDate" id="modDate" class="form-control input-sm date-field" placeholder="Modified date" /> </td>'; $ret .= '<td class="text-right"> <label class="control-label small">Movement</label> </td> <td> <select name="soldOp" class="form-control input-sm"><option value="">n/a</option><option value="7">Last 7 days</option> <option value="30">Last 30 days</option><option value="90">Last 90 days</option></select> </td>'; $ret .= '<td class="text-right"> <label class="control-label small">Vendor</label> </td> <td> <select name="vendor" class="form-control input-sm" onchange="if(this.value===\'\' || this.value===\'0\') $(\'#vendorSale\').attr(\'disabled\',\'disabled\'); else $(\'#vendorSale\').removeAttr(\'disabled\');" > <option value="">Any</option> <option value="0">Not Assigned</option>'; $vendors = $dbc->query('SELECT vendorID, vendorName FROM vendors ORDER BY vendorName'); while ($row = $dbc->fetch_row($vendors)) { $ret .= sprintf('<option value="%d">%s</option>', $row['vendorID'], $row['vendorName']); } $ret .= '</select></td>'; $ret .= '</tr><tr>'; // end row $ret .= ' <td class="text-right"> <label class="control-label small">Price</label> </td> <td class="form-inline"> <select name="price_op" class="form-control input-sm"> <option>=</option> <option><</option> <option>></option> </select> <input type="text" class="form-control input-sm price-field" name="price" placeholder="$0.00" /> </td> <td class="text-right"> <label class="control-label small">Cost</label> </td> <td class="form-inline"> <select name="cost_op" class="form-control input-sm"> <option>=</option> <option><</option> <option>></option> </select> <input type="text" class="form-control input-sm price-field" name="cost" placeholder="$0.00" /> </td> <td class="form-inline" colspan="2"> <label class="control-label small">Pricing Rule</label> <select name="price_rule" class="form-control input-sm"> <option value="">Any</option> <option value="0">Standard</option> <option value="1">Variable</option> </select> </td> </td>'; $ret .= '</tr><tr>'; // end row $ret .= '<td class="text-right"> <label class="control-label small">Origin</label> </td>'; $ret .= '<td> <select name="originID" class="form-control input-sm"><option value="0">Any Origin</option>'; $origins = $dbc->query('SELECT originID, shortName FROM origins WHERE local=0 ORDER BY shortName'); while ($row = $dbc->fetch_row($origins)) { $ret .= sprintf('<option value="%d">%s</option>', $row['originID'], $row['shortName']); } $ret .= '</select></td>'; $ret .= '<td class="text-right"> <label class="control-label small">Likecode</label> </td>'; $ret .= '<td> <select name="likeCode" class="form-control input-sm"><option value="">Choose Like Code</option> <option value="ANY">In Any Likecode</option> <option value="NONE">Not in a Likecode</option>'; $lcs = $dbc->query('SELECT likeCode, likeCodeDesc FROM likeCodes ORDER BY likeCode'); while ($row = $dbc->fetch_row($lcs)) { $ret .= sprintf('<option value="%d">%d %s</option>', $row['likeCode'], $row['likeCode'], $row['likeCodeDesc']); } $ret .= '</select></td>'; $ret .= '<td colspan="2"> <label class="small" for="vendorSale"> On Vendor Sale <input type="checkbox" id="vendorSale" name="vendorSale" class="checkbox-inline" disabled /> </label>'; $ret .= ' | <label class="small" for="in_use"> InUse <input type="checkbox" name="in_use" id="in_use" value="1" checked class="checkbox-inline" /> </label> </td>'; $ret .= '</tr><tr>'; $ret .= '<td colspan="2" class="form-inline"> <div class="form-group"> <label class="control-label small">Tax</label> <select name="tax" class="form-control input-sm"><option value="">Any</option><option value="0">NoTax</option>'; $taxes = $dbc->query('SELECT id, description FROM taxrates'); while ($row = $dbc->fetch_row($taxes)) { $ret .= sprintf('<option value="%d">%s</option>', $row['id'], $row['description']); } $ret .= '</select></div>'; $ret .= ' <div class="form-group"> <label class="control-label small">FS</label> <select name="fs" class="form-control input-sm"> <option value="">Any</option><option value="1">Yes</option><option value="0">No</option></select> </div> </td>'; $ret .= '<td colspan="2" class="form-inline"> <div class="form-group"> <label class="control-label small">Local</label> <select name="local" class="form-control input-sm"><option value="">Any</option><option value="0">No</option>'; $origins = new OriginsModel($dbc); foreach ($origins->getLocalOrigins() as $originID => $shortName) { $ret .= sprintf('<option value="%d">%s</option>', $originID, $shortName); } $ret .= '</select></div> '; $ret .= ' <div class="form-group"> <label class="control-label small">%Disc</label> <select name="discountable" class="form-control input-sm"> <option value="">Any</option><option value="1">Yes</option><option value="0">No</option></select> </div> <label class="small" for="serviceScale"> Service Scale <input type="checkbox" id="serviceScale" name="serviceScale" class="checkbox-inline" /> </label> </td>'; $ret .= '<td colspan="2" class="form-inline"> <div class="form-group"> <label class="control-label small">Location</label> <select name="location" class="form-control input-sm"> <option value="">Any</option><option value="1">Yes</option><option value="0">No</option> </select> </div>'; $ret .= ' <div class="form-group"> <label class="control-label small">Sign Info</label> <select name="signinfo" class="form-control input-sm"> <option value="">Any</option><option value="1">Yes</option><option value="0">No</option> </select> </div>'; $ret .= '</td>'; // end row $ret .= '</tr><tr>'; $ret .= '<td colspan="6" class="form-inline">'; $ret .= ' <label class="control-label small">In Sale Batch</label> <select name="onsale" class="form-control input-sm" onchange="if(this.value===\'\') $(\'.saleField\').attr(\'disabled\',\'disabled\'); else $(\'.saleField\').removeAttr(\'disabled\');" > <option value="">Any</option>'; $ret .= '<option value="1">Yes</option><option value="0">No</option>'; $ret .= '</select>'; $ret .= ' <label class="control-label small">Sale Type</label> <select disabled class="saleField form-control input-sm" name="saletype"> <option value="">Any Sale Type</option>'; $vendors = $dbc->query('SELECT batchTypeID, typeDesc FROM batchType WHERE discType <> 0'); while ($row = $dbc->fetch_row($vendors)) { $ret .= sprintf('<option value="%d">%s</option>', $row['batchTypeID'], $row['typeDesc']); } $ret .= '</select>'; $ret .= ' <label class="small"> All Sales <input type="checkbox" disabled class="saleField checkbox-inline" name="sale_all" id="sale_all" value="1" /> </label> | '; $ret .= '<label class="small"> Past Sales <input type="checkbox" disabled class="saleField checkbox-inline" name="sale_past" id="sale_past" value="1" /> </label> | '; $ret .= '<label class="small"> Current Sales <input type="checkbox" disabled class="saleField checkbox-inline" name="sale_current" id="sale_current" value="1" /> </label> | '; $ret .= '<label class="small"> Upcoming Sales <input type="checkbox" disabled class="saleField checkbox-inline" name="sale_upcoming" id="sale_upcoming" value="1" /> </label>'; $ret .= '</td>'; $ret .= '</tr></table>'; $ret .= '<button type="submit" class="btn btn-default btn-core">Find Items</button>'; $ret .= '<button type="reset" class="btn btn-default btn-reset">Clear Settings</button>'; $ret .= ' '; $ret .= '<span id="selection-counter"></span>'; $ret .= '</form>'; $ret .= '<hr />'; $ret .= ' <div class="progress collapse"> <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"> <span class="sr-only">Searching</span> </div> </div>'; $ret .= '<div id="resultArea"></div>'; $ret .= '</div>'; // end col-sm-10 $ret .= '<div class="col-sm-2">'; $ret .= '<div class="panel panel-default"> <div class="panel-heading">Selected Items</div> <div class="panel-body">'; $ret .= '<p><button type="submit" class="btn btn-default btn-xs" onclick="goToBatch();">Price or Sale Batch</button></p>'; $ret .= '<p><button type="submit" class="btn btn-default btn-xs" onclick="goToEdit();">Group Edit Items</button></p>'; $ret .= '<p><button type="submit" class="btn btn-default btn-xs" onclick="goToList();">Product List Tool</button></p>'; $ret .= '<p><button class="btn btn-default btn-xs" type="submit" onclick="goToSigns();">Tags/Signs</button></p>'; $ret .= '<p><button class="btn btn-default btn-xs" type="submit" onclick="goToMargins();">Margins</button></p>'; $ret .= '<p><button class="btn btn-default btn-xs" type="submit" onclick="goToSync();">Scale Sync</button></p>'; $ret .= '</div>'; $ret .= '</div>'; $ret .= '<div class="panel panel-default"> <div class="panel-heading">Report on Items</div> <div class="panel-body">'; $ret .= '<select id="reportURL" class="form-control input-sm">'; $ret .= sprintf('<option value="%sreports/DepartmentMovement/SmartMovementReport.php?date1=%s&date2=%s&lookup-type=u"> Movement</option>', $FANNIE_URL, date('Y-m-d'), date('Y-m-d')); $ret .= sprintf('<option value="%sreports/from-search/PercentageOfSales/PercentageOfSalesReport.php"> %% of Sales</option>', $FANNIE_URL); $ret .= '</select> '; $ret .= '<p><button class="btn btn-default btn-xs" type="submit" onclick="goToReport();">Get Report</button></p>'; $ret .= '</div>'; $ret .= '</div>'; $ret .= '<form method="post" id="actionForm" target="__advs_act"></form>'; $ret .= '</div>'; $this->add_script('autocomplete.js'); $this->add_onload_command("bindAutoComplete('#brand-field', '../ws/', 'brand');\n"); $this->addScript('../src/javascript/tablesorter/jquery.tablesorter.js'); return $ret; }
public function showEditForm($upc, $display_mode = 1, $expand_mode = 1) { $FANNIE_PRODUCT_MODULES = FannieConfig::config('PRODUCT_MODULES', array()); $upc = BarcodeLib::padUPC($upc); $trimmed = ltrim($upc, '0'); $barcode_type = ''; if (strlen($trimmed) == '12') { // probably EAN-13 w/o check digi $barcode_type = 'EAN'; } elseif (strlen($trimmed) == 11 && $trimmed[0] == '2') { // variable price UPC $barcode_type = 'Scale'; } elseif (strlen($trimmed) <= 11 && strlen($trimmed) >= 6) { // probably UPC-A w/o check digit $barcode_type = 'UPC'; } else { $barcode_type = 'PLU'; } $ret = '<div id="BaseItemFieldset" class="panel panel-default">'; $dbc = $this->db(); $q = ' SELECT p.description, p.pricemethod, p.normal_price, p.cost, CASE WHEN p.size IS NULL OR p.size=\'\' OR p.size=\'0\' AND v.size IS NOT NULL THEN v.size ELSE p.size END AS size, p.unitofmeasure, p.modified, p.last_sold, p.special_price, p.end_date, p.subdept, p.department, p.tax, p.foodstamp, p.scale, p.qttyEnforced, p.discount, p.line_item_discountable, p.brand AS manufacturer, x.distributor, u.description as ldesc, p.default_vendor_id, v.units AS caseSize, v.sku, p.inUse, p.idEnforced, p.local, p.deposit, p.discounttype, p.wicable, p.store_id FROM products AS p LEFT JOIN prodExtra AS x ON p.upc=x.upc LEFT JOIN productUser AS u ON p.upc=u.upc LEFT JOIN vendorItems AS v ON p.upc=v.upc AND p.default_vendor_id = v.vendorID WHERE p.upc=?'; $p_def = $dbc->tableDefinition('products'); if (!isset($p_def['last_sold'])) { $q = str_replace('p.last_sold', 'NULL as last_sold', $q); } $p = $dbc->prepare($q); $r = $dbc->exec_statement($p, array($upc)); $store_model = new StoresModel($dbc); $store_model->hasOwnItems(1); $stores = array(); foreach ($store_model->find('storeID') as $obj) { $stores[$obj->storeID()] = $obj; } $items = array(); $rowItem = array(); $prevUPC = False; $nextUPC = False; $likeCode = False; if ($dbc->num_rows($r) > 0) { //existing item while ($w = $dbc->fetch_row($r)) { $items[$w['store_id']] = $w; $rowItem = $w; } /** Lookup default vendor & normalize */ $product = new ProductsModel($dbc); $product->upc($upc); $product->load(); $vendor = new VendorsModel($dbc); $vendor->vendorID($product->default_vendor_id()); if ($vendor->load()) { $rowItem['distributor'] = $vendor->vendorName(); } /* find previous and next items in department */ $pnP = $dbc->prepare_statement('SELECT upc FROM products WHERE department=? ORDER BY upc'); $pnR = $dbc->exec_statement($pnP, array($product->department())); $passed_it = False; while ($pnW = $dbc->fetch_row($pnR)) { if (!$passed_it && $upc != $pnW[0]) { $prevUPC = $pnW[0]; } else { if (!$passed_it && $upc == $pnW[0]) { $passed_it = True; } else { if ($passed_it) { $nextUPC = $pnW[0]; break; } } } } $lcP = $dbc->prepare_statement('SELECT likeCode FROM upcLike WHERE upc=?'); $lcR = $dbc->exec_statement($lcP, array($upc)); if ($dbc->num_rows($lcR) > 0) { $lcW = $dbc->fetch_row($lcR); $likeCode = $lcW['likeCode']; } if (FannieConfig::config('STORE_MODE') == 'HQ') { $default_id = array_keys($items); $default_id = $default_id[0]; $default_item = $items[$default_id]; foreach ($stores as $id => $info) { if (!isset($items[$id])) { $items[$id] = $default_item; } } } } else { // default values for form fields $rowItem = array('description' => '', 'normal_price' => 0, 'pricemethod' => 0, 'size' => '', 'unitofmeasure' => '', 'modified' => '', 'ledesc' => '', 'manufacturer' => '', 'distributor' => '', 'default_vendor_id' => 0, 'department' => 0, 'subdept' => 0, 'tax' => 0, 'foodstamp' => 0, 'scale' => 0, 'qttyEnforced' => 0, 'discount' => 1, 'line_item_discountable' => 1, 'caseSize' => '', 'sku' => '', 'inUse' => 1, 'idEnforced' => 0, 'local' => 0, 'deposit' => 0, 'cost' => 0, 'discounttype' => 0, 'wicable' => 0); /** Check for entries in the vendorItems table to prepopulate fields for the new item */ $vendorP = "\n SELECT \n i.description,\n i.brand as manufacturer,\n i.cost,\n v.vendorName as distributor,\n d.margin,\n i.vendorID,\n i.srp,\n i.size,\n i.units,\n i.sku,\n i.vendorID as default_vendor_id\n FROM vendorItems AS i \n LEFT JOIN vendors AS v ON i.vendorID=v.vendorID\n LEFT JOIN vendorDepartments AS d ON i.vendorDept=d.deptID AND d.vendorID=i.vendorID\n WHERE i.upc=?"; $args = array($upc); $vID = FormLib::get_form_value('vid', ''); if ($vID !== '') { $vendorP .= ' AND i.vendorID=?'; $args[] = $vID; } $vendorP .= ' ORDER BY i.vendorID'; $vendorP = $dbc->prepare_statement($vendorP); $vendorR = $dbc->exec_statement($vendorP, $args); if ($dbc->num_rows($vendorR) > 0) { $v = $dbc->fetch_row($vendorR); $ret .= "<div><i>This product is in the " . $v['distributor'] . " catalog. Values have\n been filled in where possible</i></div>"; $rowItem['description'] = $v['description']; $rowItem['manufacturer'] = $v['manufacturer']; $rowItem['cost'] = $v['cost']; $rowItem['distributor'] = $v['distributor']; $rowItem['normal_price'] = $v['srp']; $rowItem['default_vendor_id'] = $v['vendorID']; $rowItem['size'] = $v['size']; $rowItem['caseSize'] = $v['units']; $rowItem['sku'] = $v['sku']; while ($v = $dbc->fetch_row($vendorR)) { $ret .= sprintf('This product is also in <a href="?searchupc=%s&vid=%d">%s</a><br />', $upc, $v['vendorID'], $v['distributor']); } } /** Look for items with a similar UPC to guess what department this item goes in. If found, use department settings to fill in some defaults */ $rowItem['department'] = 0; $search = substr($upc, 0, 12); $searchP = $dbc->prepare('SELECT department FROM products WHERE upc LIKE ?'); while (strlen($search) >= 8) { $searchR = $dbc->execute($searchP, array($search . '%')); if ($dbc->numRows($searchR) > 0) { $searchW = $dbc->fetchRow($searchR); $rowItem['department'] = $searchW['department']; break; } $search = substr($search, 0, strlen($search) - 1); } /** If no match is found, pick the most commonly used department */ if ($rowItem['department'] == 0) { $commonQ = ' SELECT department, COUNT(*) FROM products GROUP BY department ORDER BY COUNT(*) DESC'; $commonR = $dbc->query($commonQ); if ($commonR && $dbc->numRows($commonR)) { $commonW = $dbc->fetchRow($commonR); $rowItem['department'] = $commonW['department']; } } /** Get defaults for chosen department */ $dmodel = new DepartmentsModel($dbc); $dmodel->dept_no($rowItem['department']); if ($dmodel->load()) { $rowItem['tax'] = $dmodel->dept_tax(); $rowItem['foodstamp'] = $dmodel->dept_fs(); $rowItem['discount'] = $dmodel->dept_discount(); } foreach ($stores as $id => $obj) { $items[$id] = $rowItem; } } $ret .= '<div class="panel-heading">'; if ($prevUPC) { $ret .= ' <a class="btn btn-default btn-xs small" href="ItemEditorPage.php?searchupc=' . $prevUPC . '" title="Previous item in this department"> <span class="glyphicon glyphicon-chevron-left"></span></a> '; } $ret .= '<strong>UPC</strong> <span class="text-danger">'; switch ($barcode_type) { case 'EAN': case 'UPC': $ret .= substr($upc, 0, 3) . '<a class="text-danger iframe fancyboxLink" href="../reports/ProductLine/ProductLineReport.php?prefix=' . substr($upc, 3, 5) . '" title="Product Line">' . '<strong>' . substr($upc, 3, 5) . '</strong>' . '</a>' . substr($upc, 8); break; case 'Scale': $ret .= substr($upc, 0, 3) . '<strong>' . substr($upc, 3, 4) . '</strong>' . substr($upc, 7); break; case 'PLU': $trimmed = ltrim($upc, '0'); if (strlen($trimmed) < 13) { $ret .= str_repeat('0', 13 - strlen($trimmed)) . '<strong>' . $trimmed . '</strong>'; } else { $ret .= $upc; } break; default: $ret .= $upc; } $ret .= '</span>'; $ret .= '<input type="hidden" id="upc" name="upc" value="' . $upc . '" />'; if ($nextUPC) { $ret .= ' <a class="btn btn-default btn-xs small" href="ItemEditorPage.php?searchupc=' . $nextUPC . '" title="Next item in this department"> <span class="glyphicon glyphicon-chevron-right"></span></a>'; } $ret .= ' <label style="color:darkmagenta;">Modified</label> <span style="color:darkmagenta;">' . $rowItem['modified'] . '</span>'; $ret .= ' | <label style="color:darkmagenta;">Last Sold</label> <span style="color:darkmagenta;">' . (empty($rowItem['last_sold']) ? 'n/a' : $rowItem['last_sold']) . '</span>'; $ret .= '</div>'; // end panel-heading $ret .= '<div class="panel-body">'; $new_item = false; if ($dbc->num_rows($r) == 0) { // new item $ret .= "<div class=\"alert alert-warning\">Item not found. You are creating a new one.</div>"; $new_item = true; } $nav_tabs = '<ul id="store-tabs" class="nav nav-tabs small" role="tablist">'; $ret .= '{{nav_tabs}}<div class="tab-content">'; $active_tab = true; foreach ($items as $store_id => $rowItem) { $tabID = 'store-tab-' . $store_id; $store_description = 'n/a'; if (isset($stores[$store_id])) { $store_description = $stores[$store_id]->description(); } $nav_tabs .= '<li role="presentation" ' . ($active_tab ? 'class="active"' : '') . '>' . '<a href="#' . $tabID . '" aria-controls="' . $tabID . '" ' . 'onclick="$(\'.tab-content .chosen-select:visible\').chosen();"' . 'role="tab" data-toggle="tab">' . $store_description . '</a></li>'; $ret .= '<div role="tabpanel" class="tab-pane' . ($active_tab ? ' active' : '') . '" id="' . $tabID . '">'; $ret .= '<input type="hidden" class="store-id" name="store_id[]" value="' . $store_id . '" />'; $ret .= '<table class="table table-bordered">'; $limit = 30 - strlen(isset($rowItem['description']) ? $rowItem['description'] : ''); $ret .= <<<HTML <tr> <th class="text-right">Description</th> <td colspan="5"> <div class="input-group" style="width:100%;"> <input type="text" maxlength="30" class="form-control syncable-input" required name="descript[]" id="descript" value="{{description}}" onkeyup="\$(this).next().html(30-(this.value.length));" /> <span class="input-group-addon">{{limit}}</span> </div> </td> <th class="text-right">Cost</th> <td> <div class="input-group"> <span class="input-group-addon">\$</span> <input type="text" id="cost{{store_id}}" name="cost[]" class="form-control price-field cost-input syncable-input" value="{{cost}}" data-store-id="{{store_id}}" onkeydown="if (typeof nosubmit == 'function') nosubmit(event);" onkeyup="if (typeof nosubmit == 'function') nosubmit(event);" onchange="\$('.default_vendor_cost').val(this.value);" /> </div> </td> <th class="text-right">Price</th> <td> <div class="input-group"> <span class="input-group-addon">\$</span> <input type="text" id="price{{store_id}}" name="price[]" class="form-control price-field price-input syncable-input" data-store-id="{{store_id}}" required value="{{normal_price}}" /> </div> </td> </tr> HTML; $ret = str_replace('{{description}}', $rowItem['description'], $ret); $ret = str_replace('{{limit}}', $limit, $ret); $ret = str_replace('{{cost}}', sprintf('%.2f', $rowItem['cost']), $ret); $ret = str_replace('{{normal_price}}', sprintf('%.2f', $rowItem['normal_price']), $ret); // no need to display this field twice if (!isset($FANNIE_PRODUCT_MODULES['ProdUserModule'])) { $ret .= ' <tr> <th>Long Desc.</th> <td colspan="5"> <input type="text" size="60" name="puser_description" maxlength="255" ' . (!$active_tab ? ' disabled ' : '') . ' value="' . $rowItem['ldesc'] . '" class="form-control" /> </td> </tr>'; } $ret .= ' <tr> <th class="text-right">Brand</th> <td colspan="5"> <input type="text" name="manufacturer[]" class="form-control input-sm brand-field syncable-input" value="' . $rowItem['manufacturer'] . '" /> </td>'; /** Check products.default_vendor_id to see if it is a valid reference to the vendors table */ $normalizedVendorID = false; if (isset($rowItem['default_vendor_id']) && $rowItem['default_vendor_id'] != 0) { $normalizedVendor = new VendorsModel($dbc); $normalizedVendor->vendorID($rowItem['default_vendor_id']); if ($normalizedVendor->load()) { $normalizedVendorID = $normalizedVendor->vendorID(); } } /** Use a <select> box if the current vendor corresponds to a valid entry OR if no vendor entry exists. Only allow free text if it's already in place */ $ret .= ' <th class="text-right">Vendor</th> '; if ($normalizedVendorID || empty($rowItem['distributor'])) { $ret .= '<td colspan="3" class="form-inline"><select name="distributor[]" class="chosen-select form-control vendor_field syncable-input" onchange="vendorChanged(this.value);">'; $ret .= '<option value="0">Select a vendor</option>'; $vendors = new VendorsModel($dbc); foreach ($vendors->find('vendorName') as $v) { $ret .= sprintf('<option %s>%s</option>', $v->vendorID() == $normalizedVendorID ? 'selected' : '', $v->vendorName()); } $ret .= '</select>'; } else { $ret .= "<td colspan=\"3\"><input type=text name=distributor[] size=8 value=\"" . (isset($rowItem['distributor']) ? $rowItem['distributor'] : "") . "\" class=\"form-control vendor-field syncable-input\" />"; } $ret .= ' <button type="button" title="Create new vendor" class="btn btn-default btn-sm newVendorButton"> <span class="glyphicon glyphicon-plus"></span></button>'; $ret .= '</td></tr>'; // end row if (isset($rowItem['discounttype']) && $rowItem['discounttype'] != 0) { /* show sale info */ $batchP = $dbc->prepare_statement("\n SELECT b.batchName, \n b.batchID \n FROM batches AS b \n LEFT JOIN batchList as l on b.batchID=l.batchID \n WHERE '" . date('Y-m-d') . "' BETWEEN b.startDate AND b.endDate \n AND (l.upc=? OR l.upc=?)"); $batchR = $dbc->exec_statement($batchP, array($upc, 'LC' . $likeCode)); $batch = array('batchID' => 0, 'batchName' => "Unknown"); if ($dbc->num_rows($batchR) > 0) { $batch = $dbc->fetch_row($batchR); } $ret .= '<td class="alert-success" colspan="8">'; $ret .= sprintf("<strong>Sale Price:</strong>\n %.2f (<em>Batch: <a href=\"%sbatches/newbatch/EditBatchPage.php?id=%d\">%s</a></em>)", $rowItem['special_price'], FannieConfig::config('URL'), $batch['batchID'], $batch['batchName']); list($date, $time) = explode(' ', $rowItem['end_date']); $ret .= "<strong>End Date:</strong>\n {$date} \n (<a href=\"EndItemSale.php?id={$upc}\">Unsale Now</a>)"; $ret .= '</td>'; } $supers = array(); $depts = array(); $subs = array(); $range_limit = FannieAuth::validateUserLimited('pricechange'); $deptQ = ' SELECT dept_no, dept_name, subdept_no, subdept_name, s.dept_ID, MIN(m.superID) AS superID FROM departments AS d LEFT JOIN subdepts AS s ON d.dept_no=s.dept_ID LEFT JOIN superdepts AS m ON d.dept_no=m.dept_ID '; if (is_array($range_limit) && count($range_limit) == 2) { $deptQ .= ' WHERE m.superID BETWEEN ? AND ? '; } else { $range_limit = array(); } $deptQ .= ' GROUP BY d.dept_no, d.dept_name, s.subdept_no, s.subdept_name, s.dept_ID ORDER BY d.dept_no, s.subdept_name'; $p = $dbc->prepare($deptQ); $r = $dbc->execute($p, $range_limit); $superID = ''; while ($w = $dbc->fetch_row($r)) { if (!isset($depts[$w['dept_no']])) { $depts[$w['dept_no']] = $w['dept_name']; } if ($w['dept_no'] == $rowItem['department']) { $superID = $w['superID']; } if (!isset($supers[$w['superID']])) { $supers[$w['superID']] = array(); } $supers[$w['superID']][] = $w['dept_no']; if ($w['subdept_no'] == '') { continue; } if (!isset($subs[$w['dept_ID']])) { $subs[$w['dept_ID']] = ''; } $subs[$w['dept_ID']] .= sprintf('<option %s value="%d">%d %s</option>', $w['subdept_no'] == $rowItem['subdept'] ? 'selected' : '', $w['subdept_no'], $w['subdept_no'], $w['subdept_name']); } $ret .= '<tr> <th class="text-right">Dept</th> <td colspan="7" class="form-inline"> <select id="super-dept{{store_id}}" name="super[]" class="form-control chosen-select syncable-input" onchange="chainSuperDepartment(\'../ws/\', this.value, {dept_start:\'#department{{store_id}}\', callback:function(){$(\'#department{{store_id}}\').trigger(\'chosen:updated\');baseItemChainSubs({{store_id}});}});">'; $names = new SuperDeptNamesModel($dbc); if (is_array($range_limit) && count($range_limit) == 2) { $names->superID($range_limit[0], '>='); $names->superID($range_limit[1], '<='); } foreach ($names->find('superID') as $obj) { $ret .= sprintf('<option %s value="%d">%s</option>', $obj->superID() == $superID ? 'selected' : '', $obj->superID(), $obj->super_name()); } $ret .= '</select> <select name="department[]" id="department{{store_id}}" class="form-control chosen-select syncable-input" onchange="baseItemChainSubs({{store_id}});">'; foreach ($depts as $id => $name) { if (is_numeric($superID) && is_array($supers[$superID])) { if (!in_array($id, $supers[$superID]) && $id != $rowItem['department']) { continue; } } $ret .= sprintf('<option %s value="%d">%d %s</option>', $id == $rowItem['department'] ? 'selected' : '', $id, $id, $name); } $ret .= '</select>'; $jsVendorID = $rowItem['default_vendor_id'] > 0 ? $rowItem['default_vendor_id'] : 'no-vendor'; $ret .= '<select name="subdept[]" id="subdept{{store_id}}" class="form-control chosen-select syncable-input">'; $ret .= isset($subs[$rowItem['department']]) ? $subs[$rowItem['department']] : '<option value="0">None</option>'; $ret .= '</select>'; $ret .= '</td> <th class="small text-right">SKU</th> <td colspan="2"> <input type="text" name="vendorSKU" class="form-control input-sm" value="' . $rowItem['sku'] . '" onchange="$(\'#vsku' . $jsVendorID . '\').val(this.value);" ' . ($jsVendorID == 'no-vendor' || !$active_tab ? 'disabled' : '') . ' id="product-sku-field" /> </td> </tr>'; $taxQ = $dbc->prepare_statement('SELECT id,description FROM taxrates ORDER BY id'); $taxR = $dbc->exec_statement($taxQ); $rates = array(); while ($taxW = $dbc->fetch_row($taxR)) { array_push($rates, array($taxW[0], $taxW[1])); } array_push($rates, array("0", "NoTax")); $ret .= '<tr> <th class="small text-right">Tax</th> <td> <select name="tax[]" id="tax{{store_id}}" class="form-control input-sm syncable-input">'; foreach ($rates as $r) { $ret .= sprintf('<option %s value="%d">%s</option>', isset($rowItem['tax']) && $rowItem['tax'] == $r[0] ? 'selected' : '', $r[0], $r[1]); } $ret .= '</select></td>'; $ret .= '<td colspan="4" class="small"> <label>FS <input type="checkbox" value="{{store_id}}" name="FS[]" id="FS{{store_id}}" class="syncable-checkbox" ' . ($rowItem['foodstamp'] == 1 ? 'checked' : '') . ' /> </label> <label>Scale <input type="checkbox" value="{{store_id}}" name="Scale[]" class="scale-checkbox syncable-checkbox" ' . ($rowItem['scale'] == 1 ? 'checked' : '') . ' /> </label> <label>QtyFrc <input type="checkbox" value="{{store_id}}" name="QtyFrc[]" class="qty-checkbox syncable-checkbox" ' . ($rowItem['qttyEnforced'] == 1 ? 'checked' : '') . ' /> </label> <label>WIC <input type="checkbox" value="{{store_id}}" name="prod-wicable[]" class="prod-wicable-checkbox syncable-checkbox" ' . ($rowItem['wicable'] == 1 ? 'checked' : '') . ' /> </label> <label>InUse <input type="checkbox" value="{{store_id}}" name="prod-in-use[]" class="in-use-checkbox syncable-checkbox" ' . ($rowItem['inUse'] == 1 ? 'checked' : '') . ' onchange="$(\'#extra-in-use-checkbox\').prop(\'checked\', $(this).prop(\'checked\'));" /> </label> </td> <th class="small text-right">Discount</th> <td class="col-sm-1"> <select id="discount-select{{store_id}}" name="discount[]" class="form-control input-sm syncable-input">'; $disc_opts = array(0 => 'No', 1 => 'Yes', 2 => 'Trans Only', 3 => 'Line Only'); if ($rowItem['discount'] == 1 && $rowItem['line_item_discountable'] == 1) { $rowItem['discount'] = 1; } elseif ($rowItem['discount'] == 1 && $rowItem['line_item_discountable'] == 0) { $rowItem['discount'] = 2; } elseif ($rowItem['discount'] == 0 && $rowItem['line_item_discountable'] == 1) { $rowItem['discount'] = 3; } foreach ($disc_opts as $id => $val) { $ret .= sprintf('<option %s value="%d">%s</option>', $id == $rowItem['discount'] ? 'selected' : '', $id, $val); } $ret .= '</select></td> <th class="small text-right">Deposit</th> <td colspan="2"> <input type="text" name="deposit-upc[]" class="form-control input-sm syncable-input" value="' . ($rowItem['deposit'] != 0 ? $rowItem['deposit'] : '') . '" placeholder="Deposit Item PLU/UPC" onchange="$(\'#deposit\').val(this.value);" /> </td> </tr>'; $ret .= ' <tr> <th class="small text-right">Case Size</th> <td class="col-sm-1"> <input type="text" name="caseSize" class="form-control input-sm" id="product-case-size" value="' . $rowItem['caseSize'] . '" onchange="$(\'#vunits' . $jsVendorID . '\').val(this.value);" ' . ($jsVendorID == 'no-vendor' || !$active_tab ? 'disabled' : '') . ' /> </td> <th class="small text-right">Pack Size</th> <td class="col-sm-1"> <input type="text" name="size[]" class="form-control input-sm product-pack-size syncable-input" value="' . $rowItem['size'] . '" onchange="$(\'#vsize' . $jsVendorID . '\').val(this.value);" /> </td> <th class="small text-right">Unit of measure</th> <td class="col-sm-1"> <input type="text" name="unitm[]" class="form-control input-sm unit-of-measure syncable-input" value="' . $rowItem['unitofmeasure'] . '" /> </td> <th class="small text-right">Age Req</th> <td class="col-sm-1"> <select name="id-enforced[]" class="form-control input-sm id-enforced syncable-input" onchange="$(\'#idReq\').val(this.value);">'; $ages = array('n/a' => 0, 18 => 18, 21 => 21); foreach ($ages as $label => $age) { $ret .= sprintf('<option %s value="%d">%s</option>', $age == $rowItem['idEnforced'] ? 'selected' : '', $age, $label); } $ret .= '</select> </td> <th class="small text-right">Local</th> <td> <select name="prod-local[]" class="form-control input-sm prod-local syncable-input" onchange="$(\'#local-origin-id\').val(this.value);">'; $local_opts = array(0 => 'No'); $origin = new OriginsModel($dbc); $local_opts = array_merge($local_opts, $origin->getLocalOrigins()); if (count($local_opts) == 1) { $local_opts[1] = 'Yes'; // generic local if no origins defined } foreach ($local_opts as $id => $val) { $ret .= sprintf('<option value="%d" %s>%s</option>', $id, $id == $rowItem['local'] ? 'selected' : '', $val); } $ret .= '</select> </td> </tr> </div>'; $ret .= '</table>'; $ret .= '</div>'; $ret = str_replace('{{store_id}}', $store_id, $ret); $active_tab = false; if (FannieConfig::config('STORE_MODE') != 'HQ') { break; } } $ret .= '</div>'; // sync button will copy current tab values to all other store tabs if (!$new_item && FannieConfig::config('STORE_MODE') == 'HQ') { $nav_tabs .= '<li><label title="Apply update to all stores"> <input type="checkbox" id="store-sync" checked /> Sync</label></li>'; } $nav_tabs .= '</ul>'; // only show the store tabs in HQ mode if (FannieConfig::config('STORE_MODE') == 'HQ') { $ret = str_replace('{{nav_tabs}}', $nav_tabs, $ret); } else { $ret = str_replace('{{nav_tabs}}', '', $ret); } $ret .= <<<HTML <div id="newVendorDialog" title="Create new Vendor" class="collapse"> <fieldset> <label for="newVendorName">Vendor Name</label> <input type="text" name="newVendorName" id="newVendorName" class="form-control" /> </fieldset> </div> HTML; $ret .= '</div>'; // end panel-body $ret .= '</div>'; // end panel return $ret; }