Version Notes
First release
Download this release
Release Info
Developer | PHPro |
Extension | dpdshipping |
Version | 1.0.1 |
Comparing to | |
See all releases |
Code changes from version 1.0.0 to 1.0.1
- app/code/community/DPD/Shipping/Block/Adminhtml/Sales/Order.php +26 -0
- app/code/community/DPD/Shipping/Block/Adminhtml/Sales/Order/Grid.php +245 -0
- app/code/community/DPD/Shipping/Block/Adminhtml/Sales/Order/Grid/Renderer/Shippingmethod.php +31 -0
- app/code/community/DPD/Shipping/Block/Adminhtml/Sales/Order/View/Tab/Returnlabels.php +83 -0
- app/code/community/DPD/Shipping/Block/Adminhtml/Shipping/Carrier/Dpdclassic/Tablerate/Grid.php +137 -0
- app/code/community/DPD/Shipping/Block/Adminhtml/Shipping/Carrier/Dpdparcelshops/Tablerate/Grid.php +133 -0
- app/code/community/DPD/Shipping/Block/Adminhtml/System/Config/Form/Availability.php +96 -0
- app/code/community/DPD/Shipping/Block/Adminhtml/System/Config/Form/Dpdclassicexport.php +38 -0
- app/code/community/DPD/Shipping/Block/Adminhtml/System/Config/Form/Dpdparcelshopsexport.php +38 -0
- app/code/community/DPD/Shipping/Block/Carrier/Parcelshop.php +294 -0
- app/code/community/DPD/Shipping/Helper/Data.php +171 -0
- app/code/community/DPD/Shipping/Model/Adminhtml/Dpdgrid.php +215 -0
- app/code/community/DPD/Shipping/Model/Adminhtml/System/Config/Backend/Shipping/Dpdclassic/Tablerate.php +22 -0
- app/code/community/DPD/Shipping/Model/Adminhtml/System/Config/Backend/Shipping/Dpdparcelshops/Tablerate.php +22 -0
- app/code/community/DPD/Shipping/Model/Adminhtml/System/Config/Backend/Shipping/Specialparcelshops.php +22 -0
- app/code/community/DPD/Shipping/Model/Carrier/Dpdclassic.php +200 -0
- app/code/community/DPD/Shipping/Model/Carrier/Dpdparcelshops.php +204 -0
- app/code/community/DPD/Shipping/Model/Dpdclassic/Tablerate.php +22 -0
- app/code/community/DPD/Shipping/Model/Dpdparcelshops/Tablerate.php +22 -0
- app/code/community/DPD/Shipping/Model/Mysql4/Dpdclassic/Tablerate.php +433 -0
- app/code/community/DPD/Shipping/Model/Mysql4/Dpdclassic/Tablerate/Collection.php +107 -0
- app/code/community/DPD/Shipping/Model/Mysql4/Dpdparcelshops/Tablerate.php +433 -0
- app/code/community/DPD/Shipping/Model/Mysql4/Dpdparcelshops/Tablerate/Collection.php +106 -0
- app/code/community/DPD/Shipping/Model/Mysql4/Returnlabels.php +22 -0
- app/code/community/DPD/Shipping/Model/Mysql4/Returnlabels/Collection.php +23 -0
- app/code/community/DPD/Shipping/Model/Mysql4/Specialparcelshops.php +218 -0
- app/code/community/DPD/Shipping/Model/Mysql4/Specialparcelshops/Collection.php +23 -0
- app/code/community/DPD/Shipping/Model/Observer.php +105 -0
- app/code/community/DPD/Shipping/Model/Returnlabels.php +160 -0
- app/code/community/DPD/Shipping/Model/Specialparcelshops.php +22 -0
- app/code/community/DPD/Shipping/Model/System/Config/Source/Display.php +45 -0
- app/code/community/DPD/Shipping/Model/System/Config/Source/Paperformat.php +45 -0
- app/code/community/DPD/Shipping/Model/System/Config/Source/Ratetypes.php +46 -0
- app/code/community/DPD/Shipping/Model/System/Config/Source/Weightunit.php +47 -0
- app/code/community/DPD/Shipping/Model/Webservice.php +451 -0
- app/code/community/DPD/Shipping/controllers/Adminhtml/DpdconfigController.php +53 -0
- app/code/community/DPD/Shipping/controllers/Adminhtml/DpdorderController.php +222 -0
- app/code/community/DPD/Shipping/controllers/AjaxController.php +60 -0
- app/code/community/DPD/Shipping/etc/adminhtml.xml +30 -0
- app/code/community/DPD/Shipping/etc/config.xml +210 -0
- app/code/community/DPD/Shipping/etc/system.xml +484 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-install-0.0.1.php +21 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.1-0.0.2.php +16 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.2-0.0.3.php +24 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.3-0.0.4.php +15 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.4-0.0.5.php +15 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.5-0.0.6.php +13 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.6-0.0.7.php +13 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.7-0.0.8.php +37 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.8-0.0.9.php +25 -0
- app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.9-0.1.0.php +25 -0
- package.xml +3 -3
app/code/community/DPD/Shipping/Block/Adminhtml/Sales/Order.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_Sales_Order
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_Sales_Order extends Mage_Adminhtml_Block_Widget_Grid_Container
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Sets blockgroup for our DPD Orders page.
|
17 |
+
*/
|
18 |
+
public function __construct()
|
19 |
+
{
|
20 |
+
$this->_blockGroup = 'dpd';
|
21 |
+
$this->_controller = 'adminhtml_sales_order';
|
22 |
+
$this->_headerText = Mage::helper('dpd')->__('DPD Orders');
|
23 |
+
parent::__construct();
|
24 |
+
$this->_removeButton('add');
|
25 |
+
}
|
26 |
+
}
|
app/code/community/DPD/Shipping/Block/Adminhtml/Sales/Order/Grid.php
ADDED
@@ -0,0 +1,245 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_Sales_Order_Grid
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Constructs the grid and sets basic parameters.
|
17 |
+
*/
|
18 |
+
public function __construct()
|
19 |
+
{
|
20 |
+
parent::__construct();
|
21 |
+
$this->setId('dpd_shipping_grid');
|
22 |
+
$this->setDefaultSort('created_at');
|
23 |
+
$this->setDefaultDir('DESC');
|
24 |
+
$this->setSaveParametersInSession(true);
|
25 |
+
$this->setUseAjax(true);
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* prepare collection to use for the grid.
|
30 |
+
*
|
31 |
+
* @return $this
|
32 |
+
*/
|
33 |
+
protected function _prepareCollection()
|
34 |
+
{
|
35 |
+
$collection = Mage::getResourceModel('sales/order_grid_collection');
|
36 |
+
$collection->getSelect()->join('sales_flat_order', '`sales_flat_order`.entity_id=`main_table`.entity_id', array(
|
37 |
+
'shipping_method' => 'shipping_method',
|
38 |
+
'total_qty_ordered' => 'ROUND(total_qty_ordered,0)',
|
39 |
+
'dpd_label_exported' => 'dpd_label_exported',
|
40 |
+
'dpd_label_exists' => 'dpd_label_exists'
|
41 |
+
));
|
42 |
+
$collection->addAttributeToFilter('shipping_method', array('like' => '%dpd%'));
|
43 |
+
$this->setCollection($collection);
|
44 |
+
parent::_prepareCollection();
|
45 |
+
return $this;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* prepare columns used in the grid.
|
50 |
+
*
|
51 |
+
* @return $this
|
52 |
+
*/
|
53 |
+
protected function _prepareColumns()
|
54 |
+
{
|
55 |
+
$helper = Mage::helper('dpd');
|
56 |
+
$currency = (string)Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE);
|
57 |
+
$this->addColumn('real_order_id', array(
|
58 |
+
'header' => $helper->__('Order #'),
|
59 |
+
'width' => '80px',
|
60 |
+
'type' => 'text',
|
61 |
+
'index' => 'increment_id',
|
62 |
+
'filter_index' => 'main_table.increment_id'
|
63 |
+
));
|
64 |
+
|
65 |
+
if (!Mage::app()->isSingleStoreMode()) {
|
66 |
+
$this->addColumn('store_id', array(
|
67 |
+
'header' => $helper->__('Purchased From (Store)'),
|
68 |
+
'index' => 'store_id',
|
69 |
+
'type' => 'store',
|
70 |
+
'store_view' => true,
|
71 |
+
'display_deleted' => true,
|
72 |
+
'filter_index' => 'sales_flat_order.store_id'
|
73 |
+
));
|
74 |
+
}
|
75 |
+
$this->addColumn('created_at', array(
|
76 |
+
'header' => $helper->__('Purchased On'),
|
77 |
+
'index' => 'created_at',
|
78 |
+
'type' => 'datetime',
|
79 |
+
'width' => '100px',
|
80 |
+
'filter_index' => 'main_table.created_at'
|
81 |
+
));
|
82 |
+
|
83 |
+
$this->addColumn('billing_name', array(
|
84 |
+
'header' => $helper->__('Bill to Name'),
|
85 |
+
'index' => 'billing_name',
|
86 |
+
'filter_index' => 'main_table.billing_name'
|
87 |
+
));
|
88 |
+
$this->addColumn('shipping_name', array(
|
89 |
+
'header' => $helper->__('Ship to Name'),
|
90 |
+
'index' => 'shipping_name',
|
91 |
+
'filter_index' => 'main_table.shipping_name'
|
92 |
+
));
|
93 |
+
$this->addColumn('base_grand_total', array(
|
94 |
+
'header' => $helper->__('G.T. (Base)'),
|
95 |
+
'index' => 'base_grand_total',
|
96 |
+
'type' => 'currency',
|
97 |
+
'currency' => 'base_currency_code',
|
98 |
+
'filter_index' => 'main_table.base_grand_total'
|
99 |
+
));
|
100 |
+
|
101 |
+
$this->addColumn('grand_total', array(
|
102 |
+
'header' => $helper->__('G.T. (Purchased)'),
|
103 |
+
'index' => 'grand_total',
|
104 |
+
'type' => 'currency',
|
105 |
+
'currency' => 'order_currency_code',
|
106 |
+
'filter_index' => 'main_table.grand_total'
|
107 |
+
));
|
108 |
+
|
109 |
+
$this->addColumn('total_qty_ordered', array(
|
110 |
+
'header' => $helper->__('# of Items'),
|
111 |
+
'type' => 'int',
|
112 |
+
'index' => 'total_qty_ordered',
|
113 |
+
'width' => '100px',
|
114 |
+
));
|
115 |
+
|
116 |
+
$this->addColumn('status', array(
|
117 |
+
'header' => $helper->__('Status'),
|
118 |
+
'index' => 'status',
|
119 |
+
'type' => 'options',
|
120 |
+
'width' => '70px',
|
121 |
+
'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
|
122 |
+
'filter_index' => 'main_table.status'
|
123 |
+
));
|
124 |
+
$this->addColumn('shipping_method', array(
|
125 |
+
'header' => $helper->__('DPD Type'),
|
126 |
+
'index' => 'shipping_method',
|
127 |
+
'type' => 'options',
|
128 |
+
'options' => $this->getDpdTypeOptions(),
|
129 |
+
'renderer' => 'DPD_Shipping_Block_Adminhtml_Sales_Order_Grid_Renderer_Shippingmethod'
|
130 |
+
));
|
131 |
+
$this->addColumn('dpd_label_exists', array(
|
132 |
+
'header' => $helper->__('DPD Label'),
|
133 |
+
'index' => 'dpd_label_exists',
|
134 |
+
'type' => 'options',
|
135 |
+
'width' => '100px',
|
136 |
+
'options' => array(
|
137 |
+
0 => 'No',
|
138 |
+
1 => 'Yes',
|
139 |
+
)
|
140 |
+
));
|
141 |
+
$this->addColumn('dpd_label_exported', array(
|
142 |
+
'header' => $helper->__('Label Downloaded'),
|
143 |
+
'index' => 'dpd_label_exported',
|
144 |
+
'type' => 'options',
|
145 |
+
'width' => '100px',
|
146 |
+
'options' => array(
|
147 |
+
0 => 'No',
|
148 |
+
1 => 'Yes',
|
149 |
+
)
|
150 |
+
));
|
151 |
+
if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
|
152 |
+
$this->addColumn('action',
|
153 |
+
array(
|
154 |
+
'header' => $helper->__('Action'),
|
155 |
+
'width' => '50px',
|
156 |
+
'type' => 'action',
|
157 |
+
'getter' => 'getId',
|
158 |
+
'actions' => array(
|
159 |
+
array(
|
160 |
+
'caption' => $helper->__('View'),
|
161 |
+
'url' => array('base' => '*/sales_order/view', 'params' => array('dpdReturn' => '1')),
|
162 |
+
'field' => 'order_id',
|
163 |
+
)
|
164 |
+
),
|
165 |
+
'filter' => false,
|
166 |
+
'sortable' => false,
|
167 |
+
'index' => 'stores',
|
168 |
+
'is_system' => true,
|
169 |
+
));
|
170 |
+
}
|
171 |
+
$this->addExportType('*/*/exportDPDOrdersCsv', $helper->__('CSV'));
|
172 |
+
$this->addExportType('*/*/exportDPDOrdersExcel', $helper->__('Excel XML'));
|
173 |
+
return parent::_prepareColumns();
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Gets grid url for callbacks.
|
178 |
+
*
|
179 |
+
* @return string
|
180 |
+
*/
|
181 |
+
public function getGridUrl()
|
182 |
+
{
|
183 |
+
return $this->getUrl('*/*/grid', array('_current' => true));
|
184 |
+
}
|
185 |
+
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Returns possible filters for DPD type column.
|
189 |
+
*
|
190 |
+
* @return array
|
191 |
+
*/
|
192 |
+
public function getDpdTypeOptions()
|
193 |
+
{
|
194 |
+
$options = array();
|
195 |
+
$optionText = "";
|
196 |
+
$collection = Mage::getModel('sales/order')->getCollection()->addAttributeToFilter('shipping_method', array('like' => '%dpd%'))->addAttributeToSelect('shipping_method');
|
197 |
+
$collection->getSelect()->group('shipping_method');
|
198 |
+
foreach ($collection as $option) {
|
199 |
+
if ($option->getShippingMethod() == "dpdparcelshops_dpdparcelshops") {
|
200 |
+
$optionText = 'DPD parcelshop';
|
201 |
+
} elseif ($option->getShippingMethod() == "dpdclassic_dpdclassic") {
|
202 |
+
$optionText = 'DPD classic';
|
203 |
+
}
|
204 |
+
$options[$option->getShippingMethod()] = $optionText;
|
205 |
+
}
|
206 |
+
return $options;
|
207 |
+
}
|
208 |
+
|
209 |
+
/**
|
210 |
+
* Prepares Massactions for the grid.
|
211 |
+
*
|
212 |
+
* @return $this
|
213 |
+
*/
|
214 |
+
protected function _prepareMassaction()
|
215 |
+
{
|
216 |
+
$this->setMassactionIdField('`main_table`.entity_id');
|
217 |
+
$this->getMassactionBlock()->setFormFieldName('entity_id');
|
218 |
+
$this->getMassactionBlock()->addItem('generateAndComplete', array(
|
219 |
+
'label' => Mage::helper('dpd')->__('Generate Label and Complete'),
|
220 |
+
'url' => $this->getUrl('*/*/generateAndComplete'),
|
221 |
+
'confirm' => Mage::helper('dpd')->__('Generating a label can take up to 1 second per label, please be patient during this process. It can take up to maximum 2 minutes. Do you want to continue?')
|
222 |
+
));
|
223 |
+
$this->getMassactionBlock()->addItem('dowloadAllUndownloaded', array(
|
224 |
+
'label' => Mage::helper('dpd')->__('Download all undownloaded'),
|
225 |
+
'url' => $this->getUrl('*/*/dowloadAllUndownloaded'),
|
226 |
+
'confirm' => Mage::helper('dpd')->__('Please refresh the page after downloading to review the confirmation messages including any problems encountered. Continue?')
|
227 |
+
));
|
228 |
+
return $this;
|
229 |
+
}
|
230 |
+
|
231 |
+
|
232 |
+
/**
|
233 |
+
* Generate rowurl.
|
234 |
+
*
|
235 |
+
* @param $row
|
236 |
+
* @return string
|
237 |
+
*/
|
238 |
+
public function getRowUrl($row)
|
239 |
+
{
|
240 |
+
if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
|
241 |
+
return $this->getUrl('*/sales_order/view', array('order_id' => $row->getId(), 'dpdReturn' => '1'));
|
242 |
+
}
|
243 |
+
return false;
|
244 |
+
}
|
245 |
+
}
|
app/code/community/DPD/Shipping/Block/Adminhtml/Sales/Order/Grid/Renderer/Shippingmethod.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_Sales_Order_Grid_Renderer_Shippingmethod
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_Sales_Order_Grid_Renderer_Shippingmethod extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Renders select between DPD parcelshop or DPD classic.
|
17 |
+
*
|
18 |
+
* @param Varien_Object $row
|
19 |
+
* @return string
|
20 |
+
*/
|
21 |
+
public function render(Varien_Object $row)
|
22 |
+
{
|
23 |
+
$value = $row->getData($this->getColumn()->getIndex());
|
24 |
+
if ($value == "dpdparcelshops_dpdparcelshops") {
|
25 |
+
return 'DPD parcelshop';
|
26 |
+
} elseif ($value == "dpdclassic_dpdclassic") {
|
27 |
+
return 'DPD classic';
|
28 |
+
}
|
29 |
+
return $this;
|
30 |
+
}
|
31 |
+
}
|
app/code/community/DPD/Shipping/Block/Adminhtml/Sales/Order/View/Tab/Returnlabels.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_Sales_Order_View_Tab_Returnlabels
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_Sales_Order_View_Tab_Returnlabels
|
14 |
+
extends Mage_Adminhtml_Block_Template
|
15 |
+
implements Mage_Adminhtml_Block_Widget_Tab_Interface{
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Constructs the block and sets template on it.
|
19 |
+
*
|
20 |
+
*/
|
21 |
+
protected function _construct()
|
22 |
+
{
|
23 |
+
parent::_construct();
|
24 |
+
$this->setTemplate('dpd/order/view/tab/returnlabels.phtml');
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Returns tab label.
|
29 |
+
*
|
30 |
+
* @return string
|
31 |
+
*/
|
32 |
+
public function getTabLabel() {
|
33 |
+
return Mage::helper('dpd')->__('DPD Return Labels');
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Returns tab title.
|
38 |
+
*
|
39 |
+
* @return string
|
40 |
+
*/
|
41 |
+
public function getTabTitle() {
|
42 |
+
return Mage::helper('dpd')->__('DPD Return Labels');
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Checks if tab can be shown.
|
47 |
+
*
|
48 |
+
* @return bool
|
49 |
+
*/
|
50 |
+
public function canShowTab() {
|
51 |
+
return true;
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Checks if the tab has to be hidden.
|
56 |
+
*
|
57 |
+
* @return bool
|
58 |
+
*/
|
59 |
+
public function isHidden() {
|
60 |
+
return false;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Returns the order object.
|
65 |
+
*
|
66 |
+
* @return mixed
|
67 |
+
*/
|
68 |
+
public function getOrder(){
|
69 |
+
return Mage::registry('current_order');
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Returns return labels for current order.
|
74 |
+
*
|
75 |
+
* @return mixed
|
76 |
+
*/
|
77 |
+
public function getReturnLabels(){
|
78 |
+
$returnlabels = Mage::getModel('dpd/returnlabels')->
|
79 |
+
getCollection()
|
80 |
+
->addFieldToFilter('order_id',array('eq' => $this->getOrder()->getId()));
|
81 |
+
return $returnlabels;
|
82 |
+
}
|
83 |
+
}
|
app/code/community/DPD/Shipping/Block/Adminhtml/Shipping/Carrier/Dpdclassic/Tablerate/Grid.php
ADDED
@@ -0,0 +1,137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_Shipping_Carrier_Dpdclassic_Tablerate_Grid
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_Shipping_Carrier_Dpdclassic_Tablerate_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Website filter
|
17 |
+
*
|
18 |
+
* @var int
|
19 |
+
*/
|
20 |
+
protected $_websiteId;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Condition filter
|
24 |
+
*
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
protected $_conditionName;
|
28 |
+
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Init the block.
|
32 |
+
*/
|
33 |
+
public function __construct()
|
34 |
+
{
|
35 |
+
parent::__construct();
|
36 |
+
$this->setId('shippingDpdclassicTablerateGrid');
|
37 |
+
$this->_exportPageSize = 10000;
|
38 |
+
}
|
39 |
+
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Set website Id for export to global variable.
|
43 |
+
*
|
44 |
+
* @param $websiteId
|
45 |
+
* @return $this
|
46 |
+
*/
|
47 |
+
public function setWebsiteId($websiteId)
|
48 |
+
{
|
49 |
+
$this->_websiteId = Mage::app()->getWebsite($websiteId)->getId();
|
50 |
+
return $this;
|
51 |
+
}
|
52 |
+
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Fallback if website Id is not set in global variable.
|
56 |
+
*
|
57 |
+
* @return int|mixed
|
58 |
+
*/
|
59 |
+
public function getWebsiteId()
|
60 |
+
{
|
61 |
+
if (is_null($this->_websiteId)) {
|
62 |
+
$this->_websiteId = Mage::app()->getWebsite()->getId();
|
63 |
+
}
|
64 |
+
return $this->_websiteId;
|
65 |
+
}
|
66 |
+
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @param $name
|
70 |
+
* @return $this
|
71 |
+
*/
|
72 |
+
public function setConditionName($name)
|
73 |
+
{
|
74 |
+
$this->_conditionName = $name;
|
75 |
+
return $this;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* @return string
|
80 |
+
*/
|
81 |
+
public function getConditionName()
|
82 |
+
{
|
83 |
+
return $this->_conditionName;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* @return Mage_Adminhtml_Block_Widget_Grid
|
88 |
+
*/
|
89 |
+
protected function _prepareCollection()
|
90 |
+
{
|
91 |
+
$collection = Mage::getResourceModel('dpd/dpdclassic_tablerate_collection');
|
92 |
+
$collection->setConditionFilter($this->getConditionName())
|
93 |
+
->setWebsiteFilter($this->getWebsiteId());
|
94 |
+
|
95 |
+
$this->setCollection($collection);
|
96 |
+
|
97 |
+
return parent::_prepareCollection();
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* @return $this
|
102 |
+
*/
|
103 |
+
protected function _prepareColumns()
|
104 |
+
{
|
105 |
+
$this->addColumn('dest_country', array(
|
106 |
+
'header' => Mage::helper('dpd')->__('Country'),
|
107 |
+
'index' => 'dest_country',
|
108 |
+
'default' => '*',
|
109 |
+
));
|
110 |
+
|
111 |
+
$this->addColumn('dest_region', array(
|
112 |
+
'header' => Mage::helper('dpd')->__('Region/State'),
|
113 |
+
'index' => 'dest_region',
|
114 |
+
'default' => '*',
|
115 |
+
));
|
116 |
+
|
117 |
+
$this->addColumn('dest_zip', array(
|
118 |
+
'header' => Mage::helper('dpd')->__('Zip/Postal Code'),
|
119 |
+
'index' => 'dest_zip',
|
120 |
+
'default' => '*',
|
121 |
+
));
|
122 |
+
|
123 |
+
$label = Mage::getSingleton('shipping/carrier_tablerate')
|
124 |
+
->getCode('condition_name_short', $this->getConditionName());
|
125 |
+
$this->addColumn('condition_value', array(
|
126 |
+
'header' => $label,
|
127 |
+
'index' => 'condition_value',
|
128 |
+
));
|
129 |
+
|
130 |
+
$this->addColumn('price', array(
|
131 |
+
'header' => Mage::helper('dpd')->__('Shipping Price'),
|
132 |
+
'index' => 'price',
|
133 |
+
));
|
134 |
+
|
135 |
+
return parent::_prepareColumns();
|
136 |
+
}
|
137 |
+
}
|
app/code/community/DPD/Shipping/Block/Adminhtml/Shipping/Carrier/Dpdparcelshops/Tablerate/Grid.php
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_Shipping_Carrier_Dpdparcelshops_Tablerate_Grid
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_Shipping_Carrier_Dpdparcelshops_Tablerate_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Website filter
|
17 |
+
*
|
18 |
+
* @var int
|
19 |
+
*/
|
20 |
+
protected $_websiteId;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Condition filter
|
24 |
+
*
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
protected $_conditionName;
|
28 |
+
|
29 |
+
|
30 |
+
/**
|
31 |
+
*
|
32 |
+
*/
|
33 |
+
public function __construct()
|
34 |
+
{
|
35 |
+
parent::__construct();
|
36 |
+
$this->setId('shippingDpdparcelshopsTablerateGrid');
|
37 |
+
$this->_exportPageSize = 10000;
|
38 |
+
}
|
39 |
+
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param $websiteId
|
43 |
+
* @return $this
|
44 |
+
*/
|
45 |
+
public function setWebsiteId($websiteId)
|
46 |
+
{
|
47 |
+
$this->_websiteId = Mage::app()->getWebsite($websiteId)->getId();
|
48 |
+
return $this;
|
49 |
+
}
|
50 |
+
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @return int|mixed
|
54 |
+
*/
|
55 |
+
public function getWebsiteId()
|
56 |
+
{
|
57 |
+
if (is_null($this->_websiteId)) {
|
58 |
+
$this->_websiteId = Mage::app()->getWebsite()->getId();
|
59 |
+
}
|
60 |
+
return $this->_websiteId;
|
61 |
+
}
|
62 |
+
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @param $name
|
66 |
+
* @return $this
|
67 |
+
*/
|
68 |
+
public function setConditionName($name)
|
69 |
+
{
|
70 |
+
$this->_conditionName = $name;
|
71 |
+
return $this;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* @return string
|
76 |
+
*/
|
77 |
+
public function getConditionName()
|
78 |
+
{
|
79 |
+
return $this->_conditionName;
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* @return Mage_Adminhtml_Block_Widget_Grid
|
84 |
+
*/
|
85 |
+
protected function _prepareCollection()
|
86 |
+
{
|
87 |
+
$collection = Mage::getResourceModel('dpd/dpdparcelshops_tablerate_collection');
|
88 |
+
$collection->setConditionFilter($this->getConditionName())
|
89 |
+
->setWebsiteFilter($this->getWebsiteId());
|
90 |
+
|
91 |
+
$this->setCollection($collection);
|
92 |
+
|
93 |
+
return parent::_prepareCollection();
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* @return $this
|
98 |
+
*/
|
99 |
+
protected function _prepareColumns()
|
100 |
+
{
|
101 |
+
$this->addColumn('dest_country', array(
|
102 |
+
'header' => Mage::helper('dpd')->__('Country'),
|
103 |
+
'index' => 'dest_country',
|
104 |
+
'default' => '*',
|
105 |
+
));
|
106 |
+
|
107 |
+
$this->addColumn('dest_region', array(
|
108 |
+
'header' => Mage::helper('dpd')->__('Region/State'),
|
109 |
+
'index' => 'dest_region',
|
110 |
+
'default' => '*',
|
111 |
+
));
|
112 |
+
|
113 |
+
$this->addColumn('dest_zip', array(
|
114 |
+
'header' => Mage::helper('dpd')->__('Zip/Postal Code'),
|
115 |
+
'index' => 'dest_zip',
|
116 |
+
'default' => '*',
|
117 |
+
));
|
118 |
+
|
119 |
+
$label = Mage::getSingleton('shipping/carrier_tablerate')
|
120 |
+
->getCode('condition_name_short', $this->getConditionName());
|
121 |
+
$this->addColumn('condition_value', array(
|
122 |
+
'header' => $label,
|
123 |
+
'index' => 'condition_value',
|
124 |
+
));
|
125 |
+
|
126 |
+
$this->addColumn('price', array(
|
127 |
+
'header' => Mage::helper('dpd')->__('Shipping Price'),
|
128 |
+
'index' => 'price',
|
129 |
+
));
|
130 |
+
|
131 |
+
return parent::_prepareColumns();
|
132 |
+
}
|
133 |
+
}
|
app/code/community/DPD/Shipping/Block/Adminhtml/System/Config/Form/Availability.php
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_System_Config_Form_Availability
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_System_Config_Form_Availability extends Mage_Adminhtml_Block_System_Config_Form_Field
|
14 |
+
{
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Construct the block and set the corresponding template.
|
18 |
+
*/
|
19 |
+
protected function _construct()
|
20 |
+
{
|
21 |
+
parent::_construct();
|
22 |
+
$this->setTemplate('dpd/system/config/availability.phtml');
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Return element html.
|
27 |
+
*
|
28 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
29 |
+
* @return string
|
30 |
+
*/
|
31 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
32 |
+
{
|
33 |
+
return $this->_toHtml();
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Return ajax url for button.
|
38 |
+
*
|
39 |
+
* @return string
|
40 |
+
*/
|
41 |
+
public function getAjaxCheckUrl()
|
42 |
+
{
|
43 |
+
return Mage::helper('adminhtml')->getUrl('adminhtml/dpdorder/check');
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Check if there are any custom parcelshops for this website and return corresponding html.
|
48 |
+
*
|
49 |
+
* @return string
|
50 |
+
*/
|
51 |
+
public function getAvailabilityHtml(){
|
52 |
+
if($this->getParcelshopsAvailableForThisWebsite() != 0){
|
53 |
+
return Mage::helper('dpd')->__("CSV Uploaded (%s shops). ", $this->getParcelshopsAvailableForThisWebsite());
|
54 |
+
}
|
55 |
+
else{
|
56 |
+
return Mage::helper('dpd')->__("No CSV uploaded.");
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Returns the size of the parcelshopcollection for this website.
|
62 |
+
*
|
63 |
+
* @return mixed
|
64 |
+
*/
|
65 |
+
public function getParcelshopsAvailableForThisWebsite(){
|
66 |
+
$websiteId = $this->getWebsiteScopeId();
|
67 |
+
$collection = Mage::getModel('dpd/specialparcelshops')->getCollection()->addFieldToFilter('parcelshop_website_id', array('eq' => $websiteId));
|
68 |
+
return $collection->getSize();
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Generate button html.
|
73 |
+
*
|
74 |
+
* @return string
|
75 |
+
*/
|
76 |
+
public function getButtonHtml()
|
77 |
+
{
|
78 |
+
$button = $this->getLayout()->createBlock('adminhtml/widget_button')
|
79 |
+
->setData(array(
|
80 |
+
'id' => 'dpd_button',
|
81 |
+
'label' => $this->helper('adminhtml')->__('Delete'),
|
82 |
+
'onclick' => 'javascript:check(); return false;'
|
83 |
+
));
|
84 |
+
|
85 |
+
return $button->toHtml();
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Get the website id for the selected scope in sysconfig.
|
90 |
+
*
|
91 |
+
* @return mixed
|
92 |
+
*/
|
93 |
+
public function getWebsiteScopeId(){
|
94 |
+
return Mage::app()->getWebsite(Mage::app()->getRequest()->getParam('website'))->getId();
|
95 |
+
}
|
96 |
+
}
|
app/code/community/DPD/Shipping/Block/Adminhtml/System/Config/Form/Dpdclassicexport.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_System_Config_Form_Dpdclassicexport
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_System_Config_Form_Dpdclassicexport extends Mage_Adminhtml_Block_System_Config_Form_Field implements Varien_Data_Form_Element_Renderer_Interface
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
17 |
+
* @return mixed
|
18 |
+
*/
|
19 |
+
public function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
20 |
+
{
|
21 |
+
$buttonBlock = Mage::app()->getLayout()->createBlock('adminhtml/widget_button');
|
22 |
+
|
23 |
+
$params = array(
|
24 |
+
'website' => $buttonBlock->getRequest()->getParam('website')
|
25 |
+
);
|
26 |
+
|
27 |
+
$data = array(
|
28 |
+
'label' => Mage::helper('adminhtml')->__('Export CSV'),
|
29 |
+
'onclick' => 'setLocation(\'' . Mage::helper('adminhtml')->getUrl("adminhtml/dpdconfig/exportDpdClassicTablerates", $params) . 'conditionName/\' + $(\'carriers_dpdclassic_condition_name\').value + \'/dpdclassictablerates.csv\' )',
|
30 |
+
'class' => '',
|
31 |
+
'id' => 'carriers_dpdclassic_export'
|
32 |
+
);
|
33 |
+
|
34 |
+
$html = $buttonBlock->setData($data)->toHtml();
|
35 |
+
|
36 |
+
return $html;
|
37 |
+
}
|
38 |
+
}
|
app/code/community/DPD/Shipping/Block/Adminhtml/System/Config/Form/Dpdparcelshopsexport.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Adminhtml_System_Config_Form_Dpdparcelshopsexport
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Adminhtml_System_Config_Form_Dpdparcelshopsexport extends Mage_Adminhtml_Block_System_Config_Form_Field implements Varien_Data_Form_Element_Renderer_Interface
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
17 |
+
* @return mixed
|
18 |
+
*/
|
19 |
+
public function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
20 |
+
{
|
21 |
+
$buttonBlock = Mage::app()->getLayout()->createBlock('adminhtml/widget_button');
|
22 |
+
|
23 |
+
$params = array(
|
24 |
+
'website' => $buttonBlock->getRequest()->getParam('website')
|
25 |
+
);
|
26 |
+
|
27 |
+
$data = array(
|
28 |
+
'label' => Mage::helper('adminhtml')->__('Export CSV'),
|
29 |
+
'onclick' => 'setLocation(\'' . Mage::helper('adminhtml')->getUrl("adminhtml/dpdconfig/exportDpdParcelshopsTablerates", $params) . 'conditionName/\' + $(\'carriers_dpdparcelshops_condition_name\').value + \'/dpdparcelshopstablerates.csv\' )',
|
30 |
+
'class' => '',
|
31 |
+
'id' => 'carriers_dpdparcelshops_export'
|
32 |
+
);
|
33 |
+
|
34 |
+
$html = $buttonBlock->setData($data)->toHtml();
|
35 |
+
|
36 |
+
return $html;
|
37 |
+
}
|
38 |
+
}
|
app/code/community/DPD/Shipping/Block/Carrier/Parcelshop.php
ADDED
@@ -0,0 +1,294 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Block_Carrier_Parcelshop
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Block_Carrier_Parcelshop extends Mage_Core_Block_Template
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Used to check if the url has to be shown or not. (click here to select..)
|
17 |
+
*
|
18 |
+
* @var
|
19 |
+
*/
|
20 |
+
private $_showurl;
|
21 |
+
/**
|
22 |
+
* Array of all configdata to pass to javascript.
|
23 |
+
*
|
24 |
+
* @var array
|
25 |
+
*/
|
26 |
+
private $_configArray = array();
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Check if the url has to be shown or not. (click here to select..)
|
30 |
+
*
|
31 |
+
* @param $bool
|
32 |
+
*/
|
33 |
+
public function setShowUrl($bool)
|
34 |
+
{
|
35 |
+
if ($bool && !Mage::getStoreConfig('carriers/dpdparcelshops/google_maps_display'))
|
36 |
+
$this->_showurl = $bool;
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Returns showurl variable.
|
42 |
+
*
|
43 |
+
* @return mixed
|
44 |
+
*/
|
45 |
+
public function getShowUrl()
|
46 |
+
{
|
47 |
+
return $this->_showurl;
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Gets all parcelshops from dpd webservice based on shipping address.
|
52 |
+
*
|
53 |
+
* @return mixed
|
54 |
+
*/
|
55 |
+
public function getParcelShops()
|
56 |
+
{
|
57 |
+
$coordinates = explode(',', Mage::Helper('dpd')->getGoogleMapsCenter());
|
58 |
+
$parcelshops = Mage::getSingleton('dpd/webservice')->getParcelShops($coordinates[1], $coordinates[0]);
|
59 |
+
return $parcelshops;
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Get all config data to pass to javascript (array) and jsonencode.
|
64 |
+
*
|
65 |
+
* @return mixed
|
66 |
+
*/
|
67 |
+
public function getConfig()
|
68 |
+
{
|
69 |
+
$center = explode(",", Mage::Helper('dpd')->getGoogleMapsCenter());
|
70 |
+
$this->_configArray["saveParcelUrl"] = $this->getUrl('dpd/ajax/saveparcel');
|
71 |
+
$this->_configArray["invalidateParcelUrl"] = $this->getUrl('dpd/ajax/invalidateparcel');
|
72 |
+
$this->_configArray["windowParcelUrl"] = $this->getUrl('dpd/ajax/windowindex');
|
73 |
+
$this->_configArray["ParcelUrl"] = $this->getUrl('dpd/ajax/index');
|
74 |
+
$this->_configArray["gmapsCenterlat"] = $center[0];
|
75 |
+
$this->_configArray["gmapsCenterlng"] = $center[1];
|
76 |
+
$this->_configArray["gmapsHeight"] = Mage::getStoreConfig('carriers/dpdparcelshops/google_maps_height') . 'px';
|
77 |
+
$this->_configArray["loadingmessage"] = '<span class="message">'.$this->__('Loading DPD parcelshop map based on your address...').'</span>';
|
78 |
+
$this->_configArray["gmapsWidth"] = Mage::getStoreConfig('carriers/dpdparcelshops/google_maps_width') . 'px';
|
79 |
+
$this->_configArray["gmapsIcon"] = Mage::getDesign()->getSkinUrl('images/dpd/icon_parcelshop.png');
|
80 |
+
$this->_configArray["gmapsIconShadow"] = Mage::getDesign()->getSkinUrl('images/dpd/icon_parcelshop_shadow.png');
|
81 |
+
$this->_configArray["gmapsCustomIcon"] = (Mage::getStoreConfig('carriers/dpdparcelshops/google_maps_icon') ? Mage::getBaseUrl('media') . "dpd/" . Mage::getStoreConfig('carriers/dpdparcelshops/google_maps_icon') : "");
|
82 |
+
$this->_configArray["gmapsDisplay"] = (bool)Mage::getStoreConfig('carriers/dpdparcelshops/google_maps_display');
|
83 |
+
$this->_configArray["loaderimage"] = $this->getSkinUrl('images/dpd/ajax-loader.gif');
|
84 |
+
return Mage::helper('core')->jsonEncode($this->_configArray);
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Render the html to show all shops. (to keep template files clean from to much functional php)
|
89 |
+
*
|
90 |
+
* @return string
|
91 |
+
*/
|
92 |
+
public function getShopsHtml()
|
93 |
+
{
|
94 |
+
$html = "";
|
95 |
+
$openinghours = "";
|
96 |
+
$counter = 0;
|
97 |
+
foreach ($this->getParcelShops()->parcelShop as $shop) {
|
98 |
+
$html .= '<div class="shop-data" id="shop' . $shop->parcelShopId . '">';
|
99 |
+
$html .= '<ul class="shop-details"><li><a href="#" id="' . $counter . '" class="show-info-bubble" /><strong>' . $shop->company . '</strong></a></li>';
|
100 |
+
$html .= '<li>' . $shop->street . " " . $shop->houseNo . '</li>';
|
101 |
+
$html .= '<li>' . $shop->zipCode . ' ' . $shop->city . '</li></ul>';
|
102 |
+
$html .= '<a id="shop' . $shop->parcelShopId . '" class="parcelshoplink" href="#">';
|
103 |
+
$html .= '<img src="' . Mage::getDesign()->getSkinUrl('images/dpd/icon_route.png') . '" alt="route" width="16" height="16" style="margin-right: 5px; margin-bottom:10px;">';
|
104 |
+
$html .= '<strong>' . Mage::helper('dpd')->__('Ship to this ParcelShop.') . '</strong>';
|
105 |
+
$html .= '</a>';
|
106 |
+
$html .= '</div>';
|
107 |
+
$this->_configArray['shop' . $shop->parcelShopId]['company'] = trim($shop->company);
|
108 |
+
$this->_configArray['shop' . $shop->parcelShopId]['houseno'] = $shop->street . " " . $shop->houseNo;
|
109 |
+
$this->_configArray['shop' . $shop->parcelShopId]['zipcode'] = $shop->zipCode;
|
110 |
+
$this->_configArray['shop' . $shop->parcelShopId]['city'] = $shop->city;
|
111 |
+
$this->_configArray['shop' . $shop->parcelShopId]['country'] = $shop->isoAlpha2;
|
112 |
+
$this->_configArray['shop' . $shop->parcelShopId]['parcelShopId'] = $shop->parcelShopId;
|
113 |
+
$this->_configArray['shop' . $shop->parcelShopId]['gmapsCenterlat'] = $shop->latitude;
|
114 |
+
$this->_configArray['shop' . $shop->parcelShopId]['gmapsCenterlng'] = $shop->longitude;
|
115 |
+
$this->_configArray['shop' . $shop->parcelShopId]['special'] = false;
|
116 |
+
$this->_configArray['shop' . $shop->parcelShopId]['extra_info'] = Mage::helper('core')->jsonEncode(array_filter(array(
|
117 |
+
'Opening hours' => (isset($shop->openingHours) && $shop->openingHours != "" ? Mage::helper('core')->jsonEncode($shop->openingHours) : ''),
|
118 |
+
'Telephone' => (isset($shop->phone) && $shop->phone != "" ? $shop->phone : ''),
|
119 |
+
'Website' => (isset($shop->homepage) && $shop->homepage != "" ? '<a href="' . 'http://' . $shop->homepage . '" target="_blank">' . $shop->homepage . '</a>' : ''),
|
120 |
+
'Extra info' => (isset($shop->extraInfo) && $shop->extraInfo != "" ? $shop->extraInfo : ''))));
|
121 |
+
$this->_configArray['shop' . $shop->parcelShopId]['gmapsMarkerContent'] = $this->_getMarkerHtml($shop, false);
|
122 |
+
$counter++;
|
123 |
+
}
|
124 |
+
if ($html) {
|
125 |
+
return $this->_getSpecialShopsHtml($html, $counter);
|
126 |
+
}
|
127 |
+
return $html;
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Render the html for openinghours. (to keep template files clean from to much functional php)
|
132 |
+
*
|
133 |
+
* @param $dpdExtraInfo
|
134 |
+
* @return string
|
135 |
+
*/
|
136 |
+
public function getOpeningHoursHtml($dpdExtraInfo)
|
137 |
+
{
|
138 |
+
$html = "";
|
139 |
+
if (is_array(json_decode($dpdExtraInfo))) {
|
140 |
+
foreach (json_decode($dpdExtraInfo) as $hours) {
|
141 |
+
$html .= '<ul class="daywrapper left">';
|
142 |
+
$html .= '<li class="day">' . Mage::helper('dpd')->__($hours->weekday) . '</li>';
|
143 |
+
if ($hours->openMorning != "") {
|
144 |
+
$html .= '<li class="hour">' . $hours->openMorning . ' - ' . $hours->closeMorning . '</li>';
|
145 |
+
} else {
|
146 |
+
$html .= '<li class="hour">' . Mage::helper('dpd')->__('closed') . '</li>';
|
147 |
+
}
|
148 |
+
if ($hours->openAfternoon != "") {
|
149 |
+
$html .= '<li class="hour">' . $hours->openAfternoon . ' - ' . $hours->closeAfternoon . '</li>';
|
150 |
+
} else {
|
151 |
+
$html .= '<li class="hour">' . Mage::helper('dpd')->__('closed') . '</li>';
|
152 |
+
}
|
153 |
+
$html .= '</ul>';
|
154 |
+
}
|
155 |
+
} else {
|
156 |
+
$html .= $dpdExtraInfo;
|
157 |
+
}
|
158 |
+
return $html;
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Gets html for the custom shops if available.
|
163 |
+
*
|
164 |
+
* @param $html
|
165 |
+
* @param $counter
|
166 |
+
* @return bool|string
|
167 |
+
*/
|
168 |
+
protected function _getSpecialShopsHtml($html, $counter)
|
169 |
+
{
|
170 |
+
$quote = Mage::getSingleton('checkout/session')->getQuote();
|
171 |
+
$billingAddress = $quote->getBillingAddress();
|
172 |
+
$countryCode = $billingAddress->getCountryId();
|
173 |
+
$websiteId = Mage::app()->getWebsite()->getId();
|
174 |
+
$specialShopsCollection = Mage::getModel('dpd/specialparcelshops')->getCollection()->addFieldToFilter('parcelshop_country', array('eq' => $countryCode))->addFieldToFilter('parcelshop_website_id', array('eq' => $websiteId));
|
175 |
+
|
176 |
+
foreach ($specialShopsCollection as $specialShop) {
|
177 |
+
$html .= '<div class="shop-data" id="shop' . $specialShop->getParcelshopDelicomId() . '">';
|
178 |
+
if (Mage::getStoreConfig('carriers/dpdparcelshops/special_parcelshop_icon') != "") {
|
179 |
+
$html .= '<img class="specialparcelshopImage" height="50" width="50" src="' . Mage::getBaseUrl('media') . "dpd/" . Mage::getStoreConfig('carriers/dpdparcelshops/special_parcelshop_icon') . '"/>';
|
180 |
+
}
|
181 |
+
$html .= '<ul class="shop-details"><li><a href="#" id="' . $counter . '" class="show-info-bubble" /><strong>' . $specialShop->getParcelshopPudoName() . '</strong></a></li>';
|
182 |
+
$html .= '<li>' . $specialShop->getData('parcelshop_address_1') . '</li>';
|
183 |
+
$html .= '<li>' . $specialShop->getParcelshopPostCode() . ' ' . $specialShop->getParcelshopTown() . '</li></ul>';
|
184 |
+
$html .= '<a id="shop' . $specialShop->getParcelshopDelicomId() . '" class="parcelshoplink" href="#">';
|
185 |
+
$html .= '<img src="' . Mage::getDesign()->getSkinUrl('images/dpd/icon_route.png') . '" alt="route" width="16" height="16" style="margin-right: 5px; margin-bottom:10px;">';
|
186 |
+
$html .= '<strong>' . Mage::helper('dpd')->__('Ship to this ParcelShop.') . '</strong>';
|
187 |
+
$html .= '</a>';
|
188 |
+
$html .= '</div>';
|
189 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['company'] = trim($specialShop->getParcelshopPudoName());
|
190 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['houseno'] = $specialShop->getData('parcelshop_address_1');
|
191 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['zipcode'] = $specialShop->getParcelshopPostCode();
|
192 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['city'] = $specialShop->getParcelshopTown();
|
193 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['country'] = $specialShop->getParcelshopCountry();
|
194 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['parcelShopId'] = $specialShop->getParcelshopDelicomId();
|
195 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['gmapsCenterlat'] = $specialShop->getParcelshopLatitude();
|
196 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['gmapsCenterlng'] = $specialShop->getParcelshopLongitude();
|
197 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['specialImage'] = (Mage::getStoreConfig('carriers/dpdparcelshops/special_parcelshop_icon') != "" ? Mage::getBaseUrl('media') . "dpd/" . Mage::getStoreConfig('carriers/dpdparcelshops/special_parcelshop_icon') : "");
|
198 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['special'] = true;
|
199 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['extra_info'] = Mage::helper('core')->jsonEncode(array_filter(array(
|
200 |
+
'Opening hours' => ($specialShop->getParcelshopOpeninghours() && $specialShop->getParcelshopOpeninghours() != "" ? $specialShop->getParcelshopOpeninghours() : ''),
|
201 |
+
'Telephone' => "",
|
202 |
+
'Website' => "",
|
203 |
+
'Extra info' => "")));
|
204 |
+
$this->_configArray['shop' . $specialShop->getParcelshopDelicomId()]['gmapsMarkerContent'] = $this->_getMarkerHtml($specialShop, true);
|
205 |
+
$counter++;
|
206 |
+
}
|
207 |
+
return ($html == "" ? false : $html);
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Gets html for the marker info bubbles.
|
212 |
+
*
|
213 |
+
* @param $shop
|
214 |
+
* @param $special
|
215 |
+
* @return string
|
216 |
+
*/
|
217 |
+
protected function _getMarkerHtml($shop, $special)
|
218 |
+
{
|
219 |
+
if ($special && Mage::getStoreConfig('carriers/dpdparcelshops/special_parcelshop_icon')) {
|
220 |
+
$image = Mage::getBaseUrl('media') . "dpd/" . Mage::getStoreConfig('carriers/dpdparcelshops/special_parcelshop_icon');
|
221 |
+
} else {
|
222 |
+
$image = Mage::getDesign()->getSkinUrl('images/dpd/dpd_parcelshop_logo.png');
|
223 |
+
}
|
224 |
+
$html = '<div class="content">
|
225 |
+
<table style="min-width:250px" cellpadding="3" cellspacing="3" border="0">
|
226 |
+
<tbody>
|
227 |
+
<tr>
|
228 |
+
<td rowspan="3" width="90"><img class="parcelshoplogo bubble" style="width:80px; height:62px;" src="' . $image . '" alt="extrainfo"/></td>
|
229 |
+
<td><strong>' . ($special ? $shop->getParcelshopPudoName() : $shop->company) . '</strong></td>
|
230 |
+
</tr>
|
231 |
+
<tr>
|
232 |
+
<td>' . ($special ? $shop->getData('parcelshop_address_1') : $shop->street . " " . $shop->houseNo) . '</td>
|
233 |
+
</tr>
|
234 |
+
<tr>
|
235 |
+
<td>' . ($special ? $shop->getParcelshopPostCode() . ' ' . $shop->getParcelshopTown() : $shop->zipCode . ' ' . $shop->city) . '</td>
|
236 |
+
</tr>
|
237 |
+
</tbody>
|
238 |
+
</table>
|
239 |
+
<div class="dpdclear"></div>
|
240 |
+
';
|
241 |
+
|
242 |
+
|
243 |
+
if (!$special && isset($shop->openingHours) && $shop->openingHours != "") {
|
244 |
+
$html .= '<div class="dotted-line">
|
245 |
+
<table>
|
246 |
+
<tbody>';
|
247 |
+
foreach ($shop->openingHours as $openinghours) {
|
248 |
+
$html .= '<tr><td style="padding-right:10px;"><strong>' . $openinghours->weekday . '</strong></td><td style="padding-right:10px;">' . $openinghours->openMorning . ' - ' . $openinghours->closeMorning . '
|
249 |
+
</td><td>' . $openinghours->openAfternoon . ' - ' . $openinghours->closeAfternoon . '</td></tr>';
|
250 |
+
}
|
251 |
+
$html .= '</tbody>
|
252 |
+
</table>
|
253 |
+
</div><div class="dpdclear"></div>';
|
254 |
+
}
|
255 |
+
elseif($special && $shop->getParcelshopOpeninghours() && $shop->getParcelshopOpeninghours()!=""){
|
256 |
+
|
257 |
+
$html .= '<div class="dotted-line">
|
258 |
+
<table>
|
259 |
+
<tbody>';
|
260 |
+
foreach (Mage::helper('core')->jsonDecode($shop->getParcelshopOpeninghours()) as $openinghours) {
|
261 |
+
|
262 |
+
$html .= '<tr><td style="padding-right:10px;"><strong>' . $openinghours['weekday'] . '</strong></td><td style="padding-right:10px;">' . $openinghours['openMorning'] . ' - ' . $openinghours['closeMorning'] . '
|
263 |
+
</td><td>' . $openinghours['openAfternoon'] . ' - ' . $openinghours['closeAfternoon'] . '</td></tr>';
|
264 |
+
}
|
265 |
+
$html .= '</tbody>
|
266 |
+
</table>
|
267 |
+
</div><div class="dpdclear"></div>';
|
268 |
+
}
|
269 |
+
|
270 |
+
|
271 |
+
$html .= '<div class="dotted-line">
|
272 |
+
<table>
|
273 |
+
<tbody>
|
274 |
+
<tr class="pointer">
|
275 |
+
<td id="' . 'shop' . ($special ? $shop->getParcelshopDelicomId() : $shop->parcelShopId) . '" class="parcelshoplink" onclick="window.dpdShipping.saveParcelShop(event);" style="width: 25px;"><img src="' . Mage::getDesign()->getSkinUrl('images/dpd/icon_route.png') . '" alt="route" width="16" height="16" ></td>
|
276 |
+
<td id="' . 'shop' . ($special ? $shop->getParcelshopDelicomId() : $shop->parcelShopId) . '" class="parcelshoplink" onclick="window.dpdShipping.saveParcelShop(event);"><strong>' . Mage::helper('dpd')->__('Ship to this ParcelShop.') . '</strong></td>
|
277 |
+
</tr>
|
278 |
+
</tbody>
|
279 |
+
</table>
|
280 |
+
</div></div><div class="dpdclear"></div>';
|
281 |
+
return $html;
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
* Returns quote object.
|
286 |
+
*
|
287 |
+
* @return mixed
|
288 |
+
*/
|
289 |
+
public function getQuote()
|
290 |
+
{
|
291 |
+
return Mage::getModel('checkout/cart')->getQuote();
|
292 |
+
}
|
293 |
+
|
294 |
+
}
|
app/code/community/DPD/Shipping/Helper/Data.php
ADDED
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Helper_Data
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Helper_Data extends Mage_Core_Helper_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Sets default shipping method when selected in admin.
|
17 |
+
*
|
18 |
+
* @param $html
|
19 |
+
* @return mixed
|
20 |
+
*/
|
21 |
+
public function checkShippingDefault($html)
|
22 |
+
{
|
23 |
+
if ((Mage::getStoreConfig('carriers/dpdclassic/default') &&
|
24 |
+
Mage::getStoreConfig('carriers/dpdclassic/sort_order') <= Mage::getStoreConfig('carriers/dpdparcelshops/sort_order')) ||
|
25 |
+
(Mage::getStoreConfig('carriers/dpdclassic/default') && !Mage::getStoreConfig('carriers/dpdparcelshops/default'))
|
26 |
+
) {
|
27 |
+
$html = $this->_selectNode($html, 's_method_dpdclassic_dpdclassic');
|
28 |
+
} elseif (Mage::getStoreConfig('carriers/dpdparcelshops/default')) {
|
29 |
+
$html = $this->_selectNode($html, 's_method_dpdparcelshops_dpdparcelshops');
|
30 |
+
}
|
31 |
+
return $html;
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Selects the radiobutton for default selected shipping method.
|
36 |
+
*
|
37 |
+
* @param $html
|
38 |
+
* @param $node
|
39 |
+
* @return mixed
|
40 |
+
*/
|
41 |
+
protected function _selectNode($html, $node)
|
42 |
+
{
|
43 |
+
preg_match('(<input[^>]+id="' . $node . '"[^>]+>)', $html, $matches);
|
44 |
+
if (isset($matches[0])) {
|
45 |
+
$checked = str_replace('/>', ' checked="checked" />', $matches[0]);
|
46 |
+
$html = str_replace($matches[0],
|
47 |
+
$checked, $html);
|
48 |
+
}
|
49 |
+
return $html;
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Adds custom html to parcelshops shipping method.
|
54 |
+
*
|
55 |
+
* @param $html
|
56 |
+
* @return mixed
|
57 |
+
*/
|
58 |
+
public function addHTML($html)
|
59 |
+
{
|
60 |
+
$quote = Mage::getModel('checkout/cart')->getQuote();
|
61 |
+
$block = Mage::app()->getLayout()->createBlock('dpd/carrier_parcelshop');
|
62 |
+
$block->setShowUrl(true);
|
63 |
+
preg_match('!<label for="(.*?)parcelshops">(.*?)<\/label>!', $html, $matches);
|
64 |
+
if (isset($matches[0])) {
|
65 |
+
if ($quote->getDpdSelected()) {
|
66 |
+
$html = str_replace($matches[0],
|
67 |
+
$matches[0] . '<div id="dpd">' . $block->setTemplate('dpd/parcelshopselected.phtml')->toHtml() . '</div>',
|
68 |
+
$html);
|
69 |
+
} else {
|
70 |
+
$html = str_replace($matches[0],
|
71 |
+
$matches[0] . '<div id="dpd">' . $block->setTemplate('dpd/parcelshoplink.phtml')->toHtml() . '</div>',
|
72 |
+
$html);
|
73 |
+
}
|
74 |
+
}
|
75 |
+
return $html;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Returns shipping address lat lng.
|
80 |
+
*
|
81 |
+
* @return string
|
82 |
+
*/
|
83 |
+
public function getGoogleMapsCenter()
|
84 |
+
{
|
85 |
+
$address = Mage::getModel('checkout/cart')->getQuote()->getShippingAddress();
|
86 |
+
$addressToInsert = $address->getStreet(1) . " ";
|
87 |
+
if ($address->getStreet(2)) {
|
88 |
+
$addressToInsert .= $address->getStreet(2) . " ";
|
89 |
+
}
|
90 |
+
$addressToInsert .= $address->getPostcode() . " " . $address->getCity() . " " . $address->getCountry();
|
91 |
+
$url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($addressToInsert) . '&sensor=false';
|
92 |
+
$source = file_get_contents($url);
|
93 |
+
$obj = json_decode($source);
|
94 |
+
$LATITUDE = $obj->results[0]->geometry->location->lat;
|
95 |
+
$LONGITUDE = $obj->results[0]->geometry->location->lng;
|
96 |
+
return $LATITUDE . ',' . $LONGITUDE;
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Logs bugs/info.
|
101 |
+
* Zend_Log::DEBUG = 7
|
102 |
+
* Zend_Log::ERR = 3
|
103 |
+
* Zend_Log::INFO = 6
|
104 |
+
*
|
105 |
+
* @param $message
|
106 |
+
* @param $level
|
107 |
+
*/
|
108 |
+
public function log($message,$level){
|
109 |
+
$allowedLogLevel = Mage::getStoreConfig('carriers/dpdparcelshops/log_level');
|
110 |
+
if($level <= $allowedLogLevel){
|
111 |
+
Mage::log($message,$level,'dpd.log');
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Creates new IO object and inputs base 64 pdf string fetched from webservice.
|
117 |
+
*
|
118 |
+
* @param $pdfString
|
119 |
+
* @param $folder
|
120 |
+
* @param $name
|
121 |
+
*/
|
122 |
+
public function generatePdfAndSave($pdfString, $folder, $name){
|
123 |
+
$io = new Varien_Io_File();
|
124 |
+
$io->setAllowCreateFolders(true);
|
125 |
+
$io->open(array('path' => Mage::getBaseDir('media')."/dpd/".$folder));
|
126 |
+
$io->streamOpen($name.'.pdf', 'w+');
|
127 |
+
$io->streamLock(true);
|
128 |
+
$io->streamWrite($pdfString);
|
129 |
+
$io->streamUnlock();
|
130 |
+
$io->streamClose();
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* True if the current version of Magento is Enterprise Edition.
|
135 |
+
*
|
136 |
+
* @return bool
|
137 |
+
*/
|
138 |
+
public function isMageEnterprise() {
|
139 |
+
return Mage::getConfig()->getModuleConfig('Enterprise_Enterprise') && Mage::getConfig()->getModuleConfig('Enterprise_AdminGws') && Mage::getConfig()->getModuleConfig('Enterprise_Checkout') && Mage::getConfig()->getModuleConfig('Enterprise_Customer');
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Returns the language based on storeId.
|
144 |
+
*
|
145 |
+
* @param $storeId
|
146 |
+
* @return string language
|
147 |
+
*/
|
148 |
+
public function getLanguageFromStore($storeId)
|
149 |
+
{
|
150 |
+
$locale = Mage::app()->getStore($storeId)->getConfig('general/locale/code');
|
151 |
+
$localeCode = explode('_' , $locale);
|
152 |
+
|
153 |
+
return strtoupper($localeCode[0]);
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Calculates total weight of a shipment.
|
158 |
+
*
|
159 |
+
* @param $shipment
|
160 |
+
* @return int
|
161 |
+
*/
|
162 |
+
public function calculateTotalShippingWeight($shipment){
|
163 |
+
$weight = 0;
|
164 |
+
$shipmentItems = $shipment->getAllItems();
|
165 |
+
foreach ($shipmentItems as $shipmentItem) {
|
166 |
+
$weight = $weight + $shipmentItem->getWeight();
|
167 |
+
}
|
168 |
+
|
169 |
+
return $weight;
|
170 |
+
}
|
171 |
+
}
|
app/code/community/DPD/Shipping/Model/Adminhtml/Dpdgrid.php
ADDED
@@ -0,0 +1,215 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Adminhtml_DpdGrid
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Adminhtml_Dpdgrid extends Mage_Core_Model_Abstract
|
14 |
+
{
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Generates and completes an order, reference: generateAndCompleteAction.
|
18 |
+
*
|
19 |
+
* @param $orderId
|
20 |
+
* @return $this
|
21 |
+
*/
|
22 |
+
public function generateAndCompleteOrder($orderId)
|
23 |
+
{
|
24 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
25 |
+
$shipmentCollection = $order->getShipmentsCollection();
|
26 |
+
if ($shipmentCollection->count() > 0 && !$order->getDpdLabelExists()) {
|
27 |
+
$dpdused = false;
|
28 |
+
foreach ($shipmentCollection as $shipment) {
|
29 |
+
foreach ($shipment->getAllTracks() as $tracker) {
|
30 |
+
if (strpos($tracker->getCarrierCode(), 'dpd') !== false) {
|
31 |
+
$labelName = $this->_generateLabelAndReturnLabel($order, $shipment);
|
32 |
+
if (!$labelName) {
|
33 |
+
$message = Mage::helper('dpd')->__("Something went wrong while processing order %s, please check your error logs.", $order->getIncrementId());
|
34 |
+
Mage::getSingleton('core/session')->addError($message);
|
35 |
+
continue;
|
36 |
+
} else {
|
37 |
+
$dpdused = true;
|
38 |
+
$locale = Mage::app()->getStore($order->getStoreId())->getConfig('general/locale/code');
|
39 |
+
$localeCode = explode('_', $locale);
|
40 |
+
$shipment->setDpdLabelPath($labelName . ".pdf");
|
41 |
+
$shipment->setDpdTrackingUrl('<a target="_blank" href="' . "http://tracking.dpd.de/cgi-bin/delistrack?typ=32&lang=" . $localeCode[0] . "&pknr=" . $labelName . "&var=" . Mage::getStoreConfig('shipping/dpd_classic/userid') . '">' . Mage::helper('dpd')->__('Track this shipment') . '</a>');
|
42 |
+
$tracker->setData('number', $labelName);
|
43 |
+
$transactionSave = Mage::getModel('core/resource_transaction')
|
44 |
+
->addObject($shipment)
|
45 |
+
->addObject($tracker)
|
46 |
+
->save();
|
47 |
+
}
|
48 |
+
}
|
49 |
+
}
|
50 |
+
}
|
51 |
+
if ($dpdused) {
|
52 |
+
$order->addStatusHistoryComment(Mage::helper('dpd')->__('Shipped with DPD generateLabelAndComplete'), true);
|
53 |
+
$order->setDpdLabelExists(1);
|
54 |
+
$order->save();
|
55 |
+
return true;
|
56 |
+
} else {
|
57 |
+
$message = Mage::helper('dpd')->__("The order with id %s has only none DPD shipments.", $order->getIncrementId());
|
58 |
+
Mage::getSingleton('core/session')->addNotice($message);
|
59 |
+
return false;
|
60 |
+
}
|
61 |
+
} elseif (!$order->getDpdLabelExists()) {
|
62 |
+
$shipment = $order->prepareShipment();
|
63 |
+
$shipment->register();
|
64 |
+
$weight = Mage::helper('dpd')->calculateTotalShippingWeight($shipment);
|
65 |
+
$shipment->setTotalWeight($weight);
|
66 |
+
$labelName = $this->_generateLabelAndReturnLabel($order, $shipment);
|
67 |
+
if (!$labelName) {
|
68 |
+
$message = Mage::helper('dpd')->__("Something went wrong while processing order %s, please check your error logs.", $order->getIncrementId());
|
69 |
+
Mage::getSingleton('core/session')->addError($message);
|
70 |
+
return false;
|
71 |
+
} else {
|
72 |
+
$explodeForCarrier = explode('_', $order->getShippingMethod(), 3);
|
73 |
+
$locale = Mage::app()->getStore($order->getStoreId())->getConfig('general/locale/code');
|
74 |
+
$localeCode = explode('_', $locale);
|
75 |
+
$shipment->setDpdLabelPath($labelName . ".pdf");
|
76 |
+
$shipment->setDpdTrackingUrl('<a target="_blank" href="' . "http://tracking.dpd.de/cgi-bin/delistrack?typ=32&lang=" . $localeCode[0] . "&pknr=" . $labelName . "&var=" . Mage::getStoreConfig('shipping/dpd_classic/userid') . '">' . Mage::helper('dpd')->__('Track this shipment') . '</a>');
|
77 |
+
$order->setIsInProcess(true);
|
78 |
+
$order->addStatusHistoryComment(Mage::helper('dpd')->__('Shipped with DPD generateLabelAndComplete'), true);
|
79 |
+
$order->setDpdLabelExists(1);
|
80 |
+
$tracker = Mage::getModel('sales/order_shipment_track')
|
81 |
+
->setShipment($shipment)
|
82 |
+
->setData('title', 'DPD')
|
83 |
+
->setData('number', $labelName)
|
84 |
+
->setData('carrier_code', $explodeForCarrier[0])
|
85 |
+
->setData('order_id', $shipment->getData('order_id'));
|
86 |
+
$transactionSave = Mage::getModel('core/resource_transaction')
|
87 |
+
->addObject($shipment)
|
88 |
+
->addObject($shipment->getOrder())
|
89 |
+
->addObject($tracker)
|
90 |
+
->save();
|
91 |
+
return true;
|
92 |
+
}
|
93 |
+
} else {
|
94 |
+
$message = Mage::helper('dpd')->__("The order with id %s is not ready to be shipped or has already been shipped.", $order->getIncrementId());
|
95 |
+
Mage::getSingleton('core/session')->addNotice($message);
|
96 |
+
return false;
|
97 |
+
}
|
98 |
+
return $this;
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Generates a shipment label and saves it on the harddisk.
|
103 |
+
*
|
104 |
+
* @param $order
|
105 |
+
* @param $shipment
|
106 |
+
* @return mixed
|
107 |
+
*/
|
108 |
+
protected function _generateLabelAndReturnLabel($order, $shipment)
|
109 |
+
{
|
110 |
+
$parcelshop = false;
|
111 |
+
$billingAddress = $order->getBillingAddress();
|
112 |
+
$recipient = array(
|
113 |
+
'name1' => $billingAddress->getFirstname() . " " . $billingAddress->getLastname(),
|
114 |
+
'street' => $billingAddress->getStreet(1) . " " . $billingAddress->getStreet(2),
|
115 |
+
'country' => $billingAddress->getCountry(),
|
116 |
+
'zipCode' => $billingAddress->getPostcode(),
|
117 |
+
'city' => $billingAddress->getCity()
|
118 |
+
);
|
119 |
+
if (strpos($order->getShippingMethod(), 'parcelshop') !== false) {
|
120 |
+
$parcelshop = true;
|
121 |
+
}
|
122 |
+
$labelWebserviceCallback = Mage::getSingleton('dpd/webservice')->getShippingLabel($recipient, $order, $shipment, $parcelshop);
|
123 |
+
|
124 |
+
if ($labelWebserviceCallback) {
|
125 |
+
Mage::helper('dpd')->generatePdfAndSave($labelWebserviceCallback->parcellabelsPDF, 'orderlabels', $order->getIncrementId(). "-" .$labelWebserviceCallback->shipmentResponses->parcelInformation->parcelLabelNumber);
|
126 |
+
return $order->getIncrementId(). "-" .$labelWebserviceCallback->shipmentResponses->parcelInformation->parcelLabelNumber;
|
127 |
+
} else {
|
128 |
+
return false;
|
129 |
+
}
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Processes the undownloadable labels. (set mark and zip)
|
134 |
+
*
|
135 |
+
* @param $orderIds
|
136 |
+
* @return bool|string
|
137 |
+
*/
|
138 |
+
public function processUndownloadedLabels($orderIds)
|
139 |
+
{
|
140 |
+
$labelPdfArray = array();
|
141 |
+
$i = 0;
|
142 |
+
$err = false;
|
143 |
+
foreach ($orderIds as $orderId) {
|
144 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
145 |
+
$exported = false;
|
146 |
+
if (!$order->getDpdLabelExported()) {
|
147 |
+
$shippingCollection = Mage::getResourceModel('sales/order_shipment_collection')
|
148 |
+
->setOrderFilter($order)
|
149 |
+
->load();
|
150 |
+
if (count($shippingCollection)) {
|
151 |
+
foreach ($shippingCollection as $shipment) {
|
152 |
+
if ($shipment->getDpdLabelPath() != "" && file_exists(Mage::getBaseDir('media') . "/dpd/orderlabels/" . $shipment->getDpdLabelPath()) && $shipment->getDpdLabelPath() != ".pdf") {
|
153 |
+
$labelPdfArray[] = Mage::getBaseDir('media') . "/dpd/orderlabels/" . $shipment->getDpdLabelPath();
|
154 |
+
$exported = true;
|
155 |
+
}
|
156 |
+
}
|
157 |
+
if ($exported) {
|
158 |
+
$order->setDpdLabelExported(1)->save();
|
159 |
+
}
|
160 |
+
}
|
161 |
+
} else {
|
162 |
+
$i++;
|
163 |
+
}
|
164 |
+
}
|
165 |
+
if (!count($labelPdfArray)) {
|
166 |
+
return false;
|
167 |
+
}
|
168 |
+
if ($i > 0) {
|
169 |
+
$message = Mage::helper('dpd')->__('%s orders already had downloaded labels.', $i);
|
170 |
+
Mage::getSingleton('core/session')->addNotice($message);
|
171 |
+
} else {
|
172 |
+
$message = Mage::helper('dpd')->__('All labels have been downloaded.');
|
173 |
+
Mage::getSingleton('core/session')->addSuccess($message);
|
174 |
+
}
|
175 |
+
return $this->_zipLabelPdfArray($labelPdfArray, Mage::getBaseDir('media') . "/dpd/orderlabels/undownloaded.zip", true);
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Zips the labels.
|
180 |
+
*
|
181 |
+
* @param array $files
|
182 |
+
* @param string $destination
|
183 |
+
* @param bool $overwrite
|
184 |
+
* @return bool|string
|
185 |
+
*/
|
186 |
+
protected function _zipLabelPdfArray($files = array(), $destination = '', $overwrite = false)
|
187 |
+
{
|
188 |
+
if (file_exists($destination) && !$overwrite) {
|
189 |
+
return false;
|
190 |
+
}
|
191 |
+
$valid_files = array();
|
192 |
+
if (is_array($files)) {
|
193 |
+
foreach ($files as $file) {
|
194 |
+
if (file_exists($file)) {
|
195 |
+
$valid_files[] = $file;
|
196 |
+
}
|
197 |
+
}
|
198 |
+
}
|
199 |
+
if (count($valid_files)) {
|
200 |
+
$zip = new ZipArchive();
|
201 |
+
if ($zip->open($destination, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
|
202 |
+
return false;
|
203 |
+
}
|
204 |
+
foreach ($valid_files as $file) {
|
205 |
+
$zip->addFile($file, basename($file));
|
206 |
+
}
|
207 |
+
$zip->close();
|
208 |
+
|
209 |
+
return $destination;
|
210 |
+
} else {
|
211 |
+
return false;
|
212 |
+
}
|
213 |
+
}
|
214 |
+
|
215 |
+
}
|
app/code/community/DPD/Shipping/Model/Adminhtml/System/Config/Backend/Shipping/Dpdclassic/Tablerate.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Adminhtml_System_Config_Backend_Shipping_Dpdclassic_Tablerate
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Adminhtml_System_Config_Backend_Shipping_Dpdclassic_Tablerate extends Mage_Core_Model_Config_Data
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Call the uploadAndImport function from the classic tablerate recourcemodel.
|
17 |
+
*/
|
18 |
+
public function _afterSave()
|
19 |
+
{
|
20 |
+
Mage::getResourceModel('dpd/dpdclassic_tablerate')->uploadAndImport($this);
|
21 |
+
}
|
22 |
+
}
|
app/code/community/DPD/Shipping/Model/Adminhtml/System/Config/Backend/Shipping/Dpdparcelshops/Tablerate.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Adminhtml_System_Config_Backend_Shipping_Dpdparcelshops_Tablerate
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Adminhtml_System_Config_Backend_Shipping_Dpdparcelshops_Tablerate extends Mage_Core_Model_Config_Data
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Call the uploadAndImport function from the parcelshops tablerate recourcemodel.
|
17 |
+
*/
|
18 |
+
public function _afterSave()
|
19 |
+
{
|
20 |
+
Mage::getResourceModel('dpd/dpdparcelshops_tablerate')->uploadAndImport($this);
|
21 |
+
}
|
22 |
+
}
|
app/code/community/DPD/Shipping/Model/Adminhtml/System/Config/Backend/Shipping/Specialparcelshops.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_System_Config_Backend_Shipping_Specialparcelshops
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Adminhtml_System_Config_Backend_Shipping_Specialparcelshops extends Mage_Core_Model_Config_Data
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Call the uploadAndImport function from the parcelshops recoursemodel.
|
17 |
+
*/
|
18 |
+
public function _afterSave()
|
19 |
+
{
|
20 |
+
Mage::getResourceModel('dpd/specialparcelshops')->uploadAndImport($this);
|
21 |
+
}
|
22 |
+
}
|
app/code/community/DPD/Shipping/Model/Carrier/Dpdclassic.php
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Carrier_Dpdclassic
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Carrier_Dpdclassic extends Mage_Shipping_Model_Carrier_Abstract
|
14 |
+
implements Mage_Shipping_Model_Carrier_Interface
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Shipping method code.
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
protected $_code = 'dpdclassic';
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Collect shipping method price and set all data selected in config.
|
25 |
+
*
|
26 |
+
* @param Mage_Shipping_Model_Rate_Request $request
|
27 |
+
* @return bool|false|Mage_Core_Model_Abstract
|
28 |
+
*/
|
29 |
+
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
30 |
+
{
|
31 |
+
if (!Mage::getStoreConfig('carriers/' . $this->_code . '/active')) {
|
32 |
+
return false;
|
33 |
+
}
|
34 |
+
$method = Mage::getModel('shipping/rate_result_method');
|
35 |
+
$result = Mage::getModel('shipping/rate_result');
|
36 |
+
if (!$this->getConfigData('ratetype')) {
|
37 |
+
$price = $this->getConfigData('flatrateprice');
|
38 |
+
if ($request->getFreeShipping() === true) {
|
39 |
+
$price = 0;
|
40 |
+
}
|
41 |
+
} else {
|
42 |
+
$freeQty = 0;
|
43 |
+
if ($request->getAllItems()) {
|
44 |
+
$freePackageValue = 0;
|
45 |
+
foreach ($request->getAllItems() as $item) {
|
46 |
+
if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
|
47 |
+
continue;
|
48 |
+
}
|
49 |
+
|
50 |
+
if ($item->getHasChildren() && $item->isShipSeparately()) {
|
51 |
+
foreach ($item->getChildren() as $child) {
|
52 |
+
if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
|
53 |
+
$freeShipping = is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0;
|
54 |
+
$freeQty += $item->getQty() * ($child->getQty() - $freeShipping);
|
55 |
+
}
|
56 |
+
}
|
57 |
+
} elseif ($item->getFreeShipping()) {
|
58 |
+
$freeShipping = is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0;
|
59 |
+
$freeQty += $item->getQty() - $freeShipping;
|
60 |
+
$freePackageValue += $item->getBaseRowTotal();
|
61 |
+
}
|
62 |
+
}
|
63 |
+
$oldValue = $request->getPackageValue();
|
64 |
+
$request->setPackageValue($oldValue - $freePackageValue);
|
65 |
+
}
|
66 |
+
|
67 |
+
if ($freePackageValue) {
|
68 |
+
$request->setPackageValue($request->getPackageValue() - $freePackageValue);
|
69 |
+
}
|
70 |
+
|
71 |
+
$conditionName = $this->getConfigData('condition_name');
|
72 |
+
$request->setConditionName($conditionName ? $conditionName : $this->_default_condition_name);
|
73 |
+
|
74 |
+
$oldWeight = $request->getPackageWeight();
|
75 |
+
$oldQty = $request->getPackageQty();
|
76 |
+
|
77 |
+
$request->setPackageWeight($request->getFreeMethodWeight());
|
78 |
+
$request->setPackageQty($oldQty - $freeQty);
|
79 |
+
|
80 |
+
$rate = $this->getRate($request);
|
81 |
+
$request->setPackageWeight($oldWeight);
|
82 |
+
$request->setPackageQty($oldQty);
|
83 |
+
|
84 |
+
if (!empty($rate) && $rate['price'] >= 0) {
|
85 |
+
if ($request->getFreeShipping() === true || ($request->getPackageQty() == $freeQty)) {
|
86 |
+
$price = 0;
|
87 |
+
} else {
|
88 |
+
$price = $rate['price'];
|
89 |
+
}
|
90 |
+
} elseif (empty($rate) && $request->getFreeShipping() === true) {
|
91 |
+
$request->setPackageValue($freePackageValue);
|
92 |
+
$request->setPackageQty($freeQty);
|
93 |
+
$rate = $this->getRate($request);
|
94 |
+
if (!empty($rate) && $rate['price'] >= 0) {
|
95 |
+
$price = 0;
|
96 |
+
}
|
97 |
+
} else {
|
98 |
+
$error = Mage::getModel('shipping/rate_result_error');
|
99 |
+
$error->setCarrier($this->_code);
|
100 |
+
$error->setCarrierTitle($this->getConfigData('title'));
|
101 |
+
$error->setErrorMessage(Mage::helper('dpd')->__('This shipping method is currently unavailable. If you would like to ship using this shipping method, please contact us.'));
|
102 |
+
$result->append($error);
|
103 |
+
return $result;
|
104 |
+
}
|
105 |
+
|
106 |
+
}
|
107 |
+
$method->setCarrier($this->_code);
|
108 |
+
$method->setMethod($this->_code);
|
109 |
+
$method->setMethodTitle($this->getConfigData('name'));
|
110 |
+
$method->setCarrierTitle($this->getConfigData('carrier'));
|
111 |
+
$method->setPrice($price);
|
112 |
+
$method->setCost($price);
|
113 |
+
$result->append($method);
|
114 |
+
return $result;
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Add this method to list of allowed methods so Magento can display it.
|
119 |
+
*
|
120 |
+
* @return array
|
121 |
+
*/
|
122 |
+
public function getAllowedMethods()
|
123 |
+
{
|
124 |
+
return array('classic' => $this->getConfigData('name'));
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Get tracking result object.
|
129 |
+
*
|
130 |
+
* @param string $tracking_number
|
131 |
+
* @return Mage_Shipping_Model_Tracking_Result $tracking_result
|
132 |
+
*/
|
133 |
+
public function getTrackingInfo($tracking_number)
|
134 |
+
{
|
135 |
+
$tracking_result = $this->getTracking($tracking_number);
|
136 |
+
|
137 |
+
if ($tracking_result instanceof Mage_Shipping_Model_Tracking_Result) {
|
138 |
+
$trackings = $tracking_result->getAllTrackings();
|
139 |
+
if (is_array($trackings) && count($trackings) > 0) {
|
140 |
+
return $trackings[0];
|
141 |
+
}
|
142 |
+
}
|
143 |
+
return false;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Get tracking Url.
|
148 |
+
*
|
149 |
+
* @param string $tracking_number
|
150 |
+
* @return Mage_Shipping_Model_Tracking_Result
|
151 |
+
*/
|
152 |
+
public function getTracking($tracking_number)
|
153 |
+
{
|
154 |
+
$tracking_result = Mage::getModel('shipping/tracking_result');
|
155 |
+
$tracking_status = Mage::getModel('shipping/tracking_result_status');
|
156 |
+
$localeExploded = explode('_', Mage::app()->getLocale()->getLocaleCode());
|
157 |
+
$tracking_status->setCarrier($this->_code);
|
158 |
+
$tracking_status->setCarrierTitle($this->getConfigData('title'));
|
159 |
+
$tracking_status->setTracking($tracking_number);
|
160 |
+
$tracking_status->addData(
|
161 |
+
array(
|
162 |
+
'status' => '<a target="_blank" href="' . "http://tracking.dpd.de/cgi-bin/delistrack?typ=32&lang=" . $localeExploded[0] . "&pknr=" . $tracking_number . "&var=" . Mage::getStoreConfig('shipping/dpdclassic/userid') . '">' . Mage::helper('dpd')->__('Track this shipment') . '</a>'
|
163 |
+
)
|
164 |
+
);
|
165 |
+
$tracking_result->append($tracking_status);
|
166 |
+
|
167 |
+
return $tracking_result;
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Make tracking available for dpd shippingmethods.
|
172 |
+
*
|
173 |
+
* @return bool
|
174 |
+
*/
|
175 |
+
public function isTrackingAvailable()
|
176 |
+
{
|
177 |
+
return true;
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Make shippinglabels not available as we provided our own method.
|
182 |
+
*
|
183 |
+
* @return bool
|
184 |
+
*/
|
185 |
+
public function isShippingLabelsAvailable()
|
186 |
+
{
|
187 |
+
return false;
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Get the rateobject from our resource model.
|
192 |
+
*
|
193 |
+
* @param $request
|
194 |
+
* @return mixed
|
195 |
+
*/
|
196 |
+
public function getRate($request)
|
197 |
+
{
|
198 |
+
return Mage::getResourceModel('dpd/dpdclassic_tablerate')->getRate($request);
|
199 |
+
}
|
200 |
+
}
|
app/code/community/DPD/Shipping/Model/Carrier/Dpdparcelshops.php
ADDED
@@ -0,0 +1,204 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Carrier_Dpdparcelshops
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Carrier_Dpdparcelshops extends Mage_Shipping_Model_Carrier_Abstract
|
14 |
+
implements Mage_Shipping_Model_Carrier_Interface
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Shipping method code.
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
protected $_code = 'dpdparcelshops';
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Collect shipping method price and set all data selected in config.
|
25 |
+
*
|
26 |
+
* @param Mage_Shipping_Model_Rate_Request $request
|
27 |
+
* @return bool|false|Mage_Core_Model_Abstract
|
28 |
+
*/
|
29 |
+
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
30 |
+
{
|
31 |
+
$quote = Mage::getSingleton('checkout/cart')->getQuote();
|
32 |
+
if (!Mage::getStoreConfig('carriers/' . $this->_code . '/active') || Mage::app()->getStore()->isAdmin() || !Mage::getSingleton('dpd/webservice')->getLoginResult() || $quote->getData('is_multi_shipping')) {
|
33 |
+
return false;
|
34 |
+
}
|
35 |
+
|
36 |
+
$method = Mage::getModel('shipping/rate_result_method');
|
37 |
+
$result = Mage::getModel('shipping/rate_result');
|
38 |
+
if (!$this->getConfigData('ratetype')) {
|
39 |
+
$price = $this->getConfigData('flatrateprice');
|
40 |
+
if ($request->getFreeShipping() === true) {
|
41 |
+
$price = 0;
|
42 |
+
}
|
43 |
+
} else {
|
44 |
+
$freeQty = 0;
|
45 |
+
if ($request->getAllItems()) {
|
46 |
+
$freePackageValue = 0;
|
47 |
+
foreach ($request->getAllItems() as $item) {
|
48 |
+
if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
|
49 |
+
continue;
|
50 |
+
}
|
51 |
+
|
52 |
+
if ($item->getHasChildren() && $item->isShipSeparately()) {
|
53 |
+
foreach ($item->getChildren() as $child) {
|
54 |
+
if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
|
55 |
+
$freeShipping = is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0;
|
56 |
+
$freeQty += $item->getQty() * ($child->getQty() - $freeShipping);
|
57 |
+
}
|
58 |
+
}
|
59 |
+
} elseif ($item->getFreeShipping()) {
|
60 |
+
$freeShipping = is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0;
|
61 |
+
$freeQty += $item->getQty() - $freeShipping;
|
62 |
+
$freePackageValue += $item->getBaseRowTotal();
|
63 |
+
}
|
64 |
+
}
|
65 |
+
$oldValue = $request->getPackageValue();
|
66 |
+
$request->setPackageValue($oldValue - $freePackageValue);
|
67 |
+
}
|
68 |
+
|
69 |
+
if ($freePackageValue) {
|
70 |
+
$request->setPackageValue($request->getPackageValue() - $freePackageValue);
|
71 |
+
}
|
72 |
+
|
73 |
+
$conditionName = $this->getConfigData('condition_name');
|
74 |
+
$request->setConditionName($conditionName ? $conditionName : $this->_default_condition_name);
|
75 |
+
|
76 |
+
$oldWeight = $request->getPackageWeight();
|
77 |
+
$oldQty = $request->getPackageQty();
|
78 |
+
|
79 |
+
$request->setPackageWeight($request->getFreeMethodWeight());
|
80 |
+
$request->setPackageQty($oldQty - $freeQty);
|
81 |
+
|
82 |
+
$rate = $this->getRate($request);
|
83 |
+
|
84 |
+
$request->setPackageWeight($oldWeight);
|
85 |
+
$request->setPackageQty($oldQty);
|
86 |
+
|
87 |
+
if (!empty($rate) && $rate['price'] >= 0) {
|
88 |
+
if ($request->getFreeShipping() === true || ($request->getPackageQty() == $freeQty)) {
|
89 |
+
$price = 0;
|
90 |
+
} else {
|
91 |
+
$price = $rate['price'];
|
92 |
+
}
|
93 |
+
} elseif (empty($rate) && $request->getFreeShipping() === true) {
|
94 |
+
$request->setPackageValue($freePackageValue);
|
95 |
+
$request->setPackageQty($freeQty);
|
96 |
+
$rate = $this->getRate($request);
|
97 |
+
if (!empty($rate) && $rate['price'] >= 0) {
|
98 |
+
$price = 0;
|
99 |
+
}
|
100 |
+
} else {
|
101 |
+
$error = Mage::getModel('shipping/rate_result_error');
|
102 |
+
$error->setCarrier($this->_code);
|
103 |
+
$error->setCarrierTitle($this->getConfigData('title'));
|
104 |
+
$error->setErrorMessage(Mage::helper('dpd')->__('This shipping method is currently unavailable. If you would like to ship using this shipping method, please contact us.'));
|
105 |
+
$result->append($error);
|
106 |
+
return $result;
|
107 |
+
}
|
108 |
+
|
109 |
+
}
|
110 |
+
$method->setCarrier($this->_code);
|
111 |
+
$method->setMethod($this->_code);
|
112 |
+
$method->setMethodTitle($this->getConfigData('name'));
|
113 |
+
$method->setCarrierTitle($this->getConfigData('carrier'));
|
114 |
+
$method->setPrice($price);
|
115 |
+
$method->setCost($price);
|
116 |
+
$result->append($method);
|
117 |
+
|
118 |
+
return $result;
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Add this shipping method to list of allowed methods so Magento can display it.
|
123 |
+
*
|
124 |
+
* @return array
|
125 |
+
*/
|
126 |
+
public function getAllowedMethods()
|
127 |
+
{
|
128 |
+
return array('dpdparcelshops' => $this->getConfigData('name'));
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Get tracking result object.
|
133 |
+
*
|
134 |
+
* @param string $tracking_number
|
135 |
+
* @return Mage_Shipping_Model_Tracking_Result $tracking_result
|
136 |
+
*/
|
137 |
+
public function getTrackingInfo($tracking_number)
|
138 |
+
{
|
139 |
+
$tracking_result = $this->getTracking($tracking_number);
|
140 |
+
|
141 |
+
if ($tracking_result instanceof Mage_Shipping_Model_Tracking_Result) {
|
142 |
+
$trackings = $tracking_result->getAllTrackings();
|
143 |
+
if (is_array($trackings) && count($trackings) > 0) {
|
144 |
+
return $trackings[0];
|
145 |
+
}
|
146 |
+
}
|
147 |
+
return false;
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Get tracking Url.
|
152 |
+
*
|
153 |
+
* @param string $tracking_number
|
154 |
+
* @return Mage_Shipping_Model_Tracking_Result
|
155 |
+
*/
|
156 |
+
public function getTracking($tracking_number)
|
157 |
+
{
|
158 |
+
$tracking_result = Mage::getModel('shipping/tracking_result');
|
159 |
+
$tracking_status = Mage::getModel('shipping/tracking_result_status');
|
160 |
+
$localeExploded = explode('_', Mage::app()->getLocale()->getLocaleCode());
|
161 |
+
$tracking_status->setCarrier($this->_code);
|
162 |
+
$tracking_status->setCarrierTitle($this->getConfigData('title'));
|
163 |
+
$tracking_status->setTracking($tracking_number);
|
164 |
+
$tracking_status->addData(
|
165 |
+
array(
|
166 |
+
'status' => '<a target="_blank" href="' . "http://tracking.dpd.de/cgi-bin/delistrack?typ=32&lang=" . $localeExploded[0] . "&pknr=" . $tracking_number . "&var=" . Mage::getStoreConfig('shipping/dpdclassic/userid') . '">' . Mage::helper('dpd')->__('Track this shipment') . '</a>'
|
167 |
+
)
|
168 |
+
);
|
169 |
+
$tracking_result->append($tracking_status);
|
170 |
+
|
171 |
+
return $tracking_result;
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Make tracking available for dpd shippingmethods.
|
176 |
+
*
|
177 |
+
* @return bool
|
178 |
+
*/
|
179 |
+
public function isTrackingAvailable()
|
180 |
+
{
|
181 |
+
return true;
|
182 |
+
}
|
183 |
+
|
184 |
+
/**
|
185 |
+
* Make shippinglabels not available as we provided our own method.
|
186 |
+
*
|
187 |
+
* @return bool
|
188 |
+
*/
|
189 |
+
public function isShippingLabelsAvailable()
|
190 |
+
{
|
191 |
+
return false;
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Get the rateobject from our resource model.
|
196 |
+
*
|
197 |
+
* @param $request
|
198 |
+
* @return mixed
|
199 |
+
*/
|
200 |
+
public function getRate($request)
|
201 |
+
{
|
202 |
+
return Mage::getResourceModel('dpd/dpdparcelshops_tablerate')->getRate($request);
|
203 |
+
}
|
204 |
+
}
|
app/code/community/DPD/Shipping/Model/Dpdclassic/Tablerate.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Dpdclassic_Tablerate
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Dpdclassic_Tablerate extends Mage_Core_Model_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Initialise the model.
|
17 |
+
*/
|
18 |
+
protected function _construct()
|
19 |
+
{
|
20 |
+
$this->_init("dpd/dpdclassic_tablerate");
|
21 |
+
}
|
22 |
+
}
|
app/code/community/DPD/Shipping/Model/Dpdparcelshops/Tablerate.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Dpdparcelshops_Tablerate
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Dpdparcelshops_Tablerate extends Mage_Core_Model_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Initialise the model.
|
17 |
+
*/
|
18 |
+
protected function _construct()
|
19 |
+
{
|
20 |
+
$this->_init("dpd/dpdparcelshops_tablerate");
|
21 |
+
}
|
22 |
+
}
|
app/code/community/DPD/Shipping/Model/Mysql4/Dpdclassic/Tablerate.php
ADDED
@@ -0,0 +1,433 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Mysql4_Dpdclassic_Tablerate
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Mysql4_Dpdclassic_Tablerate extends Mage_Core_Model_Resource_Db_Abstract{
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Website Id selected in scope.
|
17 |
+
*
|
18 |
+
* @var int
|
19 |
+
*/
|
20 |
+
protected $_importWebsiteId = 0;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Array to fill with possible errors.
|
24 |
+
*
|
25 |
+
* @var array
|
26 |
+
*/
|
27 |
+
protected $_importErrors = array();
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Number of rows imported.
|
31 |
+
*
|
32 |
+
* @var int
|
33 |
+
*/
|
34 |
+
protected $_importedRows = 0;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Conversion.
|
38 |
+
*
|
39 |
+
* @var array
|
40 |
+
*/
|
41 |
+
protected $_importUniqueHash = array();
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Conversion.
|
45 |
+
*
|
46 |
+
* @var
|
47 |
+
*/
|
48 |
+
protected $_importIso2Countries;
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Conversion.
|
52 |
+
*
|
53 |
+
* @var
|
54 |
+
*/
|
55 |
+
protected $_importIso3Countries;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Regions to import.
|
59 |
+
*
|
60 |
+
* @var
|
61 |
+
*/
|
62 |
+
protected $_importRegions;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Condition name selected in sysconfig.
|
66 |
+
*
|
67 |
+
* @var
|
68 |
+
*/
|
69 |
+
protected $_importConditionName;
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Full name of condition selected in sysconfig.
|
73 |
+
*
|
74 |
+
* @var array
|
75 |
+
*/
|
76 |
+
protected $_conditionFullNames = array();
|
77 |
+
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Initialise the model.
|
81 |
+
*/
|
82 |
+
protected function _construct()
|
83 |
+
{
|
84 |
+
$this->_init("dpd/dpdclassic_tablerate", "pk");
|
85 |
+
}
|
86 |
+
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Fetch rate from the table for selected shipping address.
|
90 |
+
*
|
91 |
+
* @param Mage_Shipping_Model_Rate_Request $request
|
92 |
+
* @return array
|
93 |
+
*/
|
94 |
+
public function getRate(Mage_Shipping_Model_Rate_Request $request)
|
95 |
+
{
|
96 |
+
$adapter = $this->_getReadAdapter();
|
97 |
+
$bind = array(
|
98 |
+
':website_id' => (int) $request->getWebsiteId(),
|
99 |
+
':country_id' => $request->getDestCountryId(),
|
100 |
+
':region_id' => (int) $request->getDestRegionId(),
|
101 |
+
':postcode' => $request->getDestPostcode()
|
102 |
+
);
|
103 |
+
$select = $adapter->select()
|
104 |
+
->from($this->getMainTable())
|
105 |
+
->where('website_id = :website_id')
|
106 |
+
->order(array('dest_country_id DESC', 'dest_region_id DESC', 'dest_zip DESC', 'condition_value DESC'))
|
107 |
+
->limit(1);
|
108 |
+
|
109 |
+
// Render destination condition
|
110 |
+
$orWhere = '(' . implode(') OR (', array(
|
111 |
+
"dest_country_id = :country_id AND dest_region_id = :region_id AND dest_zip = :postcode",
|
112 |
+
"dest_country_id = :country_id AND dest_region_id = :region_id AND dest_zip = ''",
|
113 |
+
|
114 |
+
// Handle asterix in dest_zip field
|
115 |
+
"dest_country_id = :country_id AND dest_region_id = :region_id AND dest_zip = '*'",
|
116 |
+
"dest_country_id = :country_id AND dest_region_id = 0 AND dest_zip = '*'",
|
117 |
+
"dest_country_id = '0' AND dest_region_id = :region_id AND dest_zip = '*'",
|
118 |
+
"dest_country_id = '0' AND dest_region_id = 0 AND dest_zip = '*'",
|
119 |
+
|
120 |
+
"dest_country_id = :country_id AND dest_region_id = 0 AND dest_zip = ''",
|
121 |
+
"dest_country_id = :country_id AND dest_region_id = 0 AND dest_zip = :postcode",
|
122 |
+
"dest_country_id = :country_id AND dest_region_id = 0 AND dest_zip = '*'",
|
123 |
+
)) . ')';
|
124 |
+
$select->where($orWhere);
|
125 |
+
|
126 |
+
// Render condition by condition name
|
127 |
+
if (is_array($request->getConditionName())) {
|
128 |
+
$orWhere = array();
|
129 |
+
$i = 0;
|
130 |
+
foreach ($request->getConditionName() as $conditionName) {
|
131 |
+
$bindNameKey = sprintf(':condition_name_%d', $i);
|
132 |
+
$bindValueKey = sprintf(':condition_value_%d', $i);
|
133 |
+
$orWhere[] = "(condition_name = {$bindNameKey} AND condition_value <= {$bindValueKey})";
|
134 |
+
$bind[$bindNameKey] = $conditionName;
|
135 |
+
$bind[$bindValueKey] = $request->getData($conditionName);
|
136 |
+
$i++;
|
137 |
+
}
|
138 |
+
|
139 |
+
if ($orWhere) {
|
140 |
+
$select->where(implode(' OR ', $orWhere));
|
141 |
+
}
|
142 |
+
} else {
|
143 |
+
$bind[':condition_name'] = $request->getConditionName();
|
144 |
+
$bind[':condition_value'] = $request->getData($request->getConditionName());
|
145 |
+
|
146 |
+
$select->where('condition_name = :condition_name');
|
147 |
+
$select->where('condition_value <= :condition_value');
|
148 |
+
}
|
149 |
+
$result = $adapter->fetchRow($select, $bind);
|
150 |
+
// Normalize destination zip code
|
151 |
+
if ($result && $result['dest_zip'] == '*') {
|
152 |
+
$result['dest_zip'] = '';
|
153 |
+
}
|
154 |
+
return $result;
|
155 |
+
}
|
156 |
+
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Upload and import table rates csv.
|
160 |
+
*
|
161 |
+
* @param Varien_Object $object
|
162 |
+
* @return $this
|
163 |
+
*/
|
164 |
+
public function uploadAndImport(Varien_Object $object)
|
165 |
+
{
|
166 |
+
if (empty($_FILES['groups']['tmp_name']['dpdclassic']['fields']['import_classic']['value'])) {
|
167 |
+
return $this;
|
168 |
+
}
|
169 |
+
|
170 |
+
$csvFile = $_FILES['groups']['tmp_name']['dpdclassic']['fields']['import_classic']['value'];
|
171 |
+
$website = Mage::app()->getWebsite($object->getScopeId());
|
172 |
+
|
173 |
+
$this->_importWebsiteId = (int)$website->getId();
|
174 |
+
$this->_importUniqueHash = array();
|
175 |
+
$this->_importErrors = array();
|
176 |
+
$this->_importedRows = 0;
|
177 |
+
|
178 |
+
$io = new Varien_Io_File();
|
179 |
+
$info = pathinfo($csvFile);
|
180 |
+
$io->open(array('path' => $info['dirname']));
|
181 |
+
$io->streamOpen($info['basename'], 'r');
|
182 |
+
|
183 |
+
// check and skip headers
|
184 |
+
$headers = $io->streamReadCsv();
|
185 |
+
if ($headers === false || count($headers) < 5) {
|
186 |
+
$io->streamClose();
|
187 |
+
Mage::throwException(Mage::helper('dpd')->__('Invalid Table Rates File Format'));
|
188 |
+
}
|
189 |
+
if ($object->getData('groups/dpdclassic/fields/condition_name/inherit') == '1') {
|
190 |
+
$conditionName = (string)Mage::getConfig()->getNode('default/carriers/dpdclassic/condition_name');
|
191 |
+
} else {
|
192 |
+
$conditionName = $object->getData('groups/dpdclassic/fields/condition_name/value');
|
193 |
+
}
|
194 |
+
Mage::log((string)Mage::getConfig()->getNode('default/carriers/dpdclassic/condition_name'));
|
195 |
+
Mage::log($object->getData('groups/dpdclassic/fields/condition_name/value'));
|
196 |
+
$this->_importConditionName = $conditionName;
|
197 |
+
$adapter = $this->_getWriteAdapter();
|
198 |
+
$adapter->beginTransaction();
|
199 |
+
|
200 |
+
try {
|
201 |
+
$rowNumber = 1;
|
202 |
+
$importData = array();
|
203 |
+
|
204 |
+
$this->_loadDirectoryCountries();
|
205 |
+
$this->_loadDirectoryRegions();
|
206 |
+
|
207 |
+
// delete old data by website and condition name
|
208 |
+
$condition = array(
|
209 |
+
'website_id = ?' => $this->_importWebsiteId,
|
210 |
+
'condition_name = ?' => $this->_importConditionName
|
211 |
+
);
|
212 |
+
$adapter->delete($this->getMainTable(), $condition);
|
213 |
+
|
214 |
+
while (false !== ($csvLine = $io->streamReadCsv())) {
|
215 |
+
$rowNumber ++;
|
216 |
+
|
217 |
+
if (empty($csvLine)) {
|
218 |
+
continue;
|
219 |
+
}
|
220 |
+
|
221 |
+
$row = $this->_getImportRow($csvLine, $rowNumber);
|
222 |
+
if ($row !== false) {
|
223 |
+
$importData[] = $row;
|
224 |
+
}
|
225 |
+
|
226 |
+
if (count($importData) == 5000) {
|
227 |
+
$this->_saveImportData($importData);
|
228 |
+
$importData = array();
|
229 |
+
}
|
230 |
+
}
|
231 |
+
$this->_saveImportData($importData);
|
232 |
+
$io->streamClose();
|
233 |
+
} catch (Mage_Core_Exception $e) {
|
234 |
+
$adapter->rollback();
|
235 |
+
$io->streamClose();
|
236 |
+
Mage::throwException($e->getMessage());
|
237 |
+
} catch (Exception $e) {
|
238 |
+
$adapter->rollback();
|
239 |
+
$io->streamClose();
|
240 |
+
Mage::logException($e);
|
241 |
+
Mage::throwException(Mage::helper('dpd')->__('An error occurred while importing table rates.'));
|
242 |
+
}
|
243 |
+
|
244 |
+
$adapter->commit();
|
245 |
+
|
246 |
+
if ($this->_importErrors) {
|
247 |
+
$error = Mage::helper('dpd')->__('File has not been imported. See the following list of errors: %s', implode(" \n", $this->_importErrors));
|
248 |
+
Mage::throwException($error);
|
249 |
+
}
|
250 |
+
|
251 |
+
return $this;
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Load directory countries.
|
256 |
+
*
|
257 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate
|
258 |
+
*/
|
259 |
+
protected function _loadDirectoryCountries()
|
260 |
+
{
|
261 |
+
if (!is_null($this->_importIso2Countries) && !is_null($this->_importIso3Countries)) {
|
262 |
+
return $this;
|
263 |
+
}
|
264 |
+
|
265 |
+
$this->_importIso2Countries = array();
|
266 |
+
$this->_importIso3Countries = array();
|
267 |
+
|
268 |
+
/** @var $collection Mage_Directory_Model_Resource_Country_Collection */
|
269 |
+
$collection = Mage::getResourceModel('directory/country_collection');
|
270 |
+
foreach ($collection->getData() as $row) {
|
271 |
+
$this->_importIso2Countries[$row['iso2_code']] = $row['country_id'];
|
272 |
+
$this->_importIso3Countries[$row['iso3_code']] = $row['country_id'];
|
273 |
+
}
|
274 |
+
|
275 |
+
return $this;
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* Load directory regions.
|
280 |
+
*
|
281 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate
|
282 |
+
*/
|
283 |
+
protected function _loadDirectoryRegions()
|
284 |
+
{
|
285 |
+
if (!is_null($this->_importRegions)) {
|
286 |
+
return $this;
|
287 |
+
}
|
288 |
+
|
289 |
+
$this->_importRegions = array();
|
290 |
+
|
291 |
+
/** @var $collection Mage_Directory_Model_Resource_Region_Collection */
|
292 |
+
$collection = Mage::getResourceModel('directory/region_collection');
|
293 |
+
foreach ($collection->getData() as $row) {
|
294 |
+
$this->_importRegions[$row['country_id']][$row['code']] = (int)$row['region_id'];
|
295 |
+
}
|
296 |
+
|
297 |
+
return $this;
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Return import condition full name by condition name code.
|
302 |
+
*
|
303 |
+
* @param string $conditionName
|
304 |
+
* @return string
|
305 |
+
*/
|
306 |
+
protected function _getConditionFullName($conditionName)
|
307 |
+
{
|
308 |
+
if (!isset($this->_conditionFullNames[$conditionName])) {
|
309 |
+
$name = Mage::getSingleton('shipping/carrier_tablerate')->getCode('condition_name_short', $conditionName);
|
310 |
+
$this->_conditionFullNames[$conditionName] = $name;
|
311 |
+
}
|
312 |
+
return $this->_conditionFullNames[$conditionName];
|
313 |
+
}
|
314 |
+
|
315 |
+
/**
|
316 |
+
* Validate row for import and return table rate array or false.
|
317 |
+
* Error will be add to _importErrors array.
|
318 |
+
*
|
319 |
+
* @param array $row
|
320 |
+
* @param int $rowNumber
|
321 |
+
* @return array|false
|
322 |
+
*/
|
323 |
+
protected function _getImportRow($row, $rowNumber = 0)
|
324 |
+
{
|
325 |
+
// validate row
|
326 |
+
if (count($row) < 5) {
|
327 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid Table Rates format in the Row #%s', $rowNumber);
|
328 |
+
return false;
|
329 |
+
}
|
330 |
+
|
331 |
+
// strip whitespace from the beginning and end of each row
|
332 |
+
foreach ($row as $k => $v) {
|
333 |
+
$row[$k] = trim($v);
|
334 |
+
}
|
335 |
+
|
336 |
+
// validate country
|
337 |
+
if (isset($this->_importIso2Countries[$row[0]])){
|
338 |
+
$countryId = $this->_importIso2Countries[$row[0]];
|
339 |
+
} elseif (isset($this->_importIso3Countries[$row[0]])) {
|
340 |
+
$countryId = $this->_importIso3Countries[$row[0]];
|
341 |
+
} elseif ($row[0] == '*' || $row[0] == '') {
|
342 |
+
$countryId = '0';
|
343 |
+
} else {
|
344 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid Country "%s" in the Row #%s.', $row[0], $rowNumber);
|
345 |
+
return false;
|
346 |
+
}
|
347 |
+
|
348 |
+
// validate region
|
349 |
+
if ($countryId != '0' && isset($this->_importRegions[$countryId][$row[1]])) {
|
350 |
+
$regionId = $this->_importRegions[$countryId][$row[1]];
|
351 |
+
} elseif ($row[1] == '*' || $row[1] == '') {
|
352 |
+
$regionId = 0;
|
353 |
+
} else {
|
354 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid Region/State "%s" in the Row #%s.', $row[1], $rowNumber);
|
355 |
+
return false;
|
356 |
+
}
|
357 |
+
|
358 |
+
// detect zip code
|
359 |
+
if ($row[2] == '*' || $row[2] == '') {
|
360 |
+
$zipCode = '*';
|
361 |
+
} else {
|
362 |
+
$zipCode = $row[2];
|
363 |
+
}
|
364 |
+
|
365 |
+
// validate condition value
|
366 |
+
$value = $this->_parseDecimalValue($row[3]);
|
367 |
+
if ($value === false) {
|
368 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid %s "%s" in the Row #%s.', $this->_getConditionFullName($this->_importConditionName), $row[3], $rowNumber);
|
369 |
+
return false;
|
370 |
+
}
|
371 |
+
|
372 |
+
// validate price
|
373 |
+
$price = $this->_parseDecimalValue($row[4]);
|
374 |
+
if ($price === false) {
|
375 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid Shipping Price "%s" in the Row #%s.', $row[4], $rowNumber);
|
376 |
+
return false;
|
377 |
+
}
|
378 |
+
|
379 |
+
// protect from duplicate
|
380 |
+
$hash = sprintf("%s-%d-%s-%F", $countryId, $regionId, $zipCode, $value);
|
381 |
+
if (isset($this->_importUniqueHash[$hash])) {
|
382 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Duplicate Row #%s (Country "%s", Region/State "%s", Zip "%s" and Value "%s").', $rowNumber, $row[0], $row[1], $zipCode, $value);
|
383 |
+
return false;
|
384 |
+
}
|
385 |
+
$this->_importUniqueHash[$hash] = true;
|
386 |
+
|
387 |
+
return array(
|
388 |
+
$this->_importWebsiteId, // website_id
|
389 |
+
$countryId, // dest_country_id
|
390 |
+
$regionId, // dest_region_id,
|
391 |
+
$zipCode, // dest_zip
|
392 |
+
$this->_importConditionName,// condition_name,
|
393 |
+
$value, // condition_value
|
394 |
+
$price // price
|
395 |
+
);
|
396 |
+
}
|
397 |
+
|
398 |
+
/**
|
399 |
+
* Save all import data.
|
400 |
+
*
|
401 |
+
* @param array $data
|
402 |
+
* @return $this
|
403 |
+
*/
|
404 |
+
protected function _saveImportData(array $data)
|
405 |
+
{
|
406 |
+
if (!empty($data)) {
|
407 |
+
$columns = array('website_id', 'dest_country_id', 'dest_region_id', 'dest_zip',
|
408 |
+
'condition_name', 'condition_value', 'price');
|
409 |
+
$this->_getWriteAdapter()->insertArray($this->getMainTable(), $columns, $data);
|
410 |
+
$this->_importedRows += count($data);
|
411 |
+
}
|
412 |
+
|
413 |
+
return $this;
|
414 |
+
}
|
415 |
+
|
416 |
+
/**
|
417 |
+
* Conversion.
|
418 |
+
*
|
419 |
+
* @param $value
|
420 |
+
* @return bool|float
|
421 |
+
*/
|
422 |
+
protected function _parseDecimalValue($value)
|
423 |
+
{
|
424 |
+
if (!is_numeric($value)) {
|
425 |
+
return false;
|
426 |
+
}
|
427 |
+
$value = (float)sprintf('%.4F', $value);
|
428 |
+
if ($value < 0.0000) {
|
429 |
+
return false;
|
430 |
+
}
|
431 |
+
return $value;
|
432 |
+
}
|
433 |
+
}
|
app/code/community/DPD/Shipping/Model/Mysql4/Dpdclassic/Tablerate/Collection.php
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Mysql4_Dpdclassic_Tablerate_Collection
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Mysql4_Dpdclassic_Tablerate_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* main table name
|
17 |
+
*
|
18 |
+
* @deprecated since 1.4.1.0
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
protected $_shipTable;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* directory/country table name
|
25 |
+
*
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
protected $_countryTable;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* directory/country_region table name
|
32 |
+
*
|
33 |
+
* @var string
|
34 |
+
*/
|
35 |
+
protected $_regionTable;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Define resource model and item
|
39 |
+
*
|
40 |
+
*/
|
41 |
+
protected function _construct()
|
42 |
+
{
|
43 |
+
$this->_init('dpd/dpdclassic_tablerate');
|
44 |
+
$this->_shipTable = $this->getMainTable();
|
45 |
+
$this->_countryTable = $this->getTable('directory/country');
|
46 |
+
$this->_regionTable = $this->getTable('directory/country_region');
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Initialize select, add country iso3 code and region name
|
51 |
+
*
|
52 |
+
* @return void
|
53 |
+
*/
|
54 |
+
public function _initSelect()
|
55 |
+
{
|
56 |
+
parent::_initSelect();
|
57 |
+
|
58 |
+
$this->_select
|
59 |
+
->joinLeft(
|
60 |
+
array('country_table' => $this->_countryTable),
|
61 |
+
'country_table.country_id = main_table.dest_country_id',
|
62 |
+
array('dest_country' => 'iso3_code'))
|
63 |
+
->joinLeft(
|
64 |
+
array('region_table' => $this->_regionTable),
|
65 |
+
'region_table.region_id = main_table.dest_region_id',
|
66 |
+
array('dest_region' => 'code'));
|
67 |
+
|
68 |
+
$this->addOrder('dest_country', self::SORT_ORDER_ASC);
|
69 |
+
$this->addOrder('dest_region', self::SORT_ORDER_ASC);
|
70 |
+
$this->addOrder('dest_zip', self::SORT_ORDER_ASC);
|
71 |
+
$this->addOrder('condition_value', self::SORT_ORDER_ASC);
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Add website filter to collection
|
76 |
+
*
|
77 |
+
* @param int $websiteId
|
78 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate_Collection
|
79 |
+
*/
|
80 |
+
public function setWebsiteFilter($websiteId)
|
81 |
+
{
|
82 |
+
return $this->addFieldToFilter('website_id', $websiteId);
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Add condition name (code) filter to collection
|
87 |
+
*
|
88 |
+
* @param string $conditionName
|
89 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate_Collection
|
90 |
+
*/
|
91 |
+
public function setConditionFilter($conditionName)
|
92 |
+
{
|
93 |
+
return $this->addFieldToFilter('condition_name', $conditionName);
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Add country filter to collection
|
98 |
+
*
|
99 |
+
* @param string $countryId
|
100 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate_Collection
|
101 |
+
*/
|
102 |
+
public function setCountryFilter($countryId)
|
103 |
+
{
|
104 |
+
return $this->addFieldToFilter('dest_country_id', $countryId);
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
app/code/community/DPD/Shipping/Model/Mysql4/Dpdparcelshops/Tablerate.php
ADDED
@@ -0,0 +1,433 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Mysql4_Dpdparcelshops_Tablerate
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Mysql4_Dpdparcelshops_Tablerate extends Mage_Core_Model_Resource_Db_Abstract{
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Website Id selected in scope.
|
17 |
+
*
|
18 |
+
* @var int
|
19 |
+
*/
|
20 |
+
protected $_importWebsiteId = 0;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Array to fill with possible errors.
|
24 |
+
*
|
25 |
+
* @var array
|
26 |
+
*/
|
27 |
+
protected $_importErrors = array();
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Number of rows imported.
|
31 |
+
*
|
32 |
+
* @var int
|
33 |
+
*/
|
34 |
+
protected $_importedRows = 0;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Conversion.
|
38 |
+
*
|
39 |
+
* @var array
|
40 |
+
*/
|
41 |
+
protected $_importUniqueHash = array();
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Conversion.
|
45 |
+
*
|
46 |
+
* @var
|
47 |
+
*/
|
48 |
+
protected $_importIso2Countries;
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Conversion.
|
52 |
+
*
|
53 |
+
* @var
|
54 |
+
*/
|
55 |
+
protected $_importIso3Countries;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Regions to import.
|
59 |
+
*
|
60 |
+
* @var
|
61 |
+
*/
|
62 |
+
protected $_importRegions;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Condition name selected in sysconfig.
|
66 |
+
*
|
67 |
+
* @var
|
68 |
+
*/
|
69 |
+
protected $_importConditionName;
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Full name of condition selected in sysconfig.
|
73 |
+
*
|
74 |
+
* @var array
|
75 |
+
*/
|
76 |
+
protected $_conditionFullNames = array();
|
77 |
+
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Initialise the model.
|
81 |
+
*/
|
82 |
+
protected function _construct()
|
83 |
+
{
|
84 |
+
$this->_init("dpd/dpdparcelshops_tablerate", "pk");
|
85 |
+
}
|
86 |
+
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Fetch rate from the table for selected shipping address.
|
90 |
+
*
|
91 |
+
* @param Mage_Shipping_Model_Rate_Request $request
|
92 |
+
* @return array
|
93 |
+
*/
|
94 |
+
public function getRate(Mage_Shipping_Model_Rate_Request $request)
|
95 |
+
{
|
96 |
+
$adapter = $this->_getReadAdapter();
|
97 |
+
$bind = array(
|
98 |
+
':website_id' => (int) $request->getWebsiteId(),
|
99 |
+
':country_id' => $request->getDestCountryId(),
|
100 |
+
':region_id' => (int) $request->getDestRegionId(),
|
101 |
+
':postcode' => $request->getDestPostcode()
|
102 |
+
);
|
103 |
+
$select = $adapter->select()
|
104 |
+
->from($this->getMainTable())
|
105 |
+
->where('website_id = :website_id')
|
106 |
+
->order(array('dest_country_id DESC', 'dest_region_id DESC', 'dest_zip DESC', 'condition_value DESC'))
|
107 |
+
->limit(1);
|
108 |
+
|
109 |
+
// Render destination condition
|
110 |
+
$orWhere = '(' . implode(') OR (', array(
|
111 |
+
"dest_country_id = :country_id AND dest_region_id = :region_id AND dest_zip = :postcode",
|
112 |
+
"dest_country_id = :country_id AND dest_region_id = :region_id AND dest_zip = ''",
|
113 |
+
|
114 |
+
// Handle asterix in dest_zip field
|
115 |
+
"dest_country_id = :country_id AND dest_region_id = :region_id AND dest_zip = '*'",
|
116 |
+
"dest_country_id = :country_id AND dest_region_id = 0 AND dest_zip = '*'",
|
117 |
+
"dest_country_id = '0' AND dest_region_id = :region_id AND dest_zip = '*'",
|
118 |
+
"dest_country_id = '0' AND dest_region_id = 0 AND dest_zip = '*'",
|
119 |
+
|
120 |
+
"dest_country_id = :country_id AND dest_region_id = 0 AND dest_zip = ''",
|
121 |
+
"dest_country_id = :country_id AND dest_region_id = 0 AND dest_zip = :postcode",
|
122 |
+
"dest_country_id = :country_id AND dest_region_id = 0 AND dest_zip = '*'",
|
123 |
+
)) . ')';
|
124 |
+
$select->where($orWhere);
|
125 |
+
|
126 |
+
// Render condition by condition name
|
127 |
+
if (is_array($request->getConditionName())) {
|
128 |
+
$orWhere = array();
|
129 |
+
$i = 0;
|
130 |
+
foreach ($request->getConditionName() as $conditionName) {
|
131 |
+
$bindNameKey = sprintf(':condition_name_%d', $i);
|
132 |
+
$bindValueKey = sprintf(':condition_value_%d', $i);
|
133 |
+
$orWhere[] = "(condition_name = {$bindNameKey} AND condition_value <= {$bindValueKey})";
|
134 |
+
$bind[$bindNameKey] = $conditionName;
|
135 |
+
$bind[$bindValueKey] = $request->getData($conditionName);
|
136 |
+
$i++;
|
137 |
+
}
|
138 |
+
|
139 |
+
if ($orWhere) {
|
140 |
+
$select->where(implode(' OR ', $orWhere));
|
141 |
+
}
|
142 |
+
} else {
|
143 |
+
$bind[':condition_name'] = $request->getConditionName();
|
144 |
+
$bind[':condition_value'] = $request->getData($request->getConditionName());
|
145 |
+
|
146 |
+
$select->where('condition_name = :condition_name');
|
147 |
+
$select->where('condition_value <= :condition_value');
|
148 |
+
}
|
149 |
+
$result = $adapter->fetchRow($select, $bind);
|
150 |
+
// Normalize destination zip code
|
151 |
+
if ($result && $result['dest_zip'] == '*') {
|
152 |
+
$result['dest_zip'] = '';
|
153 |
+
}
|
154 |
+
return $result;
|
155 |
+
}
|
156 |
+
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Upload and import table rates csv.
|
160 |
+
*
|
161 |
+
* @param Varien_Object $object
|
162 |
+
* @return $this
|
163 |
+
*/
|
164 |
+
public function uploadAndImport(Varien_Object $object)
|
165 |
+
{
|
166 |
+
if (empty($_FILES['groups']['tmp_name']['dpdparcelshops']['fields']['import_parcelshops']['value'])) {
|
167 |
+
return $this;
|
168 |
+
}
|
169 |
+
|
170 |
+
$csvFile = $_FILES['groups']['tmp_name']['dpdparcelshops']['fields']['import_parcelshops']['value'];
|
171 |
+
$website = Mage::app()->getWebsite($object->getScopeId());
|
172 |
+
|
173 |
+
$this->_importWebsiteId = (int)$website->getId();
|
174 |
+
$this->_importUniqueHash = array();
|
175 |
+
$this->_importErrors = array();
|
176 |
+
$this->_importedRows = 0;
|
177 |
+
|
178 |
+
$io = new Varien_Io_File();
|
179 |
+
$info = pathinfo($csvFile);
|
180 |
+
$io->open(array('path' => $info['dirname']));
|
181 |
+
$io->streamOpen($info['basename'], 'r');
|
182 |
+
|
183 |
+
// check and skip headers
|
184 |
+
$headers = $io->streamReadCsv();
|
185 |
+
if ($headers === false || count($headers) < 5) {
|
186 |
+
$io->streamClose();
|
187 |
+
Mage::throwException(Mage::helper('dpd')->__('Invalid Table Rates File Format'));
|
188 |
+
}
|
189 |
+
|
190 |
+
if ($object->getData('groups/dpdparcelshops/fields/condition_name/inherit') == '1') {
|
191 |
+
$conditionName = (string)Mage::getConfig()->getNode('default/carriers/dpdparcelshops/condition_name');
|
192 |
+
} else {
|
193 |
+
$conditionName = $object->getData('groups/dpdparcelshops/fields/condition_name/value');
|
194 |
+
}
|
195 |
+
|
196 |
+
$this->_importConditionName = $conditionName;
|
197 |
+
$adapter = $this->_getWriteAdapter();
|
198 |
+
$adapter->beginTransaction();
|
199 |
+
|
200 |
+
try {
|
201 |
+
$rowNumber = 1;
|
202 |
+
$importData = array();
|
203 |
+
|
204 |
+
$this->_loadDirectoryCountries();
|
205 |
+
$this->_loadDirectoryRegions();
|
206 |
+
|
207 |
+
// delete old data by website and condition name
|
208 |
+
$condition = array(
|
209 |
+
'website_id = ?' => $this->_importWebsiteId,
|
210 |
+
'condition_name = ?' => $this->_importConditionName
|
211 |
+
);
|
212 |
+
$adapter->delete($this->getMainTable(), $condition);
|
213 |
+
|
214 |
+
while (false !== ($csvLine = $io->streamReadCsv())) {
|
215 |
+
$rowNumber ++;
|
216 |
+
|
217 |
+
if (empty($csvLine)) {
|
218 |
+
continue;
|
219 |
+
}
|
220 |
+
|
221 |
+
$row = $this->_getImportRow($csvLine, $rowNumber);
|
222 |
+
if ($row !== false) {
|
223 |
+
$importData[] = $row;
|
224 |
+
}
|
225 |
+
|
226 |
+
if (count($importData) == 5000) {
|
227 |
+
$this->_saveImportData($importData);
|
228 |
+
$importData = array();
|
229 |
+
}
|
230 |
+
}
|
231 |
+
$this->_saveImportData($importData);
|
232 |
+
$io->streamClose();
|
233 |
+
} catch (Mage_Core_Exception $e) {
|
234 |
+
$adapter->rollback();
|
235 |
+
$io->streamClose();
|
236 |
+
Mage::throwException($e->getMessage());
|
237 |
+
} catch (Exception $e) {
|
238 |
+
$adapter->rollback();
|
239 |
+
$io->streamClose();
|
240 |
+
Mage::logException($e);
|
241 |
+
Mage::throwException(Mage::helper('dpd')->__('An error occurred while importing table rates.'));
|
242 |
+
}
|
243 |
+
|
244 |
+
$adapter->commit();
|
245 |
+
|
246 |
+
if ($this->_importErrors) {
|
247 |
+
$error = Mage::helper('dpd')->__('File has not been imported. See the following list of errors: %s', implode(" \n", $this->_importErrors));
|
248 |
+
Mage::throwException($error);
|
249 |
+
}
|
250 |
+
|
251 |
+
return $this;
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Load directory countries.
|
256 |
+
*
|
257 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate
|
258 |
+
*/
|
259 |
+
protected function _loadDirectoryCountries()
|
260 |
+
{
|
261 |
+
if (!is_null($this->_importIso2Countries) && !is_null($this->_importIso3Countries)) {
|
262 |
+
return $this;
|
263 |
+
}
|
264 |
+
|
265 |
+
$this->_importIso2Countries = array();
|
266 |
+
$this->_importIso3Countries = array();
|
267 |
+
|
268 |
+
/** @var $collection Mage_Directory_Model_Resource_Country_Collection */
|
269 |
+
$collection = Mage::getResourceModel('directory/country_collection');
|
270 |
+
foreach ($collection->getData() as $row) {
|
271 |
+
$this->_importIso2Countries[$row['iso2_code']] = $row['country_id'];
|
272 |
+
$this->_importIso3Countries[$row['iso3_code']] = $row['country_id'];
|
273 |
+
}
|
274 |
+
|
275 |
+
return $this;
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* Load directory regions.
|
280 |
+
*
|
281 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate
|
282 |
+
*/
|
283 |
+
protected function _loadDirectoryRegions()
|
284 |
+
{
|
285 |
+
if (!is_null($this->_importRegions)) {
|
286 |
+
return $this;
|
287 |
+
}
|
288 |
+
|
289 |
+
$this->_importRegions = array();
|
290 |
+
|
291 |
+
/** @var $collection Mage_Directory_Model_Resource_Region_Collection */
|
292 |
+
$collection = Mage::getResourceModel('directory/region_collection');
|
293 |
+
foreach ($collection->getData() as $row) {
|
294 |
+
$this->_importRegions[$row['country_id']][$row['code']] = (int)$row['region_id'];
|
295 |
+
}
|
296 |
+
|
297 |
+
return $this;
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Return import condition full name by condition name code.
|
302 |
+
*
|
303 |
+
* @param string $conditionName
|
304 |
+
* @return string
|
305 |
+
*/
|
306 |
+
protected function _getConditionFullName($conditionName)
|
307 |
+
{
|
308 |
+
if (!isset($this->_conditionFullNames[$conditionName])) {
|
309 |
+
$name = Mage::getSingleton('shipping/carrier_tablerate')->getCode('condition_name_short', $conditionName);
|
310 |
+
$this->_conditionFullNames[$conditionName] = $name;
|
311 |
+
}
|
312 |
+
return $this->_conditionFullNames[$conditionName];
|
313 |
+
}
|
314 |
+
|
315 |
+
/**
|
316 |
+
* Validate row for import and return table rate array or false.
|
317 |
+
* Error will be added to _importErrors array.
|
318 |
+
*
|
319 |
+
* @param array $row
|
320 |
+
* @param int $rowNumber
|
321 |
+
* @return array|false
|
322 |
+
*/
|
323 |
+
protected function _getImportRow($row, $rowNumber = 0)
|
324 |
+
{
|
325 |
+
// validate row
|
326 |
+
if (count($row) < 5) {
|
327 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid Table Rates format in the Row #%s', $rowNumber);
|
328 |
+
return false;
|
329 |
+
}
|
330 |
+
|
331 |
+
// strip whitespace from the beginning and end of each row
|
332 |
+
foreach ($row as $k => $v) {
|
333 |
+
$row[$k] = trim($v);
|
334 |
+
}
|
335 |
+
|
336 |
+
// validate country
|
337 |
+
if (isset($this->_importIso2Countries[$row[0]])){
|
338 |
+
$countryId = $this->_importIso2Countries[$row[0]];
|
339 |
+
} elseif (isset($this->_importIso3Countries[$row[0]])) {
|
340 |
+
$countryId = $this->_importIso3Countries[$row[0]];
|
341 |
+
} elseif ($row[0] == '*' || $row[0] == '') {
|
342 |
+
$countryId = '0';
|
343 |
+
} else {
|
344 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid Country "%s" in the Row #%s.', $row[0], $rowNumber);
|
345 |
+
return false;
|
346 |
+
}
|
347 |
+
|
348 |
+
// validate region
|
349 |
+
if ($countryId != '0' && isset($this->_importRegions[$countryId][$row[1]])) {
|
350 |
+
$regionId = $this->_importRegions[$countryId][$row[1]];
|
351 |
+
} elseif ($row[1] == '*' || $row[1] == '') {
|
352 |
+
$regionId = 0;
|
353 |
+
} else {
|
354 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid Region/State "%s" in the Row #%s.', $row[1], $rowNumber);
|
355 |
+
return false;
|
356 |
+
}
|
357 |
+
|
358 |
+
// detect zip code
|
359 |
+
if ($row[2] == '*' || $row[2] == '') {
|
360 |
+
$zipCode = '*';
|
361 |
+
} else {
|
362 |
+
$zipCode = $row[2];
|
363 |
+
}
|
364 |
+
|
365 |
+
// validate condition value
|
366 |
+
$value = $this->_parseDecimalValue($row[3]);
|
367 |
+
if ($value === false) {
|
368 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid %s "%s" in the Row #%s.', $this->_getConditionFullName($this->_importConditionName), $row[3], $rowNumber);
|
369 |
+
return false;
|
370 |
+
}
|
371 |
+
|
372 |
+
// validate price
|
373 |
+
$price = $this->_parseDecimalValue($row[4]);
|
374 |
+
if ($price === false) {
|
375 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid Shipping Price "%s" in the Row #%s.', $row[4], $rowNumber);
|
376 |
+
return false;
|
377 |
+
}
|
378 |
+
|
379 |
+
// protect from duplicate
|
380 |
+
$hash = sprintf("%s-%d-%s-%F", $countryId, $regionId, $zipCode, $value);
|
381 |
+
if (isset($this->_importUniqueHash[$hash])) {
|
382 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Duplicate Row #%s (Country "%s", Region/State "%s", Zip "%s" and Value "%s").', $rowNumber, $row[0], $row[1], $zipCode, $value);
|
383 |
+
return false;
|
384 |
+
}
|
385 |
+
$this->_importUniqueHash[$hash] = true;
|
386 |
+
|
387 |
+
return array(
|
388 |
+
$this->_importWebsiteId, // website_id
|
389 |
+
$countryId, // dest_country_id
|
390 |
+
$regionId, // dest_region_id,
|
391 |
+
$zipCode, // dest_zip
|
392 |
+
$this->_importConditionName,// condition_name,
|
393 |
+
$value, // condition_value
|
394 |
+
$price // price
|
395 |
+
);
|
396 |
+
}
|
397 |
+
|
398 |
+
/**
|
399 |
+
* Save all import data.
|
400 |
+
*
|
401 |
+
* @param array $data
|
402 |
+
* @return $this
|
403 |
+
*/
|
404 |
+
protected function _saveImportData(array $data)
|
405 |
+
{
|
406 |
+
if (!empty($data)) {
|
407 |
+
$columns = array('website_id', 'dest_country_id', 'dest_region_id', 'dest_zip',
|
408 |
+
'condition_name', 'condition_value', 'price');
|
409 |
+
$this->_getWriteAdapter()->insertArray($this->getMainTable(), $columns, $data);
|
410 |
+
$this->_importedRows += count($data);
|
411 |
+
}
|
412 |
+
|
413 |
+
return $this;
|
414 |
+
}
|
415 |
+
|
416 |
+
/**
|
417 |
+
* Conversion.
|
418 |
+
*
|
419 |
+
* @param $value
|
420 |
+
* @return bool|float
|
421 |
+
*/
|
422 |
+
protected function _parseDecimalValue($value)
|
423 |
+
{
|
424 |
+
if (!is_numeric($value)) {
|
425 |
+
return false;
|
426 |
+
}
|
427 |
+
$value = (float)sprintf('%.4F', $value);
|
428 |
+
if ($value < 0.0000) {
|
429 |
+
return false;
|
430 |
+
}
|
431 |
+
return $value;
|
432 |
+
}
|
433 |
+
}
|
app/code/community/DPD/Shipping/Model/Mysql4/Dpdparcelshops/Tablerate/Collection.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Mysql4_Dpdparcelshops_Tablerate_Collection
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Mysql4_Dpdparcelshops_Tablerate_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
14 |
+
{ /**
|
15 |
+
* main table name
|
16 |
+
*
|
17 |
+
* @deprecated since 1.4.1.0
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
protected $_shipTable;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* directory/country table name
|
24 |
+
*
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
protected $_countryTable;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* directory/country_region table name
|
31 |
+
*
|
32 |
+
* @var string
|
33 |
+
*/
|
34 |
+
protected $_regionTable;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Define resource model and item
|
38 |
+
*
|
39 |
+
*/
|
40 |
+
protected function _construct()
|
41 |
+
{
|
42 |
+
$this->_init("dpd/dpdparcelshops_tablerate");
|
43 |
+
$this->_shipTable = $this->getMainTable();
|
44 |
+
$this->_countryTable = $this->getTable('directory/country');
|
45 |
+
$this->_regionTable = $this->getTable('directory/country_region');
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Initialize select, add country iso3 code and region name
|
50 |
+
*
|
51 |
+
* @return void
|
52 |
+
*/
|
53 |
+
public function _initSelect()
|
54 |
+
{
|
55 |
+
parent::_initSelect();
|
56 |
+
|
57 |
+
$this->_select
|
58 |
+
->joinLeft(
|
59 |
+
array('country_table' => $this->_countryTable),
|
60 |
+
'country_table.country_id = main_table.dest_country_id',
|
61 |
+
array('dest_country' => 'iso3_code'))
|
62 |
+
->joinLeft(
|
63 |
+
array('region_table' => $this->_regionTable),
|
64 |
+
'region_table.region_id = main_table.dest_region_id',
|
65 |
+
array('dest_region' => 'code'));
|
66 |
+
|
67 |
+
$this->addOrder('dest_country', self::SORT_ORDER_ASC);
|
68 |
+
$this->addOrder('dest_region', self::SORT_ORDER_ASC);
|
69 |
+
$this->addOrder('dest_zip', self::SORT_ORDER_ASC);
|
70 |
+
$this->addOrder('condition_value', self::SORT_ORDER_ASC);
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Add website filter to collection
|
75 |
+
*
|
76 |
+
* @param int $websiteId
|
77 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate_Collection
|
78 |
+
*/
|
79 |
+
public function setWebsiteFilter($websiteId)
|
80 |
+
{
|
81 |
+
return $this->addFieldToFilter('website_id', $websiteId);
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Add condition name (code) filter to collection
|
86 |
+
*
|
87 |
+
* @param string $conditionName
|
88 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate_Collection
|
89 |
+
*/
|
90 |
+
public function setConditionFilter($conditionName)
|
91 |
+
{
|
92 |
+
return $this->addFieldToFilter('condition_name', $conditionName);
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Add country filter to collection
|
97 |
+
*
|
98 |
+
* @param string $countryId
|
99 |
+
* @return Mage_Shipping_Model_Resource_Carrier_Tablerate_Collection
|
100 |
+
*/
|
101 |
+
public function setCountryFilter($countryId)
|
102 |
+
{
|
103 |
+
return $this->addFieldToFilter('dest_country_id', $countryId);
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
app/code/community/DPD/Shipping/Model/Mysql4/Returnlabels.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Mysql4_Returnlabels
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Mysql4_Returnlabels extends Mage_Core_Model_Mysql4_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Sets model primary key.
|
17 |
+
*/
|
18 |
+
protected function _construct()
|
19 |
+
{
|
20 |
+
$this->_init("dpd/returnlabels", "returnlabels_id");
|
21 |
+
}
|
22 |
+
}
|
app/code/community/DPD/Shipping/Model/Mysql4/Returnlabels/Collection.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Mysql4_Returnlabels_Collection
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Mysql4_Returnlabels_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Initialises the model, the abstract file will render a collection from it.
|
17 |
+
*/
|
18 |
+
public function _construct()
|
19 |
+
{
|
20 |
+
$this->_init("dpd/returnlabels");
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
app/code/community/DPD/Shipping/Model/Mysql4/Specialparcelshops.php
ADDED
@@ -0,0 +1,218 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Mysql4_Specialparcelshops
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Mysql4_Specialparcelshops extends Mage_Core_Model_Mysql4_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Store errors here for display in the session message.
|
17 |
+
*
|
18 |
+
* @var array
|
19 |
+
*/
|
20 |
+
protected $_importErrors = array();
|
21 |
+
/**
|
22 |
+
* Website Id of the imported date.
|
23 |
+
*
|
24 |
+
* @var
|
25 |
+
*/
|
26 |
+
protected $_importWebsiteId;
|
27 |
+
/**
|
28 |
+
* Csv Rows.
|
29 |
+
*
|
30 |
+
* @var
|
31 |
+
*/
|
32 |
+
protected $_importedRows;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Sets model primary key.
|
36 |
+
*/
|
37 |
+
protected function _construct()
|
38 |
+
{
|
39 |
+
$this->_init("dpd/specialparcelshops", "specialparselshops_id");
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Uploads the file and imports the data into the table.
|
44 |
+
*
|
45 |
+
* @param Varien_Object $object
|
46 |
+
* @return $this
|
47 |
+
*/
|
48 |
+
public function uploadAndImport(Varien_Object $object)
|
49 |
+
{
|
50 |
+
if (empty($_FILES['groups']['tmp_name']['dpdparcelshops']['fields']['custom_parcelshops_import']['value'])) {
|
51 |
+
return $this;
|
52 |
+
}
|
53 |
+
$website = Mage::app()->getWebsite($object->getScopeId());
|
54 |
+
$this->_importWebsiteId = (int)$website->getId();
|
55 |
+
$csvFile = $_FILES['groups']['tmp_name']['dpdparcelshops']['fields']['custom_parcelshops_import']['value'];
|
56 |
+
$io = new Varien_Io_File();
|
57 |
+
$info = pathinfo($csvFile);
|
58 |
+
$io->open(array('path' => $info['dirname']));
|
59 |
+
$io->streamOpen($info['basename'], 'r');
|
60 |
+
$adapter = $this->_getWriteAdapter();
|
61 |
+
$adapter->beginTransaction();
|
62 |
+
|
63 |
+
try {
|
64 |
+
$rowNumber = 1;
|
65 |
+
$importData = array();
|
66 |
+
$parcelShopNumber = 0;
|
67 |
+
$totalrows = count(file($csvFile));
|
68 |
+
$condition = array(
|
69 |
+
'parcelshop_website_id = ?' => $this->_importWebsiteId
|
70 |
+
);
|
71 |
+
$adapter->delete($this->getMainTable(), $condition);
|
72 |
+
|
73 |
+
while (false !== ($csvLine = $io->streamReadCsv(";"))) {
|
74 |
+
$rowNumber++;
|
75 |
+
|
76 |
+
if (empty($csvLine)) {
|
77 |
+
continue;
|
78 |
+
}
|
79 |
+
|
80 |
+
$row = $this->_getImportRow($csvLine, $rowNumber, $totalrows);
|
81 |
+
if ($row !== false) {
|
82 |
+
if ($csvLine[0] == 'GR') {
|
83 |
+
$parcelShopNumber++;
|
84 |
+
}
|
85 |
+
if (!isset($importData[$parcelShopNumber])) {
|
86 |
+
$importData[$parcelShopNumber] = array();
|
87 |
+
}
|
88 |
+
$importData[$parcelShopNumber] = array_merge($importData[$parcelShopNumber], $row);
|
89 |
+
}
|
90 |
+
}
|
91 |
+
$this->_saveImportData($importData);
|
92 |
+
$io->streamClose();
|
93 |
+
|
94 |
+
} catch (Mage_Core_Exception $e) {
|
95 |
+
if (count($rowNumber) < 5) {
|
96 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Invalid ParcelShops format in the Row #%s', $rowNumber);
|
97 |
+
return false;
|
98 |
+
}
|
99 |
+
$adapter->rollback();
|
100 |
+
$io->streamClose();
|
101 |
+
Mage::throwException($e->getMessage());
|
102 |
+
} catch (Exception $e) {
|
103 |
+
$adapter->rollback();
|
104 |
+
$io->streamClose();
|
105 |
+
Mage::helper('dpd')->log($e, Zend_Log::ERR);
|
106 |
+
Mage::throwException(Mage::helper('dpd')->__('An error occurred while importing ParcelShops. Check the log for details.'));
|
107 |
+
}
|
108 |
+
|
109 |
+
if ($this->_importErrors) {
|
110 |
+
$adapter->rollback();
|
111 |
+
$error = Mage::helper('dpd')->__('File has not been imported. See the following list of errors: %s', implode(" \n", $this->_importErrors));
|
112 |
+
Mage::throwException($error);
|
113 |
+
}
|
114 |
+
$adapter->commit();
|
115 |
+
return $this;
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Gets the row and validates content.
|
120 |
+
*
|
121 |
+
* @param $row
|
122 |
+
* @param int $rowNumber
|
123 |
+
* @param $totalrows
|
124 |
+
* @return array|bool
|
125 |
+
*/
|
126 |
+
protected function _getImportRow($row, $rowNumber = 0, $totalrows)
|
127 |
+
{
|
128 |
+
// strip whitespace from the beginning and end of each row
|
129 |
+
foreach ($row as $k => $v) {
|
130 |
+
$row[$k] = trim($v);
|
131 |
+
}
|
132 |
+
|
133 |
+
// validation
|
134 |
+
if ($rowNumber == 2 && $row[0] != "AA") {
|
135 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Your csv does not have the required AA header. Please refer to the manual.');
|
136 |
+
} elseif ($row[0] == "ZZ" && $rowNumber != $totalrows + 1) {
|
137 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Your csv closed too soon with the ZZ ending. Please refer to the manual.');
|
138 |
+
} elseif ($rowNumber == $totalrows + 1 && $row[0] != "ZZ" && empty($this->_importErrors)) {
|
139 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Your csv does not have the required ZZ ending. Please refer to the manual.');
|
140 |
+
}
|
141 |
+
|
142 |
+
//normalize data
|
143 |
+
if ($row[0] == "GR") {
|
144 |
+
$requiredAttributes = array("PUDO Id" => $row[1], "Pudo Name" => $row[4], "Pudo Language" => $row[5], "Pudo Country" => $row[6], "Latitude" => $row[7], "Longitude", $row[8]);
|
145 |
+
if($missingAttributes = $this->_checkRequired($requiredAttributes)){
|
146 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Your csv does not have the following required attributes %s on row %s. Please refer to the manual.', $missingAttributes, $rowNumber);
|
147 |
+
}
|
148 |
+
$fillarray = array($this->_importWebsiteId, $row[1], $row[2], $row[3], $row[4], $row[5], $row[6], $row[7], $row[8]);
|
149 |
+
return $fillarray;
|
150 |
+
} elseif ($row[0] == "AD") {
|
151 |
+
$requiredAttributes = array("Address 1" => $row[4], "Post Code" => $row[7], "Town" => $row[8]);
|
152 |
+
if($missingAttributes = $this->_checkRequired($requiredAttributes)){
|
153 |
+
$this->_importErrors[] = Mage::helper('dpd')->__('Your csv does not have the following required attributes %s on row %s. Please refer to the manual.', $missingAttributes, $rowNumber);
|
154 |
+
}
|
155 |
+
$fillarray = array($row[2], $row[3], $row[4], $row[5], $row[6], $row[7], $row[8], $row[9]);
|
156 |
+
return $fillarray;
|
157 |
+
} elseif ($row[0] == "HO") {
|
158 |
+
$daysArray = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');
|
159 |
+
$hoursarray = array();
|
160 |
+
$count = 2;
|
161 |
+
for ($i = 0; $i < 7; $i++) {
|
162 |
+
$timetable = new stdClass;
|
163 |
+
$timetable->weekday = $daysArray[$i];
|
164 |
+
$timetable->openMorning = substr_replace($row[$count++], ":", 2, 0);
|
165 |
+
$timetable->closeMorning = substr_replace($row[$count++], ":", 2, 0);
|
166 |
+
$timetable->openAfternoon = substr_replace($row[$count++], ":", 2, 0);
|
167 |
+
$timetable->closeAfternoon = substr_replace($row[$count++], ":", 2, 0);
|
168 |
+
$hoursarray[] = $timetable;
|
169 |
+
}
|
170 |
+
$fillarray = array(Mage::helper('core')->jsonEncode($hoursarray));
|
171 |
+
return $fillarray;
|
172 |
+
}
|
173 |
+
|
174 |
+
return false;
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Save all data.
|
179 |
+
*
|
180 |
+
* @param array $data
|
181 |
+
* @return $this
|
182 |
+
*/
|
183 |
+
protected function _saveImportData(array $data)
|
184 |
+
{
|
185 |
+
if (!empty($data)) {
|
186 |
+
$columns = array('parcelshop_website_id', 'parcelshop_delicom_id', 'parcelshop_carrier_pudo_id', 'parcelshop_manager',
|
187 |
+
'parcelshop_pudo_name', 'parcelshop_pudo_language', 'parcelshop_country', 'parcelshop_latitude',
|
188 |
+
'parcelshop_longitude', 'parcelshop_city_code', 'parcelshop_langue_1', 'parcelshop_address_1', 'parcelshop_address_2',
|
189 |
+
'parcelshop_location_information', 'parcelshop_post_code', 'parcelshop_town', 'parcelshop_region', 'parcelshop_openinghours');
|
190 |
+
$values = $data;
|
191 |
+
$this->_getWriteAdapter()->insertArray($this->getMainTable(), $columns, $values);
|
192 |
+
}
|
193 |
+
return $this;
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
* Check required data row per row.
|
198 |
+
*
|
199 |
+
* @param array $requiredAttributes
|
200 |
+
* @return bool|string
|
201 |
+
*/
|
202 |
+
protected function _checkRequired(array $requiredAttributes)
|
203 |
+
{
|
204 |
+
$missing = false;
|
205 |
+
$missingattributes = array();
|
206 |
+
foreach($requiredAttributes as $key => $requiredAttribute){
|
207 |
+
if(!$requiredAttribute){
|
208 |
+
$missingattributes[] = $key;
|
209 |
+
$missing = true;
|
210 |
+
}
|
211 |
+
}
|
212 |
+
if(!$missing){
|
213 |
+
return false;
|
214 |
+
}
|
215 |
+
|
216 |
+
return implode(', ',$missingattributes);
|
217 |
+
}
|
218 |
+
}
|
app/code/community/DPD/Shipping/Model/Mysql4/Specialparcelshops/Collection.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Mysql4_Specialparcelshops_Collection
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Mysql4_Specialparcelshops_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Initialises the model, the abstract file will render a collection from it.
|
17 |
+
*/
|
18 |
+
public function _construct()
|
19 |
+
{
|
20 |
+
$this->_init("dpd/specialparcelshops");
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
app/code/community/DPD/Shipping/Model/Observer.php
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Observer
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Observer
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Observes html load, this will add html to the Parcelshop shipping method and set default shipping method.
|
17 |
+
*
|
18 |
+
* @param $observer
|
19 |
+
*/
|
20 |
+
public function core_block_abstract_to_html_after($observer)
|
21 |
+
{
|
22 |
+
if ($observer->getBlock() instanceof Mage_Checkout_Block_Onepage_Shipping_Method_Available) {
|
23 |
+
//get HTML
|
24 |
+
$html = $observer->getTransport()->getHtml();
|
25 |
+
|
26 |
+
//set default if in config
|
27 |
+
$html = Mage::helper('dpd')->checkShippingDefault($html);
|
28 |
+
|
29 |
+
//replace label by html
|
30 |
+
$html = Mage::helper('dpd')->addHTML($html);
|
31 |
+
|
32 |
+
//set HTML
|
33 |
+
$observer->getTransport()->setHtml($html);
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Triggered when saving a shipping method, this saves dpd data to the customer address without saving it on customer.
|
39 |
+
*
|
40 |
+
* @param $observer
|
41 |
+
*/
|
42 |
+
public function checkout_controller_onepage_save_shipping_method($observer)
|
43 |
+
{
|
44 |
+
$quote = Mage::getSingleton('checkout/session')->getQuote();
|
45 |
+
$address = $quote->getShippingAddress();
|
46 |
+
if ($address->getShippingMethod() == "dpdparcelshops_dpdparcelshops") {
|
47 |
+
$address->unsetAddressId()
|
48 |
+
->unsetTelephone()
|
49 |
+
->setSaveInAddressBook(0)
|
50 |
+
->setFirstname('DPD ParcelShop: ')
|
51 |
+
->setLastname($quote->getDpdCompany())
|
52 |
+
->setStreet($quote->getDpdStreet())
|
53 |
+
->setCity($quote->getDpdCity())
|
54 |
+
->setPostcode($quote->getDpdZipcode())
|
55 |
+
->setCountryId($quote->getDpdCountry())
|
56 |
+
->save();
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Sets generate return label button on order detail view in the admin.
|
62 |
+
* Sets download dpdlabel button on shipment order detail.
|
63 |
+
*
|
64 |
+
* @param $observer
|
65 |
+
*/
|
66 |
+
public function core_block_abstract_to_html_before($observer)
|
67 |
+
{
|
68 |
+
$block = $observer->getBlock();
|
69 |
+
if ($block instanceof Mage_Adminhtml_Block_Sales_Order_View && $block->getRequest()->getControllerName() == 'sales_order') {
|
70 |
+
$orderId = Mage::app()->getRequest()->getParam('order_id');
|
71 |
+
$block->addButton('print_retour_label', array(
|
72 |
+
'label' => Mage::helper('dpd')->__('DPD Return Label'),
|
73 |
+
'onclick' => 'setLocation(\'' . Mage::helper("adminhtml")->getUrl('adminhtml/dpdorder/generateRetourLabel/order_id/' . $orderId) . '\')',
|
74 |
+
'class' => 'go'
|
75 |
+
));
|
76 |
+
|
77 |
+
}
|
78 |
+
if ($block instanceof Mage_Adminhtml_Block_Sales_Order_Shipment_View && $block->getRequest()->getControllerName() == "sales_order_shipment") {
|
79 |
+
$shipment = Mage::registry('current_shipment');
|
80 |
+
$shipmentId = $shipment->getId();
|
81 |
+
$order = Mage::getModel('sales/order')->load($shipment->getOrderId());
|
82 |
+
if (strpos($order->getShippingMethod(), 'dpd') !== false) {
|
83 |
+
$block->addButton('download_dpd_label', array(
|
84 |
+
'label' => Mage::helper('dpd')->__('Download DPD Label'),
|
85 |
+
'onclick' => 'setLocation(\'' . Mage::helper("adminhtml")->getUrl('adminhtml/dpdorder/downloadDpdLabel/shipment_id/' . $shipmentId) . '\')',
|
86 |
+
'class' => 'scalable save'
|
87 |
+
));
|
88 |
+
}
|
89 |
+
}
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Calculate and set the weight on the shipping to pass it to the webservice after a standard shipment save.
|
94 |
+
*
|
95 |
+
* @param $observer
|
96 |
+
*/
|
97 |
+
public function sales_order_shipment_save_before($observer)
|
98 |
+
{
|
99 |
+
$shipment = $observer->getEvent()->getShipment();
|
100 |
+
if (!$shipment->hasId() && !$shipment->getTotalWeight()) {
|
101 |
+
$weight = Mage::helper('dpd')->calculateTotalShippingWeight($shipment);
|
102 |
+
$shipment->setTotalWeight($weight);
|
103 |
+
}
|
104 |
+
}
|
105 |
+
}
|
app/code/community/DPD/Shipping/Model/Returnlabels.php
ADDED
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Returnlabels
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Returnlabels extends Mage_Core_Model_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Initialise the model.
|
17 |
+
*/
|
18 |
+
protected function _construct()
|
19 |
+
{
|
20 |
+
$this->_init("dpd/returnlabels");
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Gets label from webservice, saves it and returns the saved id.
|
25 |
+
*
|
26 |
+
* @param $orderId
|
27 |
+
* @return int
|
28 |
+
*/
|
29 |
+
public function generateLabelAndSave($orderId)
|
30 |
+
{
|
31 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
32 |
+
$billingAddress = $order->getBillingAddress();
|
33 |
+
$recipient = array(
|
34 |
+
'name1' => $billingAddress->getFirstname() . " " . $billingAddress->getLastname(),
|
35 |
+
'street' => $billingAddress->getStreet(1) . " " . $billingAddress->getStreet(2),
|
36 |
+
'country' => $billingAddress->getCountry(),
|
37 |
+
'zipCode' => $billingAddress->getPostcode(),
|
38 |
+
'city' => $billingAddress->getCity()
|
39 |
+
);
|
40 |
+
$returnlabel = Mage::getSingleton('dpd/webservice')->getReturnLabel($recipient);
|
41 |
+
if(!$returnlabel){
|
42 |
+
return false;
|
43 |
+
}
|
44 |
+
//convertstring to pdf and save
|
45 |
+
Mage::helper('dpd')->generatePdfAndSave($returnlabel->parcellabelsPDF, 'returnlabel', $order->getIncrementId() ."-". $returnlabel->shipmentResponses->parcelInformation->parcelLabelNumber);
|
46 |
+
|
47 |
+
//save labeldata for admin display
|
48 |
+
$returnLabelObject = new DPD_Shipping_Model_Returnlabels;
|
49 |
+
$returnLabelObject
|
50 |
+
->setLabelNumber($returnlabel->shipmentResponses->parcelInformation->parcelLabelNumber)
|
51 |
+
->setLabelPdfUrl( $order->getIncrementId() ."-".$returnlabel->shipmentResponses->parcelInformation->parcelLabelNumber . ".pdf")
|
52 |
+
->setLabelInstructionsUrl( $order->getIncrementId() ."-".$returnlabel->shipmentResponses->parcelInformation->parcelLabelNumber . "-instructions.pdf")
|
53 |
+
->setOrderId($orderId)
|
54 |
+
->save();
|
55 |
+
return $returnLabelObject->getId();
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Sends email with custom dpd template, attaches both instruction and label pdf.
|
60 |
+
*
|
61 |
+
* @param $order
|
62 |
+
* @param $returnId
|
63 |
+
* @return $this
|
64 |
+
*/
|
65 |
+
public function sendEmail($order, $returnId)
|
66 |
+
{
|
67 |
+
$translate = Mage::getSingleton('core/translate');
|
68 |
+
$translate->setTranslateInline(false);
|
69 |
+
$returnLabel = Mage::getModel('dpd/returnlabels')->load($returnId);
|
70 |
+
$billingAddress = $order->getBillingAddress();
|
71 |
+
$attachments = array($returnLabel->getLabelPdfUrl(), $returnLabel->getLabelInstructionsUrl());
|
72 |
+
$templateVars = array('returnlabel' => $returnLabel, 'order' => $order, 'store' => Mage::app()->getStore($order->getStoreId()));
|
73 |
+
$transactionalEmail = Mage::getModel('core/email_template')
|
74 |
+
->setDesignConfig(array('area' => 'frontend', 'store' => $order->getStoreId()));
|
75 |
+
foreach ($attachments as $pdf_attachment) {
|
76 |
+
if (!empty($pdf_attachment) && file_exists(Mage::getBaseDir('media')."/dpd/returnlabel/".$pdf_attachment)) {
|
77 |
+
$transactionalEmail
|
78 |
+
->getMail()
|
79 |
+
->createAttachment(
|
80 |
+
file_get_contents(Mage::getBaseDir('media')."/dpd/returnlabel/".$pdf_attachment),
|
81 |
+
Zend_Mime::TYPE_OCTETSTREAM,
|
82 |
+
Zend_Mime::DISPOSITION_ATTACHMENT,
|
83 |
+
Zend_Mime::ENCODING_BASE64,
|
84 |
+
basename($pdf_attachment)
|
85 |
+
);
|
86 |
+
}
|
87 |
+
}
|
88 |
+
$transactionalEmail
|
89 |
+
->sendTransactional('dpd_returnlabel_email_template',
|
90 |
+
array('name' => Mage::getStoreConfig('trans_email/ident_support/name'),
|
91 |
+
'email' => Mage::getStoreConfig('trans_email/ident_support/email')),
|
92 |
+
$billingAddress->getEmail(),
|
93 |
+
$billingAddress->getFirstname() . " " . $billingAddress->getLastname(),
|
94 |
+
$templateVars);
|
95 |
+
$translate->setTranslateInline(true);
|
96 |
+
return $this;
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Deletes attachments and pdf when returnlabel call failed, this is to avoid empty/corrupt data.
|
101 |
+
*
|
102 |
+
* @param $returnId
|
103 |
+
*/
|
104 |
+
public function deleteEntryAndAttachments($returnId){
|
105 |
+
$returnLabel = Mage::getModel('dpd/returnlabels')->load($returnId);
|
106 |
+
$attachments = array($returnLabel->getLabelPdfUrl(), $returnLabel->getLabelInstructionsUrl());
|
107 |
+
foreach ($attachments as $pdf_attachment) {
|
108 |
+
$file = Mage::getBaseDir('media')."/dpd/returnlabels/".$pdf_attachment;
|
109 |
+
if(file_exists($file)){
|
110 |
+
unlink($file);
|
111 |
+
}
|
112 |
+
}
|
113 |
+
$returnLabel->delete();
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Generates and saves the instructions pdf with shoplogo and returnid.
|
118 |
+
*
|
119 |
+
* @param $orderId
|
120 |
+
* @param $returnId
|
121 |
+
* @return string
|
122 |
+
*/
|
123 |
+
public function generateInstructionsPdf($orderId, $returnId){
|
124 |
+
$returnlabel = Mage::getModel('dpd/returnlabels')->load($returnId);
|
125 |
+
$pdf = Zend_Pdf::load(Mage::getBaseDir('skin') . DS . 'adminhtml' . DS . 'default' . DS . 'default' . DS . 'dpd' . DS . 'returnlabel' . DS . 'instructions.pdf');
|
126 |
+
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);
|
127 |
+
$page = $pdf->pages[0];
|
128 |
+
$page->setFont($font, 15);
|
129 |
+
if(Mage::getStoreConfig('design/email/logo') && strpos(Mage::getStoreConfig('design/email/logo'),'.gif') === false && Mage::getVersion() >= "1.7"){
|
130 |
+
$uploadDir = Mage_Adminhtml_Model_System_Config_Backend_Email_Logo::UPLOAD_DIR;
|
131 |
+
$fullFileName = Mage::getBaseDir('media') . DS . $uploadDir . DS . Mage::getStoreConfig('design/email/logo');
|
132 |
+
$image = Zend_Pdf_Image::imageWithPath($fullFileName);
|
133 |
+
$imgWidthPts = $image->getPixelWidth() * 72 / 96;
|
134 |
+
$imgHeightPts = $image->getPixelHeight() * 72 / 96;
|
135 |
+
$x1 = 50;
|
136 |
+
$y1 = 687;
|
137 |
+
$page->drawImage($image, $x1, $y1, $x1 + $imgWidthPts, $y1 + $imgHeightPts);
|
138 |
+
}
|
139 |
+
elseif(Mage::getVersion() < "1.7"){
|
140 |
+
try{
|
141 |
+
$fullFileName = Mage::getBaseDir('skin') . DS . 'frontend' . DS .'default' . DS . 'default' . DS . Mage::getStoreConfig('design/header/logo_src');
|
142 |
+
$image = Zend_Pdf_Image::imageWithPath($fullFileName);
|
143 |
+
$imgWidthPts = $image->getPixelWidth() * 72 / 96;
|
144 |
+
$imgHeightPts = $image->getPixelHeight() * 72 / 96;
|
145 |
+
$x1 = 50;
|
146 |
+
$y1 = 687;
|
147 |
+
$page->drawImage($image, $x1, $y1, $x1 + $imgWidthPts, $y1 + $imgHeightPts);
|
148 |
+
}
|
149 |
+
catch(Exception $e){
|
150 |
+
Mage::helper('dpd')->log('Instructions PDF: No logo found or incorrect file format', Zend_Log::INFO);
|
151 |
+
}
|
152 |
+
}
|
153 |
+
else{
|
154 |
+
Mage::helper('dpd')->log('Instructions PDF: No logo found or incorrect file format', Zend_Log::INFO);
|
155 |
+
}
|
156 |
+
$page->drawText(implode(' ',str_split($returnlabel->getLabelNumber(), 4)), '321', '215');
|
157 |
+
$order = Mage::getResourceModel('sales/order_collection')->addAttributeToSelect('increment_id')->addAttributeToFilter('entity_id', array('eq' => $orderId))->getFirstItem();
|
158 |
+
Mage::helper('dpd')->generatePdfAndSave($pdf->render(),'returnlabel',$order->getIncrementId().'-'.$returnlabel->getLabelNumber()."-instructions");
|
159 |
+
}
|
160 |
+
}
|
app/code/community/DPD/Shipping/Model/Specialparcelshops.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Specialparcelshops
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Specialparcelshops extends Mage_Core_Model_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Initialise the model.
|
17 |
+
*/
|
18 |
+
protected function _construct()
|
19 |
+
{
|
20 |
+
$this->_init("dpd/specialparcelshops");
|
21 |
+
}
|
22 |
+
}
|
app/code/community/DPD/Shipping/Model/System/Config/Source/Display.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_System_Config_Source_Display
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_System_Config_Source_Display
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Options getter.
|
17 |
+
* Returns an option array for Google maps display.
|
18 |
+
*
|
19 |
+
* @return array
|
20 |
+
*
|
21 |
+
*/
|
22 |
+
public function toOptionArray()
|
23 |
+
{
|
24 |
+
return array(
|
25 |
+
array('value' => 1, 'label' => Mage::helper('dpd')->__('Overlay')),
|
26 |
+
array('value' => 0, 'label' => Mage::helper('dpd')->__('Inline')),
|
27 |
+
);
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Get options in "key-value" format.
|
32 |
+
* Returns an array for Google maps display. (Magento basically expects both functions)
|
33 |
+
*
|
34 |
+
* @return array
|
35 |
+
*
|
36 |
+
*/
|
37 |
+
public function toArray()
|
38 |
+
{
|
39 |
+
return array(
|
40 |
+
0 => Mage::helper('dpd')->__('Inline'),
|
41 |
+
1 => Mage::helper('dpd')->__('Overlay'),
|
42 |
+
);
|
43 |
+
}
|
44 |
+
|
45 |
+
}
|
app/code/community/DPD/Shipping/Model/System/Config/Source/Paperformat.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_System_Config_Source_Paperformat
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_System_Config_Source_Paperformat
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Options getter.
|
17 |
+
* Returns an option array for Label pdf size.
|
18 |
+
*
|
19 |
+
* @return array
|
20 |
+
*
|
21 |
+
*/
|
22 |
+
public function toOptionArray()
|
23 |
+
{
|
24 |
+
return array(
|
25 |
+
array('value' => 1, 'label' => Mage::helper('dpd')->__('A4')),
|
26 |
+
array('value' => 0, 'label' => Mage::helper('dpd')->__('A6')),
|
27 |
+
);
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Get options in "key-value" format.
|
32 |
+
* Returns an array for Label pdf size. (Magento basically expects both functions)
|
33 |
+
*
|
34 |
+
* @return array
|
35 |
+
*
|
36 |
+
*/
|
37 |
+
public function toArray()
|
38 |
+
{
|
39 |
+
return array(
|
40 |
+
0 => Mage::helper('dpd')->__('A6'),
|
41 |
+
1 => Mage::helper('dpd')->__('A4'),
|
42 |
+
);
|
43 |
+
}
|
44 |
+
|
45 |
+
}
|
app/code/community/DPD/Shipping/Model/System/Config/Source/Ratetypes.php
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_System_Config_Source_Ratetypes
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_System_Config_Source_Ratetypes
|
14 |
+
{
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Options getter.
|
18 |
+
* Returns an option array for Shipping cost handler.
|
19 |
+
*
|
20 |
+
* @return array
|
21 |
+
*
|
22 |
+
*/
|
23 |
+
public function toOptionArray()
|
24 |
+
{
|
25 |
+
return array(
|
26 |
+
array('value' => 1, 'label' => Mage::helper('dpd')->__('Table Rates')),
|
27 |
+
array('value' => 0, 'label' => Mage::helper('dpd')->__('Flat Rate')),
|
28 |
+
);
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Get options in "key-value" format.
|
33 |
+
* Returns an array for Shipping cost handler. (Magento basically expects both functions)
|
34 |
+
*
|
35 |
+
* @return array
|
36 |
+
*
|
37 |
+
*/
|
38 |
+
public function toArray()
|
39 |
+
{
|
40 |
+
return array(
|
41 |
+
0 => Mage::helper('dpd')->__('Flat Rate'),
|
42 |
+
1 => Mage::helper('dpd')->__('Table Rates'),
|
43 |
+
);
|
44 |
+
}
|
45 |
+
|
46 |
+
}
|
app/code/community/DPD/Shipping/Model/System/Config/Source/Weightunit.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_System_Config_Source_Weightunit
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_System_Config_Source_Weightunit
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Options getter.
|
17 |
+
* Returns an option array for unit weight to pass to the webservice.
|
18 |
+
*
|
19 |
+
* @return array
|
20 |
+
*
|
21 |
+
*/
|
22 |
+
public function toOptionArray()
|
23 |
+
{
|
24 |
+
return array(
|
25 |
+
array('value' => 100, 'label' => Mage::helper('dpd')->__('kg')),
|
26 |
+
array('value' => 0.1, 'label' => Mage::helper('dpd')->__('g')),
|
27 |
+
array('value' => 45.3592, 'label' => Mage::helper('dpd')->__('lb')),
|
28 |
+
);
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Get options in "key-value" format.
|
33 |
+
* Returns an array for unit weight to pass to the webservice. (Magento basically expects both functions)
|
34 |
+
*
|
35 |
+
* @return array
|
36 |
+
*
|
37 |
+
*/
|
38 |
+
public function toArray()
|
39 |
+
{
|
40 |
+
return array(
|
41 |
+
'100' => Mage::helper('dpd')->__('kg'),
|
42 |
+
'0,1' => Mage::helper('dpd')->__('g'),
|
43 |
+
'45.3592' => Mage::helper('dpd')->__('lb')
|
44 |
+
);
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
app/code/community/DPD/Shipping/Model/Webservice.php
ADDED
@@ -0,0 +1,451 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Model_Webservice
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Model_Webservice extends Mage_Core_Model_Abstract
|
14 |
+
{
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Max number of times a login should be retried when the authentication token is expired.
|
18 |
+
*/
|
19 |
+
CONST MAX_LOGIN_RETRY = 3;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* The message communication language, should be en_US as instructed by DPD.
|
23 |
+
*/
|
24 |
+
CONST MESSAGE_LANGUAGE = 'en_US';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Athentication namespace for the authentication header in soap requests.
|
28 |
+
*/
|
29 |
+
CONST AUTHENTICATION_NAMESPACE = 'http://dpd.com/common/service/types/Authentication/2.0';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Path to login webservice wsdl.
|
33 |
+
*/
|
34 |
+
CONST WEBSERVICE_LOGIN = 'LoginService/V2_0?wsdl';
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Path to ParcelShopFinder webservice wsdl.
|
38 |
+
*/
|
39 |
+
CONST WEBSERVICE_PARCELSHOP = 'ParcelShopFinderService/V3_0?wsdl';
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Path to Shipment webservice wsdl.
|
43 |
+
*/
|
44 |
+
CONST WEBSERVICE_SHIPMENT = 'ShipmentService/V2_0?wsdl';
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Product type for shipmentservice, should be always 'CL' as instructed by DPD.
|
48 |
+
*/
|
49 |
+
CONST SHIPMENTSERVICE_PRODUCT = 'CL';
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Ordertype for shipmentservice, should be always 'consigment' as instructed by DPD.
|
53 |
+
*/
|
54 |
+
CONST SHIPMENTSERVICE_ORDERTYPE = 'consignment';
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Paperformat for Return labels, should always be 'A6' as instructed by DPD.
|
58 |
+
*/
|
59 |
+
CONST SHIPMENTSERVICE_RETURN_PAPERFORMAT = 'A6';
|
60 |
+
|
61 |
+
/**
|
62 |
+
* XML path to configuration setting for webserviceurl.
|
63 |
+
*/
|
64 |
+
CONST XML_PATH_DPD_URL = 'shipping/dpdclassic/webserviceurl';
|
65 |
+
|
66 |
+
/**
|
67 |
+
* XML path to configuration setting for userid.
|
68 |
+
*/
|
69 |
+
CONST XML_PATH_DPD_USERID = 'shipping/dpdclassic/userid';
|
70 |
+
|
71 |
+
/**
|
72 |
+
* XML path to configuration setting for password.
|
73 |
+
*/
|
74 |
+
CONST XML_PATH_DPD_PASSWORD = 'shipping/dpdclassic/password';
|
75 |
+
|
76 |
+
/**
|
77 |
+
* XML path to configuration setting for sender name.
|
78 |
+
*/
|
79 |
+
CONST XML_PATH_DPD_SENDER_NAME = 'shipping/dpdclassic/sender_name';
|
80 |
+
|
81 |
+
/**
|
82 |
+
* XML path to configuration setting for sender street.
|
83 |
+
*/
|
84 |
+
CONST XML_PATH_DPD_SENDER_STREET = 'shipping/dpdclassic/sender_street';
|
85 |
+
|
86 |
+
/**
|
87 |
+
* XML path to configuration setting for sender streetnumber.
|
88 |
+
*/
|
89 |
+
CONST XML_PATH_DPD_SENDER_STREETNUMBER = 'shipping/dpdclassic/sender_streetnumber';
|
90 |
+
|
91 |
+
/**
|
92 |
+
* XML path to configuration setting for sender country.
|
93 |
+
*/
|
94 |
+
CONST XML_PATH_DPD_SENDER_COUNTRY = 'shipping/dpdclassic/sender_country';
|
95 |
+
|
96 |
+
/**
|
97 |
+
* XML path to configuration setting for sender zipcode.
|
98 |
+
*/
|
99 |
+
CONST XML_PATH_DPD_SENDER_ZIPCODE = 'shipping/dpdclassic/sender_zipcode';
|
100 |
+
|
101 |
+
/**
|
102 |
+
* XML path to configuration setting for sender city.
|
103 |
+
*/
|
104 |
+
CONST XML_PATH_DPD_SENDER_CITY = 'shipping/dpdclassic/sender_city';
|
105 |
+
|
106 |
+
/**
|
107 |
+
* XML path to configuration setting for paperformat of shipping labels.
|
108 |
+
*/
|
109 |
+
CONST XML_PATH_DPD_PAPERFORMAT = 'shipping/dpdclassic/paperformat';
|
110 |
+
|
111 |
+
/**
|
112 |
+
* XML path to configuration setting for weight unit to send to webservice;
|
113 |
+
*/
|
114 |
+
CONST XML_PATH_DPD_WEIGHTUNIT = 'shipping/dpdclassic/weight_unit';
|
115 |
+
|
116 |
+
/**
|
117 |
+
* XML path to configuration setting for the maximum number of parcelshops that should be returned by the webservice.
|
118 |
+
*/
|
119 |
+
CONST XML_PATH_PARCELSHOP_MAXPOINTERS = 'carriers/dpdparcelshops/google_maps_maxpointers';
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Add trailing slash to url if not exists.
|
123 |
+
*
|
124 |
+
* @param $path
|
125 |
+
* @return mixed|string
|
126 |
+
*/
|
127 |
+
protected function _getWebserviceUrl($path)
|
128 |
+
{
|
129 |
+
$url = Mage::getStoreConfig($path);
|
130 |
+
if (substr($url, -1) != '/') {
|
131 |
+
$url = $url . DS;
|
132 |
+
}
|
133 |
+
|
134 |
+
return $url;
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Login webservice with ParcelShop credentials.
|
139 |
+
*
|
140 |
+
* @return mixed
|
141 |
+
*/
|
142 |
+
protected function _login()
|
143 |
+
{
|
144 |
+
$webserviceUrl = $this->_getWebserviceUrl(self::XML_PATH_DPD_URL) . self::WEBSERVICE_LOGIN;
|
145 |
+
$delisId = Mage::getStoreConfig(self::XML_PATH_DPD_USERID);
|
146 |
+
$password = Mage::helper('core')->decrypt(Mage::getStoreConfig(self::XML_PATH_DPD_PASSWORD));
|
147 |
+
|
148 |
+
try {
|
149 |
+
$client = new SoapClient($webserviceUrl);
|
150 |
+
|
151 |
+
$result = $client->getAuth(array(
|
152 |
+
'delisId' => $delisId,
|
153 |
+
'password' => $password,
|
154 |
+
'messageLanguage' => self::MESSAGE_LANGUAGE)
|
155 |
+
);
|
156 |
+
|
157 |
+
Mage::helper('dpd')->log('Login for webservice succeeded', Zend_Log::INFO);
|
158 |
+
Mage::helper('dpd')->log($result, Zend_Log::DEBUG);
|
159 |
+
} catch (SoapFault $soapE) {
|
160 |
+
Mage::helper('dpd')->log('Webservice Login failed:', Zend_Log::ERR);
|
161 |
+
Mage::helper('dpd')->log($soapE->detail, Zend_Log::ERR);
|
162 |
+
Mage::getSingleton('adminhtml/session')->addError('A problem occured with the ParcelShop webservice, please contact the store owner.');
|
163 |
+
return false;
|
164 |
+
} catch (Exception $e) {
|
165 |
+
Mage::helper('dpd')->log($e->getMessage(), Zend_Log::ERR);
|
166 |
+
return false;
|
167 |
+
}
|
168 |
+
|
169 |
+
$this->_setDepot($result->return->depot);
|
170 |
+
$this->_setAuthToken($result->return->authToken);
|
171 |
+
return $result->return;
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Set depot in core/session
|
176 |
+
*
|
177 |
+
* @param $depot
|
178 |
+
*/
|
179 |
+
protected function _setDepot($depot)
|
180 |
+
{
|
181 |
+
Mage::getSingleton('core/session')->setDpdDepot($depot);
|
182 |
+
}
|
183 |
+
|
184 |
+
/**
|
185 |
+
* Set authToken in core/session
|
186 |
+
*
|
187 |
+
* @param $authToken
|
188 |
+
*/
|
189 |
+
protected function _setAuthToken($authToken)
|
190 |
+
{
|
191 |
+
Mage::getSingleton('core/session')->setDpdAuthToken($authToken);
|
192 |
+
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Get depot from core/session
|
197 |
+
*
|
198 |
+
* @return mixed
|
199 |
+
*/
|
200 |
+
protected function _getDepot()
|
201 |
+
{
|
202 |
+
if(!Mage::getSingleton('core/session')->getDpdDepot()){
|
203 |
+
$this->_login();
|
204 |
+
}
|
205 |
+
|
206 |
+
return Mage::getSingleton('core/session')->getDpdDepot();
|
207 |
+
}
|
208 |
+
|
209 |
+
/**
|
210 |
+
* Get authToken from core/session
|
211 |
+
*
|
212 |
+
* @return mixed
|
213 |
+
*/
|
214 |
+
protected function _getAuthToken()
|
215 |
+
{
|
216 |
+
if(!Mage::getSingleton('core/session')->getDpdAuthToken()){
|
217 |
+
$this->_login();
|
218 |
+
}
|
219 |
+
return Mage::getSingleton('core/session')->getDpdAuthToken();
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Generates an authentication header that needs to be used for parcelshops and labels.
|
224 |
+
*
|
225 |
+
* @return SOAPHeader
|
226 |
+
*/
|
227 |
+
protected function _getSoapHeader()
|
228 |
+
{
|
229 |
+
$delisId = Mage::getStoreConfig(self::XML_PATH_DPD_USERID);
|
230 |
+
|
231 |
+
$soapHeaderBody = array(
|
232 |
+
'delisId' => $delisId,
|
233 |
+
'authToken' => $this->_getAuthToken(),
|
234 |
+
'messageLanguage' => self::MESSAGE_LANGUAGE
|
235 |
+
);
|
236 |
+
|
237 |
+
return new SOAPHeader(self::AUTHENTICATION_NAMESPACE, 'authentication', $soapHeaderBody, false);
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Returns the sender information filled in the backend, is used for the generation of labels.
|
242 |
+
*
|
243 |
+
* @return array
|
244 |
+
*/
|
245 |
+
protected function _getSenderInformation()
|
246 |
+
{
|
247 |
+
return array(
|
248 |
+
'name1' => Mage::getStoreConfig(self::XML_PATH_DPD_SENDER_NAME),
|
249 |
+
'street' => Mage::getStoreConfig(self::XML_PATH_DPD_SENDER_STREET),
|
250 |
+
'houseNo' => Mage::getStoreConfig(self::XML_PATH_DPD_SENDER_STREETNUMBER),
|
251 |
+
'country' => Mage::getStoreConfig(self::XML_PATH_DPD_SENDER_COUNTRY),
|
252 |
+
'zipCode' => Mage::getStoreConfig(self::XML_PATH_DPD_SENDER_ZIPCODE),
|
253 |
+
'city' => Mage::getStoreConfig(self::XML_PATH_DPD_SENDER_CITY)
|
254 |
+
);
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Does the webservice call towards dpd for functions with authentication.
|
259 |
+
* If the authentication token is expired a new token will be asked MAX_LOGIN_RETRY times.
|
260 |
+
*
|
261 |
+
* @param $webserviceUrl
|
262 |
+
* @param $method
|
263 |
+
* @param $parameters
|
264 |
+
* @return mixed
|
265 |
+
*/
|
266 |
+
protected function _webserviceCall($webserviceUrl, $method, $parameters)
|
267 |
+
{
|
268 |
+
$stop = false;
|
269 |
+
$count = 0;
|
270 |
+
|
271 |
+
while (!$stop && $count++ < self::MAX_LOGIN_RETRY) {
|
272 |
+
try {
|
273 |
+
$client = new SoapClient($webserviceUrl);
|
274 |
+
$soapHeader = $this->_getSoapHeader();
|
275 |
+
$client->__setSoapHeaders($soapHeader);
|
276 |
+
|
277 |
+
$result = $client->__soapCall($method, array($parameters));
|
278 |
+
$stop = true;
|
279 |
+
|
280 |
+
Mage::helper('dpd')->log('Webservice ' . $method . ' succeeded', Zend_Log::INFO);
|
281 |
+
Mage::helper('dpd')->log($result, Zend_Log::DEBUG);
|
282 |
+
|
283 |
+
} catch (SoapFault $soapE) {
|
284 |
+
if (isset($soapE->detail)) {
|
285 |
+
if ($soapE->detail->authenticationFault->errorCode == 'LOGIN_5') {
|
286 |
+
Mage::helper('dpd')->log('Athentication token expired, retrying...', Zend_Log::INFO);
|
287 |
+
$this->_login();
|
288 |
+
} else {
|
289 |
+
Mage::helper('dpd')->log('Webservice ' . $method . ' failed:', Zend_Log::ERR);
|
290 |
+
Mage::helper('dpd')->log($soapE->detail, Zend_Log::ERR);
|
291 |
+
Mage::getSingleton('adminhtml/session')->addError($soapE->detail->authenticationFault->errorMessage);
|
292 |
+
return false;
|
293 |
+
}
|
294 |
+
} else {
|
295 |
+
Mage::helper('dpd')->log($soapE->getMessage(), Zend_Log::ERR);
|
296 |
+
Mage::getSingleton('adminhtml/session')->addError($soapE->getMessage());
|
297 |
+
return false;
|
298 |
+
}
|
299 |
+
} catch (Exception $e) {
|
300 |
+
Mage::helper('dpd')->log($e->getMessage(), Zend_Log::ERR);
|
301 |
+
Mage::getSingleton('adminhtml/session')->addError('Something went wrong with the webservice, please check the log files.');
|
302 |
+
return false;
|
303 |
+
}
|
304 |
+
}
|
305 |
+
|
306 |
+
if ($stop == false) {
|
307 |
+
Mage::helper('dpd')->log('Athentication went wrong!', Zend_Log::ERR);
|
308 |
+
return false;
|
309 |
+
} else {
|
310 |
+
return $result;
|
311 |
+
}
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* Returns if the login webservice works.
|
316 |
+
*
|
317 |
+
* @return bool
|
318 |
+
*/
|
319 |
+
public function getLoginResult()
|
320 |
+
{
|
321 |
+
if ($this->_getAuthToken() && Mage::getStoreConfig(self::XML_PATH_DPD_USERID) && Mage::getStoreConfig(self::XML_PATH_DPD_PASSWORD)){
|
322 |
+
return true;
|
323 |
+
}else{
|
324 |
+
return false;
|
325 |
+
}
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Get parcelshops from webservice findParcelShopsByGeoData.
|
330 |
+
*
|
331 |
+
* @param $longitude
|
332 |
+
* @param $latitude
|
333 |
+
* @return mixed
|
334 |
+
*/
|
335 |
+
public function getParcelShops($longitude, $latitude)
|
336 |
+
{
|
337 |
+
$webserviceUrl = $this->_getWebserviceUrl(self::XML_PATH_DPD_URL) . self::WEBSERVICE_PARCELSHOP;
|
338 |
+
$limit = Mage::getStoreConfig(self::XML_PATH_PARCELSHOP_MAXPOINTERS);
|
339 |
+
$parameters = array(
|
340 |
+
'longitude' => $longitude,
|
341 |
+
'latitude' => $latitude,
|
342 |
+
'limit' => $limit
|
343 |
+
);
|
344 |
+
|
345 |
+
$result = $this->_webserviceCall($webserviceUrl, 'findParcelShopsByGeoData', $parameters);
|
346 |
+
return $result;
|
347 |
+
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Get a returnlabel from webservice storeOrders.
|
352 |
+
* $recipient = array('name1' => '', 'street' => '', 'country' => '', 'zipCode' => '', 'city' => '');
|
353 |
+
*
|
354 |
+
* @param $recipient
|
355 |
+
* @return mixed
|
356 |
+
*/
|
357 |
+
public function getReturnLabel($recipient)
|
358 |
+
{
|
359 |
+
$webserviceUrl = $this->_getWebserviceUrl(self::XML_PATH_DPD_URL) . self::WEBSERVICE_SHIPMENT;
|
360 |
+
$sendingDepot = $this->_getDepot();
|
361 |
+
$sender = $this->_getSenderInformation();
|
362 |
+
|
363 |
+
$parameters = array(
|
364 |
+
'paperFormat' => self::SHIPMENTSERVICE_RETURN_PAPERFORMAT,
|
365 |
+
'order' => array(
|
366 |
+
'generalShipmentData' => array(
|
367 |
+
'sendingDepot' => $sendingDepot,
|
368 |
+
'product' => self::SHIPMENTSERVICE_PRODUCT,
|
369 |
+
'sender' => $sender,
|
370 |
+
'recipient' => $recipient
|
371 |
+
),
|
372 |
+
'parcels' => array(
|
373 |
+
'returns' => 1
|
374 |
+
),
|
375 |
+
'productAndServiceData' => array(
|
376 |
+
'orderType' => self::SHIPMENTSERVICE_ORDERTYPE
|
377 |
+
)
|
378 |
+
));
|
379 |
+
|
380 |
+
$result = $this->_webserviceCall($webserviceUrl, 'storeOrders', $parameters);
|
381 |
+
return $result->orderResult;
|
382 |
+
}
|
383 |
+
|
384 |
+
/**
|
385 |
+
* Get a shippinglabel from webservice storeOrders.
|
386 |
+
* $recipient = array('name1' => '', 'street' => '', 'country' => '', 'zipCode' => '', 'city' => '');
|
387 |
+
*
|
388 |
+
* @param $recipient
|
389 |
+
* @param $order
|
390 |
+
* @param $shipment
|
391 |
+
* @param bool $parcelshop
|
392 |
+
* @return mixed
|
393 |
+
*/
|
394 |
+
public function getShippingLabel($recipient, Mage_Sales_Model_Order $order, $shipment, $parcelshop = false)
|
395 |
+
{
|
396 |
+
$webserviceUrl = $this->_getWebserviceUrl(self::XML_PATH_DPD_URL) . self::WEBSERVICE_SHIPMENT;
|
397 |
+
$sendingDepot = $this->_getDepot();
|
398 |
+
$sender = $this->_getSenderInformation();
|
399 |
+
|
400 |
+
$paperFormatSource = Mage::getModel('dpd/system_config_source_paperformat')->toArray();
|
401 |
+
$paperFormat = $paperFormatSource[Mage::getStoreConfig(self::XML_PATH_DPD_PAPERFORMAT)];
|
402 |
+
|
403 |
+
$language = Mage::helper('dpd')->getLanguageFromStore($order->getStoreId());
|
404 |
+
|
405 |
+
if ($parcelshop) {
|
406 |
+
$productAndServiceData = array(
|
407 |
+
'orderType' => self::SHIPMENTSERVICE_ORDERTYPE,
|
408 |
+
'parcelShopDelivery' => array(
|
409 |
+
'parcelShopId' => $order->getDpdParcelshopId(),
|
410 |
+
'parcelShopNotification' => array(
|
411 |
+
'channel' => 1, //email
|
412 |
+
'value' => $order->getCustomerEmail(),
|
413 |
+
'language' => $language
|
414 |
+
)
|
415 |
+
));
|
416 |
+
} else {
|
417 |
+
$productAndServiceData = array(
|
418 |
+
'orderType' => self::SHIPMENTSERVICE_ORDERTYPE,
|
419 |
+
'predict' => array(
|
420 |
+
'channel' => 1, //email
|
421 |
+
'value' => $order->getCustomerEmail(),
|
422 |
+
'language' => $language
|
423 |
+
));
|
424 |
+
}
|
425 |
+
if(Mage::getStoreConfig(self::XML_PATH_DPD_WEIGHTUNIT) == ""){
|
426 |
+
$weight = $shipment->getTotalWeight() * 100;
|
427 |
+
}
|
428 |
+
else{
|
429 |
+
$weight = $shipment->getTotalWeight() * Mage::getStoreConfig(self::XML_PATH_DPD_WEIGHTUNIT);
|
430 |
+
}
|
431 |
+
$parameters = array(
|
432 |
+
'paperFormat' => $paperFormat,
|
433 |
+
'order' => array(
|
434 |
+
'generalShipmentData' => array(
|
435 |
+
'mpsCustomerReferenceNumber1' => $order->getIncrementId(),
|
436 |
+
'sendingDepot' => $sendingDepot,
|
437 |
+
'product' => self::SHIPMENTSERVICE_PRODUCT,
|
438 |
+
'sender' => $sender,
|
439 |
+
'recipient' => $recipient
|
440 |
+
),
|
441 |
+
'parcels' => array(
|
442 |
+
'customerReferenceNumber1' => $shipment->getIncrementId(),
|
443 |
+
'weight' => round($weight,0)
|
444 |
+
),
|
445 |
+
'productAndServiceData' => $productAndServiceData
|
446 |
+
));
|
447 |
+
|
448 |
+
$result = $this->_webserviceCall($webserviceUrl, 'storeOrders', $parameters);
|
449 |
+
return $result->orderResult;
|
450 |
+
}
|
451 |
+
}
|
app/code/community/DPD/Shipping/controllers/Adminhtml/DpdconfigController.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Adminhtml_DpdconfigController
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Adminhtml_DpdconfigController extends Mage_Adminhtml_Controller_Action
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Export shipping table rates in csv format
|
17 |
+
*
|
18 |
+
*/
|
19 |
+
public function exportDpdClassicTableratesAction()
|
20 |
+
{
|
21 |
+
$fileName = 'dpdclassic_tablerates.csv';
|
22 |
+
/** @var $gridBlock Mage_Adminhtml_Block_Shipping_Carrier_Tablerate_Grid */
|
23 |
+
$gridBlock = $this->getLayout()->createBlock('dpd/adminhtml_shipping_carrier_dpdclassic_tablerate_grid');
|
24 |
+
$website = Mage::app()->getWebsite($this->getRequest()->getParam('website'));
|
25 |
+
if ($this->getRequest()->getParam('conditionName')) {
|
26 |
+
$conditionName = $this->getRequest()->getParam('conditionName');
|
27 |
+
} else {
|
28 |
+
$conditionName = $website->getConfig('carriers/dpdclassic/condition_name');
|
29 |
+
}
|
30 |
+
$gridBlock->setWebsiteId($website->getId())->setConditionName($conditionName);
|
31 |
+
$content = $gridBlock->getCsvFile();
|
32 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
33 |
+
}
|
34 |
+
/**
|
35 |
+
* Export shipping table rates in csv format
|
36 |
+
*
|
37 |
+
*/
|
38 |
+
public function exportDpdParcelshopsTableratesAction()
|
39 |
+
{
|
40 |
+
$fileName = 'dpdparcelshops_tablerates.csv';
|
41 |
+
/** @var $gridBlock Mage_Adminhtml_Block_Shipping_Carrier_Tablerate_Grid */
|
42 |
+
$gridBlock = $this->getLayout()->createBlock('dpd/adminhtml_shipping_carrier_dpdparcelshops_tablerate_grid');
|
43 |
+
$website = Mage::app()->getWebsite($this->getRequest()->getParam('website'));
|
44 |
+
if ($this->getRequest()->getParam('conditionName')) {
|
45 |
+
$conditionName = $this->getRequest()->getParam('conditionName');
|
46 |
+
} else {
|
47 |
+
$conditionName = $website->getConfig('carriers/dpdparcelshops/condition_name');
|
48 |
+
}
|
49 |
+
$gridBlock->setWebsiteId($website->getId())->setConditionName($conditionName);
|
50 |
+
$content = $gridBlock->getCsvFile();
|
51 |
+
$this->_prepareDownloadResponse($fileName, $content);
|
52 |
+
}
|
53 |
+
}
|
app/code/community/DPD/Shipping/controllers/Adminhtml/DpdorderController.php
ADDED
@@ -0,0 +1,222 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_Adminhtml_DpdorderController
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_Adminhtml_DpdorderController extends Mage_Adminhtml_Controller_Action
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Load indexpage of this controller.
|
17 |
+
*/
|
18 |
+
public function indexAction()
|
19 |
+
{
|
20 |
+
Mage::getModel('core/session')->setDpdReturn(0);
|
21 |
+
$this->_title($this->__('dpd'))->_title($this->__('DPD Orders'));
|
22 |
+
$this->loadLayout();
|
23 |
+
$this->_setActiveMenu('sales/sales');
|
24 |
+
$this->_addContent($this->getLayout()->createBlock('dpd/adminhtml_sales_order'));
|
25 |
+
$this->renderLayout();
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Load the grid.
|
30 |
+
*/
|
31 |
+
public function gridAction()
|
32 |
+
{
|
33 |
+
$this->loadLayout();
|
34 |
+
$this->getResponse()->setBody(
|
35 |
+
$this->getLayout()->createBlock('dpd/adminhtml_sales_order_grid')->toHtml()
|
36 |
+
);
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Export csvs, this fetches all current gridentries.
|
41 |
+
*/
|
42 |
+
public function exportDPDOrdersCsvAction()
|
43 |
+
{
|
44 |
+
$fileName = 'dpd_orders.csv';
|
45 |
+
$grid = $this->getLayout()->createBlock('dpd/adminhtml_sales_order_grid');
|
46 |
+
$this->_prepareDownloadResponse($fileName, $grid->getCsvFile());
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Export excel (xml), this fetches all current gridentries.
|
51 |
+
*/
|
52 |
+
public function exportDPDOrdersExcelAction()
|
53 |
+
{
|
54 |
+
$fileName = 'dpd_orders.xml';
|
55 |
+
$grid = $this->getLayout()->createBlock('dpd/adminhtml_sales_order_grid');
|
56 |
+
$this->_prepareDownloadResponse($fileName, $grid->getExcelFile($fileName));
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Generate the returnlabel and the instructions pdf, this fetches the label from dpd webservices.
|
61 |
+
* On fail this method will remove all db entries / generated pdfs to prevent outputting wrong entries.
|
62 |
+
* Logs all errors in try catch.
|
63 |
+
*/
|
64 |
+
public function generateRetourLabelAction()
|
65 |
+
{
|
66 |
+
$orderId = $this->getRequest()->getParam('order_id');
|
67 |
+
try {
|
68 |
+
$returnId = Mage::getModel('dpd/returnlabels')->generateLabelAndSave($orderId);
|
69 |
+
if($returnId){
|
70 |
+
Mage::getModel('dpd/returnlabels')->generateInstructionsPdf($orderId, $returnId);
|
71 |
+
$message = Mage::helper('dpd')->__("Your return label and instructions file have been generated and is available under 'DPD Return Labels' in this order.");
|
72 |
+
Mage::getSingleton('core/session')->addSuccess($message);
|
73 |
+
}
|
74 |
+
} catch (Exception $e) {
|
75 |
+
Mage::getModel('dpd/returnlabels')->deleteEntryAndAttachments($returnId);
|
76 |
+
Mage::getSingleton('core/session')->addError($e->getMessage());
|
77 |
+
$this->_redirect('adminhtml/sales_order/view/order_id/' . $orderId);
|
78 |
+
return $this;
|
79 |
+
}
|
80 |
+
$this->_redirect('adminhtml/sales_order/view/order_id/' . $orderId);
|
81 |
+
return $this;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Call this to send an email with the dpd template.
|
86 |
+
* This calls the model to handle emails the magento way.
|
87 |
+
* Logs all errors in try catch.
|
88 |
+
*/
|
89 |
+
public function sendEmailAction()
|
90 |
+
{
|
91 |
+
$orderId = $this->getRequest()->getParam('order_id');
|
92 |
+
$returnId = $this->getRequest()->getParam('return_id');
|
93 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
94 |
+
try {
|
95 |
+
Mage::getModel('dpd/returnlabels')->sendEmail($order, $returnId);
|
96 |
+
} catch (Exception $e) {
|
97 |
+
Mage::getSingleton('core/session')->addError($e->getMessage());
|
98 |
+
$this->_redirect('adminhtml/sales_order/view/order_id/' . $orderId);
|
99 |
+
return $this;
|
100 |
+
}
|
101 |
+
$message = Mage::helper('dpd')->__("The email with return label and instructions has been sent to %s.", $order->getShippingAddress()->getEmail());
|
102 |
+
Mage::getSingleton('core/session')->addSuccess($message);
|
103 |
+
$this->_redirect('adminhtml/sales_order/view/order_id/' . $orderId);
|
104 |
+
return $this;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Generates a label and completes the shipment.
|
109 |
+
* This is called by the action in the order grid dropdown.
|
110 |
+
*/
|
111 |
+
public function generateAndCompleteAction()
|
112 |
+
{
|
113 |
+
ini_set('max_execution_time', 120);
|
114 |
+
$orderIds = $this->getRequest()->getParam('entity_id');
|
115 |
+
$maxOrderCount = 10;
|
116 |
+
if(count($orderIds) > $maxOrderCount){
|
117 |
+
$message = Mage::helper('dpd')->__("The maximum number of orders to process is %s. You selected %s. Please deselect some orders and try again.",$maxOrderCount, count($orderIds));
|
118 |
+
Mage::getSingleton('core/session')->addError($message);
|
119 |
+
$this->_redirect('*/*/index');
|
120 |
+
return $this;
|
121 |
+
}
|
122 |
+
if (!is_array($orderIds)) {
|
123 |
+
try {
|
124 |
+
Mage::getModel('dpd/adminhtml_dpdgrid')->generateAndCompleteOrder($orderIds);
|
125 |
+
if(!is_object(Mage::getSingleton('core/session')->getMessages()->getLastAddedMessage())){
|
126 |
+
$message = Mage::helper('dpd')->__("Your label has been generated and statuses have been changed.");
|
127 |
+
Mage::getSingleton('core/session')->addSuccess($message);
|
128 |
+
}
|
129 |
+
} catch (Exception $e) {
|
130 |
+
Mage::helper('dpd')->log($e->getMessage(), Zend_Log::ERR);
|
131 |
+
$message = Mage::helper('dpd')->__("Your selected order is not ready to be shipped or has already been shipped, operation canceled.");
|
132 |
+
Mage::getSingleton('core/session')->addError($message);
|
133 |
+
}
|
134 |
+
} else {
|
135 |
+
try {
|
136 |
+
$counter = 0;
|
137 |
+
foreach ($orderIds as $orderId) {
|
138 |
+
// sleep(0.300) // uncomment this line if you encounter web service load problems - ONLY WHEN INSTRUCTED BY DPD !
|
139 |
+
try {
|
140 |
+
$result = Mage::getModel('dpd/adminhtml_dpdgrid')->generateAndCompleteOrder($orderId);
|
141 |
+
if($result){
|
142 |
+
$counter ++;
|
143 |
+
}
|
144 |
+
} catch (Exception $e) {
|
145 |
+
Mage::helper('dpd')->log($e->getMessage(), Zend_Log::ERR);
|
146 |
+
$order = Mage::getResourceModel('sales/order_collection')->addAttributeToSelect('increment_id')->addAttributeToFilter('entity_id', array('eq' => $orderId))->getFirstItem();
|
147 |
+
$message = Mage::helper('dpd')->__("The order with id %s is not ready to be shipped or has already been shipped.", $order->getIncrementId());
|
148 |
+
Mage::getSingleton('core/session')->addNotice($message);
|
149 |
+
}
|
150 |
+
}
|
151 |
+
if($counter > 0){
|
152 |
+
$message = Mage::helper('dpd')->__("%s label(s) have been generated and statuses have been changed.", $counter);
|
153 |
+
Mage::getSingleton('core/session')->addSuccess($message);
|
154 |
+
}
|
155 |
+
} catch (Exception $e) {
|
156 |
+
Mage::helper('dpd')->log($e->getMessage(), Zend_Log::ERR);
|
157 |
+
$message = Mage::helper('dpd')->__("Some of the selected orders are not ready to be shipped or have already been shipped, operation canceled.");
|
158 |
+
Mage::getSingleton('core/session')->addError($message);
|
159 |
+
}
|
160 |
+
}
|
161 |
+
$this->_redirect('*/*/index');
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Zips all undownloaded labels and gives downloadresponse.
|
166 |
+
*/
|
167 |
+
public function dowloadAllUndownloadedAction()
|
168 |
+
{
|
169 |
+
$orderIds = $this->getRequest()->getParam('entity_id');
|
170 |
+
try {
|
171 |
+
$path = Mage::getModel('dpd/adminhtml_dpdgrid')->processUndownloadedLabels($orderIds);
|
172 |
+
if (!$path) {
|
173 |
+
$message = Mage::helper('dpd')->__('No undownloaded labels found.');
|
174 |
+
Mage::getSingleton('core/session')->addError($message);
|
175 |
+
$this->_redirect('*/*/index');
|
176 |
+
} else {
|
177 |
+
$this->_prepareDownloadResponse('dpd_undownloaded.zip', file_get_contents($path));
|
178 |
+
}
|
179 |
+
} catch (Exception $e) {
|
180 |
+
Mage::helper('dpd')->log($e->getMessage(), Zend_Log::ERR);
|
181 |
+
$message = Mage::helper('dpd')->__("The file(s) could not be downloaded, please check your DPD logs.");
|
182 |
+
Mage::getSingleton('core/session')->addError($message);
|
183 |
+
$this->_redirect('*/*/index');
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Fetches the label and puts it in a download response.
|
189 |
+
*/
|
190 |
+
public function downloadDpdLabelAction()
|
191 |
+
{
|
192 |
+
$shipmentId = $this->getRequest()->getParam('shipment_id');
|
193 |
+
$shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
|
194 |
+
if ($shipment->getDpdLabelPath() == "") {
|
195 |
+
$message = Mage::helper('dpd')->__("No label generated yet - please perform the ‘Generate Label and Complete’ action from the overview.");
|
196 |
+
Mage::getSingleton('core/session')->addError($message);
|
197 |
+
$this->_redirect('*/sales_order_shipment/view/shipment_id/' . $shipmentId);
|
198 |
+
} else {
|
199 |
+
$pdf_Path = Mage::getBaseDir('media') . "/dpd/orderlabels/" . $shipment->getDpdLabelPath();
|
200 |
+
$pdf = Zend_Pdf::load($pdf_Path);
|
201 |
+
$this->_prepareDownloadResponse($shipment->getDpdLabelPath(), $pdf->render(), 'application/pdf');
|
202 |
+
$shipment->setDpdLabelExported(1)->save();
|
203 |
+
}
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Returns deleted message (used for customparcelshopdelete in sysconfig).
|
208 |
+
*
|
209 |
+
* @return void
|
210 |
+
*/
|
211 |
+
public function checkAction()
|
212 |
+
{
|
213 |
+
$websiteId = $this->getRequest()->getPost('id');
|
214 |
+
$collection = Mage::getModel('dpd/specialparcelshops')->getCollection()->addFieldToFilter('parcelshop_website_id', array('eq' => $websiteId));
|
215 |
+
foreach ($collection->getItems() as $_item) {
|
216 |
+
$_item->delete();
|
217 |
+
}
|
218 |
+
$message = Mage::helper('dpd')->__("The ParcelShops for this website have been deleted.");
|
219 |
+
Mage::getSingleton('core/session')->addSuccess($message);
|
220 |
+
Mage::app()->getResponse()->setBody($websiteId);
|
221 |
+
}
|
222 |
+
}
|
app/code/community/DPD/Shipping/controllers/AjaxController.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
/**
|
11 |
+
* Class DPD_Shipping_AjaxController
|
12 |
+
*/
|
13 |
+
class DPD_Shipping_AjaxController extends Mage_Core_Controller_Front_Action {
|
14 |
+
/**
|
15 |
+
* Load indexpage of this controller.
|
16 |
+
*/
|
17 |
+
public function indexAction(){
|
18 |
+
$this->loadLayout();
|
19 |
+
$this->renderLayout();
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Return window for overlay mode of the shipping method.
|
24 |
+
*/
|
25 |
+
public function windowindexAction(){
|
26 |
+
$this->loadLayout();
|
27 |
+
if($this->getRequest()->getParam('windowed')){
|
28 |
+
$this->getLayout()->getBlock('dpd')->setIsAjax(true);
|
29 |
+
}
|
30 |
+
$this->renderLayout();
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Saves the parcel and returns the selected parcelshop template.
|
35 |
+
*/
|
36 |
+
public function saveparcelAction(){
|
37 |
+
$parcelData = $this->getRequest()->getPost();
|
38 |
+
Mage::getModel('checkout/cart')->getQuote()
|
39 |
+
->setDpdSelected(1)
|
40 |
+
->setDpdParcelshopId($parcelData['parcelShopId'])
|
41 |
+
->setDpdCompany($parcelData['company'])
|
42 |
+
->setDpdStreet($parcelData['houseno'])
|
43 |
+
->setDpdZipcode($parcelData['zipcode'])
|
44 |
+
->setDpdCity($parcelData['city'])
|
45 |
+
->setDpdCountry($parcelData['country'])
|
46 |
+
->setDpdExtraInfo($parcelData['extra_info'])
|
47 |
+
->save();
|
48 |
+
$this->loadLayout();
|
49 |
+
$this->renderLayout();
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Unsets selected parcelshop and returns select parcelshop template.
|
54 |
+
*/
|
55 |
+
public function invalidateparcelAction(){
|
56 |
+
Mage::getModel('checkout/cart')->getQuote()->setDpdSelected(0)->save();
|
57 |
+
$this->loadLayout();
|
58 |
+
$this->renderLayout();
|
59 |
+
}
|
60 |
+
}
|
app/code/community/DPD/Shipping/etc/adminhtml.xml
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<menu>
|
4 |
+
<sales>
|
5 |
+
<children>
|
6 |
+
<dpd translate="title" module="dpd">
|
7 |
+
<sort_order>20</sort_order>
|
8 |
+
<title>DPD Orders</title>
|
9 |
+
<action>adminhtml/dpdorder/</action>
|
10 |
+
</dpd>
|
11 |
+
</children>
|
12 |
+
</sales>
|
13 |
+
</menu>
|
14 |
+
<acl>
|
15 |
+
<resources>
|
16 |
+
<admin>
|
17 |
+
<children>
|
18 |
+
<sales>
|
19 |
+
<children>
|
20 |
+
<dpd translate="title" module="dpd">
|
21 |
+
<title>DPD Orders</title>
|
22 |
+
<sort_order>20</sort_order>
|
23 |
+
</dpd>
|
24 |
+
</children>
|
25 |
+
</sales>
|
26 |
+
</children>
|
27 |
+
</admin>
|
28 |
+
</resources>
|
29 |
+
</acl>
|
30 |
+
</config>
|
app/code/community/DPD/Shipping/etc/config.xml
ADDED
@@ -0,0 +1,210 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<DPD_Shipping>
|
5 |
+
<version>0.1.0</version>
|
6 |
+
</DPD_Shipping>
|
7 |
+
</modules>
|
8 |
+
<global>
|
9 |
+
<fieldsets>
|
10 |
+
<sales_convert_quote>
|
11 |
+
<dpd_parcelshop_id>
|
12 |
+
<to_order>*</to_order>
|
13 |
+
</dpd_parcelshop_id>
|
14 |
+
</sales_convert_quote>
|
15 |
+
</fieldsets>
|
16 |
+
<blocks>
|
17 |
+
<dpd>
|
18 |
+
<class>DPD_Shipping_Block</class>
|
19 |
+
</dpd>
|
20 |
+
</blocks>
|
21 |
+
<models>
|
22 |
+
<dpd>
|
23 |
+
<class>DPD_Shipping_Model</class>
|
24 |
+
<resourceModel>dpd_mysql4</resourceModel>
|
25 |
+
</dpd>
|
26 |
+
<dpd_mysql4>
|
27 |
+
<class>DPD_Shipping_Model_Mysql4</class>
|
28 |
+
<entities>
|
29 |
+
<returnlabels>
|
30 |
+
<table>dpd_shipping_returnlabels</table>
|
31 |
+
</returnlabels>
|
32 |
+
<specialparcelshops>
|
33 |
+
<table>dpd_shipping_specialparcelshops</table>
|
34 |
+
</specialparcelshops>
|
35 |
+
<dpdclassic_tablerate>
|
36 |
+
<table>dpd_shipping_dpdclassic_tablerate</table>
|
37 |
+
</dpdclassic_tablerate>
|
38 |
+
<dpdparcelshops_tablerate>
|
39 |
+
<table>dpd_shipping_dpdparcelshops_tablerate</table>
|
40 |
+
</dpdparcelshops_tablerate>
|
41 |
+
</entities>
|
42 |
+
</dpd_mysql4>
|
43 |
+
</models>
|
44 |
+
<helpers>
|
45 |
+
<dpd>
|
46 |
+
<class>DPD_Shipping_Helper</class>
|
47 |
+
</dpd>
|
48 |
+
</helpers>
|
49 |
+
<resources>
|
50 |
+
<dpd_setup>
|
51 |
+
<setup>
|
52 |
+
<module>DPD_Shipping</module>
|
53 |
+
</setup>
|
54 |
+
<connection>
|
55 |
+
<use>core_setup</use>
|
56 |
+
</connection>
|
57 |
+
</dpd_setup>
|
58 |
+
<dpd_write>
|
59 |
+
<connection>
|
60 |
+
<use>core_write</use>
|
61 |
+
</connection>
|
62 |
+
</dpd_write>
|
63 |
+
<dpd_read>
|
64 |
+
<connection>
|
65 |
+
<use>core_read</use>
|
66 |
+
</connection>
|
67 |
+
</dpd_read>
|
68 |
+
</resources>
|
69 |
+
<template>
|
70 |
+
<email>
|
71 |
+
<dpd_returnlabel_email_template translate="label" module="dpd">
|
72 |
+
<label>Dpd Returnlabel Email</label>
|
73 |
+
<file>sales/dpd_returnlabel.html</file>
|
74 |
+
<type>html</type>
|
75 |
+
</dpd_returnlabel_email_template>
|
76 |
+
</email>
|
77 |
+
</template>
|
78 |
+
</global>
|
79 |
+
<frontend>
|
80 |
+
<layout>
|
81 |
+
<updates>
|
82 |
+
<dpd>
|
83 |
+
<file>dpd_shipping.xml</file>
|
84 |
+
</dpd>
|
85 |
+
</updates>
|
86 |
+
</layout>
|
87 |
+
<translate>
|
88 |
+
<modules>
|
89 |
+
<dpd>
|
90 |
+
<files>
|
91 |
+
<default>DPD_Shipping.csv</default>
|
92 |
+
</files>
|
93 |
+
</dpd>
|
94 |
+
</modules>
|
95 |
+
</translate>
|
96 |
+
<events>
|
97 |
+
<core_block_abstract_to_html_after>
|
98 |
+
<observers>
|
99 |
+
<dpdshipping>
|
100 |
+
<class>dpd/observer</class>
|
101 |
+
<method>core_block_abstract_to_html_after</method>
|
102 |
+
</dpdshipping>
|
103 |
+
</observers>
|
104 |
+
</core_block_abstract_to_html_after>
|
105 |
+
<checkout_controller_onepage_save_shipping_method>
|
106 |
+
<observers>
|
107 |
+
<dpdshipping>
|
108 |
+
<type>singleton</type>
|
109 |
+
<class>dpd/observer</class>
|
110 |
+
<method>checkout_controller_onepage_save_shipping_method</method>
|
111 |
+
</dpdshipping>
|
112 |
+
</observers>
|
113 |
+
</checkout_controller_onepage_save_shipping_method>
|
114 |
+
</events>
|
115 |
+
<routers>
|
116 |
+
<dpd>
|
117 |
+
<use>standard</use>
|
118 |
+
<args>
|
119 |
+
<module>DPD_Shipping</module>
|
120 |
+
<frontName>dpd</frontName>
|
121 |
+
</args>
|
122 |
+
</dpd>
|
123 |
+
</routers>
|
124 |
+
</frontend>
|
125 |
+
<adminhtml>
|
126 |
+
<events>
|
127 |
+
<core_block_abstract_to_html_before>
|
128 |
+
<observers>
|
129 |
+
<dpdshipping>
|
130 |
+
<class>dpd/observer</class>
|
131 |
+
<method>core_block_abstract_to_html_before</method>
|
132 |
+
<type>model</type>
|
133 |
+
</dpdshipping>
|
134 |
+
</observers>
|
135 |
+
</core_block_abstract_to_html_before>
|
136 |
+
<sales_order_shipment_save_before>
|
137 |
+
<observers>
|
138 |
+
<dpdshipping>
|
139 |
+
<class>dpd/observer</class>
|
140 |
+
<method>sales_order_shipment_save_before</method>
|
141 |
+
<type>model</type>
|
142 |
+
</dpdshipping>
|
143 |
+
</observers>
|
144 |
+
</sales_order_shipment_save_before>
|
145 |
+
</events>
|
146 |
+
<translate>
|
147 |
+
<modules>
|
148 |
+
<dpd>
|
149 |
+
<files>
|
150 |
+
<default>DPD_Shipping.csv</default>
|
151 |
+
</files>
|
152 |
+
</dpd>
|
153 |
+
</modules>
|
154 |
+
</translate>
|
155 |
+
<layout>
|
156 |
+
<updates>
|
157 |
+
<dpdshipping>
|
158 |
+
<file>dpd/shipping.xml</file>
|
159 |
+
</dpdshipping>
|
160 |
+
</updates>
|
161 |
+
</layout>
|
162 |
+
</adminhtml>
|
163 |
+
<default>
|
164 |
+
<carriers>
|
165 |
+
<dpdclassic>
|
166 |
+
<active>1</active>
|
167 |
+
<model>dpd/carrier_dpdclassic</model>
|
168 |
+
<title>DPD Home Delivery</title>
|
169 |
+
<name>Delivery at home</name>
|
170 |
+
<sort_order>0</sort_order>
|
171 |
+
<default>0</default>
|
172 |
+
<ratetype>0</ratetype>
|
173 |
+
<flatrateprice>0</flatrateprice>
|
174 |
+
<paperformat>0</paperformat>
|
175 |
+
<specificcountry>BE,FR,DE,LU,NL</specificcountry>
|
176 |
+
<sallowspecific>1</sallowspecific>
|
177 |
+
</dpdclassic>
|
178 |
+
<dpdparcelshops>
|
179 |
+
<active>1</active>
|
180 |
+
<log_level>7</log_level>
|
181 |
+
<model>dpd/carrier_dpdparcelshops</model>
|
182 |
+
<title>DPD ParcelShops</title>
|
183 |
+
<name>Delivery at ParcelShops</name>
|
184 |
+
<sort_order>0</sort_order>
|
185 |
+
<default>0</default>
|
186 |
+
<ratetype>0</ratetype>
|
187 |
+
<flatrateprice>0</flatrateprice>
|
188 |
+
<google_maps_width>600</google_maps_width>
|
189 |
+
<google_maps_height>430</google_maps_height>
|
190 |
+
<paperformat>0</paperformat>
|
191 |
+
<google_maps_maxpointers>10</google_maps_maxpointers>
|
192 |
+
<google_maps_display>0</google_maps_display>
|
193 |
+
<google_maps_enable_list>0</google_maps_enable_list>
|
194 |
+
<specificcountry>BE,FR,DE,LU,NL</specificcountry>
|
195 |
+
<sallowspecific>1</sallowspecific>
|
196 |
+
</dpdparcelshops>
|
197 |
+
</carriers>
|
198 |
+
</default>
|
199 |
+
<admin>
|
200 |
+
<routers>
|
201 |
+
<adminhtml>
|
202 |
+
<args>
|
203 |
+
<modules>
|
204 |
+
<dpd before="Mage_Adminhtml">DPD_Shipping_Adminhtml</dpd>
|
205 |
+
</modules>
|
206 |
+
</args>
|
207 |
+
</adminhtml>
|
208 |
+
</routers>
|
209 |
+
</admin>
|
210 |
+
</config>
|
app/code/community/DPD/Shipping/etc/system.xml
ADDED
@@ -0,0 +1,484 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<config>
|
3 |
+
<sections>
|
4 |
+
<shipping>
|
5 |
+
<groups>
|
6 |
+
<dpdclassic translate="label" module="dpd">
|
7 |
+
<label>DPD Shipping</label>
|
8 |
+
<frontend_type>text</frontend_type>
|
9 |
+
<sort_order>10</sort_order>
|
10 |
+
<show_in_default>1</show_in_default>
|
11 |
+
<show_in_website>1</show_in_website>
|
12 |
+
<show_in_store>1</show_in_store>
|
13 |
+
<fields>
|
14 |
+
<userid translate="label">
|
15 |
+
<label>User Id</label>
|
16 |
+
<frontend_type>text</frontend_type>
|
17 |
+
<sort_order>11</sort_order>
|
18 |
+
<show_in_default>1</show_in_default>
|
19 |
+
<show_in_website>1</show_in_website>
|
20 |
+
<show_in_store>1</show_in_store>
|
21 |
+
<comment>Please contact DPD for your User ID</comment>
|
22 |
+
</userid>
|
23 |
+
<password translate="label">
|
24 |
+
<label>Password</label>
|
25 |
+
<frontend_type>obscure</frontend_type>
|
26 |
+
<backend_model>adminhtml/system_config_backend_encrypted</backend_model>
|
27 |
+
<sort_order>12</sort_order>
|
28 |
+
<show_in_default>1</show_in_default>
|
29 |
+
<show_in_website>1</show_in_website>
|
30 |
+
<show_in_store>1</show_in_store>
|
31 |
+
<comment>Please contact DPD for your password</comment>
|
32 |
+
</password>
|
33 |
+
<webserviceurl translate="label">
|
34 |
+
<label>Webservice URL</label>
|
35 |
+
<frontend_type>text</frontend_type>
|
36 |
+
<sort_order>15</sort_order>
|
37 |
+
<show_in_default>1</show_in_default>
|
38 |
+
<show_in_website>1</show_in_website>
|
39 |
+
<show_in_store>1</show_in_store>
|
40 |
+
<comment>Do NOT change unless instructed by DPD</comment>
|
41 |
+
</webserviceurl>
|
42 |
+
<sender_name translate="label">
|
43 |
+
<label>Sender name</label>
|
44 |
+
<frontend_type>text</frontend_type>
|
45 |
+
<sort_order>16</sort_order>
|
46 |
+
<show_in_default>1</show_in_default>
|
47 |
+
<show_in_website>1</show_in_website>
|
48 |
+
<show_in_store>1</show_in_store>
|
49 |
+
<comment>Do NOT change unless instructed by DPD</comment>
|
50 |
+
</sender_name>
|
51 |
+
<sender_street translate="label">
|
52 |
+
<label>Sender street</label>
|
53 |
+
<frontend_type>text</frontend_type>
|
54 |
+
<sort_order>17</sort_order>
|
55 |
+
<show_in_default>1</show_in_default>
|
56 |
+
<show_in_website>1</show_in_website>
|
57 |
+
<show_in_store>1</show_in_store>
|
58 |
+
<comment>Do NOT change unless instructed by DPD</comment>
|
59 |
+
</sender_street>
|
60 |
+
<sender_streetnumber translate="label">
|
61 |
+
<label>Sender streetnumber</label>
|
62 |
+
<frontend_type>text</frontend_type>
|
63 |
+
<sort_order>18</sort_order>
|
64 |
+
<show_in_default>1</show_in_default>
|
65 |
+
<show_in_website>1</show_in_website>
|
66 |
+
<show_in_store>1</show_in_store>
|
67 |
+
<comment>Do NOT change unless instructed by DPD</comment>
|
68 |
+
</sender_streetnumber>
|
69 |
+
<sender_country translate="label">
|
70 |
+
<label>Sender country</label>
|
71 |
+
<frontend_type>text</frontend_type>
|
72 |
+
<sort_order>19</sort_order>
|
73 |
+
<show_in_default>1</show_in_default>
|
74 |
+
<show_in_website>1</show_in_website>
|
75 |
+
<show_in_store>1</show_in_store>
|
76 |
+
<comment>Do NOT change unless instructed by DPD</comment>
|
77 |
+
</sender_country>
|
78 |
+
<sender_zipcode translate="label">
|
79 |
+
<label>Sender zipcode</label>
|
80 |
+
<frontend_type>text</frontend_type>
|
81 |
+
<sort_order>20</sort_order>
|
82 |
+
<show_in_default>1</show_in_default>
|
83 |
+
<show_in_website>1</show_in_website>
|
84 |
+
<show_in_store>1</show_in_store>
|
85 |
+
<comment>Do NOT change unless instructed by DPD</comment>
|
86 |
+
</sender_zipcode>
|
87 |
+
<sender_city translate="label">
|
88 |
+
<label>Sender city</label>
|
89 |
+
<frontend_type>text</frontend_type>
|
90 |
+
<sort_order>21</sort_order>
|
91 |
+
<show_in_default>1</show_in_default>
|
92 |
+
<show_in_website>1</show_in_website>
|
93 |
+
<show_in_store>1</show_in_store>
|
94 |
+
<comment>Do NOT change unless instructed by DPD</comment>
|
95 |
+
</sender_city>
|
96 |
+
<paperformat translate="label">
|
97 |
+
<label>Paperformat</label>
|
98 |
+
<frontend_type>select</frontend_type>
|
99 |
+
<source_model>dpd/system_config_source_paperformat</source_model>
|
100 |
+
<sort_order>10</sort_order>
|
101 |
+
<show_in_default>1</show_in_default>
|
102 |
+
<show_in_website>1</show_in_website>
|
103 |
+
<show_in_store>1</show_in_store>
|
104 |
+
<comment>Select in which format the labels should be generated for printing</comment>
|
105 |
+
</paperformat>
|
106 |
+
<weight_unit>
|
107 |
+
<label>Weight unit</label>
|
108 |
+
<frontend_type>select</frontend_type>
|
109 |
+
<source_model>dpd/system_config_source_weightunit</source_model>
|
110 |
+
<sort_order>10</sort_order>
|
111 |
+
<show_in_default>1</show_in_default>
|
112 |
+
<show_in_website>1</show_in_website>
|
113 |
+
<show_in_store>1</show_in_store>
|
114 |
+
<comment>Choose the unit of the weight attribute of products</comment>
|
115 |
+
</weight_unit>
|
116 |
+
</fields>
|
117 |
+
</dpdclassic>
|
118 |
+
</groups>
|
119 |
+
</shipping>
|
120 |
+
<carriers>
|
121 |
+
<groups>
|
122 |
+
<dpdclassic translate="label" module="dpd">
|
123 |
+
<label>DPD Home Delivery</label>
|
124 |
+
<frontend_type>text</frontend_type>
|
125 |
+
<sort_order>10</sort_order>
|
126 |
+
<show_in_default>1</show_in_default>
|
127 |
+
<show_in_website>1</show_in_website>
|
128 |
+
<show_in_store>1</show_in_store>
|
129 |
+
<fields>
|
130 |
+
<active translate="label">
|
131 |
+
<label>Enabled</label>
|
132 |
+
<frontend_type>select</frontend_type>
|
133 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
134 |
+
<sort_order>1</sort_order>
|
135 |
+
<show_in_default>1</show_in_default>
|
136 |
+
<show_in_website>1</show_in_website>
|
137 |
+
<show_in_store>1</show_in_store>
|
138 |
+
</active>
|
139 |
+
<name translate="label">
|
140 |
+
<label>Shipping method name</label>
|
141 |
+
<frontend_type>text</frontend_type>
|
142 |
+
<sort_order>2</sort_order>
|
143 |
+
<show_in_default>1</show_in_default>
|
144 |
+
<show_in_website>1</show_in_website>
|
145 |
+
<show_in_store>1</show_in_store>
|
146 |
+
<comment>The name of the shipping method</comment>
|
147 |
+
</name>
|
148 |
+
<sort_order translate="label">
|
149 |
+
<label>Sort order</label>
|
150 |
+
<frontend_type>text</frontend_type>
|
151 |
+
<sort_order>3</sort_order>
|
152 |
+
<show_in_default>1</show_in_default>
|
153 |
+
<show_in_website>1</show_in_website>
|
154 |
+
<show_in_store>1</show_in_store>
|
155 |
+
<comment>The order in which the shipping method should appear</comment>
|
156 |
+
</sort_order>
|
157 |
+
<default translate="label">
|
158 |
+
<label>Default selected</label>
|
159 |
+
<frontend_type>select</frontend_type>
|
160 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
161 |
+
<sort_order>4</sort_order>
|
162 |
+
<show_in_default>1</show_in_default>
|
163 |
+
<show_in_website>1</show_in_website>
|
164 |
+
<show_in_store>1</show_in_store>
|
165 |
+
<comment>Automatically selects this shipping method during checkout by default</comment>
|
166 |
+
</default>
|
167 |
+
<ratetype translate="label">
|
168 |
+
<label>Rate type</label>
|
169 |
+
<frontend_type>select</frontend_type>
|
170 |
+
<source_model>dpd/system_config_source_ratetypes</source_model>
|
171 |
+
<sort_order>5</sort_order>
|
172 |
+
<show_in_default>1</show_in_default>
|
173 |
+
<show_in_website>1</show_in_website>
|
174 |
+
<show_in_store>1</show_in_store>
|
175 |
+
<comment>You can use flat rate or calculated table rates</comment>
|
176 |
+
</ratetype>
|
177 |
+
<flatrateprice translate="label">
|
178 |
+
<label>Flat rate price</label>
|
179 |
+
<frontend_type>text</frontend_type>
|
180 |
+
<sort_order>6</sort_order>
|
181 |
+
<depends>
|
182 |
+
<ratetype>0</ratetype>
|
183 |
+
</depends>
|
184 |
+
<show_in_default>1</show_in_default>
|
185 |
+
<show_in_website>1</show_in_website>
|
186 |
+
<show_in_store>1</show_in_store>
|
187 |
+
<comment>Fixed fee for DPD shipments</comment>
|
188 |
+
</flatrateprice>
|
189 |
+
<condition_name translate="label">
|
190 |
+
<label>Table rates condition</label>
|
191 |
+
<frontend_type>select</frontend_type>
|
192 |
+
<source_model>adminhtml/system_config_source_shipping_tablerate</source_model>
|
193 |
+
<sort_order>7</sort_order>
|
194 |
+
<depends>
|
195 |
+
<ratetype>1</ratetype>
|
196 |
+
</depends>
|
197 |
+
<show_in_default>1</show_in_default>
|
198 |
+
<show_in_website>1</show_in_website>
|
199 |
+
<show_in_store>0</show_in_store>
|
200 |
+
</condition_name>
|
201 |
+
<export translate="label">
|
202 |
+
<label>Export table rates file</label>
|
203 |
+
<frontend_type>button</frontend_type>
|
204 |
+
<frontend_model>dpd/adminhtml_system_config_form_dpdclassicexport</frontend_model>
|
205 |
+
<sort_order>8</sort_order>
|
206 |
+
<depends>
|
207 |
+
<ratetype>1</ratetype>
|
208 |
+
</depends>
|
209 |
+
<show_in_default>0</show_in_default>
|
210 |
+
<show_in_website>1</show_in_website>
|
211 |
+
<show_in_store>0</show_in_store>
|
212 |
+
<comment>Export your table rates configuration here</comment>
|
213 |
+
</export>
|
214 |
+
<import_classic translate="label">
|
215 |
+
<label>Import table rates file</label>
|
216 |
+
<frontend_type>import</frontend_type>
|
217 |
+
<sort_order>9</sort_order>
|
218 |
+
<backend_model>dpd/adminhtml_system_config_backend_shipping_dpdclassic_tablerate</backend_model>
|
219 |
+
<depends>
|
220 |
+
<ratetype>1</ratetype>
|
221 |
+
</depends>
|
222 |
+
<show_in_default>0</show_in_default>
|
223 |
+
<show_in_website>1</show_in_website>
|
224 |
+
<show_in_store>0</show_in_store>
|
225 |
+
<comment>Upload your table rates configuration here. Refer to the manual for more information</comment>
|
226 |
+
</import_classic>
|
227 |
+
<sallowspecific translate="label">
|
228 |
+
<label>Ship to countries</label>
|
229 |
+
<frontend_type>select</frontend_type>
|
230 |
+
<sort_order>13</sort_order>
|
231 |
+
<frontend_class>shipping-applicable-country</frontend_class>
|
232 |
+
<source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model>
|
233 |
+
<show_in_default>1</show_in_default>
|
234 |
+
<show_in_website>1</show_in_website>
|
235 |
+
<show_in_store>0</show_in_store>
|
236 |
+
<comment>Make DPD available in all countries or in specific</comment>
|
237 |
+
</sallowspecific>
|
238 |
+
<specificcountry translate="label">
|
239 |
+
<label>Allowed countries</label>
|
240 |
+
<frontend_type>multiselect</frontend_type>
|
241 |
+
<sort_order>14</sort_order>
|
242 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
243 |
+
<show_in_default>1</show_in_default>
|
244 |
+
<show_in_website>1</show_in_website>
|
245 |
+
<show_in_store>0</show_in_store>
|
246 |
+
<can_be_empty>0</can_be_empty>
|
247 |
+
<comment>Select one or more countries where dpd should be available for</comment>
|
248 |
+
</specificcountry>
|
249 |
+
</fields>
|
250 |
+
</dpdclassic>
|
251 |
+
<dpdparcelshops translate="label" module="dpd">
|
252 |
+
<label>DPD Parcelshops</label>
|
253 |
+
<frontend_type>text</frontend_type>
|
254 |
+
<sort_order>11</sort_order>
|
255 |
+
<show_in_default>1</show_in_default>
|
256 |
+
<show_in_website>1</show_in_website>
|
257 |
+
<show_in_store>1</show_in_store>
|
258 |
+
<fields>
|
259 |
+
<active translate="label">
|
260 |
+
<label>Enabled</label>
|
261 |
+
<frontend_type>select</frontend_type>
|
262 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
263 |
+
<sort_order>1</sort_order>
|
264 |
+
<show_in_default>1</show_in_default>
|
265 |
+
<show_in_website>1</show_in_website>
|
266 |
+
<show_in_store>1</show_in_store>
|
267 |
+
</active>
|
268 |
+
<name translate="label">
|
269 |
+
<label>Shipping method name</label>
|
270 |
+
<frontend_type>text</frontend_type>
|
271 |
+
<sort_order>2</sort_order>
|
272 |
+
<show_in_default>1</show_in_default>
|
273 |
+
<show_in_website>1</show_in_website>
|
274 |
+
<show_in_store>1</show_in_store>
|
275 |
+
<comment>The name of the shipping method</comment>
|
276 |
+
</name>
|
277 |
+
<sort_order translate="label">
|
278 |
+
<label>Sort order</label>
|
279 |
+
<frontend_type>text</frontend_type>
|
280 |
+
<sort_order>3</sort_order>
|
281 |
+
<show_in_default>1</show_in_default>
|
282 |
+
<show_in_website>1</show_in_website>
|
283 |
+
<show_in_store>1</show_in_store>
|
284 |
+
<comment>The order in which the shipping method should appear</comment>
|
285 |
+
</sort_order>
|
286 |
+
<default translate="label">
|
287 |
+
<label>Default selected</label>
|
288 |
+
<frontend_type>select</frontend_type>
|
289 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
290 |
+
<sort_order>4</sort_order>
|
291 |
+
<show_in_default>1</show_in_default>
|
292 |
+
<show_in_website>1</show_in_website>
|
293 |
+
<show_in_store>1</show_in_store>
|
294 |
+
<comment>Automatically selects this shipping method during checkout by default</comment>
|
295 |
+
</default>
|
296 |
+
<ratetype translate="label">
|
297 |
+
<label>Rate type</label>
|
298 |
+
<frontend_type>select</frontend_type>
|
299 |
+
<source_model>dpd/system_config_source_ratetypes</source_model>
|
300 |
+
<sort_order>5</sort_order>
|
301 |
+
<show_in_default>1</show_in_default>
|
302 |
+
<show_in_website>1</show_in_website>
|
303 |
+
<show_in_store>1</show_in_store>
|
304 |
+
<comment>You can use flat rate or calculated table rates</comment>
|
305 |
+
</ratetype>
|
306 |
+
<flatrateprice translate="label">
|
307 |
+
<label>Flat rate price</label>
|
308 |
+
<frontend_type>text</frontend_type>
|
309 |
+
<sort_order>6</sort_order>
|
310 |
+
<depends>
|
311 |
+
<ratetype>0</ratetype>
|
312 |
+
</depends>
|
313 |
+
<show_in_default>1</show_in_default>
|
314 |
+
<show_in_website>1</show_in_website>
|
315 |
+
<show_in_store>1</show_in_store>
|
316 |
+
<comment>Fixed fee for DPD shipments</comment>
|
317 |
+
</flatrateprice>
|
318 |
+
<condition_name translate="label">
|
319 |
+
<label>Table rates condition</label>
|
320 |
+
<frontend_type>select</frontend_type>
|
321 |
+
<source_model>adminhtml/system_config_source_shipping_tablerate</source_model>
|
322 |
+
<sort_order>7</sort_order>
|
323 |
+
<depends>
|
324 |
+
<ratetype>1</ratetype>
|
325 |
+
</depends>
|
326 |
+
<show_in_default>1</show_in_default>
|
327 |
+
<show_in_website>1</show_in_website>
|
328 |
+
<show_in_store>0</show_in_store>
|
329 |
+
</condition_name>
|
330 |
+
<export translate="label">
|
331 |
+
<label>Export table rates file</label>
|
332 |
+
<frontend_type>button</frontend_type>
|
333 |
+
<frontend_model>dpd/adminhtml_system_config_form_dpdparcelshopsexport</frontend_model>
|
334 |
+
<sort_order>8</sort_order>
|
335 |
+
<depends>
|
336 |
+
<ratetype>1</ratetype>
|
337 |
+
</depends>
|
338 |
+
<show_in_default>0</show_in_default>
|
339 |
+
<show_in_website>1</show_in_website>
|
340 |
+
<show_in_store>0</show_in_store>
|
341 |
+
<comment>Export your table rates configuration here</comment>
|
342 |
+
</export>
|
343 |
+
<import_parcelshops translate="label">
|
344 |
+
<label>Import table rates file</label>
|
345 |
+
<frontend_type>import</frontend_type>
|
346 |
+
<sort_order>9</sort_order>
|
347 |
+
<backend_model>dpd/adminhtml_system_config_backend_shipping_dpdparcelshops_tablerate</backend_model>
|
348 |
+
<depends>
|
349 |
+
<ratetype>1</ratetype>
|
350 |
+
</depends>
|
351 |
+
<show_in_default>0</show_in_default>
|
352 |
+
<show_in_website>1</show_in_website>
|
353 |
+
<show_in_store>0</show_in_store>
|
354 |
+
<comment>Upload your table rates configuration here. Refer to the manual for more information</comment>
|
355 |
+
</import_parcelshops>
|
356 |
+
<sallowspecific translate="label">
|
357 |
+
<label>Ship to countries</label>
|
358 |
+
<frontend_type>select</frontend_type>
|
359 |
+
<sort_order>10</sort_order>
|
360 |
+
<frontend_class>shipping-applicable-country</frontend_class>
|
361 |
+
<source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model>
|
362 |
+
<show_in_default>1</show_in_default>
|
363 |
+
<show_in_website>1</show_in_website>
|
364 |
+
<show_in_store>0</show_in_store>
|
365 |
+
<comment>Make DPD available in all countries or in specific</comment>
|
366 |
+
</sallowspecific>
|
367 |
+
<specificcountry translate="label">
|
368 |
+
<label>Allowed countries</label>
|
369 |
+
<frontend_type>multiselect</frontend_type>
|
370 |
+
<sort_order>11</sort_order>
|
371 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
372 |
+
<show_in_default>1</show_in_default>
|
373 |
+
<show_in_website>1</show_in_website>
|
374 |
+
<show_in_store>0</show_in_store>
|
375 |
+
<can_be_empty>0</can_be_empty>
|
376 |
+
<can_be_empty>1</can_be_empty>
|
377 |
+
<comment>Select one or more countries where dpd should be available for</comment>
|
378 |
+
</specificcountry>
|
379 |
+
<google_maps_api translate="label">
|
380 |
+
<label>Google Maps API</label>
|
381 |
+
<frontend_type>text</frontend_type>
|
382 |
+
<sort_order>12</sort_order>
|
383 |
+
<show_in_default>1</show_in_default>
|
384 |
+
<show_in_website>1</show_in_website>
|
385 |
+
<show_in_store>1</show_in_store>
|
386 |
+
<comment><![CDATA[<a href="https://developers.google.com/maps/documentation/javascript/tutorial?hl=nl#api_key" target="_blank">How to request an API key</a>]]></comment>
|
387 |
+
</google_maps_api>
|
388 |
+
<google_maps_width translate="label">
|
389 |
+
<label>Map width</label>
|
390 |
+
<frontend_type>text</frontend_type>
|
391 |
+
<sort_order>13</sort_order>
|
392 |
+
<show_in_default>1</show_in_default>
|
393 |
+
<show_in_website>1</show_in_website>
|
394 |
+
<show_in_store>1</show_in_store>
|
395 |
+
<comment>Width of the inline map (in px)</comment>
|
396 |
+
</google_maps_width>
|
397 |
+
<google_maps_height translate="label">
|
398 |
+
<label>Map height</label>
|
399 |
+
<frontend_type>text</frontend_type>
|
400 |
+
<sort_order>14</sort_order>
|
401 |
+
<show_in_default>1</show_in_default>
|
402 |
+
<show_in_website>1</show_in_website>
|
403 |
+
<show_in_store>1</show_in_store>
|
404 |
+
<comment>Height of the inline map (in px)</comment>
|
405 |
+
</google_maps_height>
|
406 |
+
<google_maps_maxpointers translate="label">
|
407 |
+
<label>Map - max num of shops</label>
|
408 |
+
<frontend_type>text</frontend_type>
|
409 |
+
<sort_order>15</sort_order>
|
410 |
+
<show_in_default>1</show_in_default>
|
411 |
+
<show_in_website>1</show_in_website>
|
412 |
+
<show_in_store>1</show_in_store>
|
413 |
+
<comment>Maximum number of Parcelshops to be put on the map</comment>
|
414 |
+
</google_maps_maxpointers>
|
415 |
+
<google_maps_display translate="label">
|
416 |
+
<label>Map presentation</label>
|
417 |
+
<frontend_type>select</frontend_type>
|
418 |
+
<frontend_type>select</frontend_type>
|
419 |
+
<source_model>dpd/system_config_source_display</source_model>
|
420 |
+
<sort_order>16</sort_order>
|
421 |
+
<show_in_default>1</show_in_default>
|
422 |
+
<show_in_website>1</show_in_website>
|
423 |
+
<show_in_store>1</show_in_store>
|
424 |
+
<comment>Show the map inline or as an overlay</comment>
|
425 |
+
</google_maps_display>
|
426 |
+
<google_maps_enable_list translate="label">
|
427 |
+
<label>Map list</label>
|
428 |
+
<frontend_type>select</frontend_type>
|
429 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
430 |
+
<sort_order>17</sort_order>
|
431 |
+
<show_in_default>1</show_in_default>
|
432 |
+
<show_in_website>1</show_in_website>
|
433 |
+
<show_in_store>1</show_in_store>
|
434 |
+
<comment>Show the list of ParcelShops to the right of the map</comment>
|
435 |
+
</google_maps_enable_list>
|
436 |
+
<custom_parcelshops_import translate="label">
|
437 |
+
<label>Custom ParcelShops - CSV</label>
|
438 |
+
<frontend_type>import</frontend_type>
|
439 |
+
<backend_model>dpd/adminhtml_system_config_backend_shipping_specialparcelshops</backend_model>
|
440 |
+
<sort_order>18</sort_order>
|
441 |
+
<show_in_default>0</show_in_default>
|
442 |
+
<show_in_website>1</show_in_website>
|
443 |
+
<show_in_store>0</show_in_store>
|
444 |
+
<comment>Contact DPD to get the CSV !</comment>
|
445 |
+
</custom_parcelshops_import>
|
446 |
+
<check_custom_parcelshops_import translate="label">
|
447 |
+
<label></label>
|
448 |
+
<frontend_type>button</frontend_type>
|
449 |
+
<frontend_model>dpd/adminhtml_system_config_form_availability</frontend_model>
|
450 |
+
<sort_order>19</sort_order>
|
451 |
+
<show_in_default>0</show_in_default>
|
452 |
+
<show_in_website>1</show_in_website>
|
453 |
+
<show_in_store>0</show_in_store>
|
454 |
+
</check_custom_parcelshops_import>
|
455 |
+
<special_parcelshop_icon translate="label">
|
456 |
+
<label>Custom ParcelShops - logo</label>
|
457 |
+
<frontend_type>image</frontend_type>
|
458 |
+
<backend_model>adminhtml/system_config_backend_image</backend_model>
|
459 |
+
<upload_dir config="system/filesystem/media" scope_info="1">dpd</upload_dir>
|
460 |
+
<base_url type="media" scope_info="1">dpd</base_url>
|
461 |
+
<sort_order>20</sort_order>
|
462 |
+
<show_in_default>1</show_in_default>
|
463 |
+
<show_in_website>1</show_in_website>
|
464 |
+
<show_in_store>1</show_in_store>
|
465 |
+
<comment>Upload your custom map logo (100x100 px)</comment>
|
466 |
+
</special_parcelshop_icon>
|
467 |
+
<google_maps_icon translate="label">
|
468 |
+
<label>Custom ParcelShops – map logo</label>
|
469 |
+
<frontend_type>image</frontend_type>
|
470 |
+
<backend_model>adminhtml/system_config_backend_image</backend_model>
|
471 |
+
<upload_dir config="system/filesystem/media" scope_info="1">dpd</upload_dir>
|
472 |
+
<base_url type="media" scope_info="1">dpd</base_url>
|
473 |
+
<sort_order>21</sort_order>
|
474 |
+
<show_in_default>1</show_in_default>
|
475 |
+
<show_in_website>1</show_in_website>
|
476 |
+
<show_in_store>1</show_in_store>Enabled
|
477 |
+
<comment>Map pointer image. (57x57 px)</comment>
|
478 |
+
</google_maps_icon>
|
479 |
+
</fields>
|
480 |
+
</dpdparcelshops>
|
481 |
+
</groups>
|
482 |
+
</carriers>
|
483 |
+
</sections>
|
484 |
+
</config>
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-install-0.0.1.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
// add quote attributes
|
13 |
+
|
14 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'dpd_selected', "boolean default '0'");
|
15 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'dpd_company', "varchar(255) null default ''");
|
16 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'dpd_city', "varchar(255) null default ''");
|
17 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'dpd_street', "varchar(255) null default ''");
|
18 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'dpd_zipcode', "varchar(255) null default ''");
|
19 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'dpd_country', "varchar(255) null default ''");
|
20 |
+
|
21 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.1-0.0.2.php
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
// add quote attributes
|
13 |
+
|
14 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'dpd_extra_info', "text null default ''");
|
15 |
+
|
16 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.2-0.0.3.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->run("
|
13 |
+
CREATE TABLE IF NOT EXISTS {$this->getTable('dpd_shipping_returnlabels')} (
|
14 |
+
`returnlabels_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
15 |
+
`date_created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
16 |
+
`label_number` varchar(255) NOT NULL DEFAULT '',
|
17 |
+
`label_pdf_url` varchar(255) NOT NULL,
|
18 |
+
`label_instructions_url` varchar(255) NOT NULL,
|
19 |
+
`order_id` int(11) NOT NULL,
|
20 |
+
PRIMARY KEY (`returnlabels_id`)
|
21 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
22 |
+
");
|
23 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'dpd_label_exported', "int(11) null");
|
24 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.3-0.0.4.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/shipment'), 'dpd_label_exported', "int(11) null");
|
13 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/shipment'), 'dpd_label_path', "varchar(255) null default ''");
|
14 |
+
$installer->getConnection()->dropColumn($installer->getTable('sales/order'), 'dpd_label_exported');
|
15 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.4-0.0.5.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'dpd_parcelshop_id', "varchar(255) null");
|
13 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'dpd_parcelshop_id', "varchar(255) null");
|
14 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'dpd_label_exported', "bool null default 0");
|
15 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.5-0.0.6.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'dpd_label_exists', "bool null default 0");
|
13 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.6-0.0.7.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/shipment'), 'dpd_tracking_url', "varchar(255) null default ''");
|
13 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.7-0.0.8.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->run("
|
13 |
+
CREATE TABLE IF NOT EXISTS {$this->getTable('dpd_shipping_specialparcelshops')} (
|
14 |
+
`specialparselshops_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
15 |
+
`parcelshop_delicom_id` varchar(255) NOT NULL,
|
16 |
+
`parcelshop_website_id` int(11) NULL,
|
17 |
+
`parcelshop_carrier_pudo_id` int(11) NULL,
|
18 |
+
`parcelshop_manager` varchar(255) NULL,
|
19 |
+
`parcelshop_pudo_name`varchar(255) NOT NULL,
|
20 |
+
`parcelshop_pudo_language`varchar(255) NOT NULL,
|
21 |
+
`parcelshop_country`varchar(255) NOT NULL,
|
22 |
+
`parcelshop_latitude`varchar(255) NOT NULL,
|
23 |
+
`parcelshop_longitude`varchar(255) NOT NULL,
|
24 |
+
`parcelshop_city_code`varchar(255) NULL,
|
25 |
+
`parcelshop_langue_1`varchar(255) NULL,
|
26 |
+
`parcelshop_address_1`varchar(255) NOT NULL,
|
27 |
+
`parcelshop_address_2`varchar(255) NULL,
|
28 |
+
`parcelshop_location_information`varchar(255) NULL,
|
29 |
+
`parcelshop_post_code`varchar(255) NOT NULL,
|
30 |
+
`parcelshop_town`varchar(255) NOT NULL,
|
31 |
+
`parcelshop_region`varchar(255) NULL,
|
32 |
+
`parcelshop_openinghours`text NULL,
|
33 |
+
PRIMARY KEY (`specialparselshops_id`)
|
34 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
35 |
+
");
|
36 |
+
|
37 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.8-0.0.9.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->run("CREATE TABLE `dpd_shipping_dpdclassic_tablerate` (
|
13 |
+
`pk` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key',
|
14 |
+
`website_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Website Id',
|
15 |
+
`dest_country_id` varchar(4) NOT NULL DEFAULT '0' COMMENT 'Destination coutry ISO/2 or ISO/3 code',
|
16 |
+
`dest_region_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Destination Region Id',
|
17 |
+
`dest_zip` varchar(10) NOT NULL DEFAULT '*' COMMENT 'Destination Post Code (Zip)',
|
18 |
+
`condition_name` varchar(20) NOT NULL COMMENT 'Rate Condition name',
|
19 |
+
`condition_value` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT 'Rate condition value',
|
20 |
+
`price` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT 'Price',
|
21 |
+
`cost` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT 'Cost',
|
22 |
+
PRIMARY KEY (`pk`),
|
23 |
+
UNIQUE KEY `D60821CDB2AFACEE1566CFC02D0D4CAA` (`website_id`,`dest_country_id`,`dest_region_id`,`dest_zip`,`condition_name`,`condition_value`)
|
24 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Dpdclassic Tablerate'");
|
25 |
+
$installer->endSetup();
|
app/code/community/DPD/Shipping/sql/dpd_setup/mysql4-upgrade-0.0.9-0.1.0.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PHPro
|
4 |
+
*
|
5 |
+
* @package DPD
|
6 |
+
* @subpackage Shipping
|
7 |
+
* @category Checkout
|
8 |
+
* @author PHPro (info@phpro.be)
|
9 |
+
*/
|
10 |
+
$installer = $this;
|
11 |
+
$installer->startSetup();
|
12 |
+
$installer->run("CREATE TABLE `dpd_shipping_dpdparcelshops_tablerate` (
|
13 |
+
`pk` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primary key',
|
14 |
+
`website_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Website Id',
|
15 |
+
`dest_country_id` varchar(4) NOT NULL DEFAULT '0' COMMENT 'Destination coutry ISO/2 or ISO/3 code',
|
16 |
+
`dest_region_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Destination Region Id',
|
17 |
+
`dest_zip` varchar(10) NOT NULL DEFAULT '*' COMMENT 'Destination Post Code (Zip)',
|
18 |
+
`condition_name` varchar(20) NOT NULL COMMENT 'Rate Condition name',
|
19 |
+
`condition_value` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT 'Rate condition value',
|
20 |
+
`price` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT 'Price',
|
21 |
+
`cost` decimal(12,4) NOT NULL DEFAULT '0.0000' COMMENT 'Cost',
|
22 |
+
PRIMARY KEY (`pk`),
|
23 |
+
UNIQUE KEY `D60821CDB2AFACEE1566CFC02D0D4CAA` (`website_id`,`dest_country_id`,`dest_region_id`,`dest_zip`,`condition_name`,`condition_value`)
|
24 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Dpdparcelshops Tablerate'");
|
25 |
+
$installer->endSetup();
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>dpdshipping</name>
|
4 |
-
<version>1.0.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
7 |
<channel>community</channel>
|
@@ -11,8 +11,8 @@
|
|
11 |
<notes>First release</notes>
|
12 |
<authors><author><name>PHPro</name><user>heremke</user><email>info@phpro.be</email></author></authors>
|
13 |
<date>2014-03-13</date>
|
14 |
-
<time>16:
|
15 |
-
<contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="dpd"><file name="shipping.xml" hash="489b47b14eb3bec23bbfd254fda398df"/></dir></dir><dir name="template"><dir name="dpd"><dir name="order"><dir name="view"><dir name="tab"><file name="returnlabels.phtml" hash="cc2f679da3a728fbbe1ddc510c04cdae"/></dir></dir></dir><dir name="system"><dir name="config"><file name="availability.phtml" hash="5f17246a65c243bf0c8c4dfea499578e"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="dpd_shipping.xml" hash="05f2c2afda6a6732ee49b77ed074a947"/></dir><dir name="template"><dir name="dpd"><file name="gmapsapi.phtml" hash="e0073b425f55c844918b5c83aea20b1b"/><file name="ordertracking.phtml" hash="2273e469b6f129b2f174424ddebe83a3"/><file name="parcelshop.phtml" hash="9bd08955732d22e70e917c4189ccdb97"/><file name="parcelshoplink.phtml" hash="3a19aa648c56399d07aeeb803764719a"/><file name="parcelshopselected.phtml" hash="fe1e5d1e2a80b5f8f632946e2eca346a"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="DPD_Shipping.xml" hash="2014a79baf3f800f46222ceb11310d59"/></dir></target><target name="magelocale"><dir name="en_US"><file name="DPD_Shipping.csv" hash="0e6a08a0cb4f974d38a93b6af7d4718b"/></dir></target><target name="mageweb"><dir name="js"><dir name="dpd"><file name="shipping.js" hash="23e9280a056a11bdcfcfc922656705da"/><dir name="window"><file name="shipping.js" hash="7ad8ea9367757797676269a40ec32067"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir><dir name="dpd"><file name="shipping.css" hash="b37446a478b7cce62cf34279ee962d36"/><file name="window.css" hash="b0b31c19dd3b52e7408df6ab53e25dcd"/></dir></dir><file name="widgets.css" hash="61d471e890fee29b85f429f8d7a3a2e6"/></dir><dir name="images"><file name="calendar.gif" hash="b1468e5239504974c689eea5d93f86d4"/><dir><dir name="catalog"><dir name="product"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><dir name="centinel"><file name="sc_learn_62x34.gif" hash="059ec6c3eecea97b3f70a2e2d6ceb911"/><file name="v_activate_steps.gif" hash="005312b14c6aed41e8a47c4acaac7c1a"/><file name="vbv_ltbg_71x57.gif" hash="2b0bcd07251fcaafd46e7ce77ba821a9"/></dir><dir name="cookies"><file name="firefox.png" hash="425e1b2ddc38c0bba431fb54357c66a4"/><file name="ie6-1.gif" hash="5c27700e245762bc89ed8c3ee7183f21"/><file name="ie6-2.gif" hash="d8c55e15e1f711e5c259300a9c19551b"/><file name="ie7-1.gif" hash="d61edcc8a514a3c81ea116b7d38ddcb6"/><file name="ie7-2.gif" hash="0526a654e94c54866cad977c0a47d3e5"/><file name="ie7-3.gif" hash="4fb142def3f6cfd8d8d23e1315528a1e"/><file name="ie7-4.gif" hash="575c276231c6a91e28935ec98215e146"/><file name="ie7-5.gif" hash="3ae5fcc11fe89da91674d183872337c1"/><file name="ie7-6.gif" hash="95a4981a41785a8cde273c9b2edbfbc7"/><file name="opera.png" hash="34070d92180d4ee0e37b1dd8bb731cd7"/></dir><dir name="dpd"><file name="ajax-loader.gif" hash="f3dbc538b63d07156155acf0631ae375"/><file name="button_close.png" hash="040640376fe4f699f97f0d59b64e79cf"/><file name="dpd_parcelshop_logo.png" hash="43e479d6bb23dea74f2ec6ff8a1e390c"/><file name="icon_info.gif" hash="4c85c6937f19e50c5e871c2699e99bee"/><file name="icon_info.png" hash="53faeafe236c775f54752bc2008efa97"/><file name="icon_parcelshop.png" hash="202e38024b9f41483285a7b2d34d2a56"/><file name="icon_parcelshop_shadow.png" hash="263ee734ba6bb38060fd47a5b3de64ae"/><file name="icon_route.png" hash="fe07947b6f600723e682f2fcb8fca88f"/></dir><dir name="moneybookers"><file name="banner_120_de.gif" hash="74815117bf378543e5b3496bb5bc4e8a"/><file name="banner_120_de.png" hash="6c3f708fcb6dac92e53472d4c2246c68"/><file name="banner_120_dk.gif" hash="2106bd994d188d40474bf2a2e8d62a8d"/><file name="banner_120_fr.gif" hash="a84241eef7bc38fb38567e7aa8ca245a"/><file name="banner_120_fr.png" hash="8994d1dc3b4f5c9e5efc67ce3f9f55a9"/><file name="banner_120_int.gif" hash="e23ddcf71e15f0a9300062ef9cdea512"/><file name="banner_120_int.png" hash="f9dfbc26041e52b34eea65348707d64f"/><file name="banner_120_pl.gif" hash="44313c7d27cdcf59c2f66708c6c5abd5"/><file name="banner_120_pl.png" hash="67d3385f93bc9113880305ee7c7da9de"/><file name="banner_120_sp.gif" hash="a003ed8db63620672ae945682b1e1e39"/><file name="banner_120_sp.png" hash="f9c4a653d6814ab3f8c535da706f5f77"/><file name="moneybookers_acc.png" hash="a3e639a68fafdffaca81e91985127735"/><file name="moneybookers_csi.gif" hash="4eec4ed7c494d01d518a3c6c691128e9"/><file name="moneybookers_did.gif" hash="6a3a3365894e9cdb199647a5b74ba35b"/><file name="moneybookers_dnk.gif" hash="7d4b8d27784f8a6fa6ef81c4e911831b"/><file name="moneybookers_ebt.gif" hash="9911d8cc223e7f3d9ec12f50c280ec61"/><file name="moneybookers_ent.gif" hash="704e9551ed4aff82b67114242b9fba1a"/><file name="moneybookers_gcb.gif" hash="e2e7c0f501e5ab0136f859ca5f57abc2"/><file name="moneybookers_gir.gif" hash="f16e949bc60bbd812f803d5e377d47f6"/><file name="moneybookers_idl.gif" hash="fe0ad1efc12d43df6c9ff3ffdd9dd59b"/><file name="moneybookers_lsr.gif" hash="58cdadfa20b6d37aeaa19e50995e4baf"/><file name="moneybookers_mae.gif" hash="4d4b5f0cf3377939c7738fc7e416d25f"/><file name="moneybookers_npy.gif" hash="01242c5ad7bc667e7493b550b6397fab"/><file name="moneybookers_obt_de.png" hash="ce44fd2974b8d279401778292e2c4484"/><file name="moneybookers_obt_dk.png" hash="2985e8cb472d1886d584fa31d56bee92"/><file name="moneybookers_obt_ee.png" hash="cb186be1c7595544f61d3737c7bf85aa"/><file name="moneybookers_obt_en.png" hash="eee098a06e3ea34f33e276724b084774"/><file name="moneybookers_obt_fl.png" hash="6c3766df052d875ce399e62ad8a435f8"/><file name="moneybookers_obt_lt.png" hash="adf61f248fc6d5985840db3e0c23391e"/><file name="moneybookers_obt_lv.png" hash="4e7f16b4988ea30f049942d4dcdb5f78"/><file name="moneybookers_obt_pl.png" hash="fb2c43c18ba73d390e5b5f5261261f4a"/><file name="moneybookers_obt_se.png" hash="9028412e9c3f25d114bf40bb2049d225"/><file name="moneybookers_pli.gif" hash="93989e85caff760af7a61838db0300bf"/><file name="moneybookers_psp.gif" hash="7abffc2246f172625be2ce31f4315cb2"/><file name="moneybookers_pwy.gif" hash="b4a0b9db9a031855e6e3899592012fae"/><file name="moneybookers_sft.gif" hash="e9e774163c99a8ab4deb18d37feaf658"/><file name="moneybookers_so2.gif" hash="9911d8cc223e7f3d9ec12f50c280ec61"/><file name="moneybookers_wlt.gif" hash="4b9cbc5aa5c32f3015ce7bec98da2670"/></dir><dir name="widgets"><file name="i_block-list.gif" hash="fe8424127ecbe4b0d893bcf6f253dc1a"/><file name="i_widget-link.gif" hash="1bf753578171f147f0203e7b13bdd0c4"/><file name="i_widget-new.gif" hash="a75377ffed51b711cbc608ffaa1a2e7d"/></dir><dir name="xmlconnect"><dir name="catalog"><dir name="category"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><file name="tab_account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="tab_cart.png" hash="9055ba76e256a51d3fee53a8c41d5226"/><file name="tab_home.png" hash="07d0af93e167b9366d3d4fb3d6cdb31c"/><file name="tab_more.png" hash="b9fc21feb8d7655bc9c2985c37b0de2f"/><file name="tab_page.png" hash="ca05dbc42f944b8d4255f6675f6dd93a"/><file name="tab_search.png" hash="25e880eb2a4d06828e2e1c3f32d22400"/><file name="tab_shop.png" hash="fe602fc2e7093efef5ecc0b027a32d91"/></dir></dir><file name="cvv.gif" hash="83cdd38bf110b0f9c52fe84b56f45298"/><file name="fam_book_open.png" hash="0ba89b9fbe7e88d4c6896ed0a1f495aa"/><file name="reload.png" hash="84cc4883f78ef850814ea9b53989b2a7"/></dir></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>dpdshipping</name>
|
4 |
+
<version>1.0.1</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
7 |
<channel>community</channel>
|
11 |
<notes>First release</notes>
|
12 |
<authors><author><name>PHPro</name><user>heremke</user><email>info@phpro.be</email></author></authors>
|
13 |
<date>2014-03-13</date>
|
14 |
+
<time>16:48:42</time>
|
15 |
+
<contents><target name="magecommunity"><dir name="DPD"><dir name="Shipping"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><dir name="Grid"><dir name="Renderer"><file name="Shippingmethod.php" hash="b70aad5bba5c4eb5cc897dcc12e3c199"/></dir></dir><file name="Grid.php" hash="e710e55b9dc609951efd0361a940f045"/><dir name="View"><dir name="Tab"><file name="Returnlabels.php" hash="7917e9cd5107154a83561e9a399de876"/></dir></dir></dir><file name="Order.php" hash="3bf3e1fb85abbfe21a051442920ab479"/></dir><dir name="Shipping"><dir name="Carrier"><dir name="Dpdclassic"><dir name="Tablerate"><file name="Grid.php" hash="e7ac634260c5f6d3c70b5f9c8875f265"/></dir></dir><dir name="Dpdparcelshops"><dir name="Tablerate"><file name="Grid.php" hash="dfe9582089ac0729d66853415a5e57f3"/></dir></dir></dir></dir><dir name="System"><dir name="Config"><dir name="Form"><file name="Availability.php" hash="7883b99fbec71aa29486a81065476b12"/><file name="Dpdclassicexport.php" hash="b8bb24d799599844e8a9174f7dc4606c"/><file name="Dpdparcelshopsexport.php" hash="a5facc313e5249cc9d73249b40956a49"/></dir></dir></dir></dir><dir name="Carrier"><file name="Parcelshop.php" hash="0ea6d85c21c397e23997882d32f3489f"/></dir></dir><dir name="Helper"><file name="Data.php" hash="43713611d5e2b9da04d1d3cfddaf5bb2"/></dir><dir name="Model"><dir name="Adminhtml"><file name="Dpdgrid.php" hash="365d594e11113cca64ac3442a8946951"/><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Shipping"><dir name="Dpdclassic"><file name="Tablerate.php" hash="2448a6974c41d4361a1125c7c26d02a9"/></dir><dir name="Dpdparcelshops"><file name="Tablerate.php" hash="259c9918f4c2e29a0d8478409da879e4"/></dir><file name="Specialparcelshops.php" hash="67d996d145f0206e9fab5954bf6b0063"/></dir></dir></dir></dir></dir><dir name="Carrier"><file name="Dpdclassic.php" hash="04fc4d22d9bca9ff6b20c2d824f203f4"/><file name="Dpdparcelshops.php" hash="85c57bb4f50a57d853079a6c1d949bb5"/></dir><dir name="Dpdclassic"><file name="Tablerate.php" hash="9cec2a0a694a1af5fc44fe9cbf3b8283"/></dir><dir name="Dpdparcelshops"><file name="Tablerate.php" hash="be1dfb643e62f3ea0a6c527b6ef88ca9"/></dir><dir name="Mysql4"><dir name="Dpdclassic"><dir name="Tablerate"><file name="Collection.php" hash="8eadb25daf3962f3adba71d380129683"/></dir><file name="Tablerate.php" hash="b87171d15d926e416bc542c544e802a8"/></dir><dir name="Dpdparcelshops"><dir name="Tablerate"><file name="Collection.php" hash="bbfbfdcb550a97195e2f13e582d96d59"/></dir><file name="Tablerate.php" hash="4a75de42a54b2e8ffa01ec8ed28d027e"/></dir><dir name="Returnlabels"><file name="Collection.php" hash="80fe36b9f31d150f02aebb64a769fc5d"/></dir><file name="Returnlabels.php" hash="1d75562904a21b572535483d2d086cdd"/><dir name="Specialparcelshops"><file name="Collection.php" hash="cd7d740fa52301b798ace547820473ef"/></dir><file name="Specialparcelshops.php" hash="64dd72846b549e7fd3a73e96c3542b54"/></dir><file name="Observer.php" hash="0e80c70924be85308ff8754abc142ce5"/><file name="Returnlabels.php" hash="5fa12afaf88cecc73cbd3d0f3163c6f2"/><file name="Specialparcelshops.php" hash="d1f2b72ffab70117fcd2b9f2820cd028"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Display.php" hash="af239a08df6796995e0c580d59d88c46"/><file name="Paperformat.php" hash="e0c638d918566a8b868cca06a459627b"/><file name="Ratetypes.php" hash="1fdeeb0624939d674d625e2c664f907c"/><file name="Weightunit.php" hash="857dd1b887f0f8485616107e6d66db01"/></dir></dir></dir><file name="Webservice.php" hash="0953cd4e5d2fde3a9011846ab4f07afa"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="DpdconfigController.php" hash="c04b8c67343fcb446948dde216cb7052"/><file name="DpdorderController.php" hash="f95f8961942ca9bdab1b1c3ffcfdd09f"/></dir><file name="AjaxController.php" hash="a5c976d9f134d4184466e46e327bfc36"/></dir><dir name="etc"><file name="adminhtml.xml" hash="9b48a3489a485e86c8f2720a7a4380d8"/><file name="config.xml" hash="b5aa2de0450a569a6c90c94c1a93429e"/><file name="system.xml" hash="c26cb40c24f62d5acef33ee41166a263"/></dir><dir name="sql"><dir name="dpd_setup"><file name="mysql4-install-0.0.1.php" hash="3dc22f7bf34a98be9b7f746e21832988"/><file name="mysql4-upgrade-0.0.1-0.0.2.php" hash="1d5467d1cc3b7ed2019bd6eb05aa1f08"/><file name="mysql4-upgrade-0.0.2-0.0.3.php" hash="a1a30b8234ef4b8cc26e220f559af25f"/><file name="mysql4-upgrade-0.0.3-0.0.4.php" hash="ee870d8941ff7f5565c148e6a26056bb"/><file name="mysql4-upgrade-0.0.4-0.0.5.php" hash="2d4632b58e315f3de7d630d41bd2d3f9"/><file name="mysql4-upgrade-0.0.5-0.0.6.php" hash="e75ee16a3c996fc9204a52f6a130f1c8"/><file name="mysql4-upgrade-0.0.6-0.0.7.php" hash="80226a27f1a62aeebef355490e89613a"/><file name="mysql4-upgrade-0.0.7-0.0.8.php" hash="45fbb66b1657ca6455d0348da94b824d"/><file name="mysql4-upgrade-0.0.8-0.0.9.php" hash="3fc70e7ff7256337074c991ed671a5a3"/><file name="mysql4-upgrade-0.0.9-0.1.0.php" hash="827c41a4a56bba13927089ab8b0841b8"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="dpd"><file name="shipping.xml" hash="489b47b14eb3bec23bbfd254fda398df"/></dir></dir><dir name="template"><dir name="dpd"><dir name="order"><dir name="view"><dir name="tab"><file name="returnlabels.phtml" hash="cc2f679da3a728fbbe1ddc510c04cdae"/></dir></dir></dir><dir name="system"><dir name="config"><file name="availability.phtml" hash="5f17246a65c243bf0c8c4dfea499578e"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="dpd_shipping.xml" hash="05f2c2afda6a6732ee49b77ed074a947"/></dir><dir name="template"><dir name="dpd"><file name="gmapsapi.phtml" hash="e0073b425f55c844918b5c83aea20b1b"/><file name="ordertracking.phtml" hash="2273e469b6f129b2f174424ddebe83a3"/><file name="parcelshop.phtml" hash="9bd08955732d22e70e917c4189ccdb97"/><file name="parcelshoplink.phtml" hash="3a19aa648c56399d07aeeb803764719a"/><file name="parcelshopselected.phtml" hash="fe1e5d1e2a80b5f8f632946e2eca346a"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="DPD_Shipping.xml" hash="2014a79baf3f800f46222ceb11310d59"/></dir></target><target name="magelocale"><dir name="en_US"><file name="DPD_Shipping.csv" hash="0e6a08a0cb4f974d38a93b6af7d4718b"/></dir></target><target name="mageweb"><dir name="js"><dir name="dpd"><file name="shipping.js" hash="23e9280a056a11bdcfcfc922656705da"/><dir name="window"><file name="shipping.js" hash="7ad8ea9367757797676269a40ec32067"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir><dir name="dpd"><file name="shipping.css" hash="b37446a478b7cce62cf34279ee962d36"/><file name="window.css" hash="b0b31c19dd3b52e7408df6ab53e25dcd"/></dir></dir><file name="widgets.css" hash="61d471e890fee29b85f429f8d7a3a2e6"/></dir><dir name="images"><file name="calendar.gif" hash="b1468e5239504974c689eea5d93f86d4"/><dir><dir name="catalog"><dir name="product"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><dir name="centinel"><file name="sc_learn_62x34.gif" hash="059ec6c3eecea97b3f70a2e2d6ceb911"/><file name="v_activate_steps.gif" hash="005312b14c6aed41e8a47c4acaac7c1a"/><file name="vbv_ltbg_71x57.gif" hash="2b0bcd07251fcaafd46e7ce77ba821a9"/></dir><dir name="cookies"><file name="firefox.png" hash="425e1b2ddc38c0bba431fb54357c66a4"/><file name="ie6-1.gif" hash="5c27700e245762bc89ed8c3ee7183f21"/><file name="ie6-2.gif" hash="d8c55e15e1f711e5c259300a9c19551b"/><file name="ie7-1.gif" hash="d61edcc8a514a3c81ea116b7d38ddcb6"/><file name="ie7-2.gif" hash="0526a654e94c54866cad977c0a47d3e5"/><file name="ie7-3.gif" hash="4fb142def3f6cfd8d8d23e1315528a1e"/><file name="ie7-4.gif" hash="575c276231c6a91e28935ec98215e146"/><file name="ie7-5.gif" hash="3ae5fcc11fe89da91674d183872337c1"/><file name="ie7-6.gif" hash="95a4981a41785a8cde273c9b2edbfbc7"/><file name="opera.png" hash="34070d92180d4ee0e37b1dd8bb731cd7"/></dir><dir name="dpd"><file name="ajax-loader.gif" hash="f3dbc538b63d07156155acf0631ae375"/><file name="button_close.png" hash="040640376fe4f699f97f0d59b64e79cf"/><file name="dpd_parcelshop_logo.png" hash="43e479d6bb23dea74f2ec6ff8a1e390c"/><file name="icon_info.gif" hash="4c85c6937f19e50c5e871c2699e99bee"/><file name="icon_info.png" hash="53faeafe236c775f54752bc2008efa97"/><file name="icon_parcelshop.png" hash="202e38024b9f41483285a7b2d34d2a56"/><file name="icon_parcelshop_shadow.png" hash="263ee734ba6bb38060fd47a5b3de64ae"/><file name="icon_route.png" hash="fe07947b6f600723e682f2fcb8fca88f"/></dir><dir name="moneybookers"><file name="banner_120_de.gif" hash="74815117bf378543e5b3496bb5bc4e8a"/><file name="banner_120_de.png" hash="6c3f708fcb6dac92e53472d4c2246c68"/><file name="banner_120_dk.gif" hash="2106bd994d188d40474bf2a2e8d62a8d"/><file name="banner_120_fr.gif" hash="a84241eef7bc38fb38567e7aa8ca245a"/><file name="banner_120_fr.png" hash="8994d1dc3b4f5c9e5efc67ce3f9f55a9"/><file name="banner_120_int.gif" hash="e23ddcf71e15f0a9300062ef9cdea512"/><file name="banner_120_int.png" hash="f9dfbc26041e52b34eea65348707d64f"/><file name="banner_120_pl.gif" hash="44313c7d27cdcf59c2f66708c6c5abd5"/><file name="banner_120_pl.png" hash="67d3385f93bc9113880305ee7c7da9de"/><file name="banner_120_sp.gif" hash="a003ed8db63620672ae945682b1e1e39"/><file name="banner_120_sp.png" hash="f9c4a653d6814ab3f8c535da706f5f77"/><file name="moneybookers_acc.png" hash="a3e639a68fafdffaca81e91985127735"/><file name="moneybookers_csi.gif" hash="4eec4ed7c494d01d518a3c6c691128e9"/><file name="moneybookers_did.gif" hash="6a3a3365894e9cdb199647a5b74ba35b"/><file name="moneybookers_dnk.gif" hash="7d4b8d27784f8a6fa6ef81c4e911831b"/><file name="moneybookers_ebt.gif" hash="9911d8cc223e7f3d9ec12f50c280ec61"/><file name="moneybookers_ent.gif" hash="704e9551ed4aff82b67114242b9fba1a"/><file name="moneybookers_gcb.gif" hash="e2e7c0f501e5ab0136f859ca5f57abc2"/><file name="moneybookers_gir.gif" hash="f16e949bc60bbd812f803d5e377d47f6"/><file name="moneybookers_idl.gif" hash="fe0ad1efc12d43df6c9ff3ffdd9dd59b"/><file name="moneybookers_lsr.gif" hash="58cdadfa20b6d37aeaa19e50995e4baf"/><file name="moneybookers_mae.gif" hash="4d4b5f0cf3377939c7738fc7e416d25f"/><file name="moneybookers_npy.gif" hash="01242c5ad7bc667e7493b550b6397fab"/><file name="moneybookers_obt_de.png" hash="ce44fd2974b8d279401778292e2c4484"/><file name="moneybookers_obt_dk.png" hash="2985e8cb472d1886d584fa31d56bee92"/><file name="moneybookers_obt_ee.png" hash="cb186be1c7595544f61d3737c7bf85aa"/><file name="moneybookers_obt_en.png" hash="eee098a06e3ea34f33e276724b084774"/><file name="moneybookers_obt_fl.png" hash="6c3766df052d875ce399e62ad8a435f8"/><file name="moneybookers_obt_lt.png" hash="adf61f248fc6d5985840db3e0c23391e"/><file name="moneybookers_obt_lv.png" hash="4e7f16b4988ea30f049942d4dcdb5f78"/><file name="moneybookers_obt_pl.png" hash="fb2c43c18ba73d390e5b5f5261261f4a"/><file name="moneybookers_obt_se.png" hash="9028412e9c3f25d114bf40bb2049d225"/><file name="moneybookers_pli.gif" hash="93989e85caff760af7a61838db0300bf"/><file name="moneybookers_psp.gif" hash="7abffc2246f172625be2ce31f4315cb2"/><file name="moneybookers_pwy.gif" hash="b4a0b9db9a031855e6e3899592012fae"/><file name="moneybookers_sft.gif" hash="e9e774163c99a8ab4deb18d37feaf658"/><file name="moneybookers_so2.gif" hash="9911d8cc223e7f3d9ec12f50c280ec61"/><file name="moneybookers_wlt.gif" hash="4b9cbc5aa5c32f3015ce7bec98da2670"/></dir><dir name="widgets"><file name="i_block-list.gif" hash="fe8424127ecbe4b0d893bcf6f253dc1a"/><file name="i_widget-link.gif" hash="1bf753578171f147f0203e7b13bdd0c4"/><file name="i_widget-new.gif" hash="a75377ffed51b711cbc608ffaa1a2e7d"/></dir><dir name="xmlconnect"><dir name="catalog"><dir name="category"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><file name="tab_account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="tab_cart.png" hash="9055ba76e256a51d3fee53a8c41d5226"/><file name="tab_home.png" hash="07d0af93e167b9366d3d4fb3d6cdb31c"/><file name="tab_more.png" hash="b9fc21feb8d7655bc9c2985c37b0de2f"/><file name="tab_page.png" hash="ca05dbc42f944b8d4255f6675f6dd93a"/><file name="tab_search.png" hash="25e880eb2a4d06828e2e1c3f32d22400"/><file name="tab_shop.png" hash="fe602fc2e7093efef5ecc0b027a32d91"/></dir></dir><file name="cvv.gif" hash="83cdd38bf110b0f9c52fe84b56f45298"/><file name="fam_book_open.png" hash="0ba89b9fbe7e88d4c6896ed0a1f495aa"/><file name="reload.png" hash="84cc4883f78ef850814ea9b53989b2a7"/></dir></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|