Rvtech_Starshipit - Version 1.0.0.0

Version Notes

First release which has been in production for several months on multiple sites.

Download this release

Release Info

Developer George Plummer
Extension Rvtech_Starshipit
Version 1.0.0.0
Comparing to
See all releases


Version 1.0.0.0

Files changed (25) hide show
  1. app/code/community/Rvtech/Starshipit/Block/Adminhtml/System/Config/Form/Button.php +51 -0
  2. app/code/community/Rvtech/Starshipit/Block/Adminhtml/System/Config/Form/Syncbutton.php +50 -0
  3. app/code/community/Rvtech/Starshipit/Helper/Data.php +4 -0
  4. app/code/community/Rvtech/Starshipit/Helper/Starship.php +163 -0
  5. app/code/community/Rvtech/Starshipit/Helper/Starship.php_ORG +137 -0
  6. app/code/community/Rvtech/Starshipit/Model/Observer.php +110 -0
  7. app/code/community/Rvtech/Starshipit/Model/Orders.php +468 -0
  8. app/code/community/Rvtech/Starshipit/Model/Orders.php_ORG +437 -0
  9. app/code/community/Rvtech/Starshipit/controllers/Adminhtml/StarshipitController.php +124 -0
  10. app/code/community/Rvtech/Starshipit/controllers/Adminhtml/StarshipitController.php_ORG +101 -0
  11. app/code/community/Rvtech/Starshipit/controllers/IndexController.php +7 -0
  12. app/code/community/Rvtech/Starshipit/etc/adminhtml.xml +21 -0
  13. app/code/community/Rvtech/Starshipit/etc/config.xml +74 -0
  14. app/code/community/Rvtech/Starshipit/etc/system.xml +96 -0
  15. app/code/community/Rvtech/Starshipquote/Block/Dhlform.php +17 -0
  16. app/code/community/Rvtech/Starshipquote/Helper/Data.php +10 -0
  17. app/code/community/Rvtech/Starshipquote/Helper/Dhl.php +41 -0
  18. app/code/community/Rvtech/Starshipquote/controllers/DhlquoteController.php +17 -0
  19. app/code/community/Rvtech/Starshipquote/etc/adminhtml.xml +0 -0
  20. app/code/community/Rvtech/Starshipquote/etc/config.xml +59 -0
  21. app/code/community/Rvtech/Starshipquote/etc/system.xml +54 -0
  22. app/design/adminhtml/default/default/template/starshipit/system/config/button.phtml +23 -0
  23. app/design/adminhtml/default/default/template/starshipit/system/config/syncbutton.phtml +22 -0
  24. app/etc/modules/Rvtech_Startshipit.xml +9 -0
  25. package.xml +22 -0
