Example #1
0
 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;
 }
Example #2
0
 public function preprocess()
 {
     $dbc = $this->connection;
     $dbc->selectDB($this->config->get('OP_DB'));
     $o = new OriginsModel($dbc);
     $o->local(1);
     foreach ($o->find('originID') as $origin) {
         $this->localSettings[$origin->originID()] = $origin->shortName();
         $this->report_headers[] = '# ' . $origin->shortName();
     }
     return parent::preprocess();
 }
Example #3
0
 /**
   Look up local origins. Normally these are
   found in the origins table but will use the
   older, deprecated originName table if it
   exists and the appropriate columns aren't in
   the origins table.
   @return [array] originID => shortName
 */
 public function getLocalOrigins()
 {
     $def = $this->connection->tableDefinition('origins');
     $ret = array();
     if (isset($def['shortName'])) {
         $o = new OriginsModel($this->connection);
         $o->local(1);
         foreach ($o->find('originID') as $origin) {
             $ret[$origin->originID()] = $origin->shortName();
         }
     } elseif ($this->connection->tableExists('originNames')) {
         $q = '
             SELECT originID,
                 shortName 
             FROM originName 
             WHERE local=1 
             ORDER BY originID';
         $r = $this->connection->query($q);
         while ($w = $this->connection->fetchRow($r)) {
             $ret[$w['originID']] = $w['shortName'];
         }
     }
     return $ret;
 }
Example #4
0
    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 &nbsp;&nbsp;&nbsp;<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;
    }
Example #5
0
    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();
    }
