Zen Cart Logo
Forums / Addon Shipping Modules / Call to a member function on a non-object in admin/includes/classes/DPDExport.php

Call to a member function on a non-object in admin/includes/classes/DPDExport.php

Views: 1,535

Results 1 to 1 of 1
17 May 2011, 3:30 PM
#1
lingray avatar

lingray

New Zenner

Join Date:
Aug 2009
Posts:
15
Plugin Contributions:
0

Call to a member function on a non-object in admin/includes/classes/DPDExport.php

Hi Guys,

I'm currently working on developing a shipping add on to share with the community.

I've managed to get a list of orders available for despatch based upon the orders.order_status field. I have written a simple class to deal with the CSV generation, changing of order.order_status value and insert to order_status_history. However, I get the below error when the method is called to update the orders.order_status field.

PHP Fatal error: Call to a member function on a non-object in /var/www/vhost/somedomain.com/www/admin/includes/classes/DPDExport.php on line 39

Here's the class:

<?php

class DPDExport {

	var $OrderInfo;
	var $OrderNumber;
	
	function DPDExport(){
		
	}
	
	function getDPDCode( $method ){
	if($method == 'flat')
		return 36;
	else
		return 32;
	}
	
	function setOrderInfo( $OrderInfo ){
		$this->OrderInfo = $OrderInfo;
		$this->OrderNumber = $OrderInfo['orders_id'];
	}
	
	function getCSVRow(){
		$code = $this->getDPDCode($this->OrderInfo['shipping_module_code']);
		$CustomerComments = $this->getCustomersComments();
		$csvRow =		"\"" . $this->OrderNumber . "\"" . DPD_DELIMITER . "\"1\""  . DPD_DELIMITER . "\"" . $code . "\"" . DPD_DELIMITER . 
							"\"1\"" . DPD_DELIMITER . "\"" . $this->OrderInfo['customers_name'] . "\"" . DPD_DELIMITER . "\"" . $this->OrderInfo['delivery_street_address'] . "\"" . DPD_DELIMITER . 
							"\"" . $this->OrderInfo['delivery_suburb'] . "\"" . DPD_DELIMITER . "\"" . $this->OrderInfo['delivery_city'] . "\"" . DPD_DELIMITER . 
							"\"" . $this->OrderInfo['delivery_state'] . "\"" . DPD_DELIMITER . "\"" . $this->OrderInfo['delivery_postcode'] . "\"" . DPD_DELIMITER . 
							"\"" . $this->OrderInfo['customers_email_address'] . "\"" . DPD_DELIMITER . "\"1\"" . DPD_DELIMITER . "\"" . $comments . "\"" . "\n";
		$this->setOrderStatus();
		return $csvRow;
	}
	
	function getCustomersComments(){
		$sql = "SELECT `comments` FROM `orders_status_history` WHERE orders_id = '" .$this->OrderNumber. "' AND `orders_status_id` = '1'";
		$CustomerComments = $dbObj->Execute( $sql );
		return $CustomerComments->fields['comments'];
	}	
	
	function setOrderStatus(){
		$sql = "UPDATE " .TABLE_ORDERS. " SET `orders_status` = '3' WHERE orders_id = '" .$this->OrderNumber. "'";
		$dbObj->Execute( $sql );
		$this->setOrderHistory();
	}
	
	function setOrderHistory(){
		$date = date("Y-m-d H:i:s");
		$sql = "INSERT INTO `orders_status_history` (`orders_id`, `orders_status_id`, `date_added`, `customer_notified`, `comments`)
						VALUES ( '" .$this->OrderNumber. "', '3', '" .$date. "', '0', '" .TEXT_DPD_COMMENTS. "')";
		$dbObj->Execute( $sql );	
	}
	
}

?>

The issue is that the call to this class is nested within a while loop which is evaluated by the EOF property.

Here's the tpl file:

require('includes/application_top.php');

include(DIR_WS_CLASSES . 'DPDExport.php');

$today = date("Ymda"); 

$sql = 'SELECT orders_id, customers_name, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, 
			 	delivery_country, customers_email_address, shipping_module_code
			 	FROM orders
			 	WHERE orders_status = ' .DPD_ORDER_STATUS_DESPATCH;
$DespatchOrders = $db->Execute($sql);

//set the columns in the csv file
$csv = TEXT_DPD_JOB_REF . DPD_DELIMITER . TEXT_DPD_LABELS . DPD_DELIMITER . TEXT_DPD_SERVICE . DPD_DELIMITER .
				TEXT_DPD_WEIGHT . DPD_DELIMITER . TEXT_DPD_NAME . DPD_DELIMITER . TEXT_DPD_ADDRESS1 . DPD_DELIMITER . 
				TEXT_DPD_ADDRESS2 . DPD_DELIMITER . TEXT_DPD_TOWN . DPD_DELIMITER . TEXT_DPD_COUNTY . DPD_DELIMITER . 
				TEXT_DPD_POSTCODE . DPD_DELIMITER . TEXT_DPD_EMAIL . DPD_DELIMITER . TEXT_DPD_JOB_TYPE . DPD_DELIMITER . 
				TEXT_DPD_CUST_COMMENTS ."\n";

		$dpd = new DPDExport();		
//loop through the result set populating the CSV
while (!$DespatchOrders->EOF) {
	if($DespatchOrders->fields['delivery_country'] == 'United Kingdom' ){
		
		$dpd->setOrderInfo( $DespatchOrders->fields );
		$csv .= $dpd->getCSVRow();
	}
		$DespatchOrders->MoveNext();
}
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"DPDExport"  .$today. ".csv\"");
echo $csv;

I know this isn't that tidy but this is literally for testing atm :)

Any help would be greatly appreciated as I'd like to get this out to the community as soon as I'm done :P

Thanks