app/code/community/Rvtech/Starshipit/Block/Adminhtml/System/Config/Form/Button.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipit_Block_Adminhtml_System_Config_Form_Button extends Mage_Adminhtml_Block_System_Config_Form_Field
3
+ {
4
+ /*
5
+ * Set template
6
+ */
7
+ protected function _construct()
8
+ {
9
+ parent::_construct();
10
+ $this->setTemplate('starshipit/system/config/button.phtml');
11
+ }
12
+
13
+ /**
14
+ * Return element html
15
+ *
16
+ * @param Varien_Data_Form_Element_Abstract $element
17
+ * @return string
18
+ */
19
+ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
20
+ {
21
+ return $this->_toHtml();
22
+ }
23
+
24
+ /**
25
+ * Return ajax url for button
26
+ *
27
+ * @return string
28
+ */
29
+ public function getAjaxCheckUrl()
30
+ {
31
+ return Mage::helper('adminhtml')->getUrl('adminhtml/adminhtml_starshipit/test');
32
+ }
33
+
34
+ /**
35
+ * Generate button html
36
+ *
37
+ * @return string
38
+ */
39
+ public function getButtonHtml()
40
+ {
41
+ $button = $this->getLayout()->createBlock('adminhtml/widget_button')
42
+ ->setData(array(
43
+ 'id' => 'starshipit_test_button',
44
+ 'label' => $this->helper('adminhtml')->__('Test'),
45
+ 'onclick' => 'javascript:test(); return false;'
46
+ ));
47
+
48
+ return $button->toHtml();
49
+ }
50
+
51
+ }
app/code/community/Rvtech/Starshipit/Block/Adminhtml/System/Config/Form/Syncbutton.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipit_Block_Adminhtml_System_Config_Form_Syncbutton extends Mage_Adminhtml_Block_System_Config_Form_Field
3
+ {
4
+ /*
5
+ * Set template
6
+ */
7
+ protected function _construct()
8
+ {
9
+ parent::_construct();
10
+ $this->setTemplate('starshipit/system/config/syncbutton.phtml');
11
+ }
12
+
13
+ /**
14
+ * Return element html
15
+ *
16
+ * @param Varien_Data_Form_Element_Abstract $element
17
+ * @return string
18
+ */
19
+ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
20
+ {
21
+ return $this->_toHtml();
22
+ }
23
+
24
+ /**
25
+ * Return ajax url for button
26
+ *
27
+ * @return string
28
+ */
29
+ public function getAjaxCheckUrl()
30
+ {
31
+ return Mage::helper('adminhtml')->getUrl('adminhtml/adminhtml_starshipit/syncOrder');
32
+ }
33
+
34
+ /**
35
+ * Generate button html
36
+ *
37
+ * @return string
38
+ */
39
+ public function getButtonHtml()
40
+ {
41
+ $button = $this->getLayout()->createBlock('adminhtml/widget_button')
42
+ ->setData(array(
43
+ 'id' => 'starshipit_test_button',
44
+ 'label' => $this->helper('adminhtml')->__('Sync Orders'),
45
+ 'onclick' => 'javascript:syncOrder(); return false;'
46
+ ));
47
+
48
+ return $button->toHtml();
49
+ }
50
+ }
app/code/community/Rvtech/Starshipit/Helper/Data.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipit_Helper_Data extends Mage_Core_Helper_Abstract
3
+ {
4
+ }
app/code/community/Rvtech/Starshipit/Helper/Starship.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipit_Helper_Starship extends Mage_Core_Helper_Abstract
3
+ {
4
+
5
+
6
+ public $_wsdl = 'http://dhl.starshipit.com/OrdersService.svc?singleWsdl';
7
+
8
+ public $_syncMsg = '';
9
+
10
+ /**
11
+ *
12
+ * @return php soap client object
13
+ */
14
+
15
+ protected function _soapClient() {
16
+
17
+ $wsdl = $this->_wsdl;
18
+ return new SoapClient($wsdl, array('trace' => 1));
19
+ }
20
+
21
+
22
+ protected function _getAuthDetails(){
23
+
24
+ return Mage::getModel('starshipit/orders')->getAuthDetails();
25
+ }
26
+
27
+ /**
28
+ * Call to Validate method of Soap
29
+ * @return string
30
+ */
31
+
32
+ public function validateUser($authTo = array()) {
33
+
34
+ $soap = $this->_soapClient();
35
+ if(!empty($authTo)) {
36
+ Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
37
+ Mage::getModel('core/config')
38
+ ->saveConfig('starshipit_options/group1/username', $authTo['userName']);
39
+ Mage::getModel('core/config')
40
+ ->saveConfig('starshipit_options/group1/api_key', $authTo['apiKey']);
41
+ }else {
42
+ $authTo = $this->_getAuthDetails();
43
+ }
44
+
45
+
46
+ $validate = $soap->__soapCall('Validate',array(
47
+ 'Validate' => $authTo,
48
+ ));
49
+
50
+ $result = $validate->ValidateResult;
51
+
52
+ return $result;
53
+ }
54
+
55
+ /**
56
+ * Format the Post Data.
57
+ *
58
+ * @return array
59
+ */
60
+
61
+ public function arrangePostData($params = array()){
62
+ $postData = array();
63
+ $postData['username'] = $params['groups']['group1']['fields']['username']['value'];
64
+ $postData['api_key'] = $params['groups']['group1']['fields']['api_key']['value'];
65
+ $postData['update_orders'] = $params['groups']['group1']['fields']['update_orders']['value'];
66
+ $postData['sync_orders_yesno'] = $params['groups']['group1']['fields']['sync_orders_yesno']['value'];
67
+ $postData['sync_orders'] = $params['groups']['group1']['fields']['sync_orders']['value'];
68
+ return $postData;
69
+ }
70
+
71
+ /**
72
+ * Prepare an array in Magento acceptable form
73
+ * from the existing orders returned via Starship
74
+ * @return array
75
+ */
76
+
77
+ public function finalOrderArrOverStarShip($orders) {
78
+
79
+ $finOrderArr = array();
80
+ $ordersArr = (array) $orders;
81
+ if(isset($ordersArr[0])){
82
+ foreach ($ordersArr as $order) {
83
+ $finOrderArr[$order->Id] = date("Y-m-d H:i:s", strtotime($order->LastUpdate));
84
+ }
85
+ }
86
+ else{
87
+ $finOrderArr[$ordersArr['Id']] = date("Y-m-d H:i:s", strtotime($ordersArr['LastUpdate']));
88
+ }
89
+
90
+ return $finOrderArr;
91
+
92
+ }
93
+
94
+ /**
95
+ * Call to GetExisting method of soap-server.
96
+ * Check the existing orders at Starship
97
+ * @return object
98
+ */
99
+ public function getExistingOrders($order = array()) {
100
+
101
+ $soap = $this->_soapClient();
102
+ $orders = $soap->__soapCall('GetExisting',array(
103
+ 'GetExisting' => array('existing' => $order),
104
+ ));
105
+
106
+ return $orders;
107
+ }
108
+
109
+ /**
110
+ * Call to soap method AddShipment.
111
+ * For adding/sync oredrs to the StarShip
112
+ * @return string
113
+ */
114
+
115
+ public function addShipment($order = array()){
116
+
117
+ $soap = $this->_soapClient();
118
+ $orders = $soap->__soapCall('AddShipment',array(
119
+ 'AddShipment' => array('orders' => $order),
120
+ ));
121
+
122
+ return $orders;
123
+
124
+ }
125
+
126
+ /**
127
+ * Check condition for Writing Tracking info and
128
+ * creating shippment in Magento
129
+ * @return boolean
130
+ */
131
+
132
+ public function checkCondForMagentoWritebacks($response) {
133
+
134
+ $success = $response->AddShipmentResult;
135
+ $update = Mage::getModel('starshipit/orders')->needToUpdateOredrsInMage();
136
+
137
+ if($success === 'Success' && ($update)) {
138
+ return true;
139
+ }
140
+
141
+ return false;
142
+
143
+ }
144
+
145
+ /**
146
+ * Call to GetMagentoWritebacks method of Soap service
147
+ * call only if "Update orders to complete once shipped" is set to Yes
148
+ * Return the Tracking info ONLY ONECE
149
+ * @return object
150
+ */
151
+
152
+ public function getMagentoWritebacks(){
153
+ $soap = $this->_soapClient();
154
+ $authTo = $this->_getAuthDetails();
155
+ $orders = $soap->__soapCall('GetMagentoWritebacks',array(
156
+ 'GetMagentoWritebacks' => $authTo
157
+ ));
158
+
159
+ return $orders;
160
+
161
+ }
162
+
163
+ }
app/code/community/Rvtech/Starshipit/Helper/Starship.php_ORG ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipit_Helper_Starship extends Mage_Core_Helper_Abstract
3
+ {
4
+
5
+
6
+ public $_wsdl = 'http://dhl.starshipit.com/OrdersService.svc?singleWsdl';
7
+
8
+ public $_syncMsg = '';
9
+
10
+ /**
11
+ *
12
+ * @return php soap client object
13
+ */
14
+
15
+ protected function _soapClient() {
16
+
17
+ $wsdl = $this->_wsdl;
18
+ return new SoapClient($wsdl, array('trace' => 1));
19
+ }
20
+
21
+
22
+ protected function _getAuthDetails(){
23
+
24
+ return Mage::getModel('starshipit/orders')->getAuthDetails();
25
+ }
26
+
27
+ /**
28
+ * Call to Validate method of Soap
29
+ * @return string
30
+ */
31
+
32
+ public function validateUser() {
33
+
34
+ $soap = $this->_soapClient();
35
+ $authTo = $this->_getAuthDetails();
36
+ $validate = $soap->__soapCall('Validate',array(
37
+ 'Validate' => $authTo,
38
+ ));
39
+
40
+ $result = $validate->ValidateResult;
41
+
42
+ return $result;
43
+ }
44
+
45
+ /**
46
+ * Prepare an array in Magento acceptable form
47
+ * from the existing orders returned via Starship
48
+ * @return array
49
+ */
50
+
51
+ public function finalOrderArrOverStarShip($orders) {
52
+
53
+ $finOrderArr = array();
54
+ $ordersArr = (array) $orders;
55
+ if(isset($ordersArr[0])){
56
+ foreach ($ordersArr as $order) {
57
+ $finOrderArr[$order->Id] = date("Y-m-d H:i:s", strtotime($order->LastUpdate));
58
+ }
59
+ }
60
+ else{
61
+ $finOrderArr[$ordersArr['Id']] = date("Y-m-d H:i:s", strtotime($ordersArr['LastUpdate']));
62
+ }
63
+
64
+ return $finOrderArr;
65
+
66
+ }
67
+
68
+ /**
69
+ * Call to GetExisting method of soap-server.
70
+ * Check the existing orders at Starship
71
+ * @return object
72
+ */
73
+ public function getExistingOrders($order = array()) {
74
+
75
+ $soap = $this->_soapClient();
76
+ $orders = $soap->__soapCall('GetExisting',array(
77
+ 'GetExisting' => array('existing' => $order),
78
+ ));
79
+
80
+ return $orders;
81
+ }
82
+
83
+ /**
84
+ * Call to soap method AddShipment.
85
+ * For adding/sync oredrs to the StarShip
86
+ * @return string
87
+ */
88
+
89
+ public function addShipment($order = array()){
90
+
91
+ $soap = $this->_soapClient();
92
+ $orders = $soap->__soapCall('AddShipment',array(
93
+ 'AddShipment' => array('orders' => $order),
94
+ ));
95
+
96
+ return $orders;
97
+
98
+ }
99
+
100
+ /**
101
+ * Check condition for Writing Tracking info and
102
+ * creating shippment in Magento
103
+ * @return boolean
104
+ */
105
+
106
+ public function checkCondForMagentoWritebacks($response) {
107
+
108
+ $success = $response->AddShipmentResult;
109
+ $update = Mage::getModel('starshipit/orders')->needToUpdateOredrsInMage();
110
+
111
+ if($success === 'Success' && ($update)) {
112
+ return true;
113
+ }
114
+
115
+ return false;
116
+
117
+ }
118
+
119
+ /**
120
+ * Call to GetMagentoWritebacks method of Soap service
121
+ * call only if "Update orders to complete once shipped" is set to Yes
122
+ * Return the Tracking info ONLY ONECE
123
+ * @return object
124
+ */
125
+
126
+ public function getMagentoWritebacks(){
127
+ $soap = $this->_soapClient();
128
+ $authTo = $this->_getAuthDetails();
129
+ $orders = $soap->__soapCall('GetMagentoWritebacks',array(
130
+ 'GetMagentoWritebacks' => $authTo
131
+ ));
132
+
133
+ return $orders;
134
+
135
+ }
136
+
137
+ }
app/code/community/Rvtech/Starshipit/Model/Observer.php ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Rvtech_Starshipit_Model_Observer {
4
+
5
+
6
+ protected $_noticeTitle = 'Starship Automatic Synchronization';
7
+
8
+ protected $_noticeStatus;
9
+
10
+ public function syncOrdersNow() {
11
+
12
+ $noticeMsg = '';
13
+ $helper = Mage::helper('starshipit/starship');
14
+
15
+ $orderObj = Mage::getModel('starshipit/orders');
16
+
17
+ //get the configuration array (username, apikey etc.)
18
+ $para = $orderObj->getDataForExistingOredrs();
19
+
20
+
21
+ //get existing orders from Starship
22
+ $existingOrderRes = $helper->getExistingOrders($para);
23
+
24
+ if(empty($existingOrderRes->GetExistingResult->ErrorMessage)){
25
+ $resOrders = $existingOrderRes
26
+ ->GetExistingResult
27
+ ->Orders;
28
+ $odersArr = array();
29
+ try{
30
+ if(isset($resOrders->ExistingOrder)){
31
+ $resExistingOrder = $resOrders->ExistingOrder;
32
+ $odersArr = $helper->finalOrderArrOverStarShip($resExistingOrder);
33
+ }
34
+ }catch(Exception $e){
35
+
36
+ $this->_noticeStatus = 3;
37
+ $noticeMsg .= $e->getMessage();
38
+ }
39
+
40
+ if(!empty($odersArr)) {
41
+ //get Orders array to sync with StarShip
42
+ $ordersToPass = $orderObj->prepareOrderToPass($odersArr);
43
+
44
+ if(empty($ordersToPass['Orders'])) {
45
+ $noticeMsg .= 'No order found for sync to Starship';
46
+ $this->_noticeStatus = 0;
47
+ }else{
48
+
49
+ $noticeMsg .= 'Orders sync to Starship';
50
+ $this->_noticeStatus = 1;
51
+ }
52
+
53
+ //Sync orders and store resonpse
54
+ $resShipSync = $helper->addShipment($ordersToPass);
55
+
56
+ //Change Order State and add Track Info
57
+ if($helper->checkCondForMagentoWritebacks($resShipSync)) {
58
+ $resWriteBack = $helper->getMagentoWritebacks();
59
+ //$this->getResponse()->setBody(print_r($resWriteBack));
60
+ if(isset($resWriteBack->GetMagentoWritebacksResult->WritebackStruct)){
61
+ $isTackadded = $orderObj->addTrackingInfo($resWriteBack);
62
+ if($isTackadded) {
63
+
64
+ $noticeMsg .= 'Tracking Info SAVED';
65
+ $this->_noticeStatus += 1;
66
+ }
67
+ }else{
68
+
69
+ $noticeMsg .= 'No tracking info found on Starship';
70
+ $this->_noticeStatus += 0;
71
+ }
72
+ }else{
73
+ if($this->_noticeStatus){
74
+ $this->_noticeStatus += 1;
75
+ }
76
+ }
77
+ }
78
+ }else{
79
+
80
+ $this->_noticeStatus = 3;
81
+ $noticeMsg .= $existingOrderRes->GetExistingResult->ErrorMessage;
82
+
83
+ }
84
+
85
+ $this->_addNotice($noticeMsg);
86
+
87
+ }
88
+
89
+ protected function _addNotice($msg)
90
+ {
91
+ $notice = Mage::getModel('adminNotification/inbox');
92
+
93
+ switch ($this->_noticeStatus) {
94
+ case 0:
95
+ $notice->add(2,$this->_noticeTitle,$msg);
96
+ break;
97
+ case 1:
98
+ $notice->add(3,$this->_noticeTitle,$msg);
99
+ break;
100
+ case 3:
101
+ $notice->add(1,$this->_noticeTitle,$msg);
102
+ break;
103
+
104
+ default:
105
+ $notice->add(4,$this->_noticeTitle,$msg);
106
+ break;
107
+ }
108
+
109
+ }
110
+ }
app/code/community/Rvtech/Starshipit/Model/Orders.php ADDED
@@ -0,0 +1,468 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Rvtech_Starshipit_Model_Orders extends Mage_Sales_Model_Order {
4
+
5
+ protected $_User;
6
+
7
+ protected $_APIKey;
8
+
9
+ protected $_auth = array();
10
+
11
+ protected $_orderInMage = array();
12
+
13
+ protected $_orderInStarShip = array();
14
+
15
+ protected $_dataForExistingOredrs = array();
16
+
17
+ public function _getUserName() {
18
+
19
+ return Mage::getStoreConfig('starshipit_options/group1/username');
20
+ }
21
+
22
+ public function _getAPIKey() {
23
+
24
+ return Mage::getStoreConfig('starshipit_options/group1/api_key');
25
+ }
26
+
27
+ protected function _getUpdateOrderConfig() {
28
+
29
+ return Mage::getStoreConfig('starshipit_options/group1/update_orders');
30
+ }
31
+
32
+ protected function _getSyncOrderConfig() {
33
+
34
+ return Mage::getStoreConfig('starshipit_options/group1/sync_orders');
35
+ }
36
+
37
+ protected function _getSyncOrderAutoConfig() {
38
+
39
+ return Mage::getStoreConfig('starshipit_options/group1/sync_orders_yesno');
40
+ }
41
+
42
+ protected function _getFormattedTelephone($order){
43
+
44
+ return str_replace('-', '', $order->getShippingAddress()->getData('telephone'));
45
+ }
46
+
47
+ protected function _saveStoreConfig($postData) {
48
+
49
+ Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
50
+ Mage::getModel('core/config')
51
+ ->saveConfig('starshipit_options/group1/username', $postData['username']);
52
+ Mage::getModel('core/config')
53
+ ->saveConfig('starshipit_options/group1/api_key', $postData['api_key']);
54
+ Mage::getModel('core/config')
55
+ ->saveConfig('starshipit_options/group1/update_orders', $postData['update_orders']);
56
+ Mage::getModel('core/config')
57
+ ->saveConfig('starshipit_options/group1/sync_orders', $postData['sync_orders']);
58
+ Mage::getModel('core/config')
59
+ ->saveConfig('starshipit_options/group1/sync_orders_yesno', $postData['sync_orders_yesno']);
60
+ }
61
+
62
+
63
+ public function getAuthDetails() {
64
+
65
+ $this->_auth = array(
66
+
67
+ 'userName' => $this->_getUserName(),
68
+ 'apiKey' => $this->_getAPIKey()
69
+ );
70
+ return $this->_auth;
71
+ }
72
+
73
+
74
+ public function getDataForExistingOredrs($postData = array()) {
75
+
76
+ if(empty($postData))
77
+ {
78
+ return $this->_dataForExistingOredrs = array(
79
+
80
+ 'User' => $this->_getUserName(),
81
+ 'APIKey' => $this->_getAPIKey(),
82
+ 'Days' => $this->_getSyncOrderConfig(),
83
+ 'Orders' => $this->_getUpdateOrderConfig(),
84
+
85
+ );
86
+ }
87
+
88
+ $this->_saveStoreConfig($postData);
89
+
90
+ $this->_dataForExistingOredrs = array(
91
+
92
+ 'User' => $postData['username'],
93
+ 'APIKey' => $postData['api_key'],
94
+ 'Days' => $postData['sync_orders'],
95
+ 'Orders' => $postData['update_orders'],
96
+
97
+ );
98
+
99
+ return $this->_dataForExistingOredrs;
100
+ }
101
+
102
+ /**
103
+ * Convert date array to UTC
104
+ * for comaprison purpose
105
+ * @return array
106
+ */
107
+
108
+ protected function _formatDateUtc($dateArr = array()){
109
+
110
+ $dateUtcArr = array();
111
+ foreach ($dateArr as $id => $date) {
112
+ $dateUtcArr[$id] = strtotime($date);
113
+ }
114
+ return $dateUtcArr;
115
+ }
116
+
117
+ /**
118
+ * Convert date in Starship Accpetable Format
119
+ *
120
+ * @return string
121
+ */
122
+
123
+ protected function _formatDateStarShip($date){
124
+
125
+ return date('d/m/Y h:i:s A',strtotime($date));
126
+ }
127
+
128
+ /**
129
+ * Check all oredrs in Magento with status Processing
130
+ * and set their Ids as key and Update_at as value in Protected array _orderInMage
131
+ * @return none
132
+ */
133
+
134
+ protected function _checkOrdersInMage() {
135
+
136
+ foreach ($this->getCollection() as $order) {
137
+ if(strtolower($order->getStatusLabel()) === self::STATE_PROCESSING) {
138
+ $this->_orderInMage[$order->getData('entity_id')] = $order->getData('updated_at');
139
+ }
140
+ }
141
+
142
+ }
143
+
144
+ /**
145
+ * Prepare a final array of Oredrs via comparing Orders in Mage and Oredrs in Starship
146
+ *
147
+ * @return array
148
+ */
149
+
150
+
151
+ protected function _checkOrderToProcess($orders = array()) {
152
+
153
+ $ordersToProcess = array();
154
+ $this->_checkOrdersInMage();
155
+ $orderInStarShipUtc = $this->_formatDateUtc($this->_orderInStarShip);
156
+ $orderInMageUtc = $this->_formatDateUtc($this->_orderInMage);
157
+
158
+ foreach ($orderInMageUtc as $key => $value) {
159
+ if (array_key_exists($key,$orderInStarShipUtc)) {
160
+ if($value >= $orderInStarShipUtc[$key]){
161
+ $ordersToProcess[] = $key;
162
+ }
163
+ }else{
164
+ $ordersToProcess[] = $key;
165
+ }
166
+
167
+ }
168
+
169
+ return $ordersToProcess;
170
+ }
171
+
172
+ /**
173
+ * Prepare Orders details to send over Starship
174
+ *
175
+ * @return array
176
+ */
177
+
178
+ protected function _orderShippedArr($ordersToProcess = array()){
179
+
180
+ $orderList = array();
181
+ foreach ($this->getCollection() as $order) {
182
+
183
+ if(in_array($order->getData('entity_id'),$ordersToProcess)) {
184
+
185
+ $orderData['Id'] = $order->getData('entity_id');
186
+ $orderData['SequenceNumber'] = $order->getData('entity_id');
187
+ $orderData['SequenceGuid'] = null;
188
+ $orderData['OrginalSeqNumber'] = 0;
189
+ $orderData['AccountingAppId'] = 3;
190
+ $orderData['ShippedDate'] = $this->_getOrderShipmentCreatedDate($order);
191
+ $orderData['Date'] = $this->_formatDateStarShip($order->getData('created_at'));
192
+ $orderData['To'] = $this->_getOrderTo($order);
193
+ $orderData['OurRef'] = (string) $order->getData('increment_id');
194
+ $orderData['TheirRef'] = (string) $order->getData('entity_id');
195
+ $orderData['ConsigneeCode'] = '';
196
+ $orderData['Email'] = (string) $order->getData('customer_email');
197
+ $orderData['Telephone'] = (string) $this->_getFormattedTelephone($order);
198
+ $orderData['AddressString'] = (string) $this->_getOrderShippingAddress($order,true);
199
+ $orderData['ItemsString'] = (string) $this->_getOrderItemsStr($order);
200
+ $orderData['TrackingNumber'] = '';
201
+ $orderData['CarrierCode'] = 0;
202
+ $orderData['ProductName'] = 'P';
203
+ $orderData['ErrorMessage'] = '';
204
+ $orderData['Status'] = 0;
205
+ $orderData['TrackingCode'] = '';
206
+ $orderData['Invoiced'] = '';
207
+ $orderData['OrderValue'] = (float) $order->getData('total_qty_ordered');
208
+ $orderData['OrderCurrency'] = (string) $order->getData('global_currency_code');
209
+ $orderData['AddressChecked'] = true;
210
+ $orderData['AddressValidated'] = true;
211
+ $orderData['ShipmentDescription'] = "ShipmentDescription";
212
+ $orderData['Items'] = $this->_getOrderItemsArr($order);
213
+ $orderData['AddressDetails'] = $this->_getOrderShippingAddress($order);
214
+ $orderData['BillingAddress'] = (string) $this->_getOrderBillingAddress($order);
215
+ $orderData['LastUpdatedatSource'] = (string) $this->_formatDateStarShip($order->getData('updated_at'));
216
+ $orderList[] = $orderData;
217
+
218
+ }
219
+
220
+ }
221
+
222
+ return $orderList;
223
+ }
224
+
225
+ /**
226
+ * Get shipment created date
227
+ *
228
+ * @return string
229
+ */
230
+
231
+ protected function _getOrderShipmentCreatedDate($order){
232
+
233
+ $date = '';
234
+ if(!$order->canShip()){
235
+ $shipData = $order->getShipmentsCollection()->getData();
236
+ $date = $this->_formatDateStarShip($shipData[0]['created_at']);
237
+ }
238
+
239
+ return $date;
240
+ }
241
+
242
+ /**
243
+ * Get person name
244
+ *
245
+ * @return string
246
+ */
247
+
248
+ protected function _getOrderTo($order){
249
+
250
+ $firstName = $order->getShippingAddress()->getData('firstname');
251
+ $lastName = $order->getShippingAddress()->getData('lastname');
252
+ $name = $firstName." ".$lastName;
253
+ return $name;
254
+ }
255
+
256
+ /**
257
+ * Get country full name
258
+ *
259
+ * @return string
260
+ */
261
+
262
+ protected function _getCountryNameByCode($country_code){
263
+
264
+ return Mage::app()->getLocale()->getCountryTranslation($country_code);
265
+ }
266
+
267
+ /**
268
+ * Get shippment address
269
+ *
270
+ * @return string/array
271
+ */
272
+
273
+ protected function _getOrderShippingAddress($order, $string = false ) {
274
+
275
+ $addArr = array();
276
+ $AddressDTO = array();
277
+ if($string){
278
+ $streetAdd = $order->getShippingAddress()->getData('street');
279
+ $street = trim(preg_replace('/\s+/', ' ', $streetAdd));
280
+ $city = $order->getShippingAddress()->getData('city');
281
+ $postcode = $order->getShippingAddress()->getData('postcode');
282
+ $countryCode = $order->getShippingAddress()->getData('country_id');
283
+ $country = $this->_getCountryNameByCode($countryCode);
284
+ $addString = $street."k ".$city." ".$postcode." ".$country;
285
+ return $addString;
286
+ }
287
+
288
+ $addArr['City'] = $order->getShippingAddress()->getData('city');
289
+ $addArr['Company'] = $order->getShippingAddress()->getData('company');
290
+ $addArr['Country'] = $this->_getCountryNameByCode($order->getShippingAddress()->getData('country_id'));
291
+ $addArr['CountryId'] = $order->getShippingAddress()->getData('country_id');
292
+ $addArr['Instructions'] = '';
293
+ $addArr['PostCode'] = $order->getShippingAddress()->getData('postcode');
294
+ $addArr['Region'] = $order->getShippingAddress()->getData('region');
295
+ $addArr['State'] = '';
296
+ $addArr['Street'] = $order->getShippingAddress()->getData('street');
297
+ $addArr['Suburb'] = '';
298
+ $AddressDTO['AddressDTO'] = $addArr;
299
+ return $addArr;
300
+
301
+ }
302
+
303
+ /**
304
+ * Get billing addresss
305
+ *
306
+ * @return string
307
+ */
308
+
309
+ protected function _getOrderBillingAddress($order) {
310
+
311
+ $streetAdd = $order->getBillingAddress()->getData('street');
312
+ $street = trim(preg_replace('/\s+/', ' ', $streetAdd));
313
+ $city = $order->getBillingAddress()->getData('city');
314
+ $postcode = $order->getBillingAddress()->getData('postcode');
315
+ $country = $order->getBillingAddress()->getData('country_id');
316
+ $add = $street." ".$city." ".$postcode." ".$country;
317
+
318
+ return $add;
319
+
320
+ }
321
+
322
+ /**
323
+ * Get Oredrs Items as string
324
+ *
325
+ * @return string
326
+ */
327
+ protected function _getOrderItemsStr($order) {
328
+
329
+ $allItemsArr = $order->getAllVisibleItems();
330
+ $itemsStr = '';
331
+ $lastItemArr = end($allItemsArr);
332
+ $count = count($allItemsArr);
333
+ foreach ($allItemsArr as $item) {
334
+ $itemsStr .= $item->getName();
335
+ if( $count > 1 && $item->getId() != $lastItemArr->getId())
336
+ $itemsStr .= ', ';
337
+ }
338
+
339
+ return $itemsStr;
340
+
341
+ }
342
+
343
+ /**
344
+ * Get Order's items
345
+ *
346
+ * @return array
347
+ */
348
+
349
+ protected function _getOrderItemsArr($order, $string = false) {
350
+
351
+ $ItemsArr = array();
352
+ $shipmentitems = array();
353
+ foreach ($order->getAllVisibleItems() as $item) {
354
+ $ItemsArr['Description'] = (string)$item->getName();
355
+ $ItemsArr['Country'] = (string)$order->getShippingAddress()->getData('country_id');;
356
+ $ItemsArr['Price'] = (float)$item->getPrice();
357
+ $ItemsArr['Quantity'] = (int)round($item->getQtyOrdered());
358
+ $shipmentitems['ShipmentItem'][] = $ItemsArr;
359
+ }
360
+
361
+ return $shipmentitems;
362
+
363
+ }
364
+
365
+ /**
366
+ * Prepare final Orders Array with auth details to pass
367
+ * over the star ship
368
+ * @return array
369
+ */
370
+
371
+ public function prepareOrderToPass($orders = array()) {
372
+
373
+ $this->_orderInStarShip = $orders;
374
+ $ordersToProcess = $this->_checkOrderToProcess($orders);
375
+ $arrOrdersToPass['UserName'] = $this->_getUserName();
376
+ $arrOrdersToPass['Password'] = $this->_getAPIKey();
377
+ $arrOrdersToPass['Orders'] = $this->_orderShippedArr($ordersToProcess);
378
+
379
+
380
+ return $arrOrdersToPass;
381
+
382
+
383
+ }
384
+
385
+ public function needToUpdateOredrsInMage(){
386
+
387
+ return $this->_getUpdateOrderConfig();
388
+ }
389
+
390
+
391
+
392
+ /**
393
+ * Create shippment and set the tracking info to ot
394
+ *
395
+ * @return
396
+ */
397
+
398
+ protected function _setAndSaveTrackingInfo($orderId,$orderCarrier,$orderTrackingNumber){
399
+
400
+ foreach ($this->getCollection() as $order) {
401
+ if($order->getData('entity_id') == $orderId && $order->canShip()){
402
+
403
+ try {
404
+
405
+ $shipment = $order->prepareShipment();
406
+ $shipment->register();
407
+ $order->setIsInProcess(true);
408
+ $order->addStatusHistoryComment('Automatically SHIPPED by Starship.', false);
409
+ $transactionSave = Mage::getModel('core/resource_transaction')
410
+ ->addObject($shipment)
411
+ ->addObject($shipment->getOrder())
412
+ ->save();
413
+
414
+ if($shipment->getId() != '') {
415
+ try{
416
+ $track = Mage::getModel('sales/order_shipment_track')
417
+ ->setShipment($shipment)
418
+ ->setData('number', $orderTrackingNumber)
419
+ ->setData('carrier_code', strtolower($orderCarrier))
420
+ ->setData('order_id', $shipment->getData('order_id'))
421
+ ->save();
422
+ return true;
423
+ }catch(Exception $e){
424
+
425
+ Mage::getSingleton('core/session')
426
+ ->addError($this->__('Shipment added But Error while adding Tracking details Error is: ').$e->getMessage());
427
+ }
428
+ }
429
+ }catch(Exception $e){
430
+ $order->addStatusHistoryComment('Starship_Invoicer: Exception occurred during action. Exception message: '.$e->getMessage(), false);
431
+ $order->save();
432
+ Mage::getSingleton('core/session')->addError($this->__('Exception Occured: ').$e->getMessage());
433
+ }
434
+
435
+ }
436
+ }
437
+
438
+ }
439
+
440
+ public function addTrackingInfo($trackingInfo) {
441
+
442
+ $WritebackStruct = $trackingInfo->GetMagentoWritebacksResult->WritebackStruct;
443
+
444
+ if(is_array($WritebackStruct)){
445
+
446
+ foreach ($WritebackStruct as $orderTrackInfo) {
447
+ $orderId = $orderTrackInfo->Sequence;
448
+ $orderCarrier = $orderTrackInfo->Carrier;
449
+ $orderTrackingNumber = $orderTrackInfo->TrackingNumber;
450
+ $this->_setAndSaveTrackingInfo($orderId,$orderCarrier,$orderTrackingNumber);
451
+ }
452
+
453
+ return true;
454
+
455
+ }else{
456
+ $orderId = $WritebackStruct->Sequence;
457
+ $orderCarrier = $WritebackStruct->Carrier;
458
+ $orderTrackingNumber = $WritebackStruct->TrackingNumber;
459
+ $this->_setAndSaveTrackingInfo($orderId,$orderCarrier,$orderTrackingNumber);
460
+
461
+ return true;
462
+ }
463
+
464
+ return false;
465
+
466
+
467
+ }
468
+ }
app/code/community/Rvtech/Starshipit/Model/Orders.php_ORG ADDED
@@ -0,0 +1,437 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Rvtech_Starshipit_Model_Orders extends Mage_Sales_Model_Order {
4
+
5
+ protected $_User;
6
+
7
+ protected $_APIKey;
8
+
9
+ protected $_auth = array();
10
+
11
+ protected $_orderInMage = array();
12
+
13
+ protected $_orderInStarShip = array();
14
+
15
+ protected $_dataForExistingOredrs = array();
16
+
17
+ public function _getUserName() {
18
+
19
+ return Mage::getStoreConfig('starshipit_options/group1/username');
20
+ }
21
+
22
+ public function _getAPIKey() {
23
+
24
+ return Mage::getStoreConfig('starshipit_options/group1/api_key');
25
+ }
26
+
27
+ protected function _getUpdateOrderConfig() {
28
+
29
+ return Mage::getStoreConfig('starshipit_options/group1/update_orders');
30
+ }
31
+
32
+ protected function _getSyncOrderConfig() {
33
+
34
+ return Mage::getStoreConfig('starshipit_options/group1/sync_orders');
35
+ }
36
+
37
+ protected function _getSyncOrderAutoConfig() {
38
+
39
+ return Mage::getStoreConfig('starshipit_options/group1/sync_orders_yesno');
40
+ }
41
+
42
+ protected function _getFormattedTelephone($order){
43
+
44
+ return str_replace('-', '', $order->getShippingAddress()->getData('telephone'));
45
+ }
46
+
47
+ public function getAuthDetails() {
48
+
49
+ $this->_auth = array(
50
+
51
+ 'userName' => $this->_getUserName(),
52
+ 'apiKey' => $this->_getAPIKey()
53
+ );
54
+ return $this->_auth;
55
+ }
56
+
57
+ public function getDataForExistingOredrs() {
58
+
59
+ $this->_dataForExistingOredrs = array(
60
+
61
+ 'User' => $this->_getUserName(),
62
+ 'APIKey' => $this->_getAPIKey(),
63
+ 'Days' => $this->_getSyncOrderConfig(),
64
+ 'Orders' => $this->_getUpdateOrderConfig(),
65
+
66
+ );
67
+
68
+ return $this->_dataForExistingOredrs;
69
+ }
70
+
71
+ /**
72
+ * Convert date array to UTC
73
+ * for comaprison purpose
74
+ * @return array
75
+ */
76
+
77
+ protected function _formatDateUtc($dateArr = array()){
78
+
79
+ $dateUtcArr = array();
80
+ foreach ($dateArr as $id => $date) {
81
+ $dateUtcArr[$id] = strtotime($date);
82
+ }
83
+ return $dateUtcArr;
84
+ }
85
+
86
+ /**
87
+ * Convert date in Starship Accpetable Format
88
+ *
89
+ * @return string
90
+ */
91
+
92
+ protected function _formatDateStarShip($date){
93
+
94
+ return date('d/m/Y h:i:s A',strtotime($date));
95
+ }
96
+
97
+ /**
98
+ * Check all oredrs in Magento with status Processing
99
+ * and set their Ids as key and Update_at as value in Protected array _orderInMage
100
+ * @return none
101
+ */
102
+
103
+ protected function _checkOrdersInMage() {
104
+
105
+ foreach ($this->getCollection() as $order) {
106
+ if(strtolower($order->getStatusLabel()) === self::STATE_PROCESSING) {
107
+ $this->_orderInMage[$order->getData('entity_id')] = $order->getData('updated_at');
108
+ }
109
+ }
110
+
111
+ }
112
+
113
+ /**
114
+ * Prepare a final array of Oredrs via comparing Orders in Mage and Oredrs in Starship
115
+ *
116
+ * @return array
117
+ */
118
+
119
+
120
+ protected function _checkOrderToProcess($orders = array()) {
121
+
122
+ $ordersToProcess = array();
123
+ $this->_checkOrdersInMage();
124
+ $orderInStarShipUtc = $this->_formatDateUtc($this->_orderInStarShip);
125
+ $orderInMageUtc = $this->_formatDateUtc($this->_orderInMage);
126
+
127
+ foreach ($orderInMageUtc as $key => $value) {
128
+ if (array_key_exists($key,$orderInStarShipUtc)) {
129
+ if($value >= $orderInStarShipUtc[$key]){
130
+ $ordersToProcess[] = $key;
131
+ }
132
+ }else{
133
+ $ordersToProcess[] = $key;
134
+ }
135
+
136
+ }
137
+
138
+ return $ordersToProcess;
139
+ }
140
+
141
+ /**
142
+ * Prepare Orders details to send over Starship
143
+ *
144
+ * @return array
145
+ */
146
+
147
+ protected function _orderShippedArr($ordersToProcess = array()){
148
+
149
+ $orderList = array();
150
+ foreach ($this->getCollection() as $order) {
151
+
152
+ if(in_array($order->getData('entity_id'),$ordersToProcess)) {
153
+
154
+ $orderData['Id'] = $order->getData('entity_id');
155
+ $orderData['SequenceNumber'] = $order->getData('entity_id');
156
+ $orderData['SequenceGuid'] = null;
157
+ $orderData['OrginalSeqNumber'] = 0;
158
+ $orderData['AccountingAppId'] = 3;
159
+ $orderData['ShippedDate'] = $this->_getOrderShipmentCreatedDate($order);
160
+ $orderData['Date'] = $this->_formatDateStarShip($order->getData('created_at'));
161
+ $orderData['To'] = $this->_getOrderTo($order);
162
+ $orderData['OurRef'] = (string) $order->getData('increment_id');
163
+ $orderData['TheirRef'] = (string) $order->getData('entity_id');
164
+ $orderData['ConsigneeCode'] = '';
165
+ $orderData['Email'] = (string) $order->getData('customer_email');
166
+ $orderData['Telephone'] = (string) $this->_getFormattedTelephone($order);
167
+ $orderData['AddressString'] = (string) $this->_getOrderShippingAddress($order,true);
168
+ $orderData['ItemsString'] = (string) $this->_getOrderItemsStr($order);
169
+ $orderData['TrackingNumber'] = '';
170
+ $orderData['CarrierCode'] = 0;
171
+ $orderData['ProductName'] = 'P';
172
+ $orderData['ErrorMessage'] = '';
173
+ $orderData['Status'] = 0;
174
+ $orderData['TrackingCode'] = '';
175
+ $orderData['Invoiced'] = '';
176
+ $orderData['OrderValue'] = (float) $order->getData('total_qty_ordered');
177
+ $orderData['OrderCurrency'] = (string) $order->getData('global_currency_code');
178
+ $orderData['AddressChecked'] = true;
179
+ $orderData['AddressValidated'] = true;
180
+ $orderData['ShipmentDescription'] = "ShipmentDescription";
181
+ $orderData['Items'] = $this->_getOrderItemsArr($order);
182
+ $orderData['AddressDetails'] = $this->_getOrderShippingAddress($order);
183
+ $orderData['BillingAddress'] = (string) $this->_getOrderBillingAddress($order);
184
+ $orderData['LastUpdatedatSource'] = (string) $this->_formatDateStarShip($order->getData('updated_at'));
185
+ $orderList[] = $orderData;
186
+
187
+ }
188
+
189
+ }
190
+
191
+ return $orderList;
192
+ }
193
+
194
+ /**
195
+ * Get shipment created date
196
+ *
197
+ * @return string
198
+ */
199
+
200
+ protected function _getOrderShipmentCreatedDate($order){
201
+
202
+ $date = '';
203
+ if(!$order->canShip()){
204
+ $shipData = $order->getShipmentsCollection()->getData();
205
+ $date = $this->_formatDateStarShip($shipData[0]['created_at']);
206
+ }
207
+
208
+ return $date;
209
+ }
210
+
211
+ /**
212
+ * Get person name
213
+ *
214
+ * @return string
215
+ */
216
+
217
+ protected function _getOrderTo($order){
218
+
219
+ $firstName = $order->getShippingAddress()->getData('firstname');
220
+ $lastName = $order->getShippingAddress()->getData('lastname');
221
+ $name = $firstName." ".$lastName;
222
+ return $name;
223
+ }
224
+
225
+ /**
226
+ * Get country full name
227
+ *
228
+ * @return string
229
+ */
230
+
231
+ protected function _getCountryNameByCode($country_code){
232
+
233
+ return Mage::app()->getLocale()->getCountryTranslation($country_code);
234
+ }
235
+
236
+ /**
237
+ * Get shippment address
238
+ *
239
+ * @return string/array
240
+ */
241
+
242
+ protected function _getOrderShippingAddress($order, $string = false ) {
243
+
244
+ $addArr = array();
245
+ $AddressDTO = array();
246
+ if($string){
247
+ $streetAdd = $order->getShippingAddress()->getData('street');
248
+ $street = trim(preg_replace('/\s+/', ' ', $streetAdd));
249
+ $city = $order->getShippingAddress()->getData('city');
250
+ $postcode = $order->getShippingAddress()->getData('postcode');
251
+ $countryCode = $order->getShippingAddress()->getData('country_id');
252
+ $country = $this->_getCountryNameByCode($countryCode);
253
+ $addString = $street."k ".$city." ".$postcode." ".$country;
254
+ return $addString;
255
+ }
256
+
257
+ $addArr['City'] = $order->getShippingAddress()->getData('city');
258
+ $addArr['Company'] = $order->getShippingAddress()->getData('company');
259
+ $addArr['Country'] = $this->_getCountryNameByCode($order->getShippingAddress()->getData('country_id'));
260
+ $addArr['CountryId'] = $order->getShippingAddress()->getData('country_id');
261
+ $addArr['Instructions'] = '';
262
+ $addArr['PostCode'] = $order->getShippingAddress()->getData('postcode');
263
+ $addArr['Region'] = $order->getShippingAddress()->getData('region');
264
+ $addArr['State'] = '';
265
+ $addArr['Street'] = $order->getShippingAddress()->getData('street');
266
+ $addArr['Suburb'] = '';
267
+ $AddressDTO['AddressDTO'] = $addArr;
268
+ return $addArr;
269
+
270
+ }
271
+
272
+ /**
273
+ * Get billing addresss
274
+ *
275
+ * @return string
276
+ */
277
+
278
+ protected function _getOrderBillingAddress($order) {
279
+
280
+ $streetAdd = $order->getBillingAddress()->getData('street');
281
+ $street = trim(preg_replace('/\s+/', ' ', $streetAdd));
282
+ $city = $order->getBillingAddress()->getData('city');
283
+ $postcode = $order->getBillingAddress()->getData('postcode');
284
+ $country = $order->getBillingAddress()->getData('country_id');
285
+ $add = $street." ".$city." ".$postcode." ".$country;
286
+
287
+ return $add;
288
+
289
+ }
290
+
291
+ /**
292
+ * Get Oredrs Items as string
293
+ *
294
+ * @return string
295
+ */
296
+ protected function _getOrderItemsStr($order) {
297
+
298
+ $allItemsArr = $order->getAllVisibleItems();
299
+ $itemsStr = '';
300
+ $lastItemArr = end($allItemsArr);
301
+ $count = count($allItemsArr);
302
+ foreach ($allItemsArr as $item) {
303
+ $itemsStr .= $item->getName();
304
+ if( $count > 1 && $item->getId() != $lastItemArr->getId())
305
+ $itemsStr .= ', ';
306
+ }
307
+
308
+ return $itemsStr;
309
+
310
+ }
311
+
312
+ /**
313
+ * Get Order's items
314
+ *
315
+ * @return array
316
+ */
317
+
318
+ protected function _getOrderItemsArr($order, $string = false) {
319
+
320
+ $ItemsArr = array();
321
+ $shipmentitems = array();
322
+ foreach ($order->getAllVisibleItems() as $item) {
323
+ $ItemsArr['Description'] = (string)$item->getName();
324
+ $ItemsArr['Country'] = (string)$order->getShippingAddress()->getData('country_id');;
325
+ $ItemsArr['Price'] = (float)$item->getPrice();
326
+ $ItemsArr['Quantity'] = (int)round($item->getQtyOrdered());
327
+ $shipmentitems['ShipmentItem'][] = $ItemsArr;
328
+ }
329
+
330
+ return $shipmentitems;
331
+
332
+ }
333
+
334
+ /**
335
+ * Prepare final Orders Array with auth details to pass
336
+ * over the star ship
337
+ * @return array
338
+ */
339
+
340
+ public function prepareOrderToPass($orders = array()) {
341
+
342
+ $this->_orderInStarShip = $orders;
343
+ $ordersToProcess = $this->_checkOrderToProcess($orders);
344
+ $arrOrdersToPass['UserName'] = $this->_getUserName();
345
+ $arrOrdersToPass['Password'] = $this->_getAPIKey();
346
+ $arrOrdersToPass['Orders'] = $this->_orderShippedArr($ordersToProcess);
347
+
348
+
349
+ return $arrOrdersToPass;
350
+
351
+
352
+ }
353
+
354
+ public function needToUpdateOredrsInMage(){
355
+
356
+ return $this->_getUpdateOrderConfig();
357
+ }
358
+
359
+
360
+
361
+ /**
362
+ * Create shippment and set the tracking info to ot
363
+ *
364
+ * @return
365
+ */
366
+
367
+ protected function _setAndSaveTrackingInfo($orderId,$orderCarrier,$orderTrackingNumber){
368
+
369
+ foreach ($this->getCollection() as $order) {
370
+ if($order->getData('entity_id') == $orderId && $order->canShip()){
371
+
372
+ try {
373
+
374
+ $shipment = $order->prepareShipment();
375
+ $shipment->register();
376
+ $order->setIsInProcess(true);
377
+ $order->addStatusHistoryComment('Automatically SHIPPED by Starship.', false);
378
+ $transactionSave = Mage::getModel('core/resource_transaction')
379
+ ->addObject($shipment)
380
+ ->addObject($shipment->getOrder())
381
+ ->save();
382
+
383
+ if($shipment->getId() != '') {
384
+ try{
385
+ $track = Mage::getModel('sales/order_shipment_track')
386
+ ->setShipment($shipment)
387
+ ->setData('number', $orderTrackingNumber)
388
+ ->setData('carrier_code', strtolower($orderCarrier))
389
+ ->setData('order_id', $shipment->getData('order_id'))
390
+ ->save();
391
+ return true;
392
+ }catch(Exception $e){
393
+
394
+ Mage::getSingleton('core/session')
395
+ ->addError($this->__('Shipment added But Error while adding Tracking details Error is: ').$e->getMessage());
396
+ }
397
+ }
398
+ }catch(Exception $e){
399
+ $order->addStatusHistoryComment('Starship_Invoicer: Exception occurred during action. Exception message: '.$e->getMessage(), false);
400
+ $order->save();
401
+ Mage::getSingleton('core/session')->addError($this->__('Exception Occured: ').$e->getMessage());
402
+ }
403
+
404
+ }
405
+ }
406
+
407
+ }
408
+
409
+ public function addTrackingInfo($trackingInfo) {
410
+
411
+ $WritebackStruct = $trackingInfo->GetMagentoWritebacksResult->WritebackStruct;
412
+
413
+ if(is_array($WritebackStruct)){
414
+
415
+ foreach ($WritebackStruct as $orderTrackInfo) {
416
+ $orderId = $orderTrackInfo->Sequence;
417
+ $orderCarrier = $orderTrackInfo->Carrier;
418
+ $orderTrackingNumber = $orderTrackInfo->TrackingNumber;
419
+ $this->_setAndSaveTrackingInfo($orderId,$orderCarrier,$orderTrackingNumber);
420
+ }
421
+
422
+ return true;
423
+
424
+ }else{
425
+ $orderId = $WritebackStruct->Sequence;
426
+ $orderCarrier = $WritebackStruct->Carrier;
427
+ $orderTrackingNumber = $WritebackStruct->TrackingNumber;
428
+ $this->_setAndSaveTrackingInfo($orderId,$orderCarrier,$orderTrackingNumber);
429
+
430
+ return true;
431
+ }
432
+
433
+ return false;
434
+
435
+
436
+ }
437
+ }
app/code/community/Rvtech/Starshipit/controllers/Adminhtml/StarshipitController.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipit_Adminhtml_StarshipitController extends Mage_Adminhtml_Controller_Action
3
+ {
4
+
5
+
6
+ /**
7
+ * Return some checking result
8
+ *
9
+ * @return void
10
+ */
11
+ public function testAction()
12
+ {
13
+ $params = array();
14
+ $params = $this->getRequest()->getParams();
15
+ // $this->getResponse()->setBody(print_r($params));
16
+ //break;
17
+ $autoTo = array(
18
+ 'userName' => $params['groups']['group1']['fields']['username']['value'],
19
+ 'apiKey' => $params['groups']['group1']['fields']['api_key']['value']
20
+ );
21
+ // $this->getResponse()->setBody(print_r($autoTo));
22
+
23
+ $helper = Mage::helper('starshipit/starship');
24
+ $resStarShip = $helper->validateUser($autoTo);
25
+ if($resStarShip === 'Success'){
26
+ Mage::getSingleton('core/session')->addSuccess('Valid UserName And APIKey');
27
+ }
28
+ else{
29
+ Mage::getSingleton('core/session')->addError($resStarShip);
30
+ //$this->getResponse()->setBody(print_r($resStarShip));
31
+
32
+ }
33
+
34
+ Mage::app()->getResponse()->setBody(
35
+ $this->getLayout()->getMessagesBlock()->getGroupedHtml()
36
+ );
37
+ }
38
+
39
+ /**
40
+ * will sync orders
41
+ *
42
+ * @return void
43
+ */
44
+
45
+ public function syncOrderAction(){
46
+
47
+
48
+ $params = array();
49
+ $params = $this->getRequest()->getParams();
50
+ //$this->getResponse()->setBody($params);
51
+
52
+ // $user = $params['user'];
53
+ // $apikey = $params['apikey'];
54
+
55
+
56
+
57
+ $helper = Mage::helper('starshipit/starship');
58
+ $postData = $helper->arrangePostData($params);
59
+ //$this->getResponse()->setBody(print_r($postData));
60
+ $orderObj = Mage::getModel('starshipit/orders');
61
+
62
+ //get the configuration array (username, apikey etc.)
63
+ $para = $orderObj->getDataForExistingOredrs($postData);
64
+
65
+
66
+ //get existing orders from Starship
67
+ $existingOrderRes = $helper->getExistingOrders($para);
68
+
69
+ if(empty($existingOrderRes->GetExistingResult->ErrorMessage)){
70
+ $resOrders = $existingOrderRes
71
+ ->GetExistingResult
72
+ ->Orders;
73
+ $odersArr = array();
74
+ try{
75
+ if(isset($resOrders->ExistingOrder)){
76
+ $resExistingOrder = $resOrders->ExistingOrder;
77
+ $odersArr = $helper->finalOrderArrOverStarShip($resExistingOrder);
78
+ }
79
+ }catch(Exception $e){
80
+
81
+ Mage::getSingleton('core/session')->addError($e->getMessage());
82
+ }
83
+
84
+
85
+ //get Orders array to sync with StarShip
86
+ $ordersToPass = $orderObj->prepareOrderToPass($odersArr);
87
+
88
+ if(empty($ordersToPass['Orders'])) {
89
+ Mage::getSingleton('core/session')->addNotice('No order found for sync to Starship');
90
+ }else{
91
+ Mage::getSingleton('core/session')->addSuccess('Orders sync to Starship ');
92
+ }
93
+
94
+ //Sync orders and store resonpse
95
+ $resShipSync = $helper->addShipment($ordersToPass);
96
+
97
+ //Change Order State and add Track Info
98
+ if($helper->checkCondForMagentoWritebacks($resShipSync)) {
99
+ $resWriteBack = $helper->getMagentoWritebacks();
100
+ //$this->getResponse()->setBody(print_r($resWriteBack));
101
+ if(isset($resWriteBack->GetMagentoWritebacksResult->WritebackStruct)){
102
+ $isTackadded = $orderObj->addTrackingInfo($resWriteBack);
103
+ if($isTackadded) {
104
+ Mage::getSingleton('core/session')->addSuccess('Tracking Info SAVED');
105
+ }
106
+ }else{
107
+ Mage::getSingleton('core/session')->addNotice('No tracking info found on Starship');
108
+ }
109
+ }
110
+
111
+ }else{
112
+
113
+ Mage::getSingleton('core/session')->addError(
114
+ $existingOrderRes->GetExistingResult->ErrorMessage
115
+ );
116
+ }
117
+
118
+ Mage::app()->getResponse()->setBody(
119
+ $this->getLayout()->getMessagesBlock()->getGroupedHtml()
120
+ );
121
+
122
+ }
123
+
124
+ }
app/code/community/Rvtech/Starshipit/controllers/Adminhtml/StarshipitController.php_ORG ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipit_Adminhtml_StarshipitController extends Mage_Adminhtml_Controller_Action
3
+ {
4
+
5
+
6
+ /**
7
+ * Return some checking result
8
+ *
9
+ * @return void
10
+ */
11
+ public function testAction()
12
+ {
13
+
14
+ $helper = Mage::helper('starshipit/starship');
15
+ $resStarShip = $helper->validateUser();
16
+ if($resStarShip === 'Success'){
17
+ Mage::getSingleton('core/session')->addSuccess('Valid UserName And APIKey');
18
+ }
19
+ else{
20
+ Mage::getSingleton('core/session')->addError($resStarShip);
21
+ }
22
+
23
+ Mage::app()->getResponse()->setBody(
24
+ $this->getLayout()->getMessagesBlock()->getGroupedHtml()
25
+ );
26
+ }
27
+
28
+ /**
29
+ * will sync orders
30
+ *
31
+ * @return void
32
+ */
33
+
34
+ public function syncOrderAction(){
35
+
36
+ $helper = Mage::helper('starshipit/starship');
37
+
38
+ $orderObj = Mage::getModel('starshipit/orders');
39
+
40
+ //get the configuration array (username, apikey etc.)
41
+ $para = $orderObj->getDataForExistingOredrs();
42
+
43
+
44
+ //get existing orders from Starship
45
+ $existingOrderRes = $helper->getExistingOrders($para);
46
+
47
+ if(empty($existingOrderRes->GetExistingResult->ErrorMessage)){
48
+ $resOrders = $existingOrderRes
49
+ ->GetExistingResult
50
+ ->Orders;
51
+ $odersArr = array();
52
+ try{
53
+ if(isset($resOrders->ExistingOrder)){
54
+ $resExistingOrder = $resOrders->ExistingOrder;
55
+ $odersArr = $helper->finalOrderArrOverStarShip($resExistingOrder);
56
+ }
57
+ }catch(Exception $e){
58
+
59
+ Mage::getSingleton('core/session')->addError($e->getMessage());
60
+ }
61
+
62
+
63
+ //get Orders array to sync with StarShip
64
+ $ordersToPass = $orderObj->prepareOrderToPass($odersArr);
65
+
66
+ if(empty($ordersToPass['Orders'])) {
67
+ Mage::getSingleton('core/session')->addNotice('No order found for sync to Starship');
68
+ }else{
69
+ Mage::getSingleton('core/session')->addSuccess('Orders sync to Starship ');
70
+ }
71
+
72
+ //Sync orders and store resonpse
73
+ $resShipSync = $helper->addShipment($ordersToPass);
74
+
75
+ //Change Order State and add Track Info
76
+ if($helper->checkCondForMagentoWritebacks($resShipSync)) {
77
+ $resWriteBack = $helper->getMagentoWritebacks();
78
+ if(isset($resWriteBack->GetMagentoWritebacksResult->WritebackStruct)){
79
+ $isTackadded = $orderObj->addTrackingInfo($resWriteBack);
80
+ if($isTackadded) {
81
+ Mage::getSingleton('core/session')->addSuccess('Tracking Info SAVED');
82
+ }
83
+ }else{
84
+ Mage::getSingleton('core/session')->addNotice('No tracking info found on Starship');
85
+ }
86
+ }
87
+
88
+ }else{
89
+
90
+ Mage::getSingleton('core/session')->addError(
91
+ $existingOrderRes->GetExistingResult->ErrorMessage
92
+ );
93
+ }
94
+
95
+ Mage::app()->getResponse()->setBody(
96
+ $this->getLayout()->getMessagesBlock()->getGroupedHtml()
97
+ );
98
+
99
+ }
100
+
101
+ }
app/code/community/Rvtech/Starshipit/controllers/IndexController.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipit_IndexController extends Mage_Adminhtml_Controller_Action
3
+ {
4
+ public function indexAction() {
5
+ echo "hey there";
6
+ }
7
+ }
app/code/community/Rvtech/Starshipit/etc/adminhtml.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <menu>
4
+ <starshipit translate="title" module="starshipit">
5
+ <title>Starshipit</title>
6
+ <sort_order>9999</sort_order>
7
+ <children>
8
+ <configuration translate="title" module="starshipit">
9
+ <title>Configuration</title>
10
+ <sort_order>1</sort_order>
11
+ <action>adminhtml/system_config/edit/section/starshipit_options</action>
12
+ </configuration>
13
+ <notification translate="title" module="starshipit">
14
+ <title>Automatic Sync Notifications</title>
15
+ <sort_order>2</sort_order>
16
+ <action>adminhtml/notification</action>
17
+ </notification>
18
+ </children>
19
+ </starshipit>
20
+ </menu>
21
+ </config>
app/code/community/Rvtech/Starshipit/etc/config.xml ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <Rvtech_Starshipit>
4
+ <version>1.0.0.0</version>
5
+ </Rvtech_Starshipit>
6
+ </modules>
7
+ <admin>
8
+ <routers>
9
+ <adminhtml>
10
+ <args>
11
+ <modules>
12
+ <starshipit after="Mage_Adminhtml">Rvtech_Starshipit</starshipit>
13
+ </modules>
14
+ </args>
15
+ </adminhtml>
16
+ </routers>
17
+ </admin>
18
+ <adminhtml>
19
+ <acl>
20
+ <resources>
21
+ <admin>
22
+ <children>
23
+ <system>
24
+ <children>
25
+ <config>
26
+ <children>
27
+ <starshipit_options>
28
+ <title>Starshipit Module Section</title>
29
+ </starshipit_options>
30
+ </children>
31
+ </config>
32
+ </children>
33
+ </system>
34
+ </children>
35
+ </admin>
36
+ </resources>
37
+ </acl>
38
+ </adminhtml>
39
+   <global>
40
+ <blocks>
41
+ <starshipit>
42
+ <class>Rvtech_Starshipit_Block</class>
43
+ </starshipit>
44
+ </blocks>
45
+ <models>
46
+ <starshipit>
47
+ <class>Rvtech_Starshipit_Model</class>
48
+ </starshipit>
49
+ </models>
50
+ <helpers>
51
+ <starshipit>
52
+ <class>Rvtech_Starshipit_Helper</class>
53
+ </starshipit>
54
+ </helpers>
55
+ <events>
56
+ <checkout_type_onepage_save_order_after>
57
+ <observers>
58
+ <rvtech_starshipit_order_placed_sync_now>
59
+ <type>singleton</type>
60
+ <class>Rvtech_Starshipit_Model_Observer</class>
61
+ <method>syncOrdersNow</method>
62
+ </rvtech_starshipit_order_placed_sync_now>
63
+ </observers>
64
+ </checkout_type_onepage_save_order_after>
65
+ </events>
66
+ </global>
67
+ <default>
68
+ <starshipit_options>
69
+ <group1>
70
+ <sync_orders>5</sync_orders>
71
+ </group1>
72
+ </starshipit_options>
73
+ </default>
74
+ </config>
app/code/community/Rvtech/Starshipit/etc/system.xml ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <tabs>
3
+ <starshipitconfig translate="label" module="starshipit">
4
+ <label>Starshipit Configuration</label>
5
+ <sort_order>200</sort_order>
6
+ </starshipitconfig>
7
+ </tabs>
8
+ <sections>
9
+ <starshipit_options translate="label" module="starshipit">
10
+ <label>Starshipit Config Options</label>
11
+ <tab>starshipitconfig</tab>
12
+ <frontend_type>text</frontend_type>
13
+ <sort_order>100</sort_order>
14
+ <show_in_default>1</show_in_default>
15
+ <show_in_website>1</show_in_website>
16
+ <show_in_store>1</show_in_store>
17
+ <groups>
18
+ <group1 translate="label">
19
+ <label>Configuration</label>
20
+ <frontend_type>text</frontend_type>
21
+ <sort_order>1</sort_order>
22
+ <show_in_default>1</show_in_default>
23
+ <show_in_website>1</show_in_website>
24
+ <show_in_store>1</show_in_store>
25
+ <fields>
26
+ <username>
27
+ <label>Username</label>
28
+ <frontend_type>text</frontend_type>
29
+ <comment><![CDATA[<i>UserName for the Starship</i>]]></comment>
30
+ <sort_order>0</sort_order>
31
+ <show_in_default>1</show_in_default>
32
+ <show_in_website>1</show_in_website>
33
+ <show_in_store>1</show_in_store>
34
+ </username>
35
+ <api_key>
36
+ <label>API Key</label>
37
+ <frontend_type>password</frontend_type>
38
+ <comment><![CDATA[<i>APIKey for the Starship</i>]]></comment>
39
+ <sort_order>1</sort_order>
40
+ <show_in_default>1</show_in_default>
41
+ <show_in_website>1</show_in_website>
42
+ <show_in_store>1</show_in_store>
43
+ </api_key>
44
+ <test>
45
+ <frontend_type>button</frontend_type>
46
+ <frontend_model>starshipit/adminhtml_system_config_form_button</frontend_model>
47
+ <comment><![CDATA[<i>Click here to test that above UserName and APIKey are valid or not</i>]]></comment>
48
+ <sort_order>3</sort_order>
49
+ <show_in_default>1</show_in_default>
50
+ <show_in_website>1</show_in_website>
51
+ <show_in_store>1</show_in_store>
52
+ </test>
53
+ <syncbutton>
54
+ <frontend_type>button</frontend_type>
55
+ <frontend_model>starshipit/adminhtml_system_config_form_syncbutton</frontend_model>
56
+ <sort_order>6</sort_order>
57
+ <show_in_default>1</show_in_default>
58
+ <show_in_website>1</show_in_website>
59
+ <show_in_store>1</show_in_store>
60
+ </syncbutton>
61
+ <update_orders>
62
+ <label>Update orders to complete once shipped</label>
63
+ <frontend_type>select</frontend_type>
64
+ <source_model>adminhtml/system_config_source_yesno</source_model>
65
+ <sort_order>4</sort_order>
66
+ <tooltip><![CDATA[<i>If set to YES, it will automatically create shipment and and update track info received from StartShip</i>]]></tooltip>
67
+ <show_in_default>1</show_in_default>
68
+ <show_in_website>1</show_in_website>
69
+ <show_in_store>1</show_in_store>
70
+ </update_orders>
71
+ <sync_orders_yesno>
72
+ <label>Sync orders automatically</label>
73
+ <frontend_type>select</frontend_type>
74
+ <tooltip><![CDATA[<i>If set to YES, it will automatically sync order after every 'x' minute (mentioned below)</i>]]></tooltip>
75
+ <source_model>adminhtml/system_config_source_yesno</source_model>
76
+ <sort_order>5</sort_order>
77
+ <show_in_default>1</show_in_default>
78
+ <show_in_website>1</show_in_website>
79
+ <show_in_store>1</show_in_store>
80
+ </sync_orders_yesno>
81
+ <sync_orders>
82
+ <label>Time period to sync orders</label>
83
+ <frontend_type>text</frontend_type>
84
+ <comment><![CDATA[<i><b>Note:</b>Time Period is in Minutes</i>]]></comment>
85
+ <default>5</default>
86
+ <sort_order>6</sort_order>
87
+ <show_in_default>1</show_in_default>
88
+ <show_in_website>1</show_in_website>
89
+ <show_in_store>1</show_in_store>
90
+ </sync_orders>
91
+ </fields>
92
+ </group1>
93
+ </groups>
94
+ </starshipit_options>
95
+ </sections>
96
+ </config>
app/code/community/Rvtech/Starshipquote/Block/Dhlform.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+ class Rvtech_Starshipquote_Block_Dhlform extends Mage_Core_Block_Template
6
+ {
7
+
8
+ public function getFormSubmitUrl() {
9
+
10
+ return Mage::getUrl('starshipquote/dhlquote/quote');
11
+
12
+ }
13
+
14
+ }
15
+
16
+
17
+ ?>
app/code/community/Rvtech/Starshipquote/Helper/Data.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+ class Rvtech_Starshipquote_Helper_Data extends Mage_Core_Helper_Abstract
6
+ {
7
+
8
+ }
9
+
10
+ ?>
app/code/community/Rvtech/Starshipquote/Helper/Dhl.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Rvtech_Starshipquote_Helper_Dhl extends Mage_Core_Helper_Abstract
3
+ {
4
+
5
+
6
+ public $_wsdl = 'http://dhl.starshipit.com/OrdersService.svc?singleWsdl';
7
+
8
+ /**
9
+ *
10
+ * @return php soap client object
11
+ */
12
+
13
+ protected function _soapClient() {
14
+
15
+ $wsdl = $this->_wsdl;
16
+ return new SoapClient($wsdl, array('trace' => 1));
17
+ }
18
+
19
+ protected function _getQuote($info = array()){
20
+ $soap = $this->_soapClient();
21
+ $result = $soap->__call('GetDHLQuote',array(
22
+ 'GetDHLQuote' => array(
23
+
24
+ 'accountId' => 403,
25
+ 'info' => $info
26
+ )
27
+
28
+ ));
29
+
30
+ return $result;
31
+
32
+ }
33
+
34
+ public function getQuoteFromDhl($params = array()) {
35
+
36
+ return $this->_getQuote($params);
37
+
38
+ }
39
+
40
+
41
+ }
app/code/community/Rvtech/Starshipquote/controllers/DhlquoteController.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ */
5
+ class Rvtech_Starshipquote_DhlquoteController extends Mage_Core_Controller_Front_Action
6
+ {
7
+
8
+ public function quoteAction(){
9
+
10
+ $params = $this->getRequest()->getParams();
11
+ $result = Mage::helper('starshipquote/dhl')->getQuoteFromDhl($params);
12
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
13
+ return;
14
+ }
15
+ }
16
+
17
+ ?>
app/code/community/Rvtech/Starshipquote/etc/adminhtml.xml ADDED
File without changes
app/code/community/Rvtech/Starshipquote/etc/config.xml ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Rvtech_Starshipquote>
5
+ <version>1.0.0.0</version>
6
+ </Rvtech_Starshipquote>
7
+ </modules>
8
+ <global>
9
+ <helpers>
10
+ <starshipquote>
11
+ <class>Rvtech_Starshipquote_Helper</class>
12
+ </starshipquote>
13
+ </helpers>
14
+ <blocks>
15
+ <starshipquote>
16
+ <class>Rvtech_Starshipquote_Block</class>
17
+ </starshipquote>
18
+ </blocks>
19
+ </global>
20
+ <frontend>
21
+ <routers>
22
+ <starshipquote>
23
+ <use>standard</use>
24
+ <args>
25
+ <module>Rvtech_Starshipquote</module>
26
+ <frontName>starshipquote</frontName>
27
+ </args>
28
+ </starshipquote>
29
+ </routers>
30
+ <layout>
31
+ <updates>
32
+ <starshipquote>
33
+ <file>starshipquote.xml</file>
34
+ </starshipquote>
35
+ </updates>
36
+ </layout>
37
+ </frontend>
38
+ <adminhtml>
39
+ <acl>
40
+ <resources>
41
+ <admin>
42
+ <children>
43
+ <system>
44
+ <children>
45
+ <config>
46
+ <children>
47
+ <dhl_settings>
48
+ <title>DHL Quote</title>
49
+ </dhl_settings>
50
+ </children>
51
+ </config>
52
+ </children>
53
+ </system>
54
+ </children>
55
+ </admin>
56
+ </resources>
57
+ </acl>
58
+ </adminhtml>
59
+ </config>
app/code/community/Rvtech/Starshipquote/etc/system.xml ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <dhl translate="label" module="starshipquote">
5
+ <label>DHL Quote</label>
6
+ <sort_order>25</sort_order>
7
+ </dhl>
8
+ </tabs>
9
+ <sections>
10
+ <dhl_settings translate="label" module="starshipquote">
11
+ <label>Account Settings</label>
12
+ <tab>dhl</tab>
13
+ <class>seprator-top</class>
14
+ <sort_order>200</sort_order>
15
+ <show_in_default>1</show_in_default>
16
+ <show_in_store>1</show_in_store>
17
+ <show_in_website>1</show_in_website>
18
+ <groups>
19
+ <dhl_account translate="label">
20
+ <label>Account Configuration</label>
21
+ <expanded>1</expanded>
22
+ <sort_order>1</sort_order>
23
+ <show_in_default>1</show_in_default>
24
+ <show_in_store>1</show_in_store>
25
+ <show_in_website>1</show_in_website>
26
+ <fields>
27
+ <user_name translate="label">
28
+ <label>Enabled</label>
29
+ <validate>required-entry</validate>
30
+ <frontend_type>select</frontend_type>
31
+ <source_model>adminhtml/system_config_source_yesno</source_model>
32
+ <sort_order>1</sort_order>
33
+ <show_in_store>1</show_in_store>
34
+ <show_in_website>1</show_in_website>
35
+ <show_in_default>1</show_in_default>
36
+ </user_name>
37
+ <user_key translate="label">
38
+ <label>Account ID</label>
39
+ <frontend_type>text</frontend_type>
40
+ <comment><![CDATA[<i>if empty default(403) will be used </i>]]></comment>
41
+ <sort_order>3</sort_order>
42
+ <show_in_store>1</show_in_store>
43
+ <show_in_website>1</show_in_website>
44
+ <show_in_default>1</show_in_default>
45
+ <depends>
46
+ <user_name>1</user_name>
47
+ </depends>
48
+ </user_key>
49
+ </fields>
50
+ </dhl_account>
51
+ </groups>
52
+ </dhl_settings>
53
+ </sections>
54
+ </config>
app/design/adminhtml/default/default/template/starshipit/system/config/button.phtml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+ //<![CDATA[
3
+ function test() {
4
+ var formData = $('config_edit_form').serialize();
5
+ new Ajax.Request('<?php echo $this->getAjaxCheckUrl() ?>', {
6
+ method: 'post',
7
+ postBody: formData,
8
+ onSuccess: function(transport){
9
+
10
+ if (transport.responseText){
11
+ //alert(transport.responseText);
12
+ if($('messages')){
13
+ $('messages').innerHTML = transport.responseText;
14
+ //alert(transport.responseText);
15
+ }
16
+ }
17
+ }
18
+ });
19
+ }
20
+ //]]>
21
+ </script>
22
+
23
+ <?php echo $this->getButtonHtml() ?>
app/design/adminhtml/default/default/template/starshipit/system/config/syncbutton.phtml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+ //<![CDATA[
3
+ function syncOrder() {
4
+ var formData = $('config_edit_form').serialize();
5
+ new Ajax.Request('<?php echo $this->getAjaxCheckUrl() ?>', {
6
+ method: 'post',
7
+ postBody: formData,
8
+ onSuccess: function(transport){
9
+
10
+ if (transport.responseText){
11
+ if($('messages')){
12
+ $('messages').innerHTML = transport.responseText;
13
+ //alert(transport.responseText);
14
+ }
15
+ }
16
+ }
17
+ });
18
+ }
19
+ //]]>
20
+ </script>
21
+
22
+ <?php echo $this->getButtonHtml() ?>
app/etc/modules/Rvtech_Startshipit.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <config>
3
+ <modules>
4
+ <Rvtech_Starshipit>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </Rvtech_Starshipit>
8
+ </modules>
9
+ </config>
package.xml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Rvtech_Starshipit</name>
4
+ <version>1.0.0.0</version>
5
+ <stability>stable</stability>
6
+ <license>Open Software License (OSL)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Syncs Orders between Magento and StarShipIT DHL ClickToDoor to enable quotes, printing of shipping labels and track and trace.</summary>
10
+ <description>The StarShipIT Magento Extension enables orders to be imported into StarShipIT DHL ClickToDoor and writes back tracking information and updates order status in Magento.&#xD;
11
+ &#xD;
12
+ From DHL ShipToDoor shipping labels can be produced, tracking of orders is supported, quotes can be obtained and all custom and DHL documentation can be produced.&#xD;
13
+ &#xD;
14
+ DHL Express Worldwide is supported.</description>
15
+ <notes>First release which has been in production for several months on multiple sites.</notes>
16
+ <authors><author><name>George Plummer</name><user>GeorgeSPlummer</user><email>george@starshipit.com</email></author></authors>
17
+ <date>2013-09-06</date>
18
+ <time>01:40:00</time>
19
+ <contents><target name="magecommunity"><dir name="Rvtech"><dir name="Starshipit"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="Button.php" hash="2b3b0143262abe0d3ba50c38fe10d932"/><file name="Syncbutton.php" hash="b53f7f430495c1e9466789b116ce6349"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="0313223fc94e9ed45f4401119bd6f528"/><file name="Starship.php" hash="f4c538bcb80335b213602528b749ce3c"/><file name="Starship.php_ORG" hash="d92f50594c70158dd94453ef7f147de9"/></dir><dir name="Model"><file name="Observer.php" hash="68edec460ac627ff4aec5fece6d688b6"/><file name="Orders.php" hash="d5e6fa78702b1a0bd60e8cb4b3f57521"/><file name="Orders.php_ORG" hash="cbadeab0c67303b653bed3549a9b73de"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="StarshipitController.php" hash="926e0e618d5732fa7fffc0b1b5028259"/><file name="StarshipitController.php_ORG" hash="b7c694e8252892da817eae072f6f8ad6"/></dir><file name="IndexController.php" hash="3ac934011e0b4bffd25fbbe927bad092"/></dir><dir name="etc"><file name="adminhtml.xml" hash="d1b2db6c781f6fcacfe4ef75ad490cd0"/><file name="config.xml" hash="8c3ed77f01ca97b8db4cb55a8b7b27d8"/><file name="system.xml" hash="02f6bb9bd097efe52939c8c638cdb4af"/></dir></dir><dir name="Starshipquote"><dir name="Block"><file name="Dhlform.php" hash="2ace0bd01d2a9339aae870eca7accb51"/></dir><dir name="Helper"><file name="Data.php" hash="6634c0b478fffffd5b1f1545b504a205"/><file name="Dhl.php" hash="7e400792ff42275417246210d132508a"/></dir><dir name="controllers"><file name="DhlquoteController.php" hash="f4727027567fd6ea2750da05ab9b9091"/></dir><dir name="etc"><file name="adminhtml.xml" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="config.xml" hash="905ac050fe21f37bd0798abfc74d5c6a"/><file name="system.xml" hash="03fd335a3f24072d938ca74b68a80c6a"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="starshipit"><dir name="system"><dir name="config"><file name="button.phtml" hash="064f053f67fc7b749d1aec40cd352ce1"/><file name="syncbutton.phtml" hash="3e67731254d4d0298891cd2598471dc9"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Rvtech_Startshipit.xml" hash="741fde1331d6a9b27ef2faa2bd8a843f"/></dir></target></contents>
20
+ <compatible/>
21
+ <dependencies><required><php><min>5.1.0</min><max>5.5.2</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.6.0.0</min><max>1.7</max></package></required></dependencies>
22
+ </package>