Example #6
0
 private function getVendorInfo($id)
 {
     global $FANNIE_OP_DB, $FANNIE_ROOT;
     $dbc = FannieDB::get($FANNIE_OP_DB);
     $ret = "";
     $nameQ = $dbc->prepare_statement("SELECT vendorName FROM vendors WHERE vendorID=?");
     $nameR = $dbc->exec_statement($nameQ, array($id));
     $model = new VendorsModel($dbc);
     $model->vendorID($id);
     $model->load();
     $ret .= '<div>';
     $ret .= "<b>Id</b>: {$id} &nbsp; <b>Name</b>: " . $model->vendorName();
     $ret .= '</div>';
     $itemQ = $dbc->prepare_statement("SELECT COUNT(*) FROM vendorItems WHERE vendorID=?");
     $itemR = $dbc->exec_statement($itemQ, array($id));
     $num = 0;
     if ($itemR && ($row = $dbc->fetch_row($itemR))) {
         $num = $row[0];
     }
     $ret .= '
         <div class="row">
             <div class="container-fluid col-sm-3">';
     $ret .= '
         <div class="panel panel-default">
             <div class="panel-heading">Catalog</div>
             <div class="panel-body">
             This vendor contains ' . $num . ' items<br />';
     if ($num > 0) {
         $ret .= "<a href=\"BrowseVendorItems.php?vid={$id}\">Browse vendor catalog</a>";
         if ($num <= 750) {
             $ret .= "<br />";
             $ret .= "<a href=\"EditVendorItems.php?id={$id}\">Edit vendor catalog</a>";
         }
     }
     $ret .= "<br />";
     $ret .= "<a href=\"DefaultUploadPage.php?vid={$id}\">Upload new vendor catalog</a>";
     $ret .= "<br />";
     $ret .= "<a href=\"VendorIndexPage.php?vid={$id}&autoAdd=1\">Add existing items to catalog</a>";
     $ret .= '</div></div>';
     $ret .= '</div><div class="container-fluid col-sm-3">';
     $ret .= '
         <div class="panel panel-default">
             <div class="panel-heading">Mappings</div>
             <div class="panel-body">';
     $ret .= "<a href=\"UploadPluMapPage.php?vid={$id}\">Upload PLU/SKU mapping</a>";
     $ret .= "<br />";
     $ret .= "<a href=\"SkuMapPage.php?id={$id}\">View or Edit PLU/SKU mapping</a>";
     $ret .= "<br />";
     $ret .= "<a href=\"UnitBreakdownPage.php?id={$id}\">View or Edit Breakdown mapping</a>";
     $ret .= '</div></div>';
     $ret .= '</div><div class="container-fluid col-sm-3">';
     $ret .= '
         <div class="panel panel-default">
             <div class="panel-heading">Margin</div>
             <div class="panel-body">';
     $itemQ = $dbc->prepare("SELECT COUNT(*) FROM vendorDepartments WHERE vendorID=?");
     $itemR = $dbc->execute($itemQ, array($id));
     $num = 0;
     if ($itemR && ($row = $dbc->fetch_row($itemR))) {
         $num = $row[0];
     }
     $ret .= '<p>';
     $ret .= "<a href=\"../../batches/UNFI/\">Vendor Price Batch Tools</a>";
     $ret .= "</p><p>";
     if ($num == 0) {
         $ret .= "<a href=\"VendorDepartmentEditor.php?vid={$id}\">This vendor's items are not yet arranged into subcategories</a>";
         $ret .= '<p />';
         $ret .= "<a href=\"VendorDepartmentUploadPage.php?vid={$id}\">Upload Subcategory List</a>";
     } else {
         $ret .= "This vendor's items are divided into ";
         $ret .= $num . " subcategories";
         $ret .= "<br />";
         $ret .= "<a href=\"VendorDepartmentEditor.php?vid={$id}\">View or Edit vendor-specific margin(s)</a>";
         $ret .= "<br />";
         $ret .= "<a href=\"VendorMarginsPage.php?id={$id}\">And Even More Margins</a>";
         $ret .= '<p />';
         $ret .= "<a href=\"VendorDepartmentUploadPage.php?vid={$id}\">Upload Subcategory List</a>";
     }
     $ret .= '</p>';
     $ret .= '
         <div class="form-group">
             <div class="input-group">
                 <span class="input-group-addon">Shipping</span>
                 <input type="text" id="vc-shipping" name="shipping" 
                     onchange="saveShipping(this.value);"
                     title="Markup percentage to account for shipping fees"
                     class="form-control" value="' . $model->shippingMarkup() * 100 . '" />
                 <span class="input-group-addon">%</span>
             </div>
         </div>
         <div class="form-group">
             <div class="input-group">
                 <span class="input-group-addon">Discount Rate</span>
                 <input type="text" id="vc-discount" name="discount-rate" 
                     title="Markdown percentage from catalog list costs"
                     onchange="saveDiscountRate(this.value);"
                     class="form-control" value="' . $model->discountRate() * 100 . '" />
                 <span class="input-group-addon">%</span>
             </div>
         </div>';
     $ret .= '</div></div>';
     $ret .= '</div></div>';
     $ret .= '
         <div class="panel panel-default">
             <div class="panel-heading">Contact Info</div>
             <div class="panel-body">
                 <div class="form-alerts"></div>';
     $ret .= '<form role="form" class="form-horizontal" onsubmit="saveVC(' . $id . '); return false;" id="vcForm">';
     $ret .= '<div class="form-group">
         <label for="vcPhone" class="control-label col-sm-1">Phone</label>
         <div class="col-sm-10">
         <input type="tel" class="form-control" id="vcPhone" name="phone" value="' . $model->phone() . '" />
         </div>
         </div>';
     $ret .= '<div class="form-group">
         <label for="vcFax" class="control-label col-sm-1">Fax</label>
         <div class="col-sm-10">
         <input type="text" id="vcFax" class="form-control" name="fax" value="' . $model->fax() . '" />
         </div>
         </div>';
     $ret .= '<div class="form-group">
         <label for="vcEmail" class="control-label col-sm-1">Email</label>
         <div class="col-sm-10">
         <input type="text" class="form-control" id="vcEmail" name="email" value="' . $model->email() . '" />
         </div>
         </div>';
     $ret .= '<div class="form-group">
         <label for="vcWebsite" class="control-label col-sm-1">Website</label>
         <div class="col-sm-10">
         <input type="text" class="form-control" id="vcWebsite" name="website" value="' . $model->website() . '" />
         </div>
         </div>';
     $ret .= '<div class="form-group">
         <label for="vc-local-id" class="control-label col-sm-1">Local</label>
         <div class="col-sm-10">
             <select class="form-control" name="local-origin-id">
             <option value="0">No</option>';
     $origins = new OriginsModel($dbc);
     $origins->local(1);
     foreach ($origins->find('shortName') as $origin) {
         $ret .= sprintf('<option %s value="%d">%s</option>', $origin->originID() == $model->localOriginID() ? 'selected' : '', $origin->originID(), $origin->shortName());
     }
     $ret .= '</select>
             </div>
         </div>';
     $ret .= '<div class="form-group">
         <label for="vcNotes" class="control-label col-sm-1">Ordering Notes</label>
         <div class="col-sm-10">
         <textarea class="form-control" rows="5" name="notes" id="vcNotes">' . $model->notes() . '</textarea>
         </div>
         </div>';
     $ret .= '<button type="submit" class="btn btn-default">Save Vendor Contact Info</button>';
     $ret .= '</form>';
     $ret .= '</div></div>';
     $delivery = new VendorDeliveriesModel($dbc);
     $delivery->vendorID($id);
     $delivery->load();
     $ret .= '<p class="form-inline form-group"><label class="control-label" for="deliverySelect">Delivery Schedule</label>: ';
     $ret .= '<select class="delivery form-control" name="frequency" id="deliverySelect"><option>Weekly</option></select>';
     $ret .= ' <label for="regular" class="control-label">Regular</label>: <input type="checkbox" class="delivery"
                 name="regular" id="regular" ' . ($delivery->regular() ? 'checked' : '') . ' />';
     $dt = mktime(0, 0, 0, 6, 15, 2014);
     // date doesn't matter; just need a sunday
     $labels = '';
     $checks = '';
     for ($i = 0; $i < 7; $i++) {
         $func = strtolower(date('l', $dt));
         $labels .= '<th><label for="' . $func . '">' . date('D', $dt) . '</label></th>';
         $checks .= '<td><input type="checkbox" id="' . $func . '" name="' . $func . '"
                     ' . ($delivery->{$func}() ? 'checked' : '') . ' class="delivery" /></td>';
         $dt = mktime(0, 0, 0, date('n', $dt), date('j', $dt) + 1, date('Y', $dt));
     }
     $ret .= '<table class="table"><tr>' . $labels . '</tr><tr>' . $checks . '</tr></table>';
     $ret .= 'Next 2 deliveries: ' . '<span id="nextDelivery">' . date('D, M jS', strtotime($delivery->nextDelivery())) . '</span>' . ' and ' . '<span id="nextNextDelivery">' . date('D, M jS', strtotime($delivery->nextNextDelivery())) . '</span>';
     $ret .= '</p>';
     echo $ret;
 }
