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(); } } ?>