function export_order($id) { global $FANNIE_OP_DB, $FANNIE_ROOT; $dbc = FannieDB::get($FANNIE_OP_DB); $order = new PurchaseOrderModel($dbc); $order->orderID($id); $order->load(); $items = new PurchaseOrderItemsModel($dbc); $items->orderID($id); $vendor = new VendorsModel($dbc); $vendor->vendorID($order->vendorID()); $vendor->load(); $contact = new VendorContactModel($dbc); $contact->vendorID($order->vendorID()); $contact->load(); if (!class_exists('FPDF')) { include_once $FANNIE_ROOT . 'src/fpdf/fpdf.php'; } $pdf = new FPDF('P', 'mm', 'Letter'); $pdf->AddPage(); $pdf->SetFont('Arial', '', '12'); $pdf->Cell(100, 5, 'Vendor: ' . $vendor->vendorName(), 0, 0); $pdf->Cell(100, 5, 'Date: ' . date('Y-m-d'), 0, 0); $pdf->Ln(); $pdf->Cell(100, 5, 'Phone: ' . $contact->phone(), 0, 0); $pdf->Cell(100, 5, 'Fax: ' . $contact->fax(), 0, 0); $pdf->Ln(); $pdf->Cell(100, 5, 'Email: ' . $contact->email(), 0, 0); $pdf->Cell(100, 5, 'Website: ' . $contact->website(), 0, 0); $pdf->Ln(); $pdf->MultiCell(0, 5, "Ordering Info:\n" . $contact->notes(), 'B'); $pdf->Ln(); $cur_page = 0; $pdf->SetFontSize(10); foreach ($items->find() as $obj) { if ($cur_page != $pdf->PageNo()) { $cur_page = $pdf->PageNo(); $pdf->Cell(25, 5, 'SKU', 0, 0); $pdf->Cell(20, 5, 'Order Qty', 0, 0); $pdf->Cell(30, 5, 'Brand', 0, 0); $pdf->Cell(65, 5, 'Description', 0, 0); $pdf->Cell(20, 5, 'Case Size', 0, 0); $pdf->Cell(20, 5, 'Est. Cost', 0, 0); $pdf->Ln(); } $pdf->Cell(25, 5, $obj->sku(), 0, 0); $pdf->Cell(20, 5, $obj->quantity(), 0, 0, 'C'); $pdf->Cell(30, 5, $obj->brand(), 0, 0); $pdf->Cell(65, 5, $obj->description(), 0, 0); $pdf->Cell(20, 5, $obj->caseSize(), 0, 0, 'C'); $pdf->Cell(20, 5, sprintf('%.2f', $obj->caseSize() * $obj->unitCost() * $obj->quantity()), 0, 0); $pdf->Ln(); } $pdf->Output('order_export.pdf', 'D'); }
function export_order($id) { global $FANNIE_OP_DB; $dbc = FannieDB::get($FANNIE_OP_DB); $order = new PurchaseOrderModel($dbc); $order->orderID($id); $order->load(); $items = new PurchaseOrderItemsModel($dbc); $items->orderID($id); $vendor = new VendorsModel($dbc); $vendor->vendorID($order->vendorID()); $vendor->load(); echo 'Vendor,"' . $vendor->vendorName() . '",Order Date,' . date('Y-m-d') . "\r\n"; echo "\r\n"; echo "SKU,\"Order Qty\",Brand,Description,\"Case Size\",\"Est. Cost\"\r\n"; foreach ($items->find() as $obj) { echo $obj->sku() . ','; echo $obj->quantity() . ','; echo '"' . $obj->brand() . '",'; echo '"' . $obj->description() . '",'; echo '"' . $obj->caseSize() . '",'; printf('%.2f', $obj->unitCost() * $obj->caseSize() * $obj->quantity()); echo "\r\n"; } }
function list_content() { global $FANNIE_OP_DB, $FANNIE_URL; $dbc = FannieDB::get($FANNIE_OP_DB); $supertype = FormLib::get_form_value('supertype', 'dept'); $manufacturer = FormLib::get_form_value('manufacturer', ''); $mtype = FormLib::get_form_value('mtype', 'prefix'); $deptStart = FormLib::get_form_value('deptStart', 0); $deptEnd = FormLib::get_form_value('deptEnd', 0); $deptMulti = FormLib::get('departments', array()); $subDepts = FormLib::get('subdepts', array()); $super = FormLib::get_form_value('deptSub'); $vendorID = FormLib::get('vendor'); $upc_list = FormLib::get('u', array()); $inUse = FormLib::get('inUse', 1); $store = FormLib::get('store', 0); $sort = FormLib::get_form_value('sort', 'Department'); $order = 'dept_name'; if ($sort === 'UPC') { $order = 'i.upc'; } elseif ($sort === 'Description') { $order = 'i.description, i.upc'; } $ret = 'Report sorted by ' . $sort . '<br />'; if ($supertype == 'dept' && $super === '') { $ret .= 'Department ' . $deptStart . ' to ' . $deptEnd . '<br />'; } else { if ($supertype == 'dept') { $ret .= 'Sub department ' . $super . '<br />'; } else { if ($supertype == 'manu') { $ret .= _('Brand') . ' ' . $manufacturer . '<br />'; } else { if ($supertype == 'vendor') { $vendor = new VendorsModel($dbc); $vendor->vendorID($vendorID); $vendor->load(); $ret .= 'Vendor ' . $vendor->vendorName() . '<br />'; } } } } $ret .= date("F j, Y, g:i a") . '<br />'; $page_url = sprintf('ProductListPage.php?supertype=%s&deptStart=%s&deptEnd=%s&deptSub=%s&manufacturer=%s&mtype=%s&vendor=%d', $supertype, $deptStart, $deptEnd, $super, $manufacturer, $mtype, $vendorID); if (!$this->excel) { $ret .= '<form action="' . filter_input(INPUT_SERVER, 'PHP_SELF') . '" method="post" id="excel-form"> <input type="hidden" name="supertype" value="' . $supertype . '" /> <input type="hidden" name="deptStart" value="' . $deptStart . '" /> <input type="hidden" name="deptEnd" value="' . $deptEnd . '" /> <input type="hidden" name="deptSub" value="' . $super . '" /> <input type="hidden" name="manufacturer" value="' . $manufacturer . '" /> <input type="hidden" name="mtype" value="' . $mtype . '" /> <input type="hidden" name="vendor" value="' . $vendorID . '" /> <input type="hidden" name="inUse" value="' . $inUse . '" /> <input type="hidden" name="excel" value="yes" />'; if (is_array($subDepts)) { foreach ($subDepts as $s) { $ret .= '<input type="hidden" name="subdepts[]" value="' . $s . '" />'; } } if (is_array($upc_list)) { foreach ($upc_list as $u) { $ret .= '<input type="hidden" name="u[]" value="' . $u . '" />'; } } $ret .= '</form>'; $ret .= sprintf('<a href="" onclick="$(\'#excel-form\').submit();return false;">Save to Excel</a> <a href="%s">Back</a><br />', basename(__FILE__)); } /** base select clause and joins **/ $query = "\n SELECT i.upc,\n i.description,\n i.brand,\n d.dept_name as department,\n i.normal_price,\n (CASE WHEN i.tax = 1 THEN 'X' WHEN i.tax=0 THEN '-' ELSE LEFT(t.description,1) END) as Tax, \n (CASE WHEN i.foodstamp = 1 THEN 'X' ELSE '-' END) as FS,\n (CASE WHEN i.discount = 0 THEN '-' ELSE 'X'END) as DISC,\n (CASE WHEN i.scale = 1 THEN 'X' ELSE '-' END) as WGHd,\n (CASE WHEN i.local > 0 AND o.originID IS NULL THEN 'X' \n WHEN i.local > 0 AND o.originID IS NOT NULL THEN LEFT(o.shortName,1) ELSE '-' END) as local,\n COALESCE(v.vendorName, x.distributor) AS distributor,\n i.cost,\n i.store_id,\n l.description AS storeName\n FROM products as i \n LEFT JOIN departments as d ON i.department = d.dept_no\n LEFT JOIN taxrates AS t ON t.id = i.tax\n LEFT JOIN prodExtra as x on i.upc = x.upc\n LEFT JOIN vendors AS v ON i.default_vendor_id=v.vendorID\n LEFT JOIN Stores AS l ON i.store_id=l.storeID\n LEFT JOIN origins AS o ON i.local=o.originID"; /** add extra joins if this lookup requires them **/ if ($supertype == 'dept' && $super !== '') { if ($super >= 0) { $query .= ' LEFT JOIN superdepts AS s ON i.department=s.dept_ID '; } elseif ($super == -2) { $query .= ' LEFT JOIN MasterSuperDepts AS s ON i.department=s.dept_ID '; } } elseif ($supertype == 'vendor') { $query .= ' LEFT JOIN vendors AS z ON z.vendorName=x.distributor '; } /** build where clause and parameters based on the lookup type **/ $query .= ' WHERE 1=1 '; $args = array(); if ($supertype == 'dept' && $super !== '') { if ($super >= 0) { $query .= ' AND s.superID=? '; $args = array($super); } elseif ($super == -2) { $query .= ' AND s.superID <> 0 '; } if ($deptStart != 0 && $deptEnd != 0) { $query .= ' AND i.department BETWEEN ? AND ? '; $args[] = $deptStart; $args[] = $deptEnd; } elseif (count($deptMulti) > 0) { $query .= ' AND i.department IN ('; foreach ($deptMulti as $d) { $query .= '?,'; $args[] = $d; } $query = substr($query, 0, strlen($query) - 1) . ')'; } if (is_array($subDepts) && count($subDepts) > 0) { $query .= ' AND i.subdept IN ('; foreach ($subDepts as $s) { $query .= '?,'; $args[] = $s; } $query = substr($query, 0, strlen($query) - 1) . ')'; } } elseif ($supertype == 'manu' && $mtype == 'prefix') { $query .= ' AND i.upc LIKE ? '; $args = array('%' . $manufacturer . '%'); } elseif ($supertype == 'manu' && $mtype != 'prefix') { $query .= ' AND (i.brand LIKE ? OR x.manufacturer LIKE ?) '; $args = array('%' . $manufacturer . '%', '%' . $manufacturer . '%'); } elseif ($supertype == 'vendor') { $query .= ' AND (i.default_vendor_id=? OR z.vendorID=?) '; $args = array($vendorID, $vendorID); } elseif ($supertype == 'upc') { $inp = ''; foreach ($upc_list as $u) { $inp .= '?,'; $args[] = $u; } $inp = substr($inp, 0, strlen($inp) - 1); $query .= ' AND i.upc IN (' . $inp . ') '; } else { $query .= ' AND i.department BETWEEN ? AND ? '; $args = array($deptStart, $deptEnd); if (is_array($subDepts) && count($subDepts) > 0) { $query .= ' AND i.subdept IN ('; foreach ($subDepts as $s) { $query .= '?,'; $args[] = $s; } } } if ($inUse == 1) { $query .= ' AND i.inUse=1 '; } else { $query .= ' AND i.inUse=0 '; } if ($store > 0) { $query .= ' AND i.store_id=? '; $args[] = $store; } /** finish building query w/ order clause **/ $query .= 'ORDER BY ' . $order; if ($order != "i.upc") { $query .= ",i.upc"; } $prep = $dbc->prepare_statement($query); $result = $dbc->exec_statement($prep, $args); if ($result === false || $dbc->num_rows($result) == 0) { return 'No data found!'; } $ret .= '<table class="table table-striped table-bordered tablesorter small"> <thead> <tr>'; $ret .= "<th>UPC</th><th>Brand</th><th>Description</th><th>Dept</th><th>" . _('Vendor') . "</th><th>Cost</th><th>Price</th>"; $ret .= "<th>Tax</th><th>FS</th><th>Disc</th><th>Wg'd</th><th>Local</th>"; if (!$this->excel && $this->canEditItems !== false) { $ret .= '<th> </th>'; } $ret .= "</tr></thead><tbody>"; $multi = $this->config->get('STORE_MODE') == 'HQ' ? true : false; while ($row = $dbc->fetch_row($result)) { $ret .= '<tr id="' . $row[0] . '">'; $enc = base64_encode($row[1]); if (!$this->excel) { $ret .= "<td align=center class=\"td_upc\"><a href=ItemEditorPage.php?searchupc={$row['0']}>{$row['0']}</a>"; if ($multi) { $ret .= ' (' . substr($row['storeName'], 0, 1) . ')'; } if ($this->canDeleteItems !== false) { $ret .= " <a href=\"\" onclick=\"deleteCheck('{$row['0']}','{$enc}'); return false;\">"; $ret .= \COREPOS\Fannie\API\lib\FannieUI::deleteIcon() . '</a>'; } $ret .= '</td>'; $ret .= '<input type="hidden" class="hidden_upc" value="' . $row[0] . '" />'; $ret .= '<input type="hidden" class="hidden_store_id" value="' . $row['store_id'] . '" />'; } else { $ret .= "<td align=center>{$row['0']}</td>"; } $ret .= "<td align=center class=\"td_brand clickable\">{$row['brand']}</td>"; $ret .= "<td align=center class=\"td_desc clickable\">{$row['description']}</td>"; $ret .= "<td align=center class=\"td_dept clickable\">{$row['department']}</td>"; $ret .= "<td align=center class=\"td_supplier clickable\">{$row['distributor']}</td>"; $ret .= "<td align=center class=\"td_cost clickable\">" . sprintf('%.2f', $row['cost']) . "</td>"; $ret .= "<td align=center class=\"td_price clickable\">{$row['normal_price']}</td>"; $ret .= "<td align=center class=td_tax>{$row['Tax']}</td>"; $ret .= "<td align=center class=td_fs>{$row['FS']}</td>"; $ret .= "<td align=center class=td_disc>{$row['DISC']}</td>"; $ret .= "<td align=center class=td_wgt>{$row['WGHd']}</td>"; $ret .= "<td align=center class=td_local>{$row['local']}</td>"; if (!$this->excel && $this->canEditItems !== False) { $ret .= "<td align=center class=td_cmd><a href=\"\" \n class=\"edit-link\"\n onclick=\"edit(\$(this).closest('tr')); return false;\">" . \COREPOS\Fannie\API\lib\FannieUI::editIcon() . '</a> <a href="" class="save-link collapse" onclick="save($(this).closest(\'tr\')); return false;">' . \COREPOS\Fannie\API\lib\FannieUI::saveIcon() . '</a></td>'; } $ret .= "</tr>\n"; } $ret .= '</tbody></table>'; if ($this->excel) { header('Content-Type: application/ms-excel'); header('Content-Disposition: attachment; filename="itemList.csv"'); $array = \COREPOS\Fannie\API\data\DataConvert::htmlToArray($ret); $ret = \COREPOS\Fannie\API\data\DataConvert::arrayToCsv($array); } else { $this->add_script('../src/javascript/tablesorter/jquery.tablesorter.min.js'); $this->add_onload_command("\$('.tablesorter').tablesorter();\n"); } return $ret; }
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} <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; }
function addUPC($orderID, $memNum, $upc, $num_cases = 1) { global $FANNIE_OP_DB, $TRANS; $dbc = FannieDB::get($FANNIE_OP_DB); $sku = str_pad($upc, 6, '0', STR_PAD_LEFT); if (is_numeric($upc)) { $upc = BarcodeLib::padUPC($upc); } $manualSKU = false; if (isset($upc[0]) && $upc[0] == "+") { $sku = substr($upc, 1); $upc = "zimbabwe"; // string that will not match $manualSKU = true; } $ins_array = genericRow($orderID); $ins_array['upc'] = "{$upc}"; if ($manualSKU) { $ins_array['upc'] = BarcodeLib::padUPC($sku); } $ins_array['card_no'] = "{$memNum}"; $ins_array['trans_type'] = "I"; $caseSize = 1; $vendor = ""; $vendor_desc = !is_numeric($upc) ? $upc : ""; $srp = 0.0; $vendor_upc = !is_numeric($upc) ? '0000000000000' : ""; $skuMatch = 0; $caseP = $dbc->prepare_statement("\n SELECT units,\n vendorName,\n description,\n i.srp,\n i.upc,\n CASE WHEN i.upc=? THEN 0 ELSE 1 END as skuMatch \n FROM vendorItems as i\n LEFT JOIN vendors AS v ON i.vendorID=v.vendorID \n WHERE i.upc=? \n OR i.sku=? \n OR i.sku=?\n ORDER BY i.vendorID"); $caseR = $dbc->exec_statement($caseP, array($upc, $upc, $sku, '0' . $sku)); if ($dbc->num_rows($caseR) > 0) { $row = $dbc->fetch_row($caseR); $caseSize = $row['units']; $vendor = $row['vendorName']; $vendor_desc = $row['description']; $srp = $row['srp']; $vendor_upc = $row['upc']; $skuMatch = $row['skuMatch']; } if (!empty($vendor_upc)) { $ins_array['upc'] = "{$vendor_upc}"; } if ($skuMatch == 1) { $ins_array['upc'] = "{$vendor_upc}"; $upc = $vendor_upc; } $ins_array['quantity'] = $caseSize; $ins_array['ItemQtty'] = $num_cases; $ins_array['mixMatch'] = substr($vendor, 0, 26); $ins_array['description'] = substr($vendor_desc, 0, 32) . " SO"; $mempricing = false; if ($memNum != 0 && !empty($memNum)) { $p = $dbc->prepare_statement("SELECT Type,memType FROM custdata WHERE CardNo=?"); $r = $dbc->exec_statement($p, array($memNum)); $w = $dbc->fetch_row($r); if ($w['Type'] == 'PC') { $mempricing = true; } elseif ($w['memType'] == 9) { $mempricing = true; } } $pdP = $dbc->prepare_statement("\n SELECT normal_price,\n special_price,\n department,\n discounttype,\n description,\n discount,\n default_vendor_id\n FROM products WHERE upc=?"); $pdR = $dbc->exec_statement($pdP, array($upc)); $qtyReq = False; if ($dbc->num_rows($pdR) > 0) { $pdW = $dbc->fetch_row($pdR); $ins_array['department'] = $pdW['department']; $ins_array['discountable'] = $pdW['discount']; $mapP = $dbc->prepare_statement("SELECT map_to FROM \n {$TRANS}SpecialOrderDeptMap WHERE dept_ID=?"); $mapR = $dbc->exec_statement($mapP, array($pdW['department'])); if ($dbc->num_rows($mapR) > 0) { $ins_array['department'] = array_pop($dbc->fetch_row($mapR)); } $superP = $dbc->prepare_statement("SELECT superID \n FROM superdepts WHERE dept_ID=?"); $superR = $dbc->exec_statement($superP, array($ins_array['department'])); while ($superW = $dbc->fetch_row($superR)) { if ($superW[0] == 5) { $qtyReq = 3; } if ($qtyReq !== false) { $caseSize = $qtyReq; $ins_array['quantity'] = $qtyReq; break; } } // only calculate prices for items that exist in // vendorItems (i.e., have known case size) $ins_array['discounttype'] = $pdW['discounttype']; if ($dbc->num_rows($caseR) > 0 || true) { // test always do this $ins_array['total'] = $pdW['normal_price'] * $caseSize * $num_cases; $ins_array['regPrice'] = $pdW['normal_price'] * $caseSize * $num_cases; $ins_array['unitPrice'] = $pdW['normal_price']; if ($pdW['discount'] != 0 && $pdW['discounttype'] == 1) { /** Only apply sale pricing from non-closeout batches At WFC closeout happens to be batch type #11 */ $closeoutP = $dbc->prepare(' SELECT l.upc FROM batchList AS l INNER JOIN batches AS b ON l.batchID=b.batchID WHERE l.upc=? AND ' . $dbc->curdate() . ' >= b.startDate AND ' . $dbc->curdate() . ' <= b.endDate AND b.batchType=11 '); $closeoutR = $dbc->execute($closeoutP, array($upc)); if ($closeoutR && $dbc->num_rows($closeoutR) == 0) { $ins_array['total'] = $pdW['special_price'] * $caseSize * $num_cases; $ins_array['unitPrice'] = $pdW['special_price']; } } elseif ($mempricing) { if ($pdW['discounttype'] == 2) { $ins_array['total'] = $pdW['special_price'] * $caseSize * $num_cases; $ins_array['unitPrice'] = $pdW['special_price']; } elseif ($pdW['discounttype'] == 3) { $ins_array['unitPrice'] = $pdW['normal_price'] * (1 - $pdW['special_price']); $ins_array['total'] = $ins_array['unitPrice'] * $caseSize * $num_cases; } elseif ($pdW['discounttype'] == 5) { $ins_array['unitPrice'] = $pdW['normal_price'] - $pdW['special_price']; $ins_array['total'] = $ins_array['unitPrice'] * $caseSize * $num_cases; } if ($pdW['discount'] != 0 && $pdW['normal_price'] * $caseSize * $num_cases * 0.85 < $ins_array['total']) { $ins_array['total'] = $pdW['normal_price'] * $caseSize * $num_cases * 0.85; $ins_array['discounttype'] = 0; $ins_array['unitPrice'] = $pdW['normal_price']; } } } $ins_array['description'] = substr($pdW['description'], 0, 32); /** If product has a default vendor, lookup vendor name and add it */ if ($pdW['default_vendor_id'] != 0) { $v = new VendorsModel($dbc); $v->vendorID($pdW['default_vendor_id']); if ($v->load()) { $ins_array['mixMatch'] = substr($v->vendorName(), 0, 26); } } /** If no vendor name was found, try looking in prodExtra */ if (empty($ins_array['mixMatch']) && $dbc->tableExists('prodExtra')) { $distP = $dbc->prepare(' SELECT x.distributor FROM prodExtra AS x WHERE x.upc=? '); $distR = $dbc->execute($distP, array($upc)); if ($distR && $dbc->num_rows($distR) > 0) { $distW = $dbc->fetch_row($distR); $ins_array['mixMatch'] = substr($distW['distributor'], 0, 26); } } } elseif ($srp != 0) { // use vendor SRP if applicable $ins_array['regPrice'] = $srp * $caseSize * $num_cases; $ins_array['total'] = $srp * $caseSize * $num_cases; $ins_array['unitPrice'] = $srp; if ($mempricing) { $ins_array['total'] *= 0.85; } } $tidP = $dbc->prepare_statement("SELECT MAX(trans_id),MAX(voided),MAX(numflag) \n FROM {$TRANS}PendingSpecialOrder WHERE order_id=?"); $tidR = $dbc->exec_statement($tidP, array($orderID)); $tidW = $dbc->fetch_row($tidR); $ins_array['trans_id'] = $tidW[0] + 1; $ins_array['voided'] = $tidW[1]; $ins_array['numflag'] = $tidW[2]; $dbc->smart_insert("{$TRANS}PendingSpecialOrder", $ins_array); return array($qtyReq, $ins_array['trans_id'], $ins_array['description']); }
private function vendorDeptDisplay($id) { global $FANNIE_OP_DB, $FANNIE_URL; $dbc = FannieDB::get($FANNIE_OP_DB); $v = new VendorsModel($dbc); $v->vendorID($id); $v->load(); $name = $v->vendorName(); $ret = "<strong>Subcategories in {$name}</strong><br />"; $ret .= "<table class=\"table\">"; $ret .= "<tr><th>No.</th><th>Name</th><th>Margin</th><th>POS Dept#</th>\n <th> </th><th> </th></tr>"; $deptQ = $dbc->prepare_statement("\n SELECT d.vendorID,\n deptID,\n name,\n margin,\n testing,\n posDeptID\n FROM vendorDepartments AS d\n WHERE d.vendorID=?\n ORDER BY deptID"); $deptR = $dbc->exec_statement($deptQ, array($id)); while ($row = $dbc->fetch_row($deptR)) { $ret .= sprintf("<tr id=\"row-%d\">\n <td>%d</td>\n <td id=nametd%d>%s</td>\n <td id=margintd%d>%.2f%%</td>\n <td id=posdepttd%d>%d</td>\n <td id=button%d>\n <a href=\"\" onclick=\"edit(%d);return false;\"\n class=\"edit-link\">%s</a>\n <a href=\"\" onclick=\"save(%d);return false;\"\n class=\"save-link collapse\">%s</a>\n </td>\n <td><a href=\"\" onclick=\"deleteCat(%d,'%s');return false\">%s</a></td>\n <td><a href=\"../../reports/VendorCategory/VendorCategoryReport.php?id=%d&category=%d\"\n title=\"View Items in this Category\">\n <span class=\"glyphicon glyphicon-th-list\"></span>\n </a></td>\n </tr>", $row['deptID'], $row['deptID'], $row['deptID'], $row['name'], $row['deptID'], $row['margin'] * 100, $row['deptID'], $row['posDeptID'], $row['deptID'], $row['deptID'], \COREPOS\Fannie\API\lib\FannieUI::editIcon(), $row['deptID'], \COREPOS\Fannie\API\lib\FannieUI::saveIcon(), $row['deptID'], $row['name'], \COREPOS\Fannie\API\lib\FannieUI::deleteIcon(), $id, $row['deptID']); } $ret .= "</table>"; $ret .= '<p><a href="VendorIndexPage.php?vid=' . $id . '" class="btn btn-default">Home</a></p>'; return $ret; }
function preview_content() { global $FANNIE_OP_DB, $FANNIE_URL; $dbc = FannieDB::get($FANNIE_OP_DB); $vendor = new VendorsModel($dbc); $vendor->vendorID(FormLib::get('vendorID')); $vendor->load(); $ret = sprintf("<b>Batch Type</b>: %s <input type=hidden value=%d name=vendorID /><br />", $vendor->vendorName(), FormLib::get_form_value('vendorID')); $ret .= sprintf("<b>PO/Inv#</b>: %s <input type=hidden value=\"%s\" name=identifier /><br />", FormLib::get_form_value('identifier'), FormLib::get_form_value('identifier')); $ret .= sprintf("<b>Order Date</b>: %s <input type=hidden value=\"%s\" name=orderDate /><br />", FormLib::get_form_value('orderDate'), FormLib::get_form_value('orderDate')); $ret .= sprintf("<b>Recv'd Date</b>: %s <input type=hidden value=\"%s\" name=recvDate /><br />", FormLib::get_form_value('recvDate'), FormLib::get_form_value('recvDate')); return $ret; }
public function preprocess() { global $FANNIE_PLUGIN_SETTINGS, $FANNIE_OP_DB, $FANNIE_URL, $FANNIE_TRANS_DB; //$this->add_script($FANNIE_URL.'src/javascript/jquery.js'); //$this->add_script($FANNIE_URL.'src/javascript/jquery-ui.js'); if (FormLib::get('upc_in') !== '') { $upc = BarcodeLib::padUPC(FormLib::get('upc_in')); $this->current_item_data['upc'] = $upc; $dbc = FannieDB::get($FANNIE_OP_DB); $model = new ProductsModel($dbc); $model->upc($upc); $vendorID = 0; if ($model->load()) { $this->current_item_data['desc'] = $model->brand() . ' ' . $model->description(); $this->current_item_data['par'] = $model->auto_par(); $vendorID = $model->default_vendor_id(); } $model = new VendorsModel($dbc); $model->vendorID($vendorID); if ($model->load()) { $this->current_item_data['vendor'] = $model->vendorName(); $schedule = new VendorDeliveriesModel($dbc); $schedule->vendorID($vendorID); if ($schedule->load() && $schedule->regular() == 1) { $this->current_item_data['nextDelivery'] = date('D, M jS', strtotime($schedule->nextDelivery())) . ' & ' . date('D, M jS', strtotime($schedule->nextNextDelivery())); $nd = new DateTime(date('Y-m-d', strtotime($schedule->nextDelivery()))); $nnd = new DateTime(date('Y-m-d', strtotime($schedule->nextNextDelivery()))); $this->current_item_data['deliverySpan'] = $nnd->diff($nd)->format('%a'); } $items = new VendorItemsModel($dbc); $items->vendorID($vendorID); $items->upc($upc); $this->current_item_data['cases'] = array(); foreach ($items->find('units') as $item) { $this->current_item_data['cases'][] = $item->units(); } } $saleNow = 'SELECT b.batchName, b.startDate, b.endDate FROM batchList AS l INNER JOIN batches AS b ON b.batchID=l.batchID WHERE l.upc=? AND b.discounttype <> 0 AND b.startDate <= ' . $dbc->now() . ' AND b.endDate >= ' . $dbc->now(); $saleNow = $dbc->prepare($saleNow); $saleNow = $dbc->execute($saleNow, array($upc)); if ($dbc->num_rows($saleNow) > 0) { $row = $dbc->fetch_row($saleNow); $this->current_item_data['onSale'] = $row['batchName'] . ' thru ' . date('D, M jS', strtotime($row['endDate'])); } $saleNext = 'SELECT b.batchName, b.startDate, b.endDate FROM batchList AS l INNER JOIN batches AS b ON b.batchID=l.batchID WHERE l.upc=? AND b.discounttype <> 0 AND b.startDate >= ' . $dbc->now() . ' AND b.endDate >= ' . $dbc->now(); $saleNext = $dbc->prepare($saleNext); $saleNext = $dbc->execute($saleNext, array($upc)); if ($dbc->num_rows($saleNext) > 0) { $row = $dbc->fetch_row($saleNext); $this->current_item_data['soonSale'] = $row['batchName'] . ' on ' . date('D, M jS', strtotime($row['startDate'])); } $ordersQ = 'SELECT v.vendorName, o.placedDate, i.quantity, i.caseSize FROM PurchaseOrderItems AS i INNER JOIN PurchaseOrder AS o ON i.orderID=o.orderID INNER JOIN vendors AS v ON o.vendorID=v.vendorID WHERE i.internalUPC = ? ORDER BY o.placedDate DESC'; $ordersQ = $dbc->add_select_limit($ordersQ, 10); $ordersP = $dbc->prepare($ordersQ); $ordersR = $dbc->execute($ordersP, array($upc)); $orders = array(); while ($w = $dbc->fetch_row($ordersR)) { $orders[] = $w; } $this->current_item_data['orders'] = $orders; $salesQ = 'SELECT ' . DTrans::sumQuantity('d') . ' AS qty, MIN(tdate) as day FROM ' . $FANNIE_TRANS_DB . $dbc->sep() . 'dlog_15 AS d WHERE upc = ? GROUP BY YEAR(tdate), MONTH(tdate), DAY(tdate) ORDER BY YEAR(tdate) DESC, MONTH(tdate) DESC, DAY(tdate) DESC'; $salesP = $dbc->prepare($salesQ); $salesR = $dbc->execute($salesP, array($upc)); $sales = array(); while ($w = $dbc->fetch_row($salesR)) { $sales[] = $w; } $this->current_item_data['sales'] = $sales; } $this->linea_ios_mode = $this->linea_support_available(); if ($this->linea_ios_mode) { $this->add_script($FANNIE_URL . 'src/javascript/linea/cordova-2.2.0.js'); $this->add_script($FANNIE_URL . 'src/javascript/linea/ScannerLib-Linea-2.0.0.js'); } $this->add_script($FANNIE_URL . 'src/javascript/tablesorter/jquery.tablesorter.js'); $this->add_css_file($FANNIE_URL . 'src/javascript/tablesorter/themes/blue/style.css'); //$this->add_css_file($FANNIE_URL.'src/javascript/jquery-ui.css'); return true; }
public function get_id_view() { $dbc = FannieDB::get($this->config->get('OP_DB')); $vendor = new VendorsModel($dbc); $vendor->vendorID($this->id); $vendor->load(); $ret = '<p id="vendor-name">New <strong>' . $vendor->vendorName() . '</strong> order</p>'; $ret .= '<div id="alert-area"></div>'; $ret .= '<form id="order-form" onsubmit="saveOrder(); return false;"> <input type="hidden" id="vendor-id" name="id" value="' . $this->id . '" /> <div class="form-group form-inline"> <label>Order Date</label> <input type="text" name="order-date" class="form-control date-field" value="' . date('Y-m-d') . '" /> <label>PO #</label> <input type="text" name="po-number" class="form-control" /> <label>Inv. #</label> <input type="text" name="inv-number" class="form-control" /> </div>'; $ret .= '<div class="collapse" id="delete-html">' . FannieUI::deleteIcon() . '</div>'; $ret .= '<div class="form-group"> <button type="button" class="btn btn-default" onclick="addInvoiceLine();">Add Line</button> <button type="submit" class="btn btn-default" id="save-btn">Save As Order</button> </div>'; $ret .= '<table class="table table-bordered" id="invoice-table"> <thead><tr> <th>SKU</th> <th>UPC</th> <th>Cases</th> <th>Units/Case</th> <th>Total Cost</th> <th>Brand</th> <th>Description</th> </thead> <tbody> </tbody> </table>'; $ret .= '</form>'; $this->addScript('js/manual.js'); $this->addScript('../item/autocomplete.js'); $this->addOnloadCommand('addInvoiceLine();'); 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; }
function get_id_view() { $dbc = $this->connection; $dbc->selectDB($this->config->get('OP_DB')); $order = new PurchaseOrderModel($dbc); $order->orderID($this->id); $order->load(); $vendor = new VendorsModel($dbc); $vendor->vendorID($order->vendorID()); $vendor->load(); $ret = '<p><div class="form-inline">'; $ret .= '<b>Vendor</b>: ' . $vendor->vendorName(); $ret .= ' '; $ret .= '<b>Created</b>: ' . $order->creationDate(); $ret .= ' '; $ret .= '<b>Placed</b>: <span id="orderPlacedSpan">' . ($order->placed() ? $order->placedDate() : 'n/a') . '</span>'; $ret .= '<input type="checkbox" ' . ($order->placed() ? 'checked' : '') . ' id="placedCheckbox" onclick="togglePlaced(' . $this->id . ');" />'; $ret .= ' '; $ret .= 'Export as: <select id="exporterSelect" class="form-control">'; $dh = opendir('exporters'); while (($file = readdir($dh)) !== False) { if (substr($file, -4) != '.php') { continue; } include 'exporters/' . $file; $class = substr($file, 0, strlen($file) - 4); if (!class_exists($class)) { continue; } $obj = new $class(); if (!isset($obj->nice_name)) { continue; } $ret .= '<option value="' . $class . '">' . $obj->nice_name . '</option>'; } $ret .= '</select> '; $ret .= '<button type="submit" class="btn btn-default" onclick="doExport(' . $this->id . ');return false;">Export</button>'; $ret .= ' '; $init = $order->placed() ? 'init=placed' : 'init=pending'; $ret .= '<button type="button" class="btn btn-default" onclick="location=\'ViewPurchaseOrders.php?' . $init . '\'; return false;">All Orders</button>'; $ret .= '</div></p>'; $ret .= '<div class="row"><div class="col-sm-6">'; $ret .= '<table class="table table-bordered"><tr><th colspan="2">Coding(s)</th>'; $ret .= '<td><b>PO#</b>: ' . $order->vendorOrderID() . '</td>'; $ret .= '<td><b>Invoice#</b>: ' . $order->vendorInvoiceID() . '</td>'; $ret .= '</tr>'; $ret .= '{{CODING}}'; $ret .= '</table>'; $ret .= '</div><div class="col-sm-6">'; if (!$order->placed()) { $ret .= '<button class="btn btn-default" onclick="location=\'EditOnePurchaseOrder.php?id=' . $order->vendorID() . '\'; return false;">Add Items</button>'; $ret .= ' '; $ret .= '<button class="btn btn-default" onclick="deleteOrder(' . $this->id . '); return false;">Delete Order</button>'; } else { $ret .= '<a class="btn btn-default" href="ManualPurchaseOrderPage.php?id=' . $order->vendorID() . '&adjust=' . $this->id . '">Edit Order</a>'; $ret .= ' '; $ret .= '<a class="btn btn-default" href="ViewPurchaseOrders.php?id=' . $this->id . '&receive=1">Receive Order</a>'; $ret .= ' '; $ret .= '<a class="btn btn-default" href="ViewPurchaseOrders.php?id=' . $this->id . '&recode=1">Alter Codings</a>'; } $ret .= '</div></div>'; $model = new PurchaseOrderItemsModel($dbc); $model->orderID($this->id); $codings = array(); $accounting = $this->config->get('ACCOUNTING_MODULE'); if (!class_exists($accounting)) { $accounting = '\\COREPOS\\Fannie\\API\\item\\Accounting'; } $ret .= '<table class="table tablesorter"><thead>'; $ret .= '<tr><th>Coding</th><th>SKU</th><th>UPC</th><th>Brand</th><th>Description</th> <th>Unit Size</th><th>Units/Case</th><th>Cases</th> <th>Est. Cost</th><th> </th><th>Received</th> <th>Rec. Qty</th><th>Rec. Cost</th></tr></thead><tbody>'; foreach ($model->find() as $obj) { $css = ''; if ($obj->receivedQty() == 0 && $obj->quantity() != 0) { $css = 'class="danger"'; } elseif ($obj->receivedQty() < $obj->quantity()) { $css = 'class="warning"'; } if ($obj->salesCode() == '') { $code = $obj->guessCode(); $obj->salesCode($code); $obj->save(); } $coding = (int) $obj->salesCode(); $coding = $accounting::toPurchaseCode($coding); if (!isset($codings[$coding])) { $codings[$coding] = 0.0; } $codings[$coding] += $obj->receivedTotalCost(); $ret .= sprintf('<tr %s><td>%d</td><td>%s</td> <td><a href="../item/ItemEditorPage.php?searchupc=%s">%s</a></td><td>%s</td><td>%s</td> <td>%s</td><td>%s</td><td>%d</td><td>%.2f</td> <td> </td><td>%s</td><td>%d</td><td>%.2f</td> </tr>', $css, $accounting::toPurchaseCode($obj->salesCode()), $obj->sku(), $obj->internalUPC(), $obj->internalUPC(), $obj->brand(), $obj->description(), $obj->unitSize(), $obj->caseSize(), $obj->quantity(), $obj->quantity() * $obj->caseSize() * $obj->unitCost(), date('Y-m-d', strtotime($obj->receivedDate())), $obj->receivedQty(), $obj->receivedTotalCost()); } $ret .= '</tbody></table>'; $coding_rows = ''; foreach ($codings as $coding => $ttl) { $coding_rows .= sprintf('<tr><td>%d</td><td>%.2f</td></tr>', $coding, $ttl); } $ret = str_replace('{{CODING}}', $coding_rows, $ret); $this->add_script('js/view.js'); $this->add_script('../src/javascript/tablesorter/jquery.tablesorter.min.js'); $this->addOnloadCommand("\$('.tablesorter').tablesorter();\n"); return $ret; }
public function get_id_view() { $this->addScript('pricing-batch.js'); $dbc = $this->connection; $dbc->selectDB($this->config->OP_DB); $superID = FormLib::get_form_value('super', 99); $queueID = FormLib::get('queueID'); $vendorID = $this->id; $filter = FormLib::get_form_value('filter') == 'Yes' ? True : False; /* lookup vendor and superdept names to build a batch name */ $sname = "All"; if ($superID != 99) { $smodel = new SuperDeptNamesModel($dbc); $smodel->superID($superID); $smodel->load(); $sname = $smodel->super_name(); } $vendor = new VendorsModel($dbc); $vendor->vendorID($vendorID); $vendor->load(); $batchName = $sname . " " . $vendor->vendorName() . " PC " . date('m/d/y'); /* find a price change batch type */ $types = new BatchTypeModel($dbc); $types->discType(0); $bType = 0; foreach ($types->find() as $obj) { $bType = $obj->batchTypeID(); break; } /* get the ID of the current batch. Create it if needed. */ $bidQ = $dbc->prepare("\n SELECT batchID \n FROM batches \n WHERE batchName=? \n AND batchType=? \n AND discounttype=0\n ORDER BY batchID DESC"); $bidR = $dbc->execute($bidQ, array($batchName, $bType)); $batchID = 0; if ($dbc->numRows($bidR) == 0) { $b = new BatchesModel($dbc); $b->batchName($batchName); $b->startDate('1900-01-01'); $b->endDate('1900-01-01'); $b->batchType($bType); $b->discountType(0); $b->priority(0); $batchID = $b->save(); } else { $bidW = $dbc->fetchRow($bidR); $batchID = $bidW['batchID']; } $ret = sprintf('<b>Batch</b>: <a href="%sbatches/newbatch/BatchManagementTool.php?startAt=%d">%s</a>', $this->config->URL, $batchID, $batchName); $ret .= sprintf("<input type=hidden id=vendorID value=%d />\n <input type=hidden id=batchID value=%d />\n <input type=hidden id=queueID value=%d />\n <input type=hidden id=superID value=%d />", $vendorID, $batchID, $queueID, $superID); $batchUPCs = array(); $batchList = new BatchListModel($dbc); $batchList->batchID($batchID); foreach ($batchList->find() as $obj) { $batchUPCs[$obj->upc()] = true; } $costSQL = Margin::adjustedCostSQL('v.cost', 'b.discountRate', 'b.shippingMarkup'); $marginSQL = Margin::toMarginSQL($costSQL, 'p.normal_price'); $p_def = $dbc->tableDefinition('products'); $marginCase = ' CASE WHEN g.margin IS NOT NULL AND g.margin <> 0 THEN g.margin WHEN s.margin IS NOT NULL AND s.margin <> 0 THEN s.margin ELSE d.margin END'; $srpSQL = Margin::toPriceSQL($costSQL, $marginCase); $query = "SELECT p.upc,\n p.description,\n v.cost,\n b.shippingMarkup,\n b.discountRate,\n p.normal_price,\n " . Margin::toMarginSQL($costSQL, 'p.normal_price') . " AS current_margin,\n " . Margin::toMarginSQL($costSQL, 'v.srp') . " AS desired_margin,\n " . $costSQL . " AS adjusted_cost,\n v.srp,\n " . $srpSQL . " AS rawSRP,\n v.vendorDept,\n x.variable_pricing,\n " . $marginCase . " AS margin\n FROM products AS p \n INNER JOIN vendorItems AS v ON p.upc=v.upc AND p.default_vendor_id=v.vendorID\n INNER JOIN vendors as b ON v.vendorID=b.vendorID\n LEFT JOIN departments AS d ON p.department=d.dept_no\n LEFT JOIN vendorDepartments AS s ON v.vendorDept=s.deptID AND v.vendorID=s.vendorID\n LEFT JOIN VendorSpecificMargins AS g ON p.department=g.deptID AND v.vendorID=g.vendorID\n LEFT JOIN prodExtra AS x on p.upc=x.upc "; $args = array($vendorID); if ($superID != 99) { $query .= " LEFT JOIN MasterSuperDepts AS m\n ON p.department=m.dept_ID "; } $query .= "WHERE v.cost > 0 \n AND v.vendorID=?\n AND p.inUse=1 "; if ($superID != 99) { $query .= " AND m.superID=? "; $args[] = $superID; } if ($filter === false) { $query .= " AND p.normal_price <> v.srp "; } if ($this->config->get('STORE_MODE') == 'HQ') { $query .= ' AND p.store_id=? '; $args[] = $this->config->get('STORE_ID'); } $query .= " ORDER BY p.upc"; if (isset($p_def['price_rule_id'])) { $query = str_replace('x.variable_pricing', 'p.price_rule_id AS variable_pricing', $query); } $prep = $dbc->prepare_statement($query); $result = $dbc->exec_statement($prep, $args); $ret .= "<table class=\"table table-bordered small\">"; $ret .= "<tr><td colspan=6> </td><th colspan=2>Current</th>\n <th colspan=3>Vendor</th></tr>"; $ret .= "<tr><th>UPC</th><th>Our Description</th>\n <th>Base Cost</th>\n <th>Shipping</th>\n <th>Discount%</th>\n <th>Adj. Cost</th>\n <th>Price</th><th>Margin</th><th>Raw</th><th>SRP</th>\n <th>Margin</th><th>Cat</th><th>Var</th>\n <th>Batch</th></tr>"; while ($row = $dbc->fetch_row($result)) { $background = "white"; if (isset($batchUPCs[$row['upc']])) { $background = 'selection'; } elseif ($row['variable_pricing'] == 0) { $background = $row['normal_price'] + 0.1 < $row['rawSRP'] ? 'red' : 'green'; if ($row['normal_price'] - 0.1 > $row['rawSRP']) { $background = $row['normal_price'] - 0.1 > $row['rawSRP'] ? 'yellow' : 'green'; } } if (isset($batchUPCs[$row['upc']])) { $icon = '<span class="glyphicon glyphicon-minus-sign" title="Remove from batch"> </span>'; } else { $icon = '<span class="glyphicon glyphicon-plus-sign" title="Add to batch"> </span>'; } $ret .= sprintf("<tr id=row%s class=%s>\n <td class=\"sub\"><a href=\"%sitem/ItemEditorPage.php?searchupc=%s\">%s</a></td>\n <td class=\"sub\">%s</td>\n <td class=\"sub cost\">%.2f</td>\n <td class=\"sub shipping\">%.2f%%</td>\n <td class=\"sub discount\">%.2f%%</td>\n <td class=\"sub adj-cost\">%.2f</td>\n <td class=\"sub price\">%.2f</td>\n <td class=\"sub cmargin\">%.2f%%</td>\n <td class=\"sub raw-srp\">%.2f</td>\n <td onclick=\"reprice('%s');\" class=\"sub srp\">%.2f</td>\n <td class=\"sub dmargin\">%.2f%%</td>\n <td class=\"sub\">%d</td>\n <td><input class=varp type=checkbox onclick=\"toggleV('%s');\" %s /></td>\n <td class=white>\n <a class=\"add-button %s\" href=\"\" \n onclick=\"addToBatch('%s'); return false;\">\n <span class=\"glyphicon glyphicon-plus-sign\"\n title=\"Add item to batch\"></span>\n </a>\n <a class=\"remove-button %s\" href=\"\" \n onclick=\"removeFromBatch('%s'); return false;\">\n <span class=\"glyphicon glyphicon-minus-sign\"\n title=\"Remove item from batch\"></span>\n </a>\n </td>\n </tr>", $row['upc'], $background, $this->config->URL, $row['upc'], $row['upc'], $row['description'], $row['cost'], $row['shippingMarkup'] * 100, $row['discountRate'] * 100, $row['adjusted_cost'], $row['normal_price'], 100 * $row['current_margin'], $row['rawSRP'], $row['upc'], $row['srp'], 100 * $row['desired_margin'], $row['vendorDept'], $row['upc'], $row['variable_pricing'] >= 1 ? 'checked' : '', isset($batchUPCs[$row['upc']]) ? 'collapse' : '', $row['upc'], !isset($batchUPCs[$row['upc']]) ? 'collapse' : '', $row['upc']); } $ret .= "</table>"; return $ret; }