Example #7
0
 public function showEditForm($upc, $display_mode = 1, $expand_mode = 1)
 {
     $FANNIE_URL = FannieConfig::config('URL');
     $upc = BarcodeLib::padUPC($upc);
     $ret = '<div id="ProdUserFieldset" class="panel panel-default">';
     $ret .= "<div class=\"panel-heading\">\n                <a href=\"\" onclick=\"\$('#ProdUserFieldsetContent').toggle();return false;\">\n                Sign/Web Info</a>\n                </div>";
     $css = $expand_mode == 1 ? '' : ' collapse';
     $ret .= '<div id="ProdUserFieldsetContent" class="panel-body' . $css . '">';
     $dbc = $this->db();
     $model = new ProductUserModel($dbc);
     $model->upc($upc);
     $model->load();
     $loc = new ProdPhysicalLocationModel($dbc);
     $loc->upc($upc);
     $loc->load();
     $sections = new FloorSectionsModel($dbc);
     $prod = new ProductsModel($dbc);
     $prod->upc($upc);
     $prod->load();
     $ret .= '<div class="col-sm-6">';
     $ret .= '<div class="row form-group">' . '<label class="col-sm-1">Brand</label> ' . '<div class="col-sm-8">' . '<input type="text" class="form-control" id="lf_brand" name="lf_brand" value="' . $model->brand() . '" />' . '</div>' . '<div class="col-sm-3">' . ' <a href="" onclick="createSign(); return false;">Make Sign</a>' . '</div>' . '</div>';
     $ret .= '<div class="row form-group">' . '<label class="col-sm-1">Desc.</label> ' . '<div class="col-sm-8">' . '<textarea class="form-control" rows="2" id="lf_desc" name="lf_desc">' . $model->description() . '</textarea>' . '</div>' . '</div>';
     $ret .= '<div class="row form-group">' . '<label class="small col-sm-1">Sign Ct.</label> ' . '<div class="col-sm-8">' . '<input type="number" class="form-control price-field"
                 name="sign-count" value="' . $model->signCount() . '" />' . '</div>' . '</div>';
     $ret .= '<div class="row form-group">
                 <label tile="Location on the floor" class="col-sm-1">Loc.</label>
                 <div class="col-sm-8">
                     <select name="floor-id" class="form-control">
                         <option value="0">n/a</option>';
     foreach ($sections->find('name') as $section) {
         $ret .= sprintf('<option %s value="%d">%s</option>', $loc->floorSectionID() == $section->floorSectionID() ? 'selected' : '', $section->floorSectionID(), $section->name());
     }
     $ret .= '</select>
             </div>
             <div class="col-sm-3 text-left">
                 <a href="mapping/FloorSectionsPage.php" target="_blank">Add more</a>
             </div>
             </div>';
     $otherOriginBlock = '<div class=row>
             <div class=col-sm-1 />
             <div class=col-sm-8>
         <select name=otherOrigin[] class=form-control><option value=0>n/a</option>';
     $ret .= '<div class="row form-group">' . '<label class="col-sm-1"><a href="' . $FANNIE_URL . 'item/origins/OriginEditor.php">Origin</a></label>' . '<div class="col-sm-8">' . ' <select name="origin" class="form-control">' . '<option value="0">n/a</option>';
     $origins = new OriginsModel($dbc);
     $origins->local(0);
     foreach ($origins->find('name') as $o) {
         $ret .= sprintf('<option %s value="%d">%s</option>', $prod->current_origin_id() == $o->originID() ? 'selected' : '', $o->originID(), $o->name());
         $otherOriginBlock .= sprintf('<option value=%d>%s</option>', $o->originID(), $o->name());
     }
     $ret .= '</select></div>';
     $otherOriginBlock .= '</div></div>';
     $ret .= '<div class="col-sm-3 text-left">';
     $ret .= '&nbsp;&nbsp;&nbsp;&nbsp;<a href="" 
             onclick="$(\'#originsBeforeMe\').before(\'' . $otherOriginBlock . '\'); return false;">Add more</a>';
     $ret .= '</div></div>';
     $mapP = 'SELECT originID FROM ProductOriginsMap WHERE upc=? AND originID <> ?';
     $mapR = $dbc->execute($mapP, array($upc, $prod->current_origin_id()));
     while ($mapW = $dbc->fetch_row($mapR)) {
         $ret .= '<div class="form-group form-inline">
             <select name="otherOrigin[]" class="form-control"><option value="0">n/a</option>';
         foreach ($origins->find('name') as $o) {
             $ret .= sprintf('<option %s value="%d">%s</option>', $mapW['originID'] == $o->originID() ? 'selected' : '', $o->originID(), $o->name());
         }
         $ret .= '</select></div>';
     }
     $ret .= '<div id="originsBeforeMe"></div>';
     $ret .= '</div>';
     $ret .= '<div class="col-sm-6">';
     $ret .= '<div class="form-group"><label>Ad Text</label></div>';
     $ret .= '<div class="form-group">
             <textarea name="lf_text" class="form-control"
                 rows="8" cols="45">' . str_replace('<br />', "\n", $model->long_text()) . '</textarea></div>';
     $ret .= '</div>';
     $ret .= '</div>';
     $ret .= '</div>';
     return $ret;
 }
Example #8
0
 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>&lt;</option>
                 <option>&gt;</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>&lt;</option>
                 <option>&gt;</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 .= '&nbsp;&nbsp;
         <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 .= '&nbsp;&nbsp;
         <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 .= '&nbsp;&nbsp;
         <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 .= '&nbsp;&nbsp;
         <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 .= '&nbsp;&nbsp;
             <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 .= '&nbsp;&nbsp;&nbsp;&nbsp;';
     $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;
 }
Example #9
0
    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>
                &nbsp;&nbsp;&nbsp;&nbsp;
                <label>Scale
                <input type="checkbox" value="{{store_id}}" name="Scale[]" 
                    class="scale-checkbox syncable-checkbox"
                    ' . ($rowItem['scale'] == 1 ? 'checked' : '') . ' />
                </label>
                &nbsp;&nbsp;&nbsp;&nbsp;
                <label>QtyFrc
                <input type="checkbox" value="{{store_id}}" name="QtyFrc[]" 
                    class="qty-checkbox syncable-checkbox"
                    ' . ($rowItem['qttyEnforced'] == 1 ? 'checked' : '') . ' />
                </label>
                &nbsp;&nbsp;&nbsp;&nbsp;
                <label>WIC
                <input type="checkbox" value="{{store_id}}" name="prod-wicable[]" 
                    class="prod-wicable-checkbox syncable-checkbox"
                    ' . ($rowItem['wicable'] == 1 ? 'checked' : '') . '  />
                </label>
                &nbsp;&nbsp;&nbsp;&nbsp;
                <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;
    }
