rendered paste body<?PHP
class po{
var $id = 0;
var $data = array();
function __construct($id = null){
if($id){
$this->id = $id;
$this->data();
}
}
function data(){
if(!$this->data || count($this->data) == 0){
// get the primary data for the po
$query = $GLOBALS['db']->prepare('SELECT * FROM `po` WHERE po_p = ?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$query->execute(array($this->id))
or print_r($query->errorInfo()) && die();
$data = $query->fetch();
$data['subtotal'] = 0;
$this->data = $data;
$p = $this->parts();
foreach($p as $v)
$data['subtotal'] += $v['line_total'];
$this->data = $data;
}
return $this->data;
}
function vendor_data(){
$query = $GLOBALS['db']->prepare('SELECT * FROM `vendor` WHERE ven_no = ?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$query->execute(array($this->data['vendor_no']))
or print_r($query->errorInfo()) && die();
if($data = $query->fetch()){
return $data;
}else{
return array();
}
}
function parts($order = false){
// get the parts for the po
$order_bit = 'ORDER BY roworder ';
if($order)
$order_bit = ' ORDER BY part_no ';
$query = $GLOBALS['db']->prepare('SELECT *, (qty * unit_total) line_total FROM `po_part` LEFT JOIN `part` ON `part_no` = `code` WHERE po_f = ? ' . $order_bit)
or print_r($GLOBALS['db']->errorInfo()) && die();
$query->execute(array($this->id))
or print_r($query->errorInfo()) && die();
$parts = $query->fetchAll();
$parts2 = $parts;
$d = $this->data;
foreach($parts as $k => $v){
$parts[$k]['style'] = '';
foreach($parts2 as $pk => $p)
if($p['part_no'] == $v['part_no'] && $pk != $k)
$parts[$k]['style'] = 'urgent3';
if($v['code'] == '')
$parts[$k]['style'] = 'urgent2';
$p = $v['code'] ? new part(null, $v['code']) : null;
$parts[$k]['recclass'] = $v['qty'] == $v['rec'] ? '' : 'unreceived';
if( $p && $p->data['alt_code'] != $v['alt_part_no'] && $v['alt_part_no'] != ''){
$parts[$k]['altclass'] = 'updatealt';
}else{
$parts[$k]['altclass'] = '';
}
if($v['pref_vendor'] == $d['vendor_no'] || !$p){
$parts[$k]['vendclass'] = '';
}else{
$parts[$k]['vendclass'] = 'updatevend';
}
}
return $parts;
}
function save($dd){
// convert the date
if($dd['po_date'] != '')
$dd['po_date'] = date('Y-m-d', strtotime($dd['po_date']));
if($dd['received'] != '')
$dd['received'] = date('Y-m-d', strtotime($dd['received']));
// save the data
// save primary data
if(!isset($dd['pst_exempt']))
$dd['pst_exempt'] = 0;
if($this->id != 0){
$iquery = $GLOBALS['db']->prepare('UPDATE po SET vendor_no = ?, po_date = ?, issued_by = ?, shipped_via = ?, received = ?, terms = ?, po_desc = ?, ext_desc = ?, pst_exempt = ?, status = ?, packing = ? WHERE po_p = ?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$iquery->execute(array($dd['vendor_no'],$dd['po_date'],$dd['issued_by'],$dd['shipped_via'],$dd['received'],$dd['terms'], $dd['po_desc'], $dd['ext_desc'], $dd['pst_exempt'], $dd['status'], $dd['packing'], $this->id))
or print_r($iquery->errorInfo()) && die();
}else{
$iquery = $GLOBALS['db']->prepare('INSERT INTO po SET vendor_no = ?, po_date = ?, issued_by = ?, shipped_via = ?, received = ?, terms = ?, po_desc = ?, ext_desc = ?, pst_exempt = ?, status = ?, packing = ?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$iquery->execute(array($dd['vendor_no'],$dd['po_date'],$dd['issued_by'],$dd['shipped_via'],$dd['received'],$dd['terms'], $dd['po_desc'], $dd['ext_desc'], $dd['pst_exempt'], $dd['status'], $dd['packing']))
or print_r($iquery->errorInfo()) && die();
$this->id = $GLOBALS['db']->lastInsertId();
}
// what part lines to keep
$parts_kept = array();
foreach($dd['po_part_p'] as $k => $v)
if($v != '0' && $v != '')
$parts_kept[] = $v;
// delete removed parts
if(count($parts_kept) > 0){
$iquery = $GLOBALS['db']->prepare('DELETE FROM po_part WHERE po_part_p NOT IN ('.trim(implode(',', $parts_kept), ',').') AND po_f = ?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$iquery->execute(array($this->id))
or print_r($iquery->errorInfo()) && die();
}else{
$iquery = $GLOBALS['db']->prepare('DELETE FROM po_part WHERE po_f = ?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$iquery->execute(array($this->id))
or print_r($iquery->errorInfo()) && die();
}
//Quick entry parts
if(isset($_POST['quick_add'])){
$qe = parse_quickentry($_POST['quick_add']);
foreach($qe as $v){
$alt_codes = explode(',',$v['alt_code']);
foreach($alt_codes as $ak => $ac){
$dd['qty'][] = floatval($v['qty']);
$dd['rec'][] = 0;
$dd['part_no'][] = strtoupper($v['code']);
$dd['alt_part_no'][] = $ac ? $ac : '';
$dd['for'][] = '';
$dd['wo_num'][] = '';
$dd['description'][] = $v['desc'];
$dd['unit_total'][] = 0;
$dd['po_part_p'][] = '';
$dd['roworder'][] = '9999';
}
}
}
// find blank parts and fill in info
foreach($dd['po_part_p'] as $k => $v){
if($dd['part_no'][$k] != '' && $dd['description'][$k] == ''){
$p = new part(false, trim($dd['part_no'][$k]));
if($p->id)
$dd['description'][$k] = $p->data['desc'];
if(($dd['alt_part_no'][$k] == '') && $p->id)
$dd['alt_part_no'][$k] = $p->data['alt_code'];
}
}
// set defaults
foreach($dd['rec'] as $k => $v)
if($v == '')
$dd['rec'][$k] = 0;
foreach($dd['qty'] as $k => $v)
if($v == '')
$dd['qty'][$k] = 0;
// save parts
foreach($dd['po_part_p'] as $k => $v){
if($v == '0' || $v == ''){
$iquery = $GLOBALS['db']->prepare('INSERT INTO po_part SET po_f = ?, part_no = ?, alt_part_no = ?, `for` = ?, wo_num = ?, qty = ?, description = ?, unit_total = ?, roworder = ?, rec =?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$iquery->execute(array($this->id, strtoupper($dd['part_no'][$k]), $dd['alt_part_no'][$k], $dd['for'][$k], $dd['wo_num'][$k], intval($dd['qty'][$k]), $dd['description'][$k], floatval(trim($dd['unit_total'][$k], '$')), $dd['roworder'][$k], intval($dd['rec'][$k])))
or print_r($iquery->errorInfo()) && die();
}else{
$iquery = $GLOBALS['db']->prepare('UPDATE po_part SET po_f = ?, part_no = ?, alt_part_no = ?, `for` = ?, wo_num = ?, qty = ?, description = ?, unit_total = ?, roworder = ?, rec = ? WHERE po_part_p = ?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$iquery->execute(array($this->id, strtoupper($dd['part_no'][$k]), $dd['alt_part_no'][$k], $dd['for'][$k], $dd['wo_num'][$k], intval($dd['qty'][$k]), $dd['description'][$k], floatval(trim($dd['unit_total'][$k], '$')), $dd['roworder'][$k], intval($dd['rec'][$k]), $v))
or print_r($iquery->errorInfo()) && die();
}
}
}
function del(){
$iquery = $GLOBALS['db']->prepare('UPDATE po SET del = 1 WHERE po_p = ?')
or print_r($GLOBALS['db']->errorInfo()) && die();
$iquery->execute(array($this->id))
or print_r($iquery->errorInfo()) && die();
}
}
?>