All pastes #612511 Raw Edit

Someone

public text v1 · immutable
·published 2007-07-10 13:34 UTC
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();
	}
}

?>