Example #10
0
 /**
   The origins table references up to three
   other tables: originCountry, originStateProv,
   and originCustomRegion. origins.name and
   origins.shortName are derived from these other
   tables.
 
   THIS METHOD WILL UPDATE THE NAME FIELDS IN THE
   ORIGINS TABLE.
 
   origins.shortName will simply use the first
   one of these rules that works.
   1. corresponding originCustomRegion.name, if present
   2. corresponding originStateProv.name, if present
   3. corresponding originCountry.name, if present
 
   origins.name will incorporate all corresponding
   records from the other tables as a comma separated
   list in this order:
 
     customRegion, stateProv, country
 
   Any values not without a corresponding record are
   omitted.
 
   The 1st entry in the list will use the full
   name. The 2nd and/or 3rd entries will use an
   abbreviation if possible and otherwise the
   full name.
 
   Examples:
     Superior Compact, MN, USA
     Minnesota, USA
 */
 private function normalizeOriginNames()
 {
     global $FANNIE_OP_DB;
     $dbc = FannieDB::get($FANNIE_OP_DB);
     $origins = new OriginsModel($dbc);
     foreach ($origins->find() as $origin) {
         $name = '';
         $shortName = '';
         list($origin, $custom, $state, $country) = $this->getChildren($origin);
         if ($origin->customID()) {
             $name = $custom->name();
             $shortName = $custom->name();
         }
         if ($origin->stateProvID()) {
             list($name, $shortName) = $this->objToNames($state, $name, $shortName);
         }
         if ($origin->countryID()) {
             list($name, $shortName) = $this->objToNames($country, $name, $shortName);
         }
         $origin->name($name);
         $origin->shortName($shortName);
         $origin->save();
     }
 }