Ced_LayBuy - Version 2.1.8.4

Version Notes

1.New secure communication protocal.

Download this release

Release Info

Developer Warrin
Extension Ced_LayBuy
Version 2.1.8.4
Comparing to
See all releases


Code changes from version 2.1.8.3 to 2.1.8.4

Files changed (31) hide show
  1. app/code/local/Ced/LayBuy/Block/Express/Layform.php +43 -0
  2. app/code/local/Ced/LayBuy/Block/Express/Layshortcut.php +28 -0
  3. app/code/local/Ced/LayBuy/Block/Express/Redirect.php +55 -0
  4. app/code/local/Ced/LayBuy/Block/Express/Review.php +259 -0
  5. app/code/local/Ced/LayBuy/Block/Express/Review/Billing.php +59 -0
  6. app/code/local/Ced/LayBuy/Block/Express/Review/Details.php +60 -0
  7. app/code/local/Ced/LayBuy/Block/Express/Review/Shipping.php +53 -0
  8. app/code/local/Ced/LayBuy/Block/Payment/Info.php +63 -0
  9. app/code/local/Ced/LayBuy/Helper/Data.php +25 -3
  10. app/code/local/Ced/LayBuy/Model/Abstract.php +168 -0
  11. app/code/local/Ced/LayBuy/Model/Config.php +1419 -0
  12. app/code/local/Ced/LayBuy/Model/Express.php +771 -0
  13. app/code/local/Ced/LayBuy/Model/Laybuyresp.php +12 -0
  14. app/code/local/Ced/LayBuy/Model/Mysql4/Laybuyresp.php +11 -0
  15. app/code/local/Ced/LayBuy/Model/Mysql4/Laybuyresp/Collection.php +37 -0
  16. app/code/local/Ced/LayBuy/Model/Mysql4/Region/Collection.php +50 -0
  17. app/code/local/Ced/LayBuy/Model/Pro.php +484 -0
  18. app/code/local/Ced/LayBuy/controllers/ExpressController.php +1841 -0
  19. app/code/local/Ced/LayBuy/etc/config.xml +213 -189
  20. app/code/local/Ced/LayBuy/etc/system.xml +296 -278
  21. app/code/local/Ced/LayBuy/sql/laybuy_setup/mysql4-upgrade-1.0.0-1.0.1.php +16 -0
  22. app/design/frontend/base/default/layout/laybuy.xml +81 -0
  23. app/design/frontend/base/default/template/laybuy/express/extraexpress.phtml +154 -0
  24. app/design/frontend/base/default/template/laybuy/express/layshortcut.phtml +41 -0
  25. app/design/frontend/base/default/template/laybuy/express/layshortcut1.phtml +17 -0
  26. app/design/frontend/base/default/template/laybuy/express/review.phtml +176 -0
  27. app/design/frontend/base/default/template/laybuy/express/review/address.phtml +146 -0
  28. app/design/frontend/base/default/template/laybuy/express/review/details.phtml +64 -0
  29. app/design/frontend/base/default/template/laybuy/express/review/shipping/method.phtml +53 -0
  30. package.xml +6 -7
  31. skin/frontend/base/default/images/laybuy/closeBtn.png +0 -0
app/code/local/Ced/LayBuy/Block/Express/Layform.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ced_LayBuy_Block_Express_Layform extends Mage_Core_Block_Template
3
+ {
4
+ protected $_storeId = null;
5
+
6
+ public function getStoreId(){
7
+ if(empty($this->_storeId)){
8
+ $this->_storeId = Mage::app()->getStore()->getId();
9
+ }
10
+ return $this->_storeId;
11
+ }
12
+
13
+ /**
14
+ * Block construction. Set block template.
15
+ */
16
+ protected function _construct()
17
+ {
18
+ //parent::_construct();
19
+
20
+ $laybuyMark = Mage::getConfig()->getBlockClassName('core/template');
21
+ $laybuyMark = new $laybuyMark;
22
+ //$laybuyMark->setTemplate('laybuy/form/laybuy.phtml')
23
+ //->setLayBuyTitle(Mage::helper('laybuy')->__('A recurring payment solution'))
24
+ //->setPaymentAcceptanceMarkSrc('https://lay-buys.com/gateway/LAY-BUY.png')
25
+ //->setPaymentAcceptanceMarkHref('https://lay-buys.com/');
26
+ $note = 'Please Choose Your Payment Plan';
27
+ $this->setTemplate('laybuy/express/extraexpress.phtml')
28
+ ->setMethodTitle('')
29
+ ->setExtraMessage('<b>'.$this->__('%s',$note).'</b>');
30
+ //->setMethodLabelAfterHtml($laybuyMark->toHtml());
31
+ }
32
+
33
+ public function getArray($type){
34
+ $totals = Mage::getSingleton('checkout/session')->getQuote()->getTotals();
35
+ $grandtotal = round($totals["grand_total"]->getValue());
36
+ return Mage::getModel('laybuy/report')->getArray($type,$grandtotal,$this->getStoreId());
37
+ }
38
+
39
+ public function getConfigData($field){
40
+ return Mage::getStoreConfig('payment/laybuy/'.$field,$this->getStoreId());
41
+ }
42
+
43
+ }
app/code/local/Ced/LayBuy/Block/Express/Layshortcut.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ced_LayBuy_Block_Express_Layshortcut extends Mage_Core_Block_Template
3
+ {
4
+ const POSITION_BEFORE = 'before';
5
+ const POSITION_AFTER = 'after';
6
+ /**
7
+ * Check is "OR" label position before shortcut
8
+ *
9
+ * @return bool
10
+ */
11
+ public function isOrPositionBefore()
12
+ {
13
+ return ($this->getIsInCatalogProduct() && !$this->getShowOrPosition())
14
+ || ($this->getShowOrPosition() && $this->getShowOrPosition() == self::POSITION_BEFORE);
15
+
16
+ }
17
+
18
+ /**
19
+ * Check is "OR" label position after shortcut
20
+ *
21
+ * @return bool
22
+ */
23
+ public function isOrPositionAfter()
24
+ {
25
+ return (!$this->getIsInCatalogProduct() && !$this->getShowOrPosition())
26
+ || ($this->getShowOrPosition() && $this->getShowOrPosition() == self::POSITION_AFTER);
27
+ }
28
+ }
app/code/local/Ced/LayBuy/Block/Express/Redirect.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Lay-Buys
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Ced
22
+ * @package Ced_LayBuy
23
+ * @author Asheesh Singh<asheeshsingh@cedcoss.com>
24
+ * @copyright Copyright LAY-BUYS (2011). (http://lay-buys.com/)
25
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
26
+ */
27
+ class Ced_LayBuy_Block_Express_Redirect extends Mage_Core_Block_Abstract
28
+ {
29
+
30
+ protected function _toHtml()
31
+ {
32
+ $redirectURL="http://lay-buys.com/expressgateway/";
33
+ $session = Mage::getSingleton('checkout/session');
34
+ $session->setLayBuyStandardQuoteId($session->getQuoteId());
35
+ if ($token=$this->getData('token')) {
36
+ $session->setLayBuyToken($token);
37
+ $redirectURL .= '?TOKEN='.$token;
38
+ $html = '<html><body>';
39
+ $html.= $this->__('You will be redirected to the PayPal website in a few seconds.');
40
+ $html.= '<br><input type="button" onClick="window.location=\''.$redirectURL.'\' " value="'.$this->__('Click here if you are not redirected within 10 seconds...').'" />';
41
+ $html.= '<script type="text/javascript">setTimeout(\'window.location="'.$redirectURL.'"\',1000);</script>';
42
+ $html.= '</body></html>';
43
+ }else{
44
+ $html = '<html><body>';
45
+ $html.= $this->__('You will be redirected to the PayPal website in a few seconds.');
46
+ $html.= '<br><input type="button" onClick="window.location=window.location;" value="'.$this->__('Click here if you are not redirected within 10 seconds...').'" />';
47
+ $html.= '<script type="text/javascript">setTimeout("window.location=window.location;",1000);</script>';
48
+ $html.= '</body></html>';
49
+ }
50
+
51
+
52
+
53
+ return $html;
54
+ }
55
+ }
app/code/local/Ced/LayBuy/Block/Express/Review.php ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Paypal
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Paypal Express Onepage checkout block
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Paypal
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Ced_LayBuy_Block_Express_Review extends Mage_Core_Block_Template
35
+ {
36
+ /**
37
+ * @var Mage_Sales_Model_Quote
38
+ */
39
+ protected $_quote;
40
+
41
+ /**
42
+ * Currently selected shipping rate
43
+ *
44
+ * @var Mage_Sales_Model_Quote_Address_Rate
45
+ */
46
+ protected $_currentShippingRate = null;
47
+
48
+ /**
49
+ * Paypal action prefix
50
+ *
51
+ * @var string
52
+ */
53
+ protected $_paypalActionPrefix = 'paypal';
54
+
55
+ /**
56
+ * Quote object setter
57
+ *
58
+ * @param Mage_Sales_Model_Quote $quote
59
+ * @return Mage_Paypal_Block_Express_Review
60
+ */
61
+ public function setQuote(Mage_Sales_Model_Quote $quote)
62
+ {
63
+ $this->_quote = $quote;
64
+ return $this;
65
+ }
66
+ public function getPlaceOrderUrl(){
67
+ $url="";
68
+ $url=Mage::getUrl('laybuy/express/placeOrder');
69
+ return $url;
70
+
71
+ }
72
+ public function getUpdateShippingMethodsUrl(){
73
+ $url="";
74
+ $url=Mage::getUrl('laybuy/express/updateShippingMethods');
75
+ return $url;
76
+
77
+ }
78
+ public function getUpdateOrderSubmitUrl(){
79
+ $url="";
80
+ $url=Mage::getUrl('laybuy/express/updateOrder');
81
+ return $url;
82
+
83
+ }
84
+
85
+
86
+ /**
87
+ * Return quote billing address
88
+ *
89
+ * @return Mage_Sales_Model_Quote_Address
90
+ */
91
+ public function getBillingAddress()
92
+ {
93
+ return $this->_quote->getBillingAddress();
94
+ }
95
+
96
+ /**
97
+ * Return quote shipping address
98
+ *
99
+ * @return Mage_Sales_Model_Quote_Address
100
+ */
101
+ public function getShippingAddress()
102
+ {
103
+ if ($this->_quote->getIsVirtual()) {
104
+ return false;
105
+ }
106
+ return $this->_quote->getShippingAddress();
107
+ }
108
+
109
+ /**
110
+ * Get HTML output for specified address
111
+ *
112
+ * @param Mage_Sales_Model_Quote_Address
113
+ * @return string
114
+ */
115
+ public function renderAddress($address)
116
+ {
117
+ return $address->getFormated(true);
118
+ }
119
+
120
+ /**
121
+ * Return carrier name from config, base on carrier code
122
+ *
123
+ * @param $carrierCode string
124
+ * @return string
125
+ */
126
+ public function getCarrierName($carrierCode)
127
+ {
128
+ if ($name = Mage::getStoreConfig("carriers/{$carrierCode}/title")) {
129
+ return $name;
130
+ }
131
+ return $carrierCode;
132
+ }
133
+
134
+ /**
135
+ * Get either shipping rate code or empty value on error
136
+ *
137
+ * @param Varien_Object $rate
138
+ * @return string
139
+ */
140
+ public function renderShippingRateValue(Varien_Object $rate)
141
+ {
142
+ if ($rate->getErrorMessage()) {
143
+ return '';
144
+ }
145
+ return $rate->getCode();
146
+ }
147
+
148
+ /**
149
+ * Get shipping rate code title and its price or error message
150
+ *
151
+ * @param Varien_Object $rate
152
+ * @param string $format
153
+ * @param string $inclTaxFormat
154
+ * @return string
155
+ */
156
+ public function renderShippingRateOption($rate, $format = '%s - %s%s', $inclTaxFormat = ' (%s %s)')
157
+ {
158
+ $renderedInclTax = '';
159
+ if ($rate->getErrorMessage()) {
160
+ $price = $rate->getErrorMessage();
161
+ } else {
162
+ $price = $this->_getShippingPrice($rate->getPrice(),
163
+ $this->helper('tax')->displayShippingPriceIncludingTax());
164
+
165
+ $incl = $this->_getShippingPrice($rate->getPrice(), true);
166
+ if (($incl != $price) && $this->helper('tax')->displayShippingBothPrices()) {
167
+ $renderedInclTax = sprintf($inclTaxFormat, Mage::helper('tax')->__('Incl. Tax'), $incl);
168
+ }
169
+ }
170
+ return sprintf($format, $this->escapeHtml($rate->getMethodTitle()), $price, $renderedInclTax);
171
+ }
172
+
173
+ /**
174
+ * Getter for current shipping rate
175
+ *
176
+ * @return Mage_Sales_Model_Quote_Address_Rate
177
+ */
178
+ public function getCurrentShippingRate()
179
+ {
180
+ return $this->_currentShippingRate;
181
+ }
182
+
183
+ /**
184
+ * Set paypal actions prefix
185
+ */
186
+ public function setPaypalActionPrefix($prefix)
187
+ {
188
+ $this->_paypalActionPrefix = $prefix;
189
+ }
190
+
191
+ /**
192
+ * Return formatted shipping price
193
+ *
194
+ * @param float $price
195
+ * @param bool $isInclTax
196
+ *
197
+ * @return bool
198
+ */
199
+ protected function _getShippingPrice($price, $isInclTax)
200
+ {
201
+ return $this->_formatPrice($this->helper('tax')->getShippingPrice($price, $isInclTax, $this->_address));
202
+ }
203
+
204
+ /**
205
+ * Format price base on store convert price method
206
+ *
207
+ * @param float $price
208
+ * @return string
209
+ */
210
+ protected function _formatPrice($price)
211
+ {
212
+ return $this->_quote->getStore()->convertPrice($price, true);
213
+ }
214
+
215
+ /**
216
+ * Retrieve payment method and assign additional template values
217
+ *
218
+ * @return Mage_Paypal_Block_Express_Review
219
+ */
220
+ protected function _beforeToHtml()
221
+ {
222
+ $methodInstance = $this->_quote->getPayment()->getMethodInstance();
223
+ $this->setPaymentMethodTitle($methodInstance->getTitle());
224
+ $this->setUpdateOrderSubmitUrl($this->getUrl("{$this->_paypalActionPrefix}/express/updateOrder"));
225
+ $this->setUpdateShippingMethodsUrl($this->getUrl("{$this->_paypalActionPrefix}/express/updateShippingMethods"));
226
+
227
+ $this->setShippingRateRequired(true);
228
+ if ($this->_quote->getIsVirtual()) {
229
+ $this->setShippingRateRequired(false);
230
+ } else {
231
+ // prepare shipping rates
232
+ $this->_address = $this->_quote->getShippingAddress();
233
+ $groups = $this->_address->getGroupedAllShippingRates();
234
+ if ($groups && $this->_address) {
235
+ $this->setShippingRateGroups($groups);
236
+ // determine current selected code & name
237
+ foreach ($groups as $code => $rates) {
238
+ foreach ($rates as $rate) {
239
+ if ($this->_address->getShippingMethod() == $rate->getCode()) {
240
+ $this->_currentShippingRate = $rate;
241
+ break(2);
242
+ }
243
+ }
244
+ }
245
+ }
246
+
247
+ // misc shipping parameters
248
+ $this->setShippingMethodSubmitUrl($this->getUrl("{$this->_paypalActionPrefix}/express/saveShippingMethod"))
249
+ ->setCanEditShippingAddress($this->_quote->getMayEditShippingAddress())
250
+ ->setCanEditShippingMethod($this->_quote->getMayEditShippingMethod())
251
+ ;
252
+ }
253
+
254
+ $this->setEditUrl($this->getUrl("{$this->_paypalActionPrefix}/express/edit"))
255
+ ->setPlaceOrderUrl($this->getUrl("{$this->_paypalActionPrefix}/express/placeOrder"));
256
+
257
+ return parent::_beforeToHtml();
258
+ }
259
+ }
app/code/local/Ced/LayBuy/Block/Express/Review/Billing.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Paypal
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Paypal Express Onepage checkout block for Billing Address
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Paypal
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Ced_LayBuy_Block_Express_Review_Billing extends Mage_Checkout_Block_Onepage_Billing
35
+ {
36
+ /**
37
+ * Return Sales Quote Address model
38
+ *
39
+ * @return Mage_Sales_Model_Quote_Address
40
+ */
41
+ public function getAddress()
42
+ {
43
+ if (is_null($this->_address)) {
44
+ if ($this->isCustomerLoggedIn() || $this->getQuote()->getBillingAddress()) {
45
+ $this->_address = $this->getQuote()->getBillingAddress();
46
+ if (!$this->_address->getFirstname()) {
47
+ $this->_address->setFirstname($this->getQuote()->getCustomer()->getFirstname());
48
+ }
49
+ if (!$this->_address->getLastname()) {
50
+ $this->_address->setLastname($this->getQuote()->getCustomer()->getLastname());
51
+ }
52
+ } else {
53
+ $this->_address = Mage::getModel('sales/quote_address');
54
+ }
55
+ }
56
+
57
+ return $this->_address;
58
+ }
59
+ }
app/code/local/Ced/LayBuy/Block/Express/Review/Details.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Paypal
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Paypal Express Onepage checkout block
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Paypal
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Ced_LayBuy_Block_Express_Review_Details extends Mage_Checkout_Block_Cart_Totals
35
+ {
36
+ protected $_address;
37
+
38
+ /**
39
+ * Return review shipping address
40
+ *
41
+ * @return Mage_Sales_Model_Order_Address
42
+ */
43
+ public function getAddress()
44
+ {
45
+ if (empty($this->_address)) {
46
+ $this->_address = $this->getQuote()->getShippingAddress();
47
+ }
48
+ return $this->_address;
49
+ }
50
+
51
+ /**
52
+ * Return review quote totals
53
+ *
54
+ * @return array
55
+ */
56
+ public function getTotals()
57
+ {
58
+ return $this->getQuote()->getTotals();
59
+ }
60
+ }
app/code/local/Ced/LayBuy/Block/Express/Review/Shipping.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Paypal
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Paypal Express Onepage checkout block for Shipping Address
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Paypal
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Ced_LayBuy_Block_Express_Review_Shipping extends Mage_Checkout_Block_Onepage_Shipping
35
+ {
36
+ /**
37
+ * Return Sales Quote Address model (shipping address)
38
+ *
39
+ * @return Mage_Sales_Model_Quote_Address
40
+ */
41
+ public function getAddress()
42
+ {
43
+ if (is_null($this->_address)) {
44
+ if ($this->isCustomerLoggedIn() || $this->getQuote()->getShippingAddress()) {
45
+ $this->_address = $this->getQuote()->getShippingAddress();
46
+ } else {
47
+ $this->_address = Mage::getModel('sales/quote_address');
48
+ }
49
+ }
50
+
51
+ return $this->_address;
52
+ }
53
+ }
app/code/local/Ced/LayBuy/Block/Payment/Info.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Paypal
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * PayPal common payment info block
29
+ * Uses default templates
30
+ */
31
+ class Ced_LayBuy_Block_Payment_Info extends Mage_Payment_Block_Info_Cc
32
+ {
33
+ /**
34
+ * Don't show CC type for non-CC methods
35
+ *
36
+ * @return string|null
37
+ */
38
+ public function getCcTypeName()
39
+ {
40
+ if (Mage_Paypal_Model_Config::getIsCreditCardMethod($this->getInfo()->getMethod())) {
41
+ return parent::getCcTypeName();
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Prepare PayPal-specific payment information
47
+ *
48
+ * @param Varien_Object|array $transport
49
+ * return Varien_Object
50
+ */
51
+ protected function _prepareSpecificInformation($transport = null)
52
+ {
53
+ $transport = parent::_prepareSpecificInformation($transport);
54
+ $payment = $this->getInfo();
55
+ $paypalInfo = Mage::getModel('paypal/info');
56
+ if (!$this->getIsSecureMode()) {
57
+ $info = $paypalInfo->getPaymentInfo($payment, true);
58
+ } else {
59
+ $info = $paypalInfo->getPublicPaymentInfo($payment, true);
60
+ }
61
+ return $transport->addData($info);
62
+ }
63
+ }
app/code/local/Ced/LayBuy/Helper/Data.php CHANGED
@@ -291,15 +291,37 @@ class Ced_LayBuy_Helper_Data extends Mage_Core_Helper_Abstract{
291
  }
292
  }
293
 
294
- public function getPaidOrders() {
295
  $code = Mage::getModel('laybuy/standard')->_code;
296
  $collection = Mage::getResourceModel('sales/order_grid_collection');
297
  $collection->join(array('payment'=>'sales/order_payment'),'main_table.entity_id=parent_id && main_table.status = "processing"','method');
298
  $collection->join(array('order'=>'sales/order'),'payment.parent_id = order.entity_id','*');
299
  $collection->addFieldToFilter('method',$code);
300
  return $collection->getAllIds();
301
- }
302
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
303
  public function fetchBeforeRevise($profileId = 0) {
304
  if($profileId) {
305
  $this->_matchingData = array('orderIds'=>'','profileIds'=>$profileId);
291
  }
292
  }
293
 
294
+ /*public function getPaidOrders() {
295
  $code = Mage::getModel('laybuy/standard')->_code;
296
  $collection = Mage::getResourceModel('sales/order_grid_collection');
297
  $collection->join(array('payment'=>'sales/order_payment'),'main_table.entity_id=parent_id && main_table.status = "processing"','method');
298
  $collection->join(array('order'=>'sales/order'),'payment.parent_id = order.entity_id','*');
299
  $collection->addFieldToFilter('method',$code);
300
  return $collection->getAllIds();
301
+ }*/
302
+ public function getPaidOrders() {
303
+ $code = Mage::getModel('laybuy/standard')->_code;
304
+ $collection = Mage::getResourceModel('sales/order_grid_collection');
305
+ $paymentTable = Mage::getModel('core/resource')->getTableName("sales/order_payment");
306
+ //$paymentTable =$collection->getTable("sales/order_payment");
307
+ //$orderTable = $collection->getTable("sales/order");
308
+ $orderTable = Mage::getModel('core/resource')->getTableName("sales/order");
309
+ $collection->getSelect()->join(
310
+ array('e1'=>$paymentTable),
311
+ '`e1`.`parent_id`=`main_table`.`entity_id` and `main_table`.`status`="processing"',
312
+ array('method')
313
+ );
314
+ //$collection->join($paymentTable,'`main_table`.`entity_id`=`'.$paymentTable.'`.`parent_id` && `main_table`.`status` = "processing"','method');
315
+
316
+ $collection->getSelect()->join(
317
+ array('e2'=>$orderTable),
318
+ '`e1`.`parent_id`=`e2`.`entity_id`',
319
+ array('*')
320
+ );
321
+ //$collection->join($orderTable,'`'.$paymentTable.'`.`parent_id` = '.$orderTable.'.entity_id','*');
322
+ $collection->addFieldToFilter('method',$code);
323
+ return $collection->getAllIds();
324
+ }
325
  public function fetchBeforeRevise($profileId = 0) {
326
  if($profileId) {
327
  $this->_matchingData = array('orderIds'=>'','profileIds'=>$profileId);
app/code/local/Ced/LayBuy/Model/Abstract.php ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ced_LayBuy_Model_Abstract extends Varien_Object
3
+ {
4
+ protected $_importFromRequestFilters = array(
5
+ 'REDIRECTREQUIRED' => '_filterToBool',
6
+ 'SUCCESSPAGEREDIRECTREQUESTED' => '_filterToBool',
7
+ 'PAYMENTSTATUS' => '_filterPaymentStatusFromNvpToInfo',
8
+ );
9
+ protected $_laybuyresponse=null;
10
+ /**
11
+ * Global public interface map
12
+ * @var array
13
+ */
14
+ protected $_globalMap = array(
15
+ // each call
16
+ 'VERSION' => 'version',
17
+ 'USER' => 'api_username',
18
+ 'PWD' => 'api_password',
19
+ 'SIGNATURE' => 'api_signature',
20
+ 'BUTTONSOURCE' => 'build_notation_code',
21
+
22
+ // for Unilateral payments
23
+ 'SUBJECT' => 'business_account',
24
+
25
+ // commands
26
+ 'PAYMENTACTION' => 'payment_action',
27
+ 'RETURNURL' => 'return_url',
28
+ 'CANCELURL' => 'cancel_url',
29
+ 'INVNUM' => 'inv_num',
30
+ 'TOKEN' => 'token',
31
+ 'CORRELATIONID' => 'correlation_id',
32
+ 'SOLUTIONTYPE' => 'solution_type',
33
+ 'GIROPAYCANCELURL' => 'giropay_cancel_url',
34
+ 'GIROPAYSUCCESSURL' => 'giropay_success_url',
35
+ 'BANKTXNPENDINGURL' => 'giropay_bank_txn_pending_url',
36
+ 'IPADDRESS' => 'ip_address',
37
+ 'NOTIFYURL' => 'notify_url',
38
+ 'RETURNFMFDETAILS' => 'fraud_management_filters_enabled',
39
+ 'NOTE' => 'note',
40
+ 'REFUNDTYPE' => 'refund_type',
41
+ 'ACTION' => 'action',
42
+ 'REDIRECTREQUIRED' => 'redirect_required',
43
+ 'SUCCESSPAGEREDIRECTREQUESTED' => 'redirect_requested',
44
+ 'REQBILLINGADDRESS' => 'require_billing_address',
45
+ // style settings
46
+ 'PAGESTYLE' => 'page_style',
47
+ 'HDRIMG' => 'hdrimg',
48
+ 'HDRBORDERCOLOR' => 'hdrbordercolor',
49
+ 'HDRBACKCOLOR' => 'hdrbackcolor',
50
+ 'PAYFLOWCOLOR' => 'payflowcolor',
51
+ 'LOCALECODE' => 'locale_code',
52
+ 'PAL' => 'pal',
53
+
54
+ // transaction info
55
+ 'TRANSACTIONID' => 'transaction_id',
56
+ 'AUTHORIZATIONID' => 'authorization_id',
57
+ 'REFUNDTRANSACTIONID' => 'refund_transaction_id',
58
+ 'COMPLETETYPE' => 'complete_type',
59
+ 'AMT' => 'amount',
60
+ 'ITEMAMT' => 'subtotal_amount',
61
+ 'GROSSREFUNDAMT' => 'refunded_amount', // possible mistake, check with API reference
62
+
63
+ // payment/billing info
64
+ 'CURRENCYCODE' => 'currency_code',
65
+ 'PAYMENTSTATUS' => 'payment_status',
66
+ 'PENDINGREASON' => 'pending_reason',
67
+ 'PROTECTIONELIGIBILITY' => 'protection_eligibility',
68
+ 'PAYERID' => 'payer_id',
69
+ 'PAYERSTATUS' => 'payer_status',
70
+ 'ADDRESSID' => 'address_id',
71
+ 'ADDRESSSTATUS' => 'address_status',
72
+ 'EMAIL' => 'email',
73
+ // backwards compatibility
74
+ 'FIRSTNAME' => 'firstname',
75
+ 'LASTNAME' => 'lastname',
76
+
77
+ // shipping rate
78
+ 'SHIPPINGOPTIONNAME' => 'shipping_rate_code',
79
+ 'NOSHIPPING' => 'suppress_shipping',
80
+
81
+ // paypal direct credit card information
82
+ 'CREDITCARDTYPE' => 'credit_card_type',
83
+ 'ACCT' => 'credit_card_number',
84
+ 'EXPDATE' => 'credit_card_expiration_date',
85
+ 'CVV2' => 'credit_card_cvv2',
86
+ 'STARTDATE' => 'maestro_solo_issue_date', // MMYYYY, always six chars, including leading zero
87
+ 'ISSUENUMBER' => 'maestro_solo_issue_number',
88
+ 'CVV2MATCH' => 'cvv2_check_result',
89
+ 'AVSCODE' => 'avs_result',
90
+ // cardinal centinel
91
+ 'AUTHSTATUS3DS' => 'centinel_authstatus',
92
+ 'MPIVENDOR3DS' => 'centinel_mpivendor',
93
+ 'CAVV' => 'centinel_cavv',
94
+ 'ECI3DS' => 'centinel_eci',
95
+ 'XID' => 'centinel_xid',
96
+ 'VPAS' => 'centinel_vpas_result',
97
+ 'ECISUBMITTED3DS' => 'centinel_eci_result',
98
+
99
+ // recurring payment profiles
100
+ //'TOKEN' => 'token',
101
+ 'SUBSCRIBERNAME' =>'subscriber_name',
102
+ 'PROFILESTARTDATE' => 'start_datetime',
103
+ 'PROFILEREFERENCE' => 'internal_reference_id',
104
+ 'DESC' => 'schedule_description',
105
+ 'MAXFAILEDPAYMENTS' => 'suspension_threshold',
106
+ 'AUTOBILLAMT' => 'bill_failed_later',
107
+ 'BILLINGPERIOD' => 'period_unit',
108
+ 'BILLINGFREQUENCY' => 'period_frequency',
109
+ 'TOTALBILLINGCYCLES' => 'period_max_cycles',
110
+ //'AMT' => 'billing_amount', // have to use 'amount', see above
111
+ 'TRIALBILLINGPERIOD' => 'trial_period_unit',
112
+ 'TRIALBILLINGFREQUENCY' => 'trial_period_frequency',
113
+ 'TRIALTOTALBILLINGCYCLES' => 'trial_period_max_cycles',
114
+ 'TRIALAMT' => 'trial_billing_amount',
115
+ // 'CURRENCYCODE' => 'currency_code',
116
+ 'SHIPPINGAMT' => 'shipping_amount',
117
+ 'TAXAMT' => 'tax_amount',
118
+ 'INITAMT' => 'init_amount',
119
+ 'FAILEDINITAMTACTION' => 'init_may_fail',
120
+ 'PROFILEID' => 'recurring_profile_id',
121
+ 'PROFILESTATUS' => 'recurring_profile_status',
122
+ 'STATUS' => 'status',
123
+
124
+ //Next two fields are used for Brazil only
125
+ 'TAXID' => 'buyer_tax_id',
126
+ 'TAXIDTYPE' => 'buyer_tax_id_type',
127
+
128
+ 'BILLINGAGREEMENTID' => 'billing_agreement_id',
129
+ 'REFERENCEID' => 'reference_id',
130
+ 'BILLINGAGREEMENTSTATUS' => 'billing_agreement_status',
131
+ 'BILLINGTYPE' => 'billing_type',
132
+ 'SREET' => 'street',
133
+ 'CITY' => 'city',
134
+ 'STATE' => 'state',
135
+ 'COUNTRYCODE' => 'countrycode',
136
+ 'ZIP' => 'zip',
137
+ 'PAYERBUSINESS' => 'payer_business',
138
+ );
139
+ /**
140
+ * Import $this public data from a private response array
141
+ *
142
+ * @param array $privateResponseMap
143
+ * @param array $response
144
+ */
145
+ public function _importFromResponse(array $privateResponseMap, array $response)
146
+ {
147
+ $map = array();
148
+ foreach ($privateResponseMap as $key) {
149
+ if (isset($this->_globalMap[$key])) {
150
+ $map[$key] = $this->_globalMap[$key];
151
+ }
152
+ if (isset($response[$key]) && isset($this->_importFromRequestFilters[$key])) {
153
+ $callback = $this->_importFromRequestFilters[$key];
154
+ $response[$key] = call_user_func(array($this, $callback), $response[$key], $key, $map[$key]);
155
+ }
156
+ }
157
+ Varien_Object_Mapper::accumulateByMap($response, array($this, 'setDataUsingMethod'), $map);
158
+ }
159
+ public function setLaybuyResponse($resp="")
160
+ {
161
+ $this->_laybuyresponse=$resp;
162
+ }
163
+ public function getLaybuyResponse()
164
+ {
165
+ return $this->_laybuyresponse;
166
+ }
167
+
168
+ }
app/code/local/Ced/LayBuy/Model/Config.php ADDED
@@ -0,0 +1,1419 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Paypal
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Config model that is aware of all Mage_Paypal payment methods
29
+ * Works with PayPal-specific system configuration
30
+ */
31
+ class Ced_LayBuy_Model_Config
32
+ {
33
+ /**
34
+ * PayPal Standard
35
+ * @var string
36
+ */
37
+ const METHOD_WPS = 'laybuy_standard';
38
+
39
+ /**
40
+ * PayPal Website Payments Pro - Express Checkout
41
+ * @var string
42
+ */
43
+ const METHOD_WPP_EXPRESS = 'laybuy_express';
44
+
45
+ /**
46
+ * PayPal Website Payments Pro - Direct Payments
47
+ * @var string
48
+ */
49
+ const METHOD_WPP_DIRECT = 'laybuy_direct';
50
+
51
+ /**
52
+ * Direct Payments (Payflow Edition)
53
+ * @var string
54
+ */
55
+ const METHOD_WPP_PE_DIRECT = 'laybuyuk_direct';
56
+
57
+ /**
58
+ * Express Checkout (Payflow Edition)
59
+ * @var string
60
+ */
61
+ const METHOD_WPP_PE_EXPRESS = 'laybuyuk_express';
62
+
63
+ /**
64
+ * Payflow Pro Gateway
65
+ * @var string
66
+ */
67
+ const METHOD_PAYFLOWPRO = 'verisign';
68
+
69
+ const METHOD_PAYFLOWLINK = 'payflow_link';
70
+ const METHOD_PAYFLOWADVANCED = 'payflow_advanced';
71
+
72
+ const METHOD_HOSTEDPRO = 'hosted_pro';
73
+
74
+ const METHOD_BILLING_AGREEMENT = 'laybuy_billing_agreement';
75
+
76
+ /**
77
+ * Buttons and images
78
+ * @var string
79
+ */
80
+ const EC_FLAVOR_DYNAMIC = 'dynamic';
81
+ const EC_FLAVOR_STATIC = 'static';
82
+ const EC_BUTTON_TYPE_SHORTCUT = 'ecshortcut';
83
+ const EC_BUTTON_TYPE_MARK = 'ecmark';
84
+ const PAYMENT_MARK_37x23 = '37x23';
85
+ const PAYMENT_MARK_50x34 = '50x34';
86
+ const PAYMENT_MARK_60x38 = '60x38';
87
+ const PAYMENT_MARK_180x113 = '180x113';
88
+
89
+ const DEFAULT_LOGO_TYPE = 'wePrefer_150x60';
90
+
91
+ /**
92
+ * Payment actions
93
+ * @var string
94
+ */
95
+ const PAYMENT_ACTION_SALE = 'Sale';
96
+ const PAYMENT_ACTION_ORDER = 'Order';
97
+ const PAYMENT_ACTION_AUTH = 'Authorization';
98
+
99
+ /**
100
+ * Authorization amounts for Account Verification
101
+ *
102
+ * @deprecated since 1.6.2.0
103
+ * @var int
104
+ */
105
+ const AUTHORIZATION_AMOUNT_ZERO = 0;
106
+ const AUTHORIZATION_AMOUNT_ONE = 1;
107
+ const AUTHORIZATION_AMOUNT_FULL = 2;
108
+
109
+ /**
110
+ * Require Billing Address
111
+ * @var int
112
+ */
113
+ const REQUIRE_BILLING_ADDRESS_NO = 0;
114
+ const REQUIRE_BILLING_ADDRESS_ALL = 1;
115
+ const REQUIRE_BILLING_ADDRESS_VIRTUAL = 2;
116
+
117
+ /**
118
+ * Fraud management actions
119
+ * @var string
120
+ */
121
+ const FRAUD_ACTION_ACCEPT = 'Acept';
122
+ const FRAUD_ACTION_DENY = 'Deny';
123
+
124
+ /**
125
+ * Refund types
126
+ * @var string
127
+ */
128
+ const REFUND_TYPE_FULL = 'Full';
129
+ const REFUND_TYPE_PARTIAL = 'Partial';
130
+
131
+ /**
132
+ * Express Checkout flows
133
+ * @var string
134
+ */
135
+ const EC_SOLUTION_TYPE_SOLE = 'Sole';
136
+ const EC_SOLUTION_TYPE_MARK = 'Mark';
137
+
138
+ /**
139
+ * Payment data transfer methods (Standard)
140
+ *
141
+ * @var string
142
+ */
143
+ const WPS_TRANSPORT_IPN = 'ipn';
144
+ const WPS_TRANSPORT_PDT = 'pdt';
145
+ const WPS_TRANSPORT_IPN_PDT = 'ipn_n_pdt';
146
+
147
+ /**
148
+ * Billing Agreement Signup
149
+ *
150
+ * @var string
151
+ */
152
+ const EC_BA_SIGNUP_AUTO = 'auto';
153
+ const EC_BA_SIGNUP_ASK = 'ask';
154
+ const EC_BA_SIGNUP_NEVER = 'never';
155
+
156
+ /**
157
+ * Default URL for centinel API (PayPal Direct)
158
+ *
159
+ * @var string
160
+ */
161
+ // public $centinelDefaultApiUrl = 'https://paypal.cardinalcommerce.com/maps/txns.asp';
162
+
163
+ /**
164
+ * Current payment method code
165
+ * @var string
166
+ */
167
+ protected $_methodCode = null;
168
+
169
+ /**
170
+ * Current store id
171
+ *
172
+ * @var int
173
+ */
174
+ protected $_storeId = null;
175
+
176
+ /**
177
+ * Instructions for generating proper BN code
178
+ *
179
+ * @var array
180
+ */
181
+ protected $_buildNotationPPMap = array(
182
+ 'paypal_standard' => 'WPS',
183
+ 'paypal_express' => 'EC',
184
+ 'paypal_direct' => 'DP',
185
+ 'paypaluk_express' => 'EC',
186
+ 'paypaluk_direct' => 'DP',
187
+ );
188
+
189
+ /**
190
+ * Style system config map (Express Checkout)
191
+ *
192
+ * @var array
193
+ */
194
+ protected $_ecStyleConfigMap = array(
195
+ 'page_style' => 'page_style',
196
+ 'paypal_hdrimg' => 'hdrimg',
197
+ 'paypal_hdrbordercolor' => 'hdrbordercolor',
198
+ 'paypal_hdrbackcolor' => 'hdrbackcolor',
199
+ 'paypal_payflowcolor' => 'payflowcolor',
200
+ );
201
+
202
+ /**
203
+ * Currency codes supported by PayPal methods
204
+ *
205
+ * @var array
206
+ */
207
+ protected $_supportedCurrencyCodes = array('AUD', 'CAD', 'CZK', 'DKK', 'EUR', 'HKD', 'HUF', 'ILS', 'JPY', 'MXN',
208
+ 'NOK', 'NZD', 'PLN', 'GBP', 'SGD', 'SEK', 'CHF', 'USD', 'TWD', 'THB');
209
+
210
+ /**
211
+ * Merchant country supported by PayPal
212
+ *
213
+ * @var array
214
+ */
215
+ protected $_supportedCountryCodes = array(
216
+ 'AE','AR','AT','AU','BE','BG','BR','CA','CH','CL','CR','CY','CZ','DE','DK','DO','EC','EE','ES','FI','FR','GB',
217
+ 'GF','GI','GP','GR','HK','HU','ID','IE','IL','IN','IS','IT','JM','JP','KR','LI','LT','LU','LV','MQ','MT','MX',
218
+ 'MY','NL','NO','NZ','PH','PL','PT','RE','RO','SE','SG','SI','SK','SM','TH','TR','TW','US','UY','VE','VN','ZA');
219
+
220
+ /**
221
+ * Buyer country supported by PayPal
222
+ *
223
+ * @var array
224
+ */
225
+ protected $_supportedBuyerCountryCodes = array(
226
+ 'AF ', 'AX ', 'AL ', 'DZ ', 'AS ', 'AD ', 'AO ', 'AI ', 'AQ ', 'AG ', 'AR ', 'AM ', 'AW ', 'AU ', 'AT ', 'AZ ',
227
+ 'BS ', 'BH ', 'BD ', 'BB ', 'BY ', 'BE ', 'BZ ', 'BJ ', 'BM ', 'BT ', 'BO ', 'BA ', 'BW ', 'BV ', 'BR ', 'IO ',
228
+ 'BN ', 'BG ', 'BF ', 'BI ', 'KH ', 'CM ', 'CA ', 'CV ', 'KY ', 'CF ', 'TD ', 'CL ', 'CN ', 'CX ', 'CC ', 'CO ',
229
+ 'KM ', 'CG ', 'CD ', 'CK ', 'CR ', 'CI ', 'HR ', 'CU ', 'CY ', 'CZ ', 'DK ', 'DJ ', 'DM ', 'DO ', 'EC ', 'EG ',
230
+ 'SV ', 'GQ ', 'ER ', 'EE ', 'ET ', 'FK ', 'FO ', 'FJ ', 'FI ', 'FR ', 'GF ', 'PF ', 'TF ', 'GA ', 'GM ', 'GE ',
231
+ 'DE ', 'GH ', 'GI ', 'GR ', 'GL ', 'GD ', 'GP ', 'GU ', 'GT ', 'GG ', 'GN ', 'GW ', 'GY ', 'HT ', 'HM ', 'VA ',
232
+ 'HN ', 'HK ', 'HU ', 'IS ', 'IN ', 'ID ', 'IR ', 'IQ ', 'IE ', 'IM ', 'IL ', 'IT ', 'JM ', 'JP ', 'JE ', 'JO ',
233
+ 'KZ ', 'KE ', 'KI ', 'KP ', 'KR ', 'KW ', 'KG ', 'LA ', 'LV ', 'LB ', 'LS ', 'LR ', 'LY ', 'LI ', 'LT ', 'LU ',
234
+ 'MO ', 'MK ', 'MG ', 'MW ', 'MY ', 'MV ', 'ML ', 'MT ', 'MH ', 'MQ ', 'MR ', 'MU ', 'YT ', 'MX ', 'FM ', 'MD ',
235
+ 'MC ', 'MN ', 'MS ', 'MA ', 'MZ ', 'MM ', 'NA ', 'NR ', 'NP ', 'NL ', 'AN ', 'NC ', 'NZ ', 'NI ', 'NE ', 'NG ',
236
+ 'NU ', 'NF ', 'MP ', 'NO ', 'OM ', 'PK ', 'PW ', 'PS ', 'PA ', 'PG ', 'PY ', 'PE ', 'PH ', 'PN ', 'PL ', 'PT ',
237
+ 'PR ', 'QA ', 'RE ', 'RO ', 'RU ', 'RW ', 'SH ', 'KN ', 'LC ', 'PM ', 'VC ', 'WS ', 'SM ', 'ST ', 'SA ', 'SN ',
238
+ 'CS ', 'SC ', 'SL ', 'SG ', 'SK ', 'SI ', 'SB ', 'SO ', 'ZA ', 'GS ', 'ES ', 'LK ', 'SD ', 'SR ', 'SJ ', 'SZ ',
239
+ 'SE ', 'CH ', 'SY ', 'TW ', 'TJ ', 'TZ ', 'TH ', 'TL ', 'TG ', 'TK ', 'TO ', 'TT ', 'TN ', 'TR ', 'TM ', 'TC ',
240
+ 'TV ', 'UG ', 'UA ', 'AE ', 'GB ', 'US ', 'UM ', 'UY ', 'UZ ', 'VU ', 'VE ', 'VN ', 'VG ', 'VI ', 'WF ', 'EH ',
241
+ 'YE ', 'ZM ', 'ZW'
242
+ );
243
+
244
+ /**
245
+ * Locale codes supported by misc images (marks, shortcuts etc)
246
+ *
247
+ * @var array
248
+ * @link https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECButtonIntegration#id089QD0O0TX4__id08AH904I0YK
249
+ */
250
+ protected $_supportedImageLocales = array('de_DE', 'en_AU', 'en_GB', 'en_US', 'es_ES', 'es_XC', 'fr_FR',
251
+ 'fr_XC', 'it_IT', 'ja_JP', 'nl_NL', 'pl_PL', 'zh_CN', 'zh_XC',
252
+ );
253
+
254
+ /**
255
+ * Set method and store id, if specified
256
+ *
257
+ * @param array $params
258
+ */
259
+ public function __construct($params = array())
260
+ {
261
+ if ($params) {
262
+ $method = array_shift($params);
263
+ $this->setMethod($method);
264
+ if ($params) {
265
+ $storeId = array_shift($params);
266
+ $this->setStoreId($storeId);
267
+ }
268
+ }
269
+ }
270
+
271
+ /**
272
+ * Method code setter
273
+ *
274
+ * @param string|Mage_Payment_Model_Method_Abstract $method
275
+ * @return Mage_Paypal_Model_Config
276
+ */
277
+ public function setMethod($method)
278
+ {
279
+ if ($method instanceof Mage_Payment_Model_Method_Abstract) {
280
+ $this->_methodCode = $method->getCode();
281
+ } elseif (is_string($method)) {
282
+ $this->_methodCode = $method;
283
+ }
284
+ return $this;
285
+ }
286
+
287
+ /**
288
+ * Payment method instance code getter
289
+ *
290
+ * @return string
291
+ */
292
+ public function getMethodCode()
293
+ {
294
+ return $this->_methodCode;
295
+ }
296
+
297
+ /**
298
+ * Store ID setter
299
+ *
300
+ * @param int $storeId
301
+ * @return Mage_Paypal_Model_Config
302
+ */
303
+ public function setStoreId($storeId)
304
+ {
305
+ $this->_storeId = (int)$storeId;
306
+ return $this;
307
+ }
308
+
309
+ /**
310
+ * Check whether method active in configuration and supported for merchant country or not
311
+ *
312
+ * @param string $method Method code
313
+ * @return bool
314
+ */
315
+ public function isMethodActive($method)
316
+ {
317
+ if ($this->isMethodSupportedForCountry($method)
318
+ && Mage::getStoreConfigFlag("payment/{$method}/active", $this->_storeId)
319
+ ) {
320
+ return true;
321
+ }
322
+ return false;
323
+ }
324
+
325
+ /**
326
+ * Check whether method available for checkout or not
327
+ * Logic based on merchant country, methods dependence
328
+ *
329
+ * @param string $method Method code
330
+ * @return bool
331
+ */
332
+ public function isMethodAvailable($methodCode = null)
333
+ {
334
+ if ($methodCode === null) {
335
+ $methodCode = $this->getMethodCode();
336
+ }
337
+
338
+ $result = true;
339
+
340
+ if (!$this->isMethodActive($methodCode)) {
341
+ $result = false;
342
+ }
343
+
344
+ switch ($methodCode) {
345
+ case self::METHOD_WPS:
346
+ if (!$this->businessAccount) {
347
+ $result = false;
348
+ break;
349
+ }
350
+ // check for direct payments dependence
351
+ if ($this->isMethodActive(self::METHOD_WPP_DIRECT)
352
+ || $this->isMethodActive(self::METHOD_WPP_PE_DIRECT)) {
353
+ $result = false;
354
+ }
355
+ break;
356
+ case self::METHOD_WPP_EXPRESS:
357
+ // check for direct payments dependence
358
+ if ($this->isMethodActive(self::METHOD_WPP_PE_DIRECT)) {
359
+ $result = false;
360
+ } elseif ($this->isMethodActive(self::METHOD_WPP_DIRECT)) {
361
+ $result = true;
362
+ }
363
+ break;
364
+ case self::METHOD_WPP_PE_EXPRESS:
365
+ // check for direct payments dependence
366
+ if ($this->isMethodActive(self::METHOD_WPP_PE_DIRECT)) {
367
+ $result = true;
368
+ } elseif (!$this->isMethodActive(self::METHOD_WPP_PE_DIRECT)
369
+ && !$this->isMethodActive(self::METHOD_PAYFLOWPRO)) {
370
+ $result = false;
371
+ }
372
+ break;
373
+ case self::METHOD_BILLING_AGREEMENT:
374
+ $result = $this->isWppApiAvailabe();
375
+ break;
376
+ case self::METHOD_WPP_DIRECT:
377
+ case self::METHOD_WPP_PE_DIRECT:
378
+ break;
379
+ }
380
+ return $result;
381
+ }
382
+
383
+ /**
384
+ * Config field magic getter
385
+ * The specified key can be either in camelCase or under_score format
386
+ * Tries to map specified value according to set payment method code, into the configuration value
387
+ * Sets the values into public class parameters, to avoid redundant calls of this method
388
+ *
389
+ * @param string $key
390
+ * @return string|null
391
+ */
392
+ public function __get($key)
393
+ {
394
+ $underscored = strtolower(preg_replace('/(.)([A-Z])/', "$1_$2", $key));
395
+ $value = Mage::getStoreConfig($this->_getSpecificConfigPath($underscored), $this->_storeId);
396
+ $value = $this->_prepareValue($underscored, $value);
397
+ $this->$key = $value;
398
+ $this->$underscored = $value;
399
+ return $value;
400
+ }
401
+
402
+ /**
403
+ * Perform additional config value preparation and return new value if needed
404
+ *
405
+ * @param string $key Underscored key
406
+ * @param string $value Old value
407
+ * @return string Modified value or old value
408
+ */
409
+ protected function _prepareValue($key, $value)
410
+ {
411
+ // Always set payment action as "Sale" for Unilateral payments in EC
412
+ if ($key == 'payment_action'
413
+ && $value != self::PAYMENT_ACTION_SALE
414
+ && $this->_methodCode == self::METHOD_WPP_EXPRESS
415
+ && $this->shouldUseUnilateralPayments())
416
+ {
417
+ return self::PAYMENT_ACTION_SALE;
418
+ }
419
+ return $value;
420
+ }
421
+
422
+ /**
423
+ * Return merchant country codes supported by PayPal
424
+ *
425
+ * @return array
426
+ */
427
+ public function getSupportedMerchantCountryCodes()
428
+ {
429
+ return $this->_supportedCountryCodes;
430
+ }
431
+
432
+ /**
433
+ * Return buyer country codes supported by PayPal
434
+ *
435
+ * @return array
436
+ */
437
+ public function getSupportedBuyerCountryCodes()
438
+ {
439
+ return $this->_supportedBuyerCountryCodes;
440
+ }
441
+
442
+ /**
443
+ * Return merchant country code, use default country if it not specified in General settings
444
+ *
445
+ * @return string
446
+ */
447
+ public function getMerchantCountry()
448
+ {
449
+ $countryCode = Mage::getStoreConfig($this->_mapGeneralFieldset('merchant_country'), $this->_storeId);
450
+ if (!$countryCode) {
451
+ $countryCode = Mage::helper('core')->getDefaultCountry($this->_storeId);
452
+ }
453
+ return $countryCode;
454
+ }
455
+
456
+ /**
457
+ * Check whether method supported for specified country or not
458
+ * Use $_methodCode and merchant country by default
459
+ *
460
+ * @return bool
461
+ */
462
+ public function isMethodSupportedForCountry($method = null, $countryCode = null)
463
+ {
464
+ if ($method === null) {
465
+ $method = $this->getMethodCode();
466
+ }
467
+ if ($countryCode === null) {
468
+ $countryCode = $this->getMerchantCountry();
469
+ }
470
+ $countryMethods = $this->getCountryMethods($countryCode);
471
+ if (in_array($method, $countryMethods)) {
472
+ return true;
473
+ }
474
+ return false;
475
+ }
476
+
477
+ /**
478
+ * Return list of allowed methods for specified country iso code
479
+ *
480
+ * @param string $countryCode 2-letters iso code
481
+ * @return array
482
+ */
483
+ public function getCountryMethods($countryCode = null)
484
+ {
485
+ $countryMethods = array(
486
+ 'other' => array(
487
+ self::METHOD_WPS,
488
+ self::METHOD_WPP_EXPRESS,
489
+ self::METHOD_BILLING_AGREEMENT,
490
+ ),
491
+ 'US' => array(
492
+ self::METHOD_PAYFLOWADVANCED,
493
+ self::METHOD_WPP_DIRECT,
494
+ self::METHOD_WPS,
495
+ self::METHOD_PAYFLOWPRO,
496
+ self::METHOD_PAYFLOWLINK,
497
+ self::METHOD_WPP_EXPRESS,
498
+ self::METHOD_BILLING_AGREEMENT,
499
+ self::METHOD_WPP_PE_EXPRESS,
500
+ ),
501
+ 'CA' => array(
502
+ self::METHOD_WPP_DIRECT,
503
+ self::METHOD_WPS,
504
+ self::METHOD_PAYFLOWPRO,
505
+ self::METHOD_PAYFLOWLINK,
506
+ self::METHOD_WPP_EXPRESS,
507
+ self::METHOD_BILLING_AGREEMENT,
508
+ ),
509
+ 'GB' => array(
510
+ self::METHOD_WPP_DIRECT,
511
+ self::METHOD_WPS,
512
+ self::METHOD_WPP_PE_DIRECT,
513
+ self::METHOD_HOSTEDPRO,
514
+ self::METHOD_WPP_EXPRESS,
515
+ self::METHOD_BILLING_AGREEMENT,
516
+ self::METHOD_WPP_PE_EXPRESS,
517
+ ),
518
+ 'AU' => array(
519
+ self::METHOD_WPS,
520
+ self::METHOD_PAYFLOWPRO,
521
+ self::METHOD_HOSTEDPRO,
522
+ self::METHOD_WPP_EXPRESS,
523
+ self::METHOD_BILLING_AGREEMENT,
524
+ ),
525
+ 'NZ' => array(
526
+ self::METHOD_WPS,
527
+ self::METHOD_PAYFLOWPRO,
528
+ self::METHOD_WPP_EXPRESS,
529
+ self::METHOD_BILLING_AGREEMENT,
530
+ ),
531
+ 'JP' => array(
532
+ self::METHOD_WPS,
533
+ self::METHOD_HOSTEDPRO,
534
+ self::METHOD_WPP_EXPRESS,
535
+ self::METHOD_BILLING_AGREEMENT,
536
+ ),
537
+ 'FR' => array(
538
+ self::METHOD_WPS,
539
+ self::METHOD_HOSTEDPRO,
540
+ self::METHOD_WPP_EXPRESS,
541
+ self::METHOD_BILLING_AGREEMENT,
542
+ ),
543
+ 'IT' => array(
544
+ self::METHOD_WPS,
545
+ self::METHOD_HOSTEDPRO,
546
+ self::METHOD_WPP_EXPRESS,
547
+ self::METHOD_BILLING_AGREEMENT,
548
+ ),
549
+ 'ES' => array(
550
+ self::METHOD_WPS,
551
+ self::METHOD_HOSTEDPRO,
552
+ self::METHOD_WPP_EXPRESS,
553
+ self::METHOD_BILLING_AGREEMENT,
554
+ ),
555
+ 'HK' => array(
556
+ self::METHOD_WPS,
557
+ self::METHOD_HOSTEDPRO,
558
+ self::METHOD_WPP_EXPRESS,
559
+ self::METHOD_BILLING_AGREEMENT,
560
+ ),
561
+ );
562
+ if ($countryCode === null) {
563
+ return $countryMethods;
564
+ }
565
+ return isset($countryMethods[$countryCode]) ? $countryMethods[$countryCode] : $countryMethods['other']; }
566
+
567
+ /**
568
+ * Get url for dispatching customer to express checkout start
569
+ *
570
+ * @param string $token
571
+ * @return string
572
+ */
573
+ public function getExpressCheckoutStartUrl($token)
574
+ {
575
+ return $this->getPaypalUrl(array(
576
+ 'cmd' => '_express-checkout',
577
+ 'token' => $token,
578
+ ));
579
+ }
580
+
581
+ /**
582
+ * Get url that allows to edit checkout details on paypal side
583
+ *
584
+ * @param $token
585
+ * @return string
586
+ */
587
+ public function getExpressCheckoutEditUrl($token)
588
+ {
589
+ return $this->getPaypalUrl(array(
590
+ 'cmd' => '_express-checkout',
591
+ 'useraction' => 'continue',
592
+ 'token' => $token,
593
+ ));
594
+ }
595
+
596
+ /**
597
+ * Get url for additional actions that PayPal may require customer to do after placing the order.
598
+ * For instance, redirecting customer to bank for payment confirmation.
599
+ *
600
+ * @param string $token
601
+ * @return string
602
+ */
603
+ public function getExpressCheckoutCompleteUrl($token)
604
+ {
605
+ return $this->getPaypalUrl(array(
606
+ 'cmd' => '_complete-express-checkout',
607
+ 'token' => $token,
608
+ ));
609
+ }
610
+
611
+ /**
612
+ * Retrieve url for initialization of billing agreement
613
+ *
614
+ * @param string $token
615
+ * @return string
616
+ */
617
+ public function getStartBillingAgreementUrl($token)
618
+ {
619
+ return $this->getPaypalUrl(array(
620
+ 'cmd' => '_customer-billing-agreement',
621
+ 'token' => $token,
622
+ ));
623
+ }
624
+
625
+ /**
626
+ * PayPal web URL generic getter
627
+ *
628
+ * @param array $params
629
+ * @return string
630
+ */
631
+ public function getPaypalUrl(array $params = array())
632
+ {
633
+ return sprintf('https://www.%spaypal.com/cgi-bin/webscr%s',
634
+ $this->sandboxFlag ? 'sandbox.' : '',
635
+ $params ? '?' . http_build_query($params) : ''
636
+ );
637
+ }
638
+
639
+ /**
640
+ * Whether Express Checkout button should be rendered dynamically
641
+ *
642
+ * @return bool
643
+ */
644
+ public function areButtonsDynamic()
645
+ {
646
+ return $this->buttonFlavor === self::EC_FLAVOR_DYNAMIC;
647
+ }
648
+
649
+ /**
650
+ * Express checkout shortcut pic URL getter
651
+ * PayPal will ignore "pal", if there is no total amount specified
652
+ *
653
+ * @param string $localeCode
654
+ * @param float $orderTotal
655
+ * @param string $pal encrypted summary about merchant
656
+ * @see Paypal_Model_Api_Nvp::callGetPalDetails()
657
+ */
658
+ public function getExpressCheckoutShortcutImageUrl($localeCode, $orderTotal = null, $pal = null)
659
+ {
660
+ if ($this->areButtonsDynamic()) {
661
+ return $this->_getDynamicImageUrl(self::EC_BUTTON_TYPE_SHORTCUT, $localeCode, $orderTotal, $pal);
662
+ }
663
+ if ($this->buttonType === self::EC_BUTTON_TYPE_MARK) {
664
+ return $this->getPaymentMarkImageUrl($localeCode);
665
+ }
666
+ return sprintf('https://www.paypal.com/%s/i/btn/btn_xpressCheckout.gif',
667
+ $this->_getSupportedLocaleCode($localeCode));
668
+ }
669
+
670
+ /**
671
+ * Get PayPal "mark" image URL
672
+ * Supposed to be used on payment methods selection
673
+ * $staticSize is applicable for static images only
674
+ *
675
+ * @param string $localeCode
676
+ * @param float $orderTotal
677
+ * @param string $pal
678
+ * @param string $staticSize
679
+ */
680
+ public function getPaymentMarkImageUrl($localeCode, $orderTotal = null, $pal = null, $staticSize = null)
681
+ {
682
+ if ($this->areButtonsDynamic()) {
683
+ return $this->_getDynamicImageUrl(self::EC_BUTTON_TYPE_MARK, $localeCode, $orderTotal, $pal);
684
+ }
685
+
686
+ if (null === $staticSize) {
687
+ $staticSize = $this->paymentMarkSize;
688
+ }
689
+ switch ($staticSize) {
690
+ case self::PAYMENT_MARK_37x23:
691
+ case self::PAYMENT_MARK_50x34:
692
+ case self::PAYMENT_MARK_60x38:
693
+ case self::PAYMENT_MARK_180x113:
694
+ break;
695
+ default:
696
+ $staticSize = self::PAYMENT_MARK_37x23;
697
+ }
698
+ return sprintf('https://www.paypal.com/%s/i/logo/PayPal_mark_%s.gif',
699
+ $this->_getSupportedLocaleCode($localeCode), $staticSize);
700
+ }
701
+
702
+ /**
703
+ * Get "What Is PayPal" localized URL
704
+ * Supposed to be used with "mark" as popup window
705
+ *
706
+ * @param Mage_Core_Model_Locale $locale
707
+ */
708
+ public function getPaymentMarkWhatIsPaypalUrl(Mage_Core_Model_Locale $locale = null)
709
+ {
710
+ $countryCode = 'US';
711
+ if (null !== $locale) {
712
+ $shouldEmulate = (null !== $this->_storeId) && (Mage::app()->getStore()->getId() != $this->_storeId);
713
+ if ($shouldEmulate) {
714
+ $locale->emulate($this->_storeId);
715
+ }
716
+ $countryCode = $locale->getLocale()->getRegion();
717
+ if ($shouldEmulate) {
718
+ $locale->revert();
719
+ }
720
+ }
721
+ return sprintf('https://www.paypal.com/%s/cgi-bin/webscr?cmd=xpt/Marketing/popup/OLCWhatIsPayPal-outside',
722
+ strtolower($countryCode)
723
+ );
724
+ }
725
+
726
+ /**
727
+ * Getter for Solution banner images
728
+ *
729
+ * @param string $localeCode
730
+ * @param bool $isVertical
731
+ * @param bool $isEcheck
732
+ */
733
+ public function getSolutionImageUrl($localeCode, $isVertical = false, $isEcheck = false)
734
+ {
735
+ return sprintf('https://www.paypal.com/%s/i/bnr/%s_solution_PP%s.gif',
736
+ $this->_getSupportedLocaleCode($localeCode),
737
+ $isVertical ? 'vertical' : 'horizontal', $isEcheck ? 'eCheck' : ''
738
+ );
739
+ }
740
+
741
+ /**
742
+ * Getter for Payment form logo images
743
+ *
744
+ * @param string $localeCode
745
+ */
746
+ public function getPaymentFormLogoUrl($localeCode)
747
+ {
748
+ $locale = $this->_getSupportedLocaleCode($localeCode);
749
+
750
+ $imageType = 'logo';
751
+ $domain = 'paypal.com';
752
+ list (,$country) = explode('_', $locale);
753
+ $countryPrefix = $country . '/';
754
+
755
+ switch ($locale) {
756
+ case 'en_GB':
757
+ $imageName = 'horizontal_solution_PP';
758
+ $imageType = 'bnr';
759
+ $countryPrefix = '';
760
+ break;
761
+ case 'de_DE':
762
+ $imageName = 'lockbox_150x47';
763
+ break;
764
+ case 'fr_FR':
765
+ $imageName = 'bnr_horizontal_solution_PP_327wx80h';
766
+ $imageType = 'bnr';
767
+ $locale = 'en_US';
768
+ $domain = 'paypalobjects.com';
769
+ break;
770
+ case 'it_IT':
771
+ $imageName = 'bnr_horizontal_solution_PP_178wx80h';
772
+ $imageType = 'bnr';
773
+ $domain = 'paypalobjects.com';
774
+ break;
775
+ default:
776
+ $imageName='PayPal_mark_60x38';
777
+ $countryPrefix = '';
778
+ break;
779
+ }
780
+ return sprintf('https://www.%s/%s/%si/%s/%s.gif', $domain, $locale, $countryPrefix, $imageType, $imageName);
781
+ }
782
+
783
+ /**
784
+ * Return supported types for PayPal logo
785
+ *
786
+ * @return array
787
+ */
788
+ public function getAdditionalOptionsLogoTypes()
789
+ {
790
+ return array(
791
+ 'wePrefer_150x60' => Mage::helper('paypal')->__('We prefer PayPal (150 X 60)'),
792
+ 'wePrefer_150x40' => Mage::helper('paypal')->__('We prefer PayPal (150 X 40)'),
793
+ 'nowAccepting_150x60' => Mage::helper('paypal')->__('Now accepting PayPal (150 X 60)'),
794
+ 'nowAccepting_150x40' => Mage::helper('paypal')->__('Now accepting PayPal (150 X 40)'),
795
+ 'paymentsBy_150x60' => Mage::helper('paypal')->__('Payments by PayPal (150 X 60)'),
796
+ 'paymentsBy_150x40' => Mage::helper('paypal')->__('Payments by PayPal (150 X 40)'),
797
+ 'shopNowUsing_150x60' => Mage::helper('paypal')->__('Shop now using (150 X 60)'),
798
+ 'shopNowUsing_150x40' => Mage::helper('paypal')->__('Shop now using (150 X 40)'),
799
+ );
800
+ }
801
+
802
+ /**
803
+ * Return PayPal logo URL with additional options
804
+ *
805
+ * @param string $localeCode Supported locale code
806
+ * @param string $type One of supported logo types
807
+ * @return string|bool Logo Image URL or false if logo disabled in configuration
808
+ */
809
+ public function getAdditionalOptionsLogoUrl($localeCode, $type = false)
810
+ {
811
+ $configType = Mage::getStoreConfig($this->_mapGenericStyleFieldset('logo'), $this->_storeId);
812
+ if (!$configType) {
813
+ return false;
814
+ }
815
+ $type = $type ? $type : $configType;
816
+ $locale = $this->_getSupportedLocaleCode($localeCode);
817
+ $supportedTypes = array_keys($this->getAdditionalOptionsLogoTypes());
818
+ if (!in_array($type, $supportedTypes)) {
819
+ $type = self::DEFAULT_LOGO_TYPE;
820
+ }
821
+ return sprintf('https://www.paypalobjects.com/%s/i/bnr/bnr_%s.gif', $locale, $type);
822
+ }
823
+
824
+ /**
825
+ * BN code getter
826
+ *
827
+ * @param string $countryCode ISO 3166-1
828
+ */
829
+ public function getBuildNotationCode($countryCode = null)
830
+ {
831
+ $product = 'WPP';
832
+ if ($this->_methodCode && isset($this->_buildNotationPPMap[$this->_methodCode])) {
833
+ $product = $this->_buildNotationPPMap[$this->_methodCode];
834
+ }
835
+ if (null === $countryCode) {
836
+ $countryCode = $this->_matchBnCountryCode($this->getMerchantCountry());
837
+ }
838
+ if ($countryCode) {
839
+ $countryCode = '_' . $countryCode;
840
+ }
841
+ return sprintf('Varien_Cart_%s%s', $product, $countryCode);
842
+ }
843
+
844
+ /**
845
+ * Express Checkout button "flavors" source getter
846
+ *
847
+ * @return array
848
+ */
849
+ public function getExpressCheckoutButtonFlavors()
850
+ {
851
+ return array(
852
+ self::EC_FLAVOR_DYNAMIC => Mage::helper('paypal')->__('Dynamic'),
853
+ self::EC_FLAVOR_STATIC => Mage::helper('paypal')->__('Static'),
854
+ );
855
+ }
856
+
857
+ /**
858
+ * Express Checkout button types source getter
859
+ *
860
+ * @return array
861
+ */
862
+ public function getExpressCheckoutButtonTypes()
863
+ {
864
+ return array(
865
+ self::EC_BUTTON_TYPE_SHORTCUT => Mage::helper('paypal')->__('Shortcut'),
866
+ self::EC_BUTTON_TYPE_MARK => Mage::helper('paypal')->__('Acceptance Mark Image'),
867
+ );
868
+ }
869
+
870
+ /**
871
+ * Payment actions source getter
872
+ *
873
+ * @return array
874
+ */
875
+ public function getPaymentActions()
876
+ {
877
+ $paymentActions = array(
878
+ self::PAYMENT_ACTION_AUTH => Mage::helper('paypal')->__('Authorization'),
879
+ self::PAYMENT_ACTION_SALE => Mage::helper('paypal')->__('Sale')
880
+ );
881
+ if (!is_null($this->_methodCode) && $this->_methodCode == self::METHOD_WPP_EXPRESS) {
882
+ $paymentActions[self::PAYMENT_ACTION_ORDER] = Mage::helper('paypal')->__('Order');
883
+ }
884
+ return $paymentActions;
885
+ }
886
+
887
+ /**
888
+ * Require Billing Address source getter
889
+ *
890
+ * @return array
891
+ */
892
+ public function getRequireBillingAddressOptions()
893
+ {
894
+ return array(
895
+ self::REQUIRE_BILLING_ADDRESS_ALL => Mage::helper('paypal')->__('Yes'),
896
+ self::REQUIRE_BILLING_ADDRESS_NO => Mage::helper('paypal')->__('No'),
897
+ self::REQUIRE_BILLING_ADDRESS_VIRTUAL => Mage::helper('paypal')->__('For Virtual Quotes Only'),
898
+ );
899
+ }
900
+
901
+ /**
902
+ * Mapper from PayPal-specific payment actions to Magento payment actions
903
+ *
904
+ * @return string|null
905
+ */
906
+ public function getPaymentAction()
907
+ {
908
+ switch ($this->paymentAction) {
909
+ case self::PAYMENT_ACTION_AUTH:
910
+ return Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE;
911
+ case self::PAYMENT_ACTION_SALE:
912
+ return Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE;
913
+ case self::PAYMENT_ACTION_ORDER:
914
+ return Mage_Payment_Model_Method_Abstract::ACTION_ORDER;
915
+ }
916
+ }
917
+
918
+ /**
919
+ * Returns array of possible Authorization Amounts for Account Verification
920
+ *
921
+ * @deprecated since 1.6.2.0
922
+ * @return array
923
+ */
924
+ public function getAuthorizationAmounts()
925
+ {
926
+ return array();
927
+ }
928
+
929
+ /**
930
+ * Express Checkout "solution types" source getter
931
+ * "sole" = "Express Checkout for Auctions" - PayPal allows guest checkout
932
+ * "mark" = "Normal Express Checkout" - PayPal requires to checkout with PayPal buyer account only
933
+ *
934
+ * @return array
935
+ */
936
+ public function getExpressCheckoutSolutionTypes()
937
+ {
938
+ return array(
939
+ self::EC_SOLUTION_TYPE_SOLE => Mage::helper('paypal')->__('Yes'),
940
+ self::EC_SOLUTION_TYPE_MARK => Mage::helper('paypal')->__('No'),
941
+ );
942
+ }
943
+
944
+ /**
945
+ * Retrieve express checkout billing agreement signup options
946
+ *
947
+ * @return array
948
+ */
949
+ public function getExpressCheckoutBASignupOptions()
950
+ {
951
+ return array(
952
+ self::EC_BA_SIGNUP_AUTO => Mage::helper('paypal')->__('Auto'),
953
+ self::EC_BA_SIGNUP_ASK => Mage::helper('paypal')->__('Ask Customer'),
954
+ self::EC_BA_SIGNUP_NEVER => Mage::helper('paypal')->__('Never')
955
+ );
956
+ }
957
+
958
+ /**
959
+ * Whether to ask customer to create billing agreements
960
+ * Unilateral payments are incompatible with the billing agreements
961
+ *
962
+ * @return bool
963
+ */
964
+ public function shouldAskToCreateBillingAgreement()
965
+ {
966
+ return ($this->allow_ba_signup === self::EC_BA_SIGNUP_ASK) && !$this->shouldUseUnilateralPayments();
967
+ }
968
+
969
+ /**
970
+ * Check whether only Unilateral payments (Accelerated Boarding) possible for Express method or not
971
+ *
972
+ * @return bool
973
+ */
974
+ public function shouldUseUnilateralPayments()
975
+ {
976
+ return $this->business_account && !$this->isWppApiAvailabe();
977
+ }
978
+
979
+ /**
980
+ * Check whether WPP API credentials are available for this method
981
+ *
982
+ * @return bool
983
+ */
984
+ public function isWppApiAvailabe()
985
+ {
986
+ return $this->api_username && $this->api_password && ($this->api_signature || $this->api_cert);
987
+ }
988
+
989
+ /**
990
+ * Payment data delivery methods getter for PayPal Standard
991
+ *
992
+ * @return array
993
+ */
994
+ public function getWpsPaymentDeliveryMethods()
995
+ {
996
+ return array(
997
+ self::WPS_TRANSPORT_IPN => Mage::helper('adminhtml')->__('IPN (Instant Payment Notification) Only'),
998
+ // not supported yet:
999
+ // self::WPS_TRANSPORT_PDT => Mage::helper('adminhtml')->__('PDT (Payment Data Transfer) Only'),
1000
+ // self::WPS_TRANSPORT_IPN_PDT => Mage::helper('adminhtml')->__('Both IPN and PDT'),
1001
+ );
1002
+ }
1003
+
1004
+ /**
1005
+ * Return list of supported credit card types by Paypal Direct gateway
1006
+ *
1007
+ * @return array
1008
+ */
1009
+ public function getWppCcTypesAsOptionArray()
1010
+ {
1011
+ $model = Mage::getModel('payment/source_cctype')->setAllowedTypes(array('AE', 'VI', 'MC', 'SM', 'SO', 'DI'));
1012
+ return $model->toOptionArray();
1013
+ }
1014
+
1015
+ /**
1016
+ * Return list of supported credit card types by Paypal Direct (Payflow Edition) gateway
1017
+ *
1018
+ * @return array
1019
+ */
1020
+ public function getWppPeCcTypesAsOptionArray()
1021
+ {
1022
+ $model = Mage::getModel('payment/source_cctype')->setAllowedTypes(array('VI', 'MC', 'SM', 'SO', 'OT', 'AE'));
1023
+ return $model->toOptionArray();
1024
+ }
1025
+
1026
+ /**
1027
+ * Return list of supported credit card types by Payflow Pro gateway
1028
+ *
1029
+ * @return array
1030
+ */
1031
+ public function getPayflowproCcTypesAsOptionArray()
1032
+ {
1033
+ $model = Mage::getModel('payment/source_cctype')->setAllowedTypes(array('AE', 'VI', 'MC', 'JCB', 'DI'));
1034
+ return $model->toOptionArray();
1035
+ }
1036
+
1037
+ /**
1038
+ * Check whether the specified payment method is a CC-based one
1039
+ *
1040
+ * @param string $code
1041
+ * @return bool
1042
+ */
1043
+ public static function getIsCreditCardMethod($code)
1044
+ {
1045
+ switch ($code) {
1046
+ case self::METHOD_WPP_DIRECT:
1047
+ case self::METHOD_WPP_PE_DIRECT:
1048
+ case self::METHOD_PAYFLOWPRO:
1049
+ case self::METHOD_PAYFLOWLINK:
1050
+ case self::METHOD_PAYFLOWADVANCED:
1051
+ case self::METHOD_HOSTEDPRO:
1052
+ return true;
1053
+ }
1054
+ return false;
1055
+ }
1056
+
1057
+ /**
1058
+ * Check whether specified currency code is supported
1059
+ *
1060
+ * @param string $code
1061
+ * @return bool
1062
+ */
1063
+ public function isCurrencyCodeSupported($code)
1064
+ {
1065
+ if (in_array($code, $this->_supportedCurrencyCodes)) {
1066
+ return true;
1067
+ }
1068
+ if ($this->getMerchantCountry() == 'BR' && $code == 'BRL') {
1069
+ return true;
1070
+ }
1071
+ if ($this->getMerchantCountry() == 'MY' && $code == 'MYR') {
1072
+ return true;
1073
+ }
1074
+ return false;
1075
+ }
1076
+
1077
+ /**
1078
+ * Export page style current settings to specified object
1079
+ *
1080
+ * @param Varien_Object $to
1081
+ */
1082
+ public function exportExpressCheckoutStyleSettings(Varien_Object $to)
1083
+ {
1084
+ foreach ($this->_ecStyleConfigMap as $key => $exportKey) {
1085
+ if ($this->$key) {
1086
+ $to->setData($exportKey, $this->$key);
1087
+ }
1088
+ }
1089
+ }
1090
+
1091
+ /**
1092
+ * Dynamic PayPal image URL getter
1093
+ * Also can render dynamic Acceptance Mark
1094
+ *
1095
+ * @param string $type
1096
+ * @param string $localeCode
1097
+ * @param float $orderTotal
1098
+ * @param string $pal
1099
+ */
1100
+ protected function _getDynamicImageUrl($type, $localeCode, $orderTotal, $pal)
1101
+ {
1102
+ $params = array(
1103
+ 'cmd' => '_dynamic-image',
1104
+ 'buttontype' => $type,
1105
+ 'locale' => $this->_getSupportedLocaleCode($localeCode),
1106
+ );
1107
+ if ($orderTotal) {
1108
+ $params['ordertotal'] = sprintf('%.2F', $orderTotal);
1109
+ if ($pal) {
1110
+ $params['pal'] = $pal;
1111
+ }
1112
+ }
1113
+ return sprintf('https://fpdbs%s.paypal.com/dynamicimageweb?%s',
1114
+ $this->sandboxFlag ? '.sandbox' : '', http_build_query($params)
1115
+ );
1116
+ }
1117
+
1118
+ /**
1119
+ * Check whether specified locale code is supported. Fallback to en_US
1120
+ *
1121
+ * @param string $localeCode
1122
+ * @return string
1123
+ */
1124
+ protected function _getSupportedLocaleCode($localeCode = null)
1125
+ {
1126
+ if (!$localeCode || !in_array($localeCode, $this->_supportedImageLocales)) {
1127
+ return 'en_US';
1128
+ }
1129
+ return $localeCode;
1130
+ }
1131
+
1132
+ /**
1133
+ * Map any supported payment method into a config path by specified field name
1134
+ *
1135
+ * @param string $fieldName
1136
+ * @return string|null
1137
+ */
1138
+ protected function _getSpecificConfigPath($fieldName)
1139
+ {
1140
+ $path = null;
1141
+ switch ($this->_methodCode) {
1142
+ case self::METHOD_WPS:
1143
+ $path = $this->_mapStandardFieldset($fieldName);
1144
+ break;
1145
+ case self::METHOD_WPP_EXPRESS:
1146
+ case self::METHOD_WPP_PE_EXPRESS:
1147
+ $path = $this->_mapExpressFieldset($fieldName);
1148
+ break;
1149
+ case self::METHOD_WPP_DIRECT:
1150
+ case self::METHOD_WPP_PE_DIRECT:
1151
+ $path = $this->_mapDirectFieldset($fieldName);
1152
+ break;
1153
+ case self::METHOD_BILLING_AGREEMENT:
1154
+ case self::METHOD_HOSTEDPRO:
1155
+ $path = $this->_mapMethodFieldset($fieldName);
1156
+ break;
1157
+ }
1158
+
1159
+ if ($path === null) {
1160
+ switch ($this->_methodCode) {
1161
+ case self::METHOD_WPP_EXPRESS:
1162
+ case self::METHOD_WPP_DIRECT:
1163
+ case self::METHOD_BILLING_AGREEMENT:
1164
+ case self::METHOD_HOSTEDPRO:
1165
+ $path = $this->_mapWppFieldset($fieldName);
1166
+ break;
1167
+ case self::METHOD_WPP_PE_EXPRESS:
1168
+ case self::METHOD_WPP_PE_DIRECT:
1169
+ case self::METHOD_PAYFLOWADVANCED:
1170
+ case self::METHOD_PAYFLOWLINK:
1171
+ $path = $this->_mapWpukFieldset($fieldName);
1172
+ break;
1173
+ }
1174
+ }
1175
+
1176
+ if ($path === null) {
1177
+ $path = $this->_mapGeneralFieldset($fieldName);
1178
+ }
1179
+ if ($path === null) {
1180
+ $path = $this->_mapGenericStyleFieldset($fieldName);
1181
+ }
1182
+ return $path;
1183
+ }
1184
+
1185
+ /**
1186
+ * Check wheter specified country code is supported by build notation codes for specific countries
1187
+ *
1188
+ * @param $code
1189
+ * @return string|null
1190
+ */
1191
+ private function _matchBnCountryCode($code)
1192
+ {
1193
+ switch ($code) {
1194
+ // GB == UK
1195
+ case 'GB':
1196
+ return 'UK';
1197
+ // Australia, Austria, Belgium, Canada, China, France, Germany, Hong Kong, Italy
1198
+ case 'AU': case 'AT': case 'BE': case 'CA': case 'CN': case 'FR': case 'DE': case 'HK': case 'IT':
1199
+ // Japan, Mexico, Netherlands, Poland, Singapore, Spain, Switzerland, United Kingdom, United States
1200
+ case 'JP': case 'MX': case 'NL': case 'PL': case 'SG': case 'ES': case 'CH': case 'UK': case 'US':
1201
+ return $code;
1202
+ }
1203
+ }
1204
+
1205
+ /**
1206
+ * Map PayPal Standard config fields
1207
+ *
1208
+ * @param string $fieldName
1209
+ * @return string|null
1210
+ */
1211
+ protected function _mapStandardFieldset($fieldName)
1212
+ {
1213
+ switch ($fieldName)
1214
+ {
1215
+ case 'line_items_summary':
1216
+ case 'sandbox_flag':
1217
+ return 'payment/' . self::METHOD_WPS . "/{$fieldName}";
1218
+ default:
1219
+ return $this->_mapMethodFieldset($fieldName);
1220
+ }
1221
+ }
1222
+
1223
+ /**
1224
+ * Map PayPal Express config fields
1225
+ *
1226
+ * @param string $fieldName
1227
+ * @return string|null
1228
+ */
1229
+ protected function _mapExpressFieldset($fieldName)
1230
+ {
1231
+ switch ($fieldName)
1232
+ {
1233
+ case 'transfer_shipping_options':
1234
+ case 'solution_type':
1235
+ case 'visible_on_cart':
1236
+ case 'visible_on_product':
1237
+ case 'require_billing_address':
1238
+ case 'authorization_honor_period':
1239
+ case 'order_valid_period':
1240
+ case 'child_authorization_number':
1241
+ case 'allow_ba_signup':
1242
+ return "payment/{$this->_methodCode}/{$fieldName}";
1243
+ default:
1244
+ return $this->_mapMethodFieldset($fieldName);
1245
+ }
1246
+ }
1247
+
1248
+ /**
1249
+ * Map PayPal Direct config fields
1250
+ *
1251
+ * @param string $fieldName
1252
+ * @return string|null
1253
+ */
1254
+ protected function _mapDirectFieldset($fieldName)
1255
+ {
1256
+ switch ($fieldName)
1257
+ {
1258
+ case 'useccv':
1259
+ case 'centinel':
1260
+ case 'centinel_is_mode_strict':
1261
+ case 'centinel_api_url':
1262
+ return "payment/{$this->_methodCode}/{$fieldName}";
1263
+ default:
1264
+ return $this->_mapMethodFieldset($fieldName);
1265
+ }
1266
+ }
1267
+
1268
+ /**
1269
+ * Map PayPal Website Payments Pro common config fields
1270
+ *
1271
+ * @param string $fieldName
1272
+ * @return string|null
1273
+ */
1274
+ protected function _mapWppFieldset($fieldName)
1275
+ {
1276
+ switch ($fieldName)
1277
+ {
1278
+ case 'api_authentication':
1279
+ case 'api_username':
1280
+ case 'api_password':
1281
+ case 'api_signature':
1282
+ case 'api_cert':
1283
+ case 'sandbox_flag':
1284
+ case 'use_proxy':
1285
+ case 'proxy_host':
1286
+ case 'proxy_port':
1287
+ case 'button_flavor':
1288
+ return "paypal/wpp/{$fieldName}";
1289
+ default:
1290
+ return null;
1291
+ }
1292
+ }
1293
+
1294
+ /**
1295
+ * Map PayPal Website Payments Pro common config fields
1296
+ *
1297
+ * @param string $fieldName
1298
+ * @return string|null
1299
+ */
1300
+ protected function _mapWpukFieldset($fieldName)
1301
+ {
1302
+ $pathPrefix = 'paypal/wpuk';
1303
+ // Use PUMP credentials from Verisign for EC when Direct Payments are unavailable
1304
+ if ($this->_methodCode == self::METHOD_WPP_PE_EXPRESS
1305
+ && !$this->isMethodAvailable(self::METHOD_WPP_PE_DIRECT)) {
1306
+ $pathPrefix = 'payment/verisign';
1307
+ } elseif ($this->_methodCode == self::METHOD_PAYFLOWADVANCED
1308
+ || $this->_methodCode == self::METHOD_PAYFLOWLINK
1309
+ ) {
1310
+ $pathPrefix = 'payment/' . $this->_methodCode;
1311
+ }
1312
+ switch ($fieldName) {
1313
+ case 'partner':
1314
+ case 'user':
1315
+ case 'vendor':
1316
+ case 'pwd':
1317
+ case 'sandbox_flag':
1318
+ case 'use_proxy':
1319
+ case 'proxy_host':
1320
+ case 'proxy_port':
1321
+ return $pathPrefix . '/' . $fieldName;
1322
+ default:
1323
+ return null;
1324
+ }
1325
+ }
1326
+
1327
+ /**
1328
+ * Map PayPal common style config fields
1329
+ *
1330
+ * @param string $fieldName
1331
+ * @return string|null
1332
+ */
1333
+ protected function _mapGenericStyleFieldset($fieldName)
1334
+ {
1335
+ switch ($fieldName) {
1336
+ case 'logo':
1337
+ case 'page_style':
1338
+ case 'paypal_hdrimg':
1339
+ case 'paypal_hdrbackcolor':
1340
+ case 'paypal_hdrbordercolor':
1341
+ case 'paypal_payflowcolor':
1342
+ return "paypal/style/{$fieldName}";
1343
+ default:
1344
+ return null;
1345
+ }
1346
+ }
1347
+
1348
+ /**
1349
+ * Map PayPal General Settings
1350
+ *
1351
+ * @param string $fieldName
1352
+ * @return string|null
1353
+ */
1354
+ protected function _mapGeneralFieldset($fieldName)
1355
+ {
1356
+ switch ($fieldName)
1357
+ {
1358
+ case 'business_account':
1359
+ case 'merchant_country':
1360
+ return "paypal/general/{$fieldName}";
1361
+ default:
1362
+ return null;
1363
+ }
1364
+ }
1365
+
1366
+ /**
1367
+ * Map PayPal General Settings
1368
+ *
1369
+ * @param string $fieldName
1370
+ * @return string|null
1371
+ */
1372
+ protected function _mapMethodFieldset($fieldName)
1373
+ {
1374
+ if (!$this->_methodCode) {
1375
+ return null;
1376
+ }
1377
+ switch ($fieldName)
1378
+ {
1379
+ case 'active':
1380
+ case 'title':
1381
+ case 'payment_action':
1382
+ case 'allowspecific':
1383
+ case 'specificcountry':
1384
+ case 'line_items_enabled':
1385
+ case 'cctypes':
1386
+ case 'sort_order':
1387
+ case 'debug':
1388
+ case 'verify_peer':
1389
+ return "payment/{$this->_methodCode}/{$fieldName}";
1390
+ default:
1391
+ return null;
1392
+ }
1393
+ }
1394
+
1395
+ /**
1396
+ * Payment API authentication methods source getter
1397
+ *
1398
+ * @return array
1399
+ */
1400
+ public function getApiAuthenticationMethods()
1401
+ {
1402
+ return array(
1403
+ '0' => Mage::helper('paypal')->__('API Signature'),
1404
+ '1' => Mage::helper('paypal')->__('API Certificate')
1405
+ );
1406
+ }
1407
+
1408
+ /**
1409
+ * Api certificate getter
1410
+ *
1411
+ * @return string
1412
+ */
1413
+ public function getApiCertificate()
1414
+ {
1415
+ $websiteId = Mage::app()->getStore($this->_storeId)->getWebsiteId();
1416
+ return Mage::getModel('paypal/cert')->loadByWebsite($websiteId, false)->getCertPath();
1417
+ }
1418
+ }
1419
+
app/code/local/Ced/LayBuy/Model/Express.php ADDED
@@ -0,0 +1,771 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Paypal
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ *
29
+ * PayPal Express Module
30
+ */
31
+ class Ced_LayBuy_Model_Express extends Mage_Payment_Model_Method_Abstract
32
+ implements Mage_Payment_Model_Recurring_Profile_MethodInterface
33
+ {
34
+ protected $_code = "laybuy_express";
35
+ //protected $_formBlockType = 'laybuy/express_form';
36
+ // protected $_infoBlockType = 'laybuy/payment_info';
37
+ protected $_formBlockType = 'laybuy/form_laybuy';
38
+ protected $_infoBlockType = 'laybuy/info_laybuy';
39
+ /**
40
+ * Website Payments Pro instance type
41
+ *
42
+ * @var $_proType string
43
+ */
44
+ protected $_proType = 'laybuy/pro';
45
+
46
+ /**
47
+ * Availability options
48
+ */
49
+ protected $_isGateway = false;
50
+ protected $_canOrder = true;
51
+ protected $_canAuthorize = true;
52
+ protected $_canCapture = true;
53
+ protected $_canCapturePartial = true;
54
+ protected $_canRefund = true;
55
+ protected $_canRefundInvoicePartial = true;
56
+ protected $_canVoid = true;
57
+ protected $_canUseInternal = false;
58
+ protected $_canUseCheckout = true;
59
+ protected $_canUseForMultishipping = false;
60
+ protected $_canFetchTransactionInfo = true;
61
+ protected $_canCreateBillingAgreement = true;
62
+ protected $_canReviewPayment = true;
63
+
64
+ /**
65
+ * Website Payments Pro instance
66
+ *
67
+ * @var Mage_Paypal_Model_Pro
68
+ */
69
+ protected $_pro = null;
70
+
71
+ /**
72
+ * Payment additional information key for payment action
73
+ * @var string
74
+ */
75
+ protected $_isOrderPaymentActionKey = 'is_order_action';
76
+
77
+ /**
78
+ * Payment additional information key for number of used authorizations
79
+ * @var string
80
+ */
81
+ protected $_authorizationCountKey = 'authorization_count';
82
+
83
+ public function __construct($params = array())
84
+ {
85
+ $proInstance = array_shift($params);
86
+ if ($proInstance && ($proInstance instanceof Ced_LayBuy_Model_Pro)) {
87
+ $this->_pro = $proInstance;
88
+ } else {
89
+ $this->_pro = Mage::getModel($this->_proType);
90
+ }
91
+ $this->_pro->setMethod($this->_code);
92
+
93
+ }
94
+
95
+ /**
96
+ * Store setter
97
+ * Also updates store ID in config object
98
+ *
99
+ * @param Mage_Core_Model_Store|int $store
100
+ */
101
+ public function setStore($store)
102
+ {
103
+ $this->setData('store', $store);
104
+ if (null === $store) {
105
+ $store = Mage::app()->getStore()->getId();
106
+ }
107
+ $this->_pro->getConfig()->setStoreId(is_object($store) ? $store->getId() : $store);
108
+ return $this;
109
+ }
110
+
111
+ /**
112
+ * Can be used in regular checkout
113
+ *
114
+ * @return bool
115
+ */
116
+ public function canUseCheckout()
117
+ {
118
+ if (Mage::getStoreConfigFlag('payment/hosted_pro/active')
119
+ && !Mage::getStoreConfigFlag('payment/hosted_pro/display_ec')
120
+ ) {
121
+ return false;
122
+ }
123
+ return parent::canUseCheckout();
124
+ }
125
+
126
+ /**
127
+ * Whether method is available for specified currency
128
+ *
129
+ * @param string $currencyCode
130
+ * @return bool
131
+ */
132
+ public function canUseForCurrency($currencyCode)
133
+ {
134
+ return $this->_pro->getConfig()->isCurrencyCodeSupported($currencyCode);
135
+ }
136
+
137
+ /**
138
+ * Payment action getter compatible with payment model
139
+ *
140
+ * @see Mage_Sales_Model_Payment::place()
141
+ * @return string
142
+ */
143
+ public function getConfigPaymentAction()
144
+ {
145
+ /* echo get_class($this->_pro);
146
+ var_dump($this->_pro->getConfig()->getPaymentAction());die("herrooo"); */
147
+ return 'authorize';
148
+ }
149
+
150
+ /**
151
+ * Check whether payment method can be used
152
+ * @param Mage_Sales_Model_Quote
153
+ * @return bool
154
+ */
155
+ /* public function isAvailable($quote = null)
156
+ {
157
+ if (parent::isAvailable($quote) && $this->_pro->getConfig()->isMethodAvailable()) {
158
+ return true;
159
+ }
160
+ return false;
161
+ } */
162
+
163
+ /**
164
+ * Custom getter for payment configuration
165
+ *
166
+ * @param string $field
167
+ * @param int $storeId
168
+ * @return mixed
169
+ */
170
+ public function getConfigData($field, $storeId = null)
171
+ {
172
+ return $this->_pro->getConfig()->$field;
173
+ }
174
+
175
+ /**
176
+ * Order payment
177
+ *
178
+ * @param Mage_Sales_Model_Order_Payment $payment
179
+ * @param float $amount
180
+ * @return Mage_Paypal_Model_Express
181
+ */
182
+ public function order(Varien_Object $payment, $amount)
183
+ {
184
+ $this->_placeOrder($payment, $amount);
185
+
186
+ $payment->setAdditionalInformation($this->_isOrderPaymentActionKey, true);
187
+
188
+ if ($payment->getIsFraudDetected()) {
189
+ return $this;
190
+ }
191
+
192
+ $order = $payment->getOrder();
193
+ $orderTransactionId = $payment->getTransactionId();
194
+
195
+ $api = $this->_callDoAuthorize($amount, $payment, $payment->getTransactionId());
196
+
197
+ $state = Mage_Sales_Model_Order::STATE_PROCESSING;
198
+ $status = true;
199
+
200
+ $formatedPrice = $order->getBaseCurrency()->formatTxt($amount);
201
+ if ($payment->getIsTransactionPending()) {
202
+ $message = Mage::helper('laybuy')->__('Ordering amount of %s is pending approval on gateway.', $formatedPrice);
203
+ $state = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW;
204
+ } else {
205
+ $message = Mage::helper('laybuy')->__('Ordered amount of %s.', $formatedPrice);
206
+ }
207
+
208
+ $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_ORDER, null, false, $message);
209
+
210
+ $this->_pro->importPaymentInfo($api, $payment);
211
+
212
+ if ($payment->getIsTransactionPending()) {
213
+ $message = Mage::helper('laybuy')->__('Authorizing amount of %s is pending approval on gateway.', $formatedPrice);
214
+ $state = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW;
215
+ if ($payment->getIsFraudDetected()) {
216
+ $status = Mage_Sales_Model_Order::STATUS_FRAUD;
217
+ }
218
+ } else {
219
+ $message = Mage::helper('laybuy')->__('Authorized amount of %s.', $formatedPrice);
220
+ }
221
+
222
+ $payment->resetTransactionAdditionalInfo();
223
+
224
+ $payment->setTransactionId($api->getTransactionId());
225
+ $payment->setParentTransactionId($orderTransactionId);
226
+
227
+ $transaction = $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_AUTH, null, false,
228
+ $message
229
+ );
230
+
231
+ $order->setState($state, $status);
232
+
233
+ $payment->setSkipOrderProcessing(true);
234
+ return $this;
235
+ }
236
+
237
+ /**
238
+ * Authorize payment
239
+ *
240
+ * @param Mage_Sales_Model_Order_Payment $payment
241
+ * @param float $amount
242
+ * @return Mage_Paypal_Model_Express
243
+ */
244
+ public function authorize(Varien_Object $payment, $amount)
245
+ {
246
+ return $this->_placeOrder($payment, $amount);
247
+ }
248
+
249
+ /**
250
+ * Void payment
251
+ *
252
+ * @param Mage_Sales_Model_Order_Payment $payment
253
+ * @return Mage_Paypal_Model_Express
254
+ */
255
+ public function void(Varien_Object $payment)
256
+ {
257
+ //Switching to order transaction if needed
258
+ if ($payment->getAdditionalInformation($this->_isOrderPaymentActionKey)
259
+ && !$payment->getVoidOnlyAuthorization()
260
+ ) {
261
+ $orderTransaction = $payment->lookupTransaction(
262
+ false, Mage_Sales_Model_Order_Payment_Transaction::TYPE_ORDER
263
+ );
264
+ if ($orderTransaction) {
265
+ $payment->setParentTransactionId($orderTransaction->getTxnId());
266
+ $payment->setTransactionId($orderTransaction->getTxnId() . '-void');
267
+ }
268
+ }
269
+ $this->_pro->void($payment);
270
+ return $this;
271
+ }
272
+
273
+
274
+
275
+ /**
276
+ * Refund capture
277
+ *
278
+ * @param Mage_Sales_Model_Order_Payment $payment
279
+ * @param float $amount
280
+ * @return Mage_Paypal_Model_Express
281
+ */
282
+ public function refund(Varien_Object $payment, $amount)
283
+ {
284
+ $this->_pro->refund($payment, $amount);
285
+ return $this;
286
+ }
287
+
288
+
289
+
290
+ /**
291
+ * Whether payment can be reviewed
292
+ *
293
+ * @param Mage_Sales_Model_Order_Payment $payment
294
+ * @return bool
295
+ */
296
+ public function canReviewPayment(Mage_Payment_Model_Info $payment)
297
+ {
298
+ return parent::canReviewPayment($payment) && $this->_pro->canReviewPayment($payment);
299
+ }
300
+
301
+ /**
302
+ * Attempt to accept a pending payment
303
+ *
304
+ * @param Mage_Sales_Model_Order_Payment $payment
305
+ * @return bool
306
+ */
307
+ public function acceptPayment(Mage_Payment_Model_Info $payment)
308
+ {
309
+ parent::acceptPayment($payment);
310
+ return $this->_pro->reviewPayment($payment, Mage_Paypal_Model_Pro::PAYMENT_REVIEW_ACCEPT);
311
+ }
312
+
313
+ /**
314
+ * Attempt to deny a pending payment
315
+ *
316
+ * @param Mage_Sales_Model_Order_Payment $payment
317
+ * @return bool
318
+ */
319
+ public function denyPayment(Mage_Payment_Model_Info $payment)
320
+ {
321
+ parent::denyPayment($payment);
322
+ return $this->_pro->reviewPayment($payment, Mage_Paypal_Model_Pro::PAYMENT_REVIEW_DENY);
323
+ }
324
+
325
+ /**
326
+ * Checkout redirect URL getter for onepage checkout (hardcode)
327
+ *
328
+ * @see Mage_Checkout_OnepageController::savePaymentAction()
329
+ * @see Mage_Sales_Model_Quote_Payment::getCheckoutRedirectUrl()
330
+ * @return string
331
+ */
332
+ public function getCheckoutRedirectUrl()
333
+ {
334
+ return Mage::getUrl('laybuy/express/start');
335
+ }
336
+
337
+ /**
338
+ * Fetch transaction details info
339
+ *
340
+ * @param Mage_Payment_Model_Info $payment
341
+ * @param string $transactionId
342
+ * @return array
343
+ */
344
+ public function fetchTransactionInfo(Mage_Payment_Model_Info $payment, $transactionId)
345
+ {
346
+ return $this->_pro->fetchTransactionInfo($payment, $transactionId);
347
+ }
348
+
349
+ /**
350
+ * Validate RP data
351
+ *
352
+ * @param Mage_Payment_Model_Recurring_Profile $profile
353
+ */
354
+ public function validateRecurringProfile(Mage_Payment_Model_Recurring_Profile $profile)
355
+ {
356
+ return $this->_pro->validateRecurringProfile($profile);
357
+ }
358
+
359
+ /**
360
+ * Submit RP to the gateway
361
+ *
362
+ * @param Mage_Payment_Model_Recurring_Profile $profile
363
+ * @param Mage_Payment_Model_Info $paymentInfo
364
+ */
365
+ public function submitRecurringProfile(Mage_Payment_Model_Recurring_Profile $profile,
366
+ Mage_Payment_Model_Info $paymentInfo
367
+ ) {
368
+ $token = $paymentInfo->
369
+ getAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_TOKEN);
370
+ $profile->setToken($token);
371
+ $this->_pro->submitRecurringProfile($profile, $paymentInfo);
372
+ }
373
+
374
+ /**
375
+ * Fetch RP details
376
+ *
377
+ * @param string $referenceId
378
+ * @param Varien_Object $result
379
+ */
380
+ public function getRecurringProfileDetails($referenceId, Varien_Object $result)
381
+ {
382
+ return $this->_pro->getRecurringProfileDetails($referenceId, $result);
383
+ }
384
+
385
+ /**
386
+ * Whether can get recurring profile details
387
+ */
388
+ public function canGetRecurringProfileDetails()
389
+ {
390
+ return true;
391
+ }
392
+
393
+ /**
394
+ * Update RP data
395
+ *
396
+ * @param Mage_Payment_Model_Recurring_Profile $profile
397
+ */
398
+ public function updateRecurringProfile(Mage_Payment_Model_Recurring_Profile $profile)
399
+ {
400
+ return $this->_pro->updateRecurringProfile($profile);
401
+ }
402
+
403
+ /**
404
+ * Manage status
405
+ *
406
+ * @param Mage_Payment_Model_Recurring_Profile $profile
407
+ */
408
+ public function updateRecurringProfileStatus(Mage_Payment_Model_Recurring_Profile $profile)
409
+ {
410
+ return $this->_pro->updateRecurringProfileStatus($profile);
411
+ }
412
+
413
+ /**
414
+ * Assign data to info model instance
415
+ *
416
+ * @param mixed $data
417
+ * @return Mage_Payment_Model_Info
418
+ */
419
+ public function assignData($data)
420
+ {
421
+ $result = parent::assignData($data);
422
+ $key = Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_BILLING_AGREEMENT;
423
+ if (is_array($data)) {
424
+ $this->getInfoInstance()->setAdditionalInformation($key, isset($data[$key]) ? $data[$key] : null);
425
+ }
426
+ elseif ($data instanceof Varien_Object) {
427
+ $this->getInfoInstance()->setAdditionalInformation($key, $data->getData($key));
428
+ }
429
+ return $result;
430
+ }
431
+
432
+ /**
433
+ * Place an order with authorization or capture action
434
+ *
435
+ * @param Mage_Sales_Model_Order_Payment $payment
436
+ * @param float $amount
437
+ * @return Mage_Paypal_Model_Express
438
+ */
439
+ protected function _placeOrder(Mage_Sales_Model_Order_Payment $payment, $amount)
440
+ {
441
+ $order = $payment->getOrder();
442
+
443
+ // prepare api call
444
+ $token = $payment->getAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_TOKEN);
445
+ $api = $this->_pro->getApi();
446
+ $api->setToken($token);
447
+ $api->setPayerId($payment->
448
+ getAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_PAYER_ID));
449
+ $api->setAmount($amount);
450
+ $api->setPaymentAction($this->_pro->getConfig()->paymentAction);
451
+ $api->setNotifyUrl(Mage::getUrl('paypal/ipn/'));
452
+ $api->setInvNum($order->getIncrementId());
453
+ $api->setCurrencyCode($order->getBaseCurrencyCode());
454
+ //$api->setPaypalCart(Mage::getModel('paypal/cart', array($order)));
455
+ $api->setIsLineItemsEnabled($this->_pro->getConfig()->lineItemsEnabled);
456
+
457
+ if ($order->getIsVirtual()) {
458
+ $api->setAddress($order->getBillingAddress())->setSuppressShipping(true);
459
+ } else {
460
+ $api->setAddress($order->getShippingAddress());
461
+ $api->setBillingAddress($order->getBillingAddress());
462
+ }
463
+ // call api and get details from it
464
+ $api->callDoExpressCheckoutPayment();
465
+ $this->_importToPayment($api, $payment);//$api
466
+
467
+ return $this;
468
+ }
469
+
470
+ /**
471
+ * Import payment info to payment
472
+ *
473
+ * @param Mage_Paypal_Model_Api_Nvp
474
+ * @param Mage_Sales_Model_Order_Payment
475
+ */
476
+ protected function _importToPayment($api, $payment)
477
+ {
478
+ $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(0)
479
+ ->setAdditionalInformation('laybuy_express_checkout_redirect_required',
480
+ $api->getRedirectRequired()
481
+ );
482
+ $model_obj=$api->getModelObject();
483
+ if ($model_obj->getBillingAgreementId()) {
484
+ $payment->setBillingAgreementData(array(
485
+ 'billing_agreement_id' => $model_obj->getBillingAgreementId(),
486
+ 'method_code' => 'laybuy_billing_agreement'
487
+ ));
488
+ }
489
+
490
+ $this->_pro->importPaymentInfo($model_obj, $payment);
491
+ }
492
+
493
+ /**
494
+ * Check void availability
495
+ *
496
+ * @param Varien_Object $payment
497
+ * @return bool
498
+ */
499
+ public function canVoid(Varien_Object $payment)
500
+ {
501
+ if ($payment instanceof Mage_Sales_Model_Order_Invoice
502
+ || $payment instanceof Mage_Sales_Model_Order_Creditmemo
503
+ ) {
504
+ return false;
505
+ }
506
+ $info = $this->getInfoInstance();
507
+ if ($info->getAdditionalInformation($this->_isOrderPaymentActionKey)) {
508
+ $orderTransaction = $info->lookupTransaction(
509
+ false, Mage_Sales_Model_Order_Payment_Transaction::TYPE_ORDER
510
+ );
511
+ if ($orderTransaction) {
512
+ $info->setParentTransactionId($orderTransaction->getTxnId());
513
+ }
514
+ }
515
+
516
+ return $this->_canVoid;
517
+ }
518
+
519
+ /**
520
+ * Check capture availability
521
+ *
522
+ * @return bool
523
+ */
524
+ public function canCapture()
525
+ {
526
+ $payment = $this->getInfoInstance();
527
+ $this->_pro->getConfig()->setStoreId($payment->getOrder()->getStore()->getId());
528
+
529
+ if ($payment->getAdditionalInformation($this->_isOrderPaymentActionKey)) {
530
+ $orderTransaction = $payment->lookupTransaction(false,
531
+ Mage_Sales_Model_Order_Payment_Transaction::TYPE_ORDER
532
+ );
533
+ if ($orderTransaction->getIsClosed()) {
534
+ return false;
535
+ }
536
+
537
+ $orderValidPeriod = abs(intval($this->getConfigData('order_valid_period')));
538
+
539
+ $dateCompass = new DateTime($orderTransaction->getCreatedAt());
540
+ $dateCompass->modify('+' . $orderValidPeriod . ' days');
541
+ $currentDate = new DateTime();
542
+
543
+ if ($currentDate > $dateCompass || $orderValidPeriod == 0) {
544
+ return false;
545
+ }
546
+ }
547
+ return $this->_canCapture;
548
+ }
549
+
550
+ /**
551
+ * Call DoAuthorize
552
+ *
553
+ * @param int $amount
554
+ * @param Varien_Object $payment
555
+ * @param string $parentTransactionId
556
+ * @return Mage_Paypal_Model_Api_Abstract
557
+ */
558
+ protected function _callDoAuthorize($amount, $payment, $parentTransactionId)
559
+ {
560
+ $api = $this->_pro->resetApi()->getApi()
561
+ ->setAmount($amount)
562
+ ->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())
563
+ ->setTransactionId($parentTransactionId)
564
+ ->callDoAuthorization();
565
+
566
+ $payment->setAdditionalInformation($this->_authorizationCountKey,
567
+ $payment->getAdditionalInformation($this->_authorizationCountKey) + 1
568
+ );
569
+
570
+ return $api;
571
+ }
572
+
573
+ /**
574
+ * Check transaction for expiration in PST
575
+ *
576
+ * @param Mage_Sales_Model_Order_Payment_Transaction $transaction
577
+ * @param int $period
578
+ * @return boolean
579
+ */
580
+ protected function _isTransactionExpired(Mage_Sales_Model_Order_Payment_Transaction $transaction, $period)
581
+ {
582
+ $period = intval($period);
583
+ if (0 == $period) {
584
+ return true;
585
+ }
586
+
587
+ $transactionClosingDate = new DateTime($transaction->getCreatedAt(), new DateTimeZone('GMT'));
588
+ $transactionClosingDate->setTimezone(new DateTimeZone('US/Pacific'));
589
+ /**
590
+ * 11:49:00 PayPal transactions closing time
591
+ */
592
+ $transactionClosingDate->setTime(11, 49, 00);
593
+ $transactionClosingDate->modify('+' . $period . ' days');
594
+
595
+ $currentTime = new DateTime(null, new DateTimeZone('US/Pacific'));
596
+
597
+ if ($currentTime > $transactionClosingDate) {
598
+ return true;
599
+ }
600
+
601
+ return false;
602
+ }
603
+
604
+ /***************************new code********************************/
605
+ /**
606
+ * Check whether payment method can be used
607
+ * @param Mage_Sales_Model_Quote
608
+ * @return bool
609
+ */
610
+ public function isAvailable($quote = null)
611
+ {
612
+ if ($status = parent::isAvailable($quote)) {
613
+
614
+ $storeId = $quote ? $quote->getStoreId() : null;
615
+
616
+ /* Condition for minimum checkout amount for method availability */
617
+ $configTotal = Mage::getStoreConfig('laybuy/conditional_criteria/total',$storeId);
618
+ $total = $quote ? $quote->getData('grand_total') : 0;
619
+ if($total && $status && $configTotal){
620
+ if($configTotal<$total){
621
+ $status = true;
622
+ }else{
623
+ $status = false;
624
+ }
625
+ }
626
+
627
+ /* Condition for customer groups for method availability */
628
+ if($status){
629
+ if(Mage::getStoreConfig('laybuy/conditional_criteria/allowspecificgroup',$storeId)) {
630
+ $configCustomerGroupId = explode(',',Mage::getStoreConfig('laybuy/conditional_criteria/customergroup',$storeId ));
631
+ $customerGroupId = $quote ? $quote->getData('customer_group_id'):-5;
632
+ if($customerGroupId != -5){
633
+ if($configCustomerGroupId && in_array($customerGroupId,$configCustomerGroupId)){
634
+ $status = true;
635
+ }else{
636
+ $status = false;
637
+ }
638
+ }
639
+ }
640
+ }
641
+
642
+ return $status;
643
+ }
644
+ }
645
+
646
+ /**
647
+ * Validate payment method information object
648
+ *
649
+ * @return Mage_Payment_Model_Abstract
650
+ */
651
+ public function validate()
652
+ {
653
+ /**
654
+ * to validate payment method is allowed for billing country or not
655
+ */
656
+ parent::validate();
657
+
658
+ $paymentInfo = $this->getInfoInstance();
659
+ if ($paymentInfo instanceof Mage_Sales_Model_Order_Payment) {
660
+ $cartItems = $paymentInfo->getOrder()->getAllItems();
661
+ $storeId = $paymentInfo->getOrder()->getStoreId();
662
+ } else {
663
+ $cartItems = $paymentInfo->getQuote()->getAllItems();
664
+ $storeId = $paymentInfo->getQuote()->getStoreId();
665
+ }
666
+ $flagArr = $this->canUseForCategories($cartItems, $storeId);
667
+ if (!$flagArr[0]) {
668
+ Mage::throwException(Mage::helper('laybuy')->__('Selected payment type is not allowed for '.$flagArr[1].' products.'));
669
+ }
670
+ return $this;
671
+ }
672
+ public function returnRestrictedProductNames($product_id="",$storeId=0){
673
+ $status = true;
674
+ $productName = '';
675
+ $configCategories = explode(',',Mage::getStoreConfig('laybuy/conditional_criteria/categories',$storeId ));
676
+ $xproducts = explode(',',Mage::getStoreConfig('laybuy/conditional_criteria/xproducts',$storeId));
677
+ $cartItems=Mage::getModel('checkout/cart')->getQuote()->getAllItems();
678
+ foreach($cartItems as $_product){
679
+ $_product = Mage::getModel('catalog/product')->load($_product->getProductId());
680
+ if($xproducts && in_array($_product->getId(),$xproducts)){
681
+ $status = false;
682
+ $productName .= $_product->getName().',';
683
+ } elseif(!Mage::getStoreConfig('laybuy/conditional_criteria/allowspecificcategory',$storeId)) {
684
+ $status = true;
685
+ } elseif ($configCategories && count(array_diff($_product->getCategoryIds(),$configCategories))>0){
686
+ $status = false;
687
+ $productName .= $_product->getName().',';
688
+ }
689
+ }
690
+ $productName = rtrim($productName,',');
691
+
692
+ return $productName;
693
+ }
694
+ public function checkForCategoriesAndProducts($product_id="",$storeId=0){
695
+ $status = true;
696
+ $productName = '';
697
+ $cartItems="";
698
+ $configCategories = explode(',',Mage::getStoreConfig('laybuy/conditional_criteria/categories',$storeId ));
699
+ $xproducts = explode(',',Mage::getStoreConfig('laybuy/conditional_criteria/xproducts',$storeId));
700
+ $controller_name=Mage::app()->getRequest()->getControllerName();
701
+ $action_name=Mage::app()->getRequest()->getActionName();
702
+ $module_name=Mage::app()->getRequest()->getModuleName();
703
+ if($controller_name=="product" && $module_name="catalog" && $action_name=="view" && $product_id !=""){
704
+ $_product = Mage::getModel('catalog/product')->load($product_id);
705
+ if($xproducts && in_array($_product->getId(),$xproducts)){
706
+ $status = false;
707
+ $productName .= $_product->getName().',';
708
+ } elseif(!Mage::getStoreConfig('laybuy/conditional_criteria/allowspecificcategory',$storeId)) {
709
+ $status = true;
710
+ } elseif ($configCategories && count(array_diff($_product->getCategoryIds(),$configCategories))>0){
711
+ $status = false;
712
+ $productName .= $_product->getName().',';
713
+ }
714
+
715
+ }else{
716
+ $cartItems=Mage::getModel('checkout/cart')->getQuote()->getAllItems();
717
+ foreach($cartItems as $_product){
718
+ $_product = Mage::getModel('catalog/product')->load($_product->getProductId());
719
+ if($xproducts && in_array($_product->getId(),$xproducts)){
720
+ $status = false;
721
+ $productName .= $_product->getName().',';
722
+ } elseif(!Mage::getStoreConfig('laybuy/conditional_criteria/allowspecificcategory',$storeId)) {
723
+ $status = true;
724
+ } elseif ($configCategories && count(array_diff($_product->getCategoryIds(),$configCategories))>0){
725
+ $status = false;
726
+ $productName .= $_product->getName().',';
727
+ }
728
+ if($status==false){
729
+ break;
730
+ }
731
+ }
732
+
733
+ }
734
+ return $status;
735
+
736
+ }
737
+
738
+ /**
739
+ * To check billing country is allowed for the payment method
740
+ *
741
+ * @return bool
742
+ */
743
+ public function canUseForCategories($cartItems = array(), $storeId=0)
744
+ {
745
+ /*
746
+ for specific categories, the flag will set up as 1
747
+ */
748
+ $status = true;
749
+ $productName = '';
750
+ $configCategories = explode(',',Mage::getStoreConfig('laybuy/conditional_criteria/categories',$storeId ));
751
+ $xproducts = explode(',',Mage::getStoreConfig('laybuy/conditional_criteria/xproducts',$storeId));
752
+
753
+ foreach($cartItems as $_product){
754
+ $_product = Mage::getModel('catalog/product')->load($_product->getProductId());
755
+ if($xproducts && in_array($_product->getId(),$xproducts)){
756
+ $status = false;
757
+ $productName .= $_product->getName().',';
758
+ } elseif(!Mage::getStoreConfig('laybuy/conditional_criteria/allowspecificcategory',$storeId)) {
759
+ $status = true;
760
+ } elseif ($configCategories && count(array_diff($_product->getCategoryIds(),$configCategories))>0){
761
+ $status = false;
762
+ $productName .= $_product->getName().',';
763
+ }
764
+ }
765
+ $productName = rtrim($productName,',');
766
+
767
+ return array($status,$productName);
768
+ }
769
+
770
+ /***************************ends************************************/
771
+ }
app/code/local/Ced/LayBuy/Model/Laybuyresp.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ced_LayBuy_Model_Laybuyresp extends Mage_Core_Model_Abstract
3
+ {
4
+
5
+ /**
6
+ * Initialize resource model
7
+ */
8
+ protected function _construct()
9
+ {
10
+ $this->_init('laybuy/laybuyresp');
11
+ }
12
+ }
app/code/local/Ced/LayBuy/Model/Mysql4/Laybuyresp.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ced_LayBuy_Model_Mysql4_Laybuyresp extends Mage_Core_Model_Mysql4_Abstract{
3
+
4
+ protected function _construct()
5
+
6
+ {
7
+
8
+ $this->_init('laybuy/laybuyresp', 'resp_id');
9
+
10
+ }
11
+ }
app/code/local/Ced/LayBuy/Model/Mysql4/Laybuyresp/Collection.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Lay-Buys
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Ced
22
+ * @package Ced_LayBuy
23
+ * @author Asheesh Singh<asheeshsingh@cedcoss.com>
24
+ * @copyright Copyright LAY-BUYS (2011). (http://lay-buys.com/)
25
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
26
+ */
27
+
28
+ /**
29
+ * LayBuy Report Collection model
30
+ */
31
+
32
+ class Ced_LayBuy_Model_Mysql4_Laybuyresp_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {
33
+ protected function _construct()
34
+ {
35
+ $this->_init('laybuy/laybuyresp');
36
+ }
37
+ }
app/code/local/Ced/LayBuy/Model/Mysql4/Region/Collection.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Directory
23
+ * @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Country collection
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Directory
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Ced_Laybuy_Model_Mysql4_Region_Collection extends Mage_Directory_Model_Mysql4_Region_Collection
35
+ {
36
+ /**
37
+ * Filter region by its code or name
38
+ *
39
+ * @param string|array $region
40
+ * @return Mage_Directory_Model_Resource_Region_Collection
41
+ */
42
+ public function addRegionCodeOrNameFilter($region)
43
+ {
44
+ if (!empty($region)) {
45
+ $condition = is_array($region) ? array('in' => $region) : $region;
46
+ $this->addFieldToFilter(array('region.code', 'region.default_name'), array($condition, $condition));
47
+ }
48
+ return $this;
49
+ }
50
+ }
app/code/local/Ced/LayBuy/Model/Pro.php ADDED
@@ -0,0 +1,484 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Paypal
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * PayPal Website Payments Pro implementation for payment method instaces
29
+ * This model was created because right now PayPal Direct and PayPal Express payment methods cannot have same abstract
30
+ */
31
+ class Ced_LayBuy_Model_Pro
32
+ {
33
+ /**
34
+ * Possible payment review actions (for FMF only)
35
+ *
36
+ * @var string
37
+ */
38
+ const PAYMENT_REVIEW_ACCEPT = 'accept';
39
+ const PAYMENT_REVIEW_DENY = 'deny';
40
+
41
+ /**
42
+ * Config instance
43
+ *
44
+ * @var Mage_Paypal_Model_Config
45
+ */
46
+ protected $_config = null;
47
+
48
+ /**
49
+ * API instance
50
+ *
51
+ * @var Mage_Paypal_Model_Api_Nvp
52
+ */
53
+ protected $_api = null;
54
+
55
+ /**
56
+ * PayPal info object
57
+ *
58
+ * @var Mage_Paypal_Model_Info
59
+ */
60
+ protected $_infoInstance = null;
61
+
62
+ /**
63
+ * API model type
64
+ *
65
+ * @var string
66
+ */
67
+ protected $_apiType = 'laybuy/api_nvp';
68
+
69
+ /**
70
+ * Config model type
71
+ *
72
+ * @var string
73
+ */
74
+ protected $_configType = 'laybuy/config';
75
+
76
+ /**
77
+ * Payment method code setter. Also instantiates/updates config
78
+ *
79
+ * @param string $code
80
+ * @param int|null $storeId
81
+ */
82
+ public function setMethod($code, $storeId = null)
83
+ {
84
+ if (null === $this->_config) {
85
+ $params = array($code);
86
+ if (null !== $storeId) {
87
+ $params[] = $storeId;
88
+ }
89
+ $this->_config = Mage::getModel($this->_configType, $params);
90
+
91
+ } else {
92
+ $this->_config->setMethod($code);
93
+ if (null !== $storeId) {
94
+ $this->_config->setStoreId($storeId);
95
+ }
96
+ }
97
+ return $this;
98
+ }
99
+
100
+ /**
101
+ * Config instance setter
102
+ *
103
+ * @param Mage_Paypal_Model_Config $instace
104
+ * @param int $storeId
105
+ */
106
+ public function setConfig(Mage_Paypal_Model_Config $instace, $storeId = null)
107
+ {
108
+ $this->_config = $instace;
109
+ if (null !== $storeId) {
110
+ $this->_config->setStoreId($storeId);
111
+ }
112
+ return $this;
113
+ }
114
+
115
+ /**
116
+ * Config instance getter
117
+ *
118
+ * @return Mage_Paypal_Model_Config
119
+ */
120
+ public function getConfig()
121
+ {
122
+ return $this->_config;
123
+ }
124
+
125
+ /**
126
+ * API instance getter
127
+ * Sets current store id to current config instance and passes it to API
128
+ *
129
+ * @return Mage_Paypal_Model_Api_Nvp
130
+ */
131
+ public function getApi()
132
+ {
133
+ if (null === $this->_api) {
134
+ //$this->_api = Mage::getModel($this->_apiType);
135
+ $this->_api=new Ced_LayBuy_ExpressController();
136
+ }
137
+ $this->_api->setConfigObject($this->_config);
138
+ return $this->_api;
139
+ }
140
+
141
+ /**
142
+ * Destroy existing NVP Api object
143
+ *
144
+ * @return Mage_Paypal_Model_Pro
145
+ */
146
+ public function resetApi()
147
+ {
148
+ $this->_api = null;
149
+
150
+ return $this;
151
+ }
152
+
153
+ /**
154
+ * Instantiate and return info model
155
+ *
156
+ * @return Mage_Paypal_Model_Info
157
+ */
158
+ public function getInfo()
159
+ {
160
+ if (null === $this->_infoInstance) {
161
+ $this->_infoInstance = new Ced_LayBuy_ExpressController();//Mage::getModel('paypal/info');
162
+ }
163
+ return $this->_infoInstance;
164
+ }
165
+
166
+ /**
167
+ * Transfer transaction/payment information from API instance to order payment
168
+ *
169
+ * @param Mage_Paypal_Model_Api_Abstract $from
170
+ * @param Mage_Payment_Model_Info $to
171
+ * @return Mage_Paypal_Model_Pro
172
+ */
173
+ public function importPaymentInfo(Varien_Object $from, Mage_Payment_Model_Info $to)
174
+ {
175
+ // update PayPal-specific payment information in the payment object
176
+ $this->getInfo()->importToPayment($from, $to);
177
+
178
+ /**
179
+ * Detect payment review and/or frauds
180
+ * PayPal pro API returns fraud results only in the payment call response
181
+ */
182
+ try{
183
+ //
184
+ //echo get_class($this->getInfo());die("kkkiran..");
185
+ if ($from->getDataUsingMethod(Ced_LayBuy_ExpressController::IS_FRAUD)) {//Mage_Paypal_Model_Info
186
+ $to->setIsTransactionPending(true);
187
+ $to->setIsFraudDetected(true);
188
+ } elseif ($this->getInfo()->isPaymentReviewRequired($to)) {//->getModelObject()
189
+ $to->setIsTransactionPending(true);
190
+ }
191
+
192
+ // give generic info about transaction state
193
+ if ($this->getInfo()->isPaymentSuccessful($to)) {
194
+ $to->setIsTransactionApproved(true);
195
+ } elseif ($this->getInfo()->isPaymentFailed($to)) {
196
+ $to->setIsTransactionDenied(true);
197
+ }
198
+ }catch(Exception $e){
199
+ echo $e->getMessage();die("hasan..");
200
+
201
+ }
202
+
203
+ return $this;
204
+ }
205
+
206
+ /**
207
+ * Void transaction
208
+ *
209
+ * @param Varien_Object $payment
210
+ */
211
+ public function void(Varien_Object $payment)
212
+ {
213
+ if ($authTransactionId = $this->_getParentTransactionId($payment)) {
214
+ $api = $this->getApi();
215
+ $api->setPayment($payment)->setAuthorizationId($authTransactionId)->callDoVoid();
216
+ $this->importPaymentInfo($api, $payment);
217
+ } else {
218
+ Mage::throwException(Mage::helper('laybuy')->__('Authorization transaction is required to void.'));
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Attempt to capture payment
224
+ * Will return false if the payment is not supposed to be captured
225
+ *
226
+ * @param Varien_Object $payment
227
+ * @param float $amount
228
+ * @return false|null
229
+ */
230
+ public function capture(Varien_Object $payment, $amount)
231
+ {
232
+ $authTransactionId = $this->_getParentTransactionId($payment);
233
+ if (!$authTransactionId) {
234
+ return false;
235
+ }
236
+ $api = $this->getApi()
237
+ ->setAuthorizationId($authTransactionId)
238
+ ->setIsCaptureComplete($payment->getShouldCloseParentTransaction())
239
+ ->setAmount($amount)
240
+ ->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())
241
+ ->setInvNum($payment->getOrder()->getIncrementId())
242
+ // TODO: pass 'NOTE' to API
243
+ ;
244
+
245
+ $api->callDoCapture();
246
+ $this->_importCaptureResultToPayment($api, $payment);
247
+ }
248
+
249
+ /**
250
+ * Refund a capture transaction
251
+ *
252
+ * @param Varien_Object $payment
253
+ * @param float $amount
254
+ */
255
+ public function refund(Varien_Object $payment, $amount)
256
+ {
257
+ $captureTxnId = $this->_getParentTransactionId($payment);
258
+ if ($captureTxnId) {
259
+ $api = $this->getApi();
260
+ $order = $payment->getOrder();
261
+ $api->setPayment($payment)
262
+ ->setTransactionId($captureTxnId)
263
+ ->setAmount($amount)
264
+ ->setCurrencyCode($order->getBaseCurrencyCode())
265
+ ;
266
+ $canRefundMore = $payment->getCreditmemo()->getInvoice()->canRefund();
267
+ $isFullRefund = !$canRefundMore
268
+ && (0 == ((float)$order->getBaseTotalOnlineRefunded() + (float)$order->getBaseTotalOfflineRefunded()));
269
+ $api->setRefundType($isFullRefund ? Mage_Paypal_Model_Config::REFUND_TYPE_FULL
270
+ : Mage_Paypal_Model_Config::REFUND_TYPE_PARTIAL
271
+ );
272
+ $api->callRefundTransaction();
273
+ $this->_importRefundResultToPayment($api, $payment, $canRefundMore);
274
+ } else {
275
+ Mage::throwException(Mage::helper('laybuy')->__('Impossible to issue a refund transaction because the capture transaction does not exist.'));
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Cancel payment
281
+ *
282
+ * @param Varien_Object $payment
283
+ */
284
+ public function cancel(Varien_Object $payment)
285
+ {
286
+ if (!$payment->getOrder()->getInvoiceCollection()->count()) {
287
+ $this->void($payment);
288
+ }
289
+ }
290
+
291
+ /**
292
+ *
293
+ * @param Mage_Sales_Model_Order_Payment $payment
294
+ * @return bool
295
+ */
296
+ public function canReviewPayment(Mage_Payment_Model_Info $payment)
297
+ {
298
+ return Mage_Paypal_Model_Info::isPaymentReviewRequired($payment);
299
+ }
300
+
301
+ /**
302
+ * Perform the payment review
303
+ *
304
+ * @param Mage_Payment_Model_Info $payment
305
+ * @param string $action
306
+ * @return bool
307
+ */
308
+ public function reviewPayment(Mage_Payment_Model_Info $payment, $action)
309
+ {
310
+ $api = $this->getApi()->setTransactionId($payment->getLastTransId());
311
+
312
+ // check whether the review is still needed
313
+ $api->callGetTransactionDetails();
314
+ $this->importPaymentInfo($api, $payment);
315
+ if (!$this->getInfo()->isPaymentReviewRequired($payment)) {
316
+ return false;
317
+ }
318
+
319
+ // perform the review action
320
+ $api->setAction($action)->callManagePendingTransactionStatus();
321
+ $api->callGetTransactionDetails();
322
+ $this->importPaymentInfo($api, $payment);
323
+ return true;
324
+ }
325
+
326
+ /**
327
+ * Fetch transaction details info
328
+ *
329
+ * @param Mage_Payment_Model_Info $payment
330
+ * @param string $transactionId
331
+ * @return array
332
+ */
333
+ public function fetchTransactionInfo(Mage_Payment_Model_Info $payment, $transactionId)
334
+ {
335
+ $api = $this->getApi()
336
+ ->setTransactionId($transactionId)
337
+ ->setRawResponseNeeded(true);
338
+ $api->callGetTransactionDetails();
339
+ $this->importPaymentInfo($api, $payment);
340
+ $data = $api->getRawSuccessResponseData();
341
+ return ($data) ? $data : array();
342
+ }
343
+
344
+ /**
345
+ * Validate RP data
346
+ *
347
+ * @param Mage_Payment_Model_Recurring_Profile $profile
348
+ * @throws Mage_Core_Exception
349
+ */
350
+ public function validateRecurringProfile(Mage_Payment_Model_Recurring_Profile $profile)
351
+ {
352
+ $errors = array();
353
+ if (strlen($profile->getSubscriberName()) > 32) { // up to 32 single-byte chars
354
+ $errors[] = Mage::helper('laybuy')->__('Subscriber name is too long.');
355
+ }
356
+ $refId = $profile->getInternalReferenceId(); // up to 127 single-byte alphanumeric
357
+ if (strlen($refId) > 127) { // || !preg_match('/^[a-z\d\s]+$/i', $refId)
358
+ $errors[] = Mage::helper('laybuy')->__('Merchant reference ID format is not supported.');
359
+ }
360
+ $scheduleDescr = $profile->getScheduleDescription(); // up to 127 single-byte alphanumeric
361
+ if (strlen($refId) > 127) { // || !preg_match('/^[a-z\d\s]+$/i', $scheduleDescr)
362
+ $errors[] = Mage::helper('laybuy')->__('Schedule description is too long.');
363
+ }
364
+ if ($errors) {
365
+ Mage::throwException(implode(' ', $errors));
366
+ }
367
+ }
368
+
369
+ /**
370
+ * Submit RP to the gateway
371
+ *
372
+ * @param Mage_Payment_Model_Recurring_Profile $profile
373
+ * @param Mage_Payment_Model_Info $paymentInfo
374
+ * @throws Mage_Core_Exception
375
+ */
376
+ public function submitRecurringProfile(Mage_Payment_Model_Recurring_Profile $profile,
377
+ Mage_Payment_Model_Info $paymentInfo
378
+ ) {
379
+ $api = $this->getApi();
380
+ Varien_Object_Mapper::accumulateByMap($profile, $api, array(
381
+ 'token', // EC fields
382
+ // TODO: DP fields
383
+ // profile fields
384
+ 'subscriber_name', 'start_datetime', 'internal_reference_id', 'schedule_description',
385
+ 'suspension_threshold', 'bill_failed_later', 'period_unit', 'period_frequency', 'period_max_cycles',
386
+ 'billing_amount' => 'amount', 'trial_period_unit', 'trial_period_frequency', 'trial_period_max_cycles',
387
+ 'trial_billing_amount', 'currency_code', 'shipping_amount', 'tax_amount', 'init_amount', 'init_may_fail',
388
+ ));
389
+ $api->callCreateRecurringPaymentsProfile();
390
+ $profile->setReferenceId($api->getRecurringProfileId());
391
+ if ($api->getIsProfileActive()) {
392
+ $profile->setState(Mage_Sales_Model_Recurring_Profile::STATE_ACTIVE);
393
+ } elseif ($api->getIsProfilePending()) {
394
+ $profile->setState(Mage_Sales_Model_Recurring_Profile::STATE_PENDING);
395
+ }
396
+ }
397
+
398
+ /**
399
+ * Fetch RP details
400
+ *
401
+ * @param string $referenceId
402
+ * @param Varien_Object $result
403
+ */
404
+ public function getRecurringProfileDetails($referenceId, Varien_Object $result)
405
+ {
406
+ $api = $this->getApi();
407
+ $api->setRecurringProfileId($referenceId)
408
+ ->callGetRecurringPaymentsProfileDetails($result)
409
+ ;
410
+ }
411
+
412
+ /**
413
+ * Update RP data
414
+ *
415
+ * @param Mage_Payment_Model_Recurring_Profile $profile
416
+ */
417
+ public function updateRecurringProfile(Mage_Payment_Model_Recurring_Profile $profile)
418
+ {
419
+
420
+ }
421
+
422
+ /**
423
+ * Manage status
424
+ *
425
+ * @param Mage_Payment_Model_Recurring_Profile $profile
426
+ */
427
+ public function updateRecurringProfileStatus(Mage_Payment_Model_Recurring_Profile $profile)
428
+ {
429
+ $api = $this->getApi();
430
+ $action = null;
431
+ switch ($profile->getNewState()) {
432
+ case Mage_Sales_Model_Recurring_Profile::STATE_CANCELED: $action = 'cancel'; break;
433
+ case Mage_Sales_Model_Recurring_Profile::STATE_SUSPENDED: $action = 'suspend'; break;
434
+ case Mage_Sales_Model_Recurring_Profile::STATE_ACTIVE: $action = 'activate'; break;
435
+ }
436
+ $state = $profile->getState();
437
+ $api->setRecurringProfileId($profile->getReferenceId())
438
+ ->setIsAlreadyCanceled($state == Mage_Sales_Model_Recurring_Profile::STATE_CANCELED)
439
+ ->setIsAlreadySuspended($state == Mage_Sales_Model_Recurring_Profile::STATE_SUSPENDED)
440
+ ->setIsAlreadyActive($state == Mage_Sales_Model_Recurring_Profile::STATE_ACTIVE)
441
+ ->setAction($action)
442
+ ->callManageRecurringPaymentsProfileStatus()
443
+ ;
444
+ }
445
+
446
+ /**
447
+ * Import capture results to payment
448
+ *
449
+ * @param Mage_Paypal_Model_Api_Nvp
450
+ * @param Mage_Sales_Model_Order_Payment
451
+ */
452
+ protected function _importCaptureResultToPayment($api, $payment)
453
+ {
454
+ $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(false);
455
+ $this->importPaymentInfo($api, $payment);
456
+ }
457
+
458
+ /**
459
+ * Import refund results to payment
460
+ *
461
+ * @param Mage_Paypal_Model_Api_Nvp
462
+ * @param Mage_Sales_Model_Order_Payment
463
+ * @param bool $canRefundMore
464
+ */
465
+ protected function _importRefundResultToPayment($api, $payment, $canRefundMore)
466
+ {
467
+ $payment->setTransactionId($api->getRefundTransactionId())
468
+ ->setIsTransactionClosed(1) // refund initiated by merchant
469
+ ->setShouldCloseParentTransaction(!$canRefundMore)
470
+ ;
471
+ $this->importPaymentInfo($api, $payment);
472
+ }
473
+
474
+ /**
475
+ * Parent transaction id getter
476
+ *
477
+ * @param Varien_Object $payment
478
+ * @return string
479
+ */
480
+ protected function _getParentTransactionId(Varien_Object $payment)
481
+ {
482
+ return $payment->getParentTransactionId() ? $payment->getParentTransactionId() : $payment->getLastTransId();
483
+ }
484
+ }
app/code/local/Ced/LayBuy/controllers/ExpressController.php ADDED
@@ -0,0 +1,1841 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ced_LayBuy_ExpressController extends Mage_Core_Controller_Front_Action
3
+ {
4
+ const PAYER_ID = 'payer_id';
5
+ const PAYER_EMAIL = 'email';
6
+ const PAYER_STATUS = 'payer_status';
7
+ const ADDRESS_ID = 'address_id';
8
+ const ADDRESS_STATUS = 'address_status';
9
+ const PROTECTION_EL = 'protection_eligibility';
10
+ const FRAUD_FILTERS = 'collected_fraud_filters';
11
+ const CORRELATION_ID = 'correlation_id';
12
+ const AVS_CODE = 'avs_result';
13
+ const CVV2_MATCH = 'cvv2_check_result';
14
+ const CENTINEL_VPAS = 'centinel_vpas_result';
15
+ const CENTINEL_ECI = 'centinel_eci_result';
16
+
17
+ // Next two fields are required for Brazil
18
+ const BUYER_TAX_ID = 'buyer_tax_id';
19
+ const BUYER_TAX_ID_TYPE = 'buyer_tax_id_type';
20
+
21
+ const PAYMENT_STATUS = 'payment_status';
22
+ const PENDING_REASON = 'pending_reason';
23
+ const IS_FRAUD = 'is_fraud_detected';
24
+ const PAYMENT_STATUS_GLOBAL = 'paypal_payment_status';
25
+ const PENDING_REASON_GLOBAL = 'paypal_pending_reason';
26
+ const IS_FRAUD_GLOBAL = 'paypal_is_fraud_detected';
27
+
28
+ /**
29
+ * Possible buyer's tax id types (Brazil only)
30
+ */
31
+ const BUYER_TAX_ID_TYPE_CPF = 'BR_CPF';
32
+ const BUYER_TAX_ID_TYPE_CNPJ = 'BR_CNPJ';
33
+
34
+ const PAYMENTSTATUS_NONE = 'none';
35
+ const PAYMENTSTATUS_COMPLETED = 'completed';
36
+ const PAYMENTSTATUS_DENIED = 'denied';
37
+ const PAYMENTSTATUS_EXPIRED = 'expired';
38
+ const PAYMENTSTATUS_FAILED = 'failed';
39
+ const PAYMENTSTATUS_INPROGRESS = 'in_progress';
40
+ const PAYMENTSTATUS_PENDING = 'pending';
41
+ const PAYMENTSTATUS_REFUNDED = 'refunded';
42
+ const PAYMENTSTATUS_REFUNDEDPART = 'partially_refunded';
43
+ const PAYMENTSTATUS_REVERSED = 'reversed';
44
+ const PAYMENTSTATUS_UNREVERSED = 'canceled_reversal';
45
+ const PAYMENTSTATUS_PROCESSED = 'processed';
46
+ const PAYMENTSTATUS_VOIDED = 'voided';
47
+
48
+ /**
49
+ * PayPal payment transaction type
50
+ */
51
+ const TXN_TYPE_ADJUSTMENT = 'adjustment';
52
+ const TXN_TYPE_NEW_CASE = 'new_case';
53
+
54
+
55
+ /**
56
+ * Order
57
+ *
58
+ * @var Mage_Sales_Model_QuoteMage_Sales_Model_Quote
59
+ */
60
+ protected $_order = null;
61
+ protected $_amount=null;
62
+ /**
63
+ * State helper variables
64
+ * @var string
65
+ */
66
+ protected $_redirectUrl = '';
67
+ /**
68
+ * Billing agreement that might be created during order placing
69
+ *
70
+ * @var Mage_Sales_Model_Billing_Agreement
71
+ */
72
+ protected $_billingAgreement = null;
73
+ /**
74
+ * Recurring payment profiles
75
+ *
76
+ * @var array
77
+ */
78
+ protected $_recurringPaymentProfiles = array();
79
+ protected $_init=null;
80
+ protected $_months=null;
81
+ /**
82
+ * Map for shipping address import/export (extends billing address mapper)
83
+ * @var array
84
+ */
85
+
86
+ protected $_shippingAddressMap = array(
87
+ 'SHIPTOCOUNTRYCODE' => 'country_id',
88
+ 'SHIPTOSTATE' => 'region',
89
+ 'SHIPTOCITY' => 'city',
90
+ 'SHIPTOSTREET' => 'street',
91
+ 'SHIPTOSTREET2' => 'street2',
92
+ 'SHIPTOZIP' => 'postcode',
93
+ 'SHIPTOPHONENUM' => 'telephone',
94
+ // 'SHIPTONAME' will be treated manually in address import/export methods
95
+ );
96
+ /**
97
+ * All payment information map
98
+ *
99
+ * @var array
100
+ */
101
+ protected $_paymentMap = array(
102
+ self::PAYER_ID => 'paypal_payer_id',
103
+ self::PAYER_EMAIL => 'paypal_payer_email',
104
+ self::PAYER_STATUS => 'paypal_payer_status',
105
+ self::ADDRESS_ID => 'paypal_address_id',
106
+ self::ADDRESS_STATUS => 'paypal_address_status',
107
+ self::PROTECTION_EL => 'paypal_protection_eligibility',
108
+ self::FRAUD_FILTERS => 'paypal_fraud_filters',
109
+ self::CORRELATION_ID => 'paypal_correlation_id',
110
+ self::AVS_CODE => 'paypal_avs_code',
111
+ self::CVV2_MATCH => 'paypal_cvv2_match',
112
+ self::CENTINEL_VPAS => self::CENTINEL_VPAS,
113
+ self::CENTINEL_ECI => self::CENTINEL_ECI,
114
+ self::BUYER_TAX_ID => self::BUYER_TAX_ID,
115
+ self::BUYER_TAX_ID_TYPE => self::BUYER_TAX_ID_TYPE,
116
+ );
117
+
118
+ /**
119
+ * System information map
120
+ *
121
+ * @var array
122
+ */
123
+ protected $_systemMap = array(
124
+ self::PAYMENT_STATUS => self::PAYMENT_STATUS_GLOBAL,
125
+ self::PENDING_REASON => self::PENDING_REASON_GLOBAL,
126
+ self::IS_FRAUD => self::IS_FRAUD_GLOBAL,
127
+ );
128
+
129
+ protected $_importFromRequestFilters = array(
130
+ 'REDIRECTREQUIRED' => '_filterToBool',
131
+ 'SUCCESSPAGEREDIRECTREQUESTED' => '_filterToBool',
132
+ 'PAYMENTSTATUS' => '_filterPaymentStatusFromNvpToInfo',
133
+ );
134
+ public $_laybuyresponse=null;
135
+ /**
136
+ * Global public interface map
137
+ * @var array
138
+ */
139
+ protected $_globalMap = array(
140
+ // each call
141
+ 'VERSION' => 'version',
142
+ 'USER' => 'api_username',
143
+ 'PWD' => 'api_password',
144
+ 'SIGNATURE' => 'api_signature',
145
+ 'BUTTONSOURCE' => 'build_notation_code',
146
+
147
+ // for Unilateral payments
148
+ 'SUBJECT' => 'business_account',
149
+
150
+ // commands
151
+ 'PAYMENTACTION' => 'payment_action',
152
+ 'RETURNURL' => 'return_url',
153
+ 'CANCELURL' => 'cancel_url',
154
+ 'INVNUM' => 'inv_num',
155
+ 'TOKEN' => 'token',
156
+ 'CORRELATIONID' => 'correlation_id',
157
+ 'SOLUTIONTYPE' => 'solution_type',
158
+ 'GIROPAYCANCELURL' => 'giropay_cancel_url',
159
+ 'GIROPAYSUCCESSURL' => 'giropay_success_url',
160
+ 'BANKTXNPENDINGURL' => 'giropay_bank_txn_pending_url',
161
+ 'IPADDRESS' => 'ip_address',
162
+ 'NOTIFYURL' => 'notify_url',
163
+ 'RETURNFMFDETAILS' => 'fraud_management_filters_enabled',
164
+ 'NOTE' => 'note',
165
+ 'REFUNDTYPE' => 'refund_type',
166
+ 'ACTION' => 'action',
167
+ 'REDIRECTREQUIRED' => 'redirect_required',
168
+ 'SUCCESSPAGEREDIRECTREQUESTED' => 'redirect_requested',
169
+ 'REQBILLINGADDRESS' => 'require_billing_address',
170
+ // style settings
171
+ 'PAGESTYLE' => 'page_style',
172
+ 'HDRIMG' => 'hdrimg',
173
+ 'HDRBORDERCOLOR' => 'hdrbordercolor',
174
+ 'HDRBACKCOLOR' => 'hdrbackcolor',
175
+ 'PAYFLOWCOLOR' => 'payflowcolor',
176
+ 'LOCALECODE' => 'locale_code',
177
+ 'PAL' => 'pal',
178
+
179
+ // transaction info
180
+ 'TRANSACTIONID' => 'transaction_id',
181
+ 'AUTHORIZATIONID' => 'authorization_id',
182
+ 'REFUNDTRANSACTIONID' => 'refund_transaction_id',
183
+ 'COMPLETETYPE' => 'complete_type',
184
+ 'AMT' => 'amount',
185
+ 'ITEMAMT' => 'subtotal_amount',
186
+ 'GROSSREFUNDAMT' => 'refunded_amount', // possible mistake, check with API reference
187
+
188
+ // payment/billing info
189
+ 'CURRENCYCODE' => 'currency_code',
190
+ 'PAYMENTSTATUS' => 'payment_status',
191
+ 'PENDINGREASON' => 'pending_reason',
192
+ 'PROTECTIONELIGIBILITY' => 'protection_eligibility',
193
+ 'PAYERID' => 'payer_id',
194
+ 'PAYERSTATUS' => 'payer_status',
195
+ 'ADDRESSID' => 'address_id',
196
+ 'ADDRESSSTATUS' => 'address_status',
197
+ 'EMAIL' => 'email',
198
+ // backwards compatibility
199
+ 'FIRSTNAME' => 'firstname',
200
+ 'LASTNAME' => 'lastname',
201
+
202
+ // shipping rate
203
+ 'SHIPPINGOPTIONNAME' => 'shipping_rate_code',
204
+ 'NOSHIPPING' => 'suppress_shipping',
205
+
206
+ // paypal direct credit card information
207
+ 'CREDITCARDTYPE' => 'credit_card_type',
208
+ 'ACCT' => 'credit_card_number',
209
+ 'EXPDATE' => 'credit_card_expiration_date',
210
+ 'CVV2' => 'credit_card_cvv2',
211
+ 'STARTDATE' => 'maestro_solo_issue_date', // MMYYYY, always six chars, including leading zero
212
+ 'ISSUENUMBER' => 'maestro_solo_issue_number',
213
+ 'CVV2MATCH' => 'cvv2_check_result',
214
+ 'AVSCODE' => 'avs_result',
215
+ // cardinal centinel
216
+ 'AUTHSTATUS3DS' => 'centinel_authstatus',
217
+ 'MPIVENDOR3DS' => 'centinel_mpivendor',
218
+ 'CAVV' => 'centinel_cavv',
219
+ 'ECI3DS' => 'centinel_eci',
220
+ 'XID' => 'centinel_xid',
221
+ 'VPAS' => 'centinel_vpas_result',
222
+ 'ECISUBMITTED3DS' => 'centinel_eci_result',
223
+
224
+ // recurring payment profiles
225
+ //'TOKEN' => 'token',
226
+ 'SUBSCRIBERNAME' =>'subscriber_name',
227
+ 'PROFILESTARTDATE' => 'start_datetime',
228
+ 'PROFILEREFERENCE' => 'internal_reference_id',
229
+ 'DESC' => 'schedule_description',
230
+ 'MAXFAILEDPAYMENTS' => 'suspension_threshold',
231
+ 'AUTOBILLAMT' => 'bill_failed_later',
232
+ 'BILLINGPERIOD' => 'period_unit',
233
+ 'BILLINGFREQUENCY' => 'period_frequency',
234
+ 'TOTALBILLINGCYCLES' => 'period_max_cycles',
235
+ //'AMT' => 'billing_amount', // have to use 'amount', see above
236
+ 'TRIALBILLINGPERIOD' => 'trial_period_unit',
237
+ 'TRIALBILLINGFREQUENCY' => 'trial_period_frequency',
238
+ 'TRIALTOTALBILLINGCYCLES' => 'trial_period_max_cycles',
239
+ 'TRIALAMT' => 'trial_billing_amount',
240
+ // 'CURRENCYCODE' => 'currency_code',
241
+ 'SHIPPINGAMT' => 'shipping_amount',
242
+ 'TAXAMT' => 'tax_amount',
243
+ 'INITAMT' => 'init_amount',
244
+ 'FAILEDINITAMTACTION' => 'init_may_fail',
245
+ 'PROFILEID' => 'recurring_profile_id',
246
+ 'PROFILESTATUS' => 'recurring_profile_status',
247
+ 'STATUS' => 'status',
248
+
249
+ //Next two fields are used for Brazil only
250
+ 'TAXID' => 'buyer_tax_id',
251
+ 'TAXIDTYPE' => 'buyer_tax_id_type',
252
+
253
+ 'BILLINGAGREEMENTID' => 'billing_agreement_id',
254
+ 'REFERENCEID' => 'reference_id',
255
+ 'BILLINGAGREEMENTSTATUS' => 'billing_agreement_status',
256
+ 'BILLINGTYPE' => 'billing_type',
257
+ 'SREET' => 'street',
258
+ 'CITY' => 'city',
259
+ 'STATE' => 'state',
260
+ 'COUNTRYCODE' => 'countrycode',
261
+ 'ZIP' => 'zip',
262
+ 'PAYERBUSINESS' => 'payer_business',
263
+ );
264
+ /**
265
+ * Payment information response specifically to be collected after some requests
266
+ * @var array
267
+ */
268
+ protected $_paymentInformationResponse = array(
269
+ 'PAYERID', 'PAYERSTATUS', 'CORRELATIONID', 'ADDRESSID', 'ADDRESSSTATUS',
270
+ 'PAYMENTSTATUS', 'PENDINGREASON', 'PROTECTIONELIGIBILITY', 'EMAIL', 'SHIPPINGOPTIONNAME', 'TAXID', 'TAXIDTYPE'
271
+ );
272
+ protected $_doExpressCheckoutPaymentResponse = array(
273
+ 'TRANSACTIONID', 'AMT', 'PAYMENTSTATUS', 'PENDINGREASON', 'REDIRECTREQUIRED'
274
+ );
275
+
276
+ protected $_billingaddress;
277
+ protected $_shippingaddress;
278
+ /**
279
+ * Map for billing address import/export
280
+ * @var array
281
+ */
282
+ protected $_token;
283
+ protected $_billingAddressMap = array (
284
+ 'BUSINESS' => 'company',
285
+ 'NOTETEXT' => 'customer_notes',
286
+ 'EMAIL' => 'email',
287
+ 'FIRSTNAME' => 'firstname',
288
+ 'LASTNAME' => 'lastname',
289
+ 'MIDDLENAME' => 'middlename',
290
+ 'SALUTATION' => 'prefix',
291
+ 'SUFFIX' => 'suffix',
292
+
293
+ 'COUNTRYCODE' => 'country_id', // iso-3166 two-character code
294
+ 'STATE' => 'region',
295
+ 'CITY' => 'city',
296
+ 'STREET' => 'street',
297
+ 'STREET2' => 'street2',
298
+ 'ZIP' => 'postcode',
299
+ 'PHONENUM' => 'telephone',
300
+ );
301
+ public $_model_obj=null;
302
+ protected $_checkout = null;
303
+ protected $_payer_id=null;
304
+ /**
305
+ * DoExpressCheckoutPayment request/response map
306
+ * @var array
307
+ */
308
+ protected $_doExpressCheckoutPaymentRequest = array(
309
+ 'TOKEN', 'PAYERID', 'PAYMENTACTION', 'AMT', 'CURRENCYCODE', 'IPADDRESS', 'BUTTONSOURCE', 'NOTIFYURL',
310
+ 'RETURNFMFDETAILS', 'SUBJECT', 'ITEMAMT', 'SHIPPINGAMT', 'TAXAMT',
311
+ );
312
+ protected $_createBillingAgreementResponse = array('BILLINGAGREEMENTID');
313
+ /**
314
+ * @var Mage_Paypal_Model_Config
315
+ */
316
+ protected $_config = null;
317
+ protected $_notify_url=null;
318
+ protected $_payment_action=null;
319
+ protected $_increment_id=null;
320
+ protected $_currency_code=null;
321
+ protected $_line_item_enabled=null;
322
+ protected $_address=null;
323
+ protected $_transaction_id=null;
324
+ protected $_redirect_req=null;
325
+ /**
326
+ * @var Mage_Sales_Model_Quote
327
+ */
328
+ protected $_quote = false;
329
+ public function setToken($token){
330
+ $this->_token=$token;
331
+ }
332
+ public function setTransactionId($trans_id=null){
333
+ $this->_transaction_id=$trans_id;
334
+ }
335
+ public function getTransactionId(){
336
+ return $this->_transaction_id;
337
+ }
338
+ public function getModelObject(){
339
+ return $this->_model_obj;
340
+ }
341
+ public function getRedirectRequired(){
342
+ return $this->_redirect_req;
343
+ }
344
+ public function getToken($token){
345
+ return $this->_token;
346
+ }
347
+ public function setPayerId($id=""){
348
+ $this->_payer_id=$id;
349
+ }
350
+ public function getPayerId(){
351
+ return $this->_payer_id;
352
+ }
353
+ public function setAmount($amount=""){
354
+ $this->_amount=$amount;
355
+ }
356
+ public function getAmount(){
357
+ return $this->_amount;
358
+ }
359
+ public function setPaymentAction($action=""){
360
+ $this->_payment_action=$action;
361
+ }
362
+ public function getPaymentAction(){
363
+ return $this->_payment_action;
364
+ }
365
+ public function setNotifyUrl($notify=""){
366
+ $this->_notify_url=$notify;
367
+ }
368
+ public function getNotifyUrl(){
369
+ return $this->_notify_url;
370
+ }
371
+ public function setInvNum($increment_id=""){
372
+ $this->_increment_id=$increment_id;
373
+ }
374
+ public function getInvNum(){
375
+ return $this->_increment_id;
376
+ }
377
+ public function setCurrencyCode($currency_code=""){
378
+ $this->_currency_code=$currency_code;
379
+ }
380
+ public function getCurrencyCode(){
381
+ return $this->_currency_code;
382
+ }
383
+ public function setIsLineItemsEnabled($line=""){
384
+ $this->_line_item_enabled=$line;
385
+ }
386
+ public function getIsLineItemsEnabled(){
387
+ return $this->_line_item_enabled;
388
+ }
389
+ public function setAddress($address=""){
390
+ $this->_address=$address;
391
+ }
392
+ public function getAddress(){
393
+ return $this->_address;
394
+ }
395
+ public function setBillingAddress($billing=""){
396
+ $this->_billing_address=$billing;
397
+ }
398
+ public function getBillingAddress(){
399
+ return $this->_billing_address;
400
+ }
401
+ /**
402
+ * Return checkout session object
403
+ *
404
+ * @return Mage_Checkout_Model_Session
405
+ */
406
+ private function _getCheckoutSession()
407
+ {
408
+ return Mage::getSingleton('checkout/session');
409
+ }
410
+
411
+ /**
412
+ * Return checkout quote object
413
+ *
414
+ * @return Mage_Sale_Model_Quote
415
+ */
416
+ private function _getQuote()
417
+ {
418
+ if (!$this->_quote) {
419
+ $this->_quote = $this->_getCheckoutSession()->getQuote();
420
+ }
421
+ return $this->_quote;
422
+ }
423
+ public function setConfigObject($obj){
424
+ $this->_config=$obj;
425
+ }
426
+ public function getConfigObject(){
427
+ return $this->_config;
428
+ }
429
+ /**
430
+ * Instantiate quote and checkout
431
+ * @throws Mage_Core_Exception
432
+ */
433
+ /* private function _initCheckout()
434
+ {
435
+ $quote = $this->_getQuote();
436
+ if (!$quote->hasItems() || $quote->getHasError()) {
437
+ $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
438
+ Mage::throwException(Mage::helper('paypal')->__('Unable to initialize Express Checkout.'));
439
+ }
440
+
441
+ } */
442
+
443
+ public function indexAction(){
444
+
445
+ $quote = $this->_getQuote();
446
+ if (!$quote->hasItems() || $quote->getHasError()) {
447
+ $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
448
+ Mage::throwException(Mage::helper('laybuy')->__('Unable to initialize Laybuy Express Checkout.'));
449
+ }
450
+ $model=Mage::getModel("laybuy/express");
451
+ $product_id="";
452
+ $store_id="";
453
+ if(!$model->isAvailable($quote) || !$model->checkForCategoriesAndProducts($product_id,$store_id)){
454
+ if(!$model->isAvailable($quote)){
455
+ Mage::getSingleton('core/session')->addError(Mage::helper('laybuy')->__('Laybuy Express is not Available.'));
456
+ $this->_redirect('checkout/cart/index');
457
+ }
458
+ if(!$model->checkForCategoriesAndProducts($product_id,$store_id)){
459
+ $product_names="";
460
+ $product_names=$model->returnRestrictedProductNames($product_id,$store_id);
461
+ Mage::getSingleton('core/session')->addError(Mage::helper('laybuy')->__('Your cart contains restricted products that are not allowed to pay using Lay-Buy.Please first remove these products - '.$product_names.'.'));
462
+
463
+ }
464
+ $this->_redirect('checkout/cart/index');
465
+ }
466
+ else{
467
+ $this->loadLayout();
468
+ $this->renderLayout();
469
+ }
470
+
471
+ }
472
+ public function formAction(){
473
+ $quote = $this->_getQuote();
474
+ $model=Mage::getModel("laybuy/express");
475
+ $product_id="";
476
+ $store_id="";
477
+ if(!$model->isAvailable($quote) || !$model->checkForCategoriesAndProducts($product_id,$store_id)){
478
+ if(!$model->checkForCategoriesAndProducts($product_id,$store_id)){
479
+ $product_names="";
480
+ $product_names=$model->returnRestrictedProductNames($product_id,$store_id);
481
+ Mage::getSingleton('core/session')->addError(Mage::helper('laybuy')->__('Your cart contains restricted products that are not allowed to pay using Lay-Buy.Please first remove these products - '.$product_names.'.'));
482
+
483
+ }
484
+ $this->_redirect('checkout/cart/index');
485
+ }
486
+ if($this->getRequest()->getParams()){
487
+ $quote=Mage::getSingleton('checkout/session')->getQuote();
488
+ $email = $quote->getBillingAddress()->getEmail();
489
+ if (!$email) $email = $quote->getCustomerEmail();
490
+
491
+ $request=array();
492
+ $amt="";
493
+ $storeId="";
494
+ $storeId=Mage::app()->getStore()->getId();
495
+ if($checkout = Mage::getSingleton('checkout/session')){
496
+ $totals = $checkout->getQuote()->getTotals();
497
+ $amt = $totals["grand_total"]->getValue();
498
+ }
499
+
500
+ $currency_code ="";
501
+ $currency_code = Mage::app()->getStore()->getCurrentCurrencyCode();
502
+ $request["AMOUNT"]=$amt;
503
+ $request["MEMBER"]=Mage::getStoreConfig('payment/laybuy/membership_number',$storeId);
504
+ $request["CURRENCY"]=$currency_code;
505
+ $request["RETURNURL"]=Mage::getUrl("laybuy/express/return");
506
+ $request["CANCELURL"]=Mage::getUrl("laybuy/express/cancel");
507
+ $request["GETEXPRESSRETURNURL"]=Mage::getUrl("laybuy/express/returnfromgetexpress");
508
+ /* $request["RETURNURL"]="http://192.168.1.44/magento18/magento/index.php/laybuy/express/return/";
509
+ $request["CANCELURL"]="http://192.168.1.44/magento18/magento/index.php/laybuy/express/cancel/";
510
+ $request["GETEXPRESSRETURNURL"]="http://192.168.1.44/magento18/magento/index.php/laybuy/express/returnfromgetexpress";
511
+ */
512
+ $cartItems = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
513
+ $description="";
514
+ foreach ($cartItems as $item) {
515
+ $_product = Mage::getModel('catalog/product')->load($item->getProduct()->getId());
516
+ if($description){
517
+ $description .= ' <br/> ';
518
+ }
519
+ $description .= strip_tags($_product->getShortDescription()).'(Qty '.(int)$item->getQty().')';
520
+ }
521
+ $request["DESC"]=$description;
522
+ $reserved_order_id="";
523
+ Mage::getSingleton('checkout/session')->getQuote()->reserveOrderId()->save();
524
+ $reserved_order_id=Mage::getSingleton('checkout/session')->getQuote()->getReservedOrderId();
525
+ $request["CUSTOM"]=$reserved_order_id;
526
+ $request["EMAIL"]=$email;
527
+ $request["BYPASSLAYBUY"]=Mage::getStoreConfig('payment/laybuy/bypasslaybuy');
528
+ $request["VERSION"]='0.2';
529
+ $params="";
530
+ $params=$this->getRequest()->getParam("payment");
531
+ $mnth="";
532
+ $init="";
533
+
534
+ $mnth= $params["laybuy_months"];
535
+ $init=$params["laybuy_init"];
536
+ $request["INIT"]=0;
537
+ $MAXD = Mage::getStoreConfig('payment/laybuy/maxd',$storeId);
538
+ $MIND = Mage::getStoreConfig('payment/laybuy/mind',$storeId);
539
+ $IMAGE = Mage::getStoreConfig('payment/laybuy/image',$storeId);
540
+ if(isset($mnth) && $mnth){
541
+ $MONTHS =$mnth;
542
+ }else{
543
+ $MONTHS = Mage::getStoreConfig('payment/laybuy/months',$storeId);
544
+ }
545
+ if(isset($init) && $init){
546
+ $INIT = $init;
547
+ }else{
548
+ $INIT = 0;
549
+ }
550
+ /* Restrict maxiumum possible downpayment percentage to less then or equal 50% */
551
+ if(!$MIND || $MIND<20 || $MIND>50){
552
+ $MIND = 20;
553
+ }
554
+ if(!$MAXD || $MAXD<20 || $MAXD>50){
555
+ $MAXD = 50;
556
+ }
557
+ if($IMAGE){
558
+ $IMAGE = Mage::getBaseUrl('media')."laybuy/".$IMAGE;
559
+ }else{
560
+ $IMAGE = 'http://lay-buys.com/lb2.jpg';
561
+ }
562
+ if(!$MONTHS || $MONTHS<0){
563
+ $MONTHS = 3;
564
+ }
565
+ if($INIT){
566
+
567
+ $request["INIT"]=$INIT;
568
+ }
569
+ $this->_init=$request["INIT"];
570
+
571
+ $request["MIND"]=$MIND ;
572
+ $request["MAXD"]=$MAXD;
573
+ $request["IMAGE"]=$IMAGE;
574
+ $request["MONTHS"]=$MONTHS;
575
+ Mage::getSingleton('core/session')->setPaymentMonths($request["MONTHS"]);
576
+ Mage::getSingleton('core/session')->setPaymentInit($request["INIT"]);
577
+ $this->_months=$request["MONTHS"];
578
+ $helper=Mage::helper('laybuy');
579
+ $redirectURL="http://lay-buys.com/expressgateway/";
580
+ $token="";
581
+ if($token = $helper->postToLaybuy($redirectURL,$request)){
582
+ $this->getResponse()->setBody($this->getLayout()->createBlock('Ced_LayBuy_Block_Express_Redirect')->setData('token',$token)->toHtml());
583
+ }
584
+
585
+
586
+ }
587
+ }
588
+ /**
589
+ * DoExpressCheckout call
590
+ * @link https://cms.paypal.com/us/cgi-bin/?&cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_DoExpressCheckoutPayment
591
+ */
592
+ public function callDoExpressCheckoutPayment()
593
+ {
594
+
595
+ $payer_id="";
596
+ if(Mage::getSingleton('core/session')->getPaymentPayerId()){
597
+ $payer_id=Mage::getSingleton('core/session')->getPaymentPayerId();
598
+ }
599
+ $token="";
600
+ if(Mage::getSingleton('core/session')->getLaybuyExpressToken()){
601
+ $token=Mage::getSingleton('core/session')->getLaybuyExpressToken();
602
+ }
603
+ $sandbox="";
604
+ if(Mage::getSingleton('core/session')->getSandbox()){
605
+ $sandbox=Mage::getSingleton('core/session')->getSandbox();
606
+ }
607
+ $vpayment="";
608
+ if(Mage::getSingleton('core/session')->getVpaymentId()){
609
+ $vpayment=Mage::getSingleton('core/session')->getVpaymentId();
610
+ }
611
+ $quote="";
612
+ $email ="";
613
+ $city="";
614
+ $firstname="";
615
+ $lastname="";
616
+ $company="";
617
+ $street="";
618
+ $region_id="";
619
+ $region ="";
620
+ $state="";
621
+ $postcode="";
622
+ $country_id="";
623
+ $telephone="";
624
+ $country_name="";
625
+ $quote=Mage::getSingleton('checkout/session')->getQuote();
626
+ $email = $quote->getBillingAddress()->getEmail();
627
+ $city=$quote->getBillingAddress()->getCity();
628
+ $firstname=$quote->getBillingAddress()->getFirstname();
629
+ $lastname=$quote->getBillingAddress()->getLastname();
630
+ $company=$quote->getBillingAddress()->getCompany();
631
+ $street=$quote->getBillingAddress()->getStreet();
632
+ $region_id=$quote->getBillingAddress()->getRegionId();
633
+ $region = Mage::getModel('directory/region')->load($region_id);
634
+ $state=$region->getName();
635
+ $postcode=$quote->getBillingAddress()->getPostcode();
636
+ $country_id=$quote->getBillingAddress()->getCountryId();
637
+ $country = Mage::getModel('directory/country')->loadByCode($country_id);
638
+ $country_name=$country->getName();
639
+ $telephone=$quote->getBillingAddress()->getTelephone();
640
+
641
+ $request=array();
642
+ $cartItems = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
643
+ $description="";
644
+ foreach ($cartItems as $item) {
645
+ $_product = Mage::getModel('catalog/product')->load($item->getProduct()->getId());
646
+ if($description){
647
+ $description .= ' <br/> ';
648
+ }
649
+ $description .= strip_tags($_product->getShortDescription()).'(Qty '.(int)$item->getQty().')';
650
+ }
651
+ $request["DESC"]=$description;
652
+ $request["TOKEN"]=$token;
653
+ $request["PAYERID"]=$payer_id;
654
+ $request["COUNTRY_NAME"]=$country_name;
655
+ $request["CITY"]=$city;
656
+ $request["FIRSTNAME"]=$firstname;
657
+ $request["LASTNAME"]=$lastname;
658
+ $request["COMPANY"]=$company;
659
+ $street2="";
660
+ $street1="";
661
+ if(is_array($street)){
662
+ $street1=$street[0];
663
+ if(isset($street[1])){
664
+ $street2=$street[1];
665
+ }
666
+
667
+ }
668
+ $request["STREET1"]=$street1;
669
+ $request["STREET2"]=$street2;
670
+ $request["STATE"]=$state;
671
+ $request["POSTCODE"]=$postcode;
672
+ $request["COUNTRYID"]=$country_id;
673
+ $request["TELEPHONE"]=$telephone;
674
+ $amt="";
675
+ $storeId="";
676
+ $storeId=Mage::app()->getStore()->getId();
677
+ if($checkout = Mage::getSingleton('checkout/session')){
678
+ $totals = $checkout->getQuote()->getTotals();
679
+ $amt = $totals["grand_total"]->getValue();
680
+ }
681
+ $currency_code ="";
682
+ $currency_code = Mage::app()->getStore()->getCurrentCurrencyCode();
683
+ $request["AMOUNT"]=$amt;
684
+
685
+ $request["MEMBER"]=Mage::getStoreConfig('payment/laybuy/membership_number',$storeId);
686
+
687
+ $request["CURRENCY"]=$currency_code;
688
+ $cartItems = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
689
+ $description="";
690
+ foreach ($cartItems as $item) {
691
+ $_product = Mage::getModel('catalog/product')->load($item->getProduct()->getId());
692
+ if($description){
693
+ $description .= ' <br/> ';
694
+ }
695
+ $description .= strip_tags($_product->getShortDescription()).'(Qty '.(int)$item->getQty().')';
696
+ }
697
+ $request["DESC"]=$description;
698
+ $reserved_order_id="";
699
+ $reserved_order_id=Mage::getSingleton('checkout/session')->getQuote()->getReservedOrderId();
700
+ $request["CUSTOM"]=$reserved_order_id;
701
+ $request["EMAIL"]=$email;
702
+ $request["BYPASSLAYBUY"]=Mage::getStoreConfig('payment/laybuy/bypasslaybuy');
703
+ $request["VERSION"]='0.2';
704
+ if( Mage::getSingleton('core/session')->getPaymentMonths()){
705
+ $mnth= Mage::getSingleton('core/session')->getPaymentMonths();
706
+ }
707
+ if(Mage::getSingleton('core/session')->getPaymentInit()){
708
+ $init=Mage::getSingleton('core/session')->getPaymentInit();
709
+ }
710
+ $request["INIT"]=0;
711
+ $MAXD = Mage::getStoreConfig('payment/laybuy/maxd',$storeId);
712
+ $MIND = Mage::getStoreConfig('payment/laybuy/mind',$storeId);
713
+ $IMAGE = Mage::getStoreConfig('payment/laybuy/image',$storeId);
714
+ if(isset($mnth) && $mnth){
715
+ $MONTHS =$mnth;
716
+ }else{
717
+ $MONTHS = Mage::getStoreConfig('payment/laybuy/months',$storeId);
718
+ }
719
+ if(isset($init) && $init){
720
+ $INIT = $init;
721
+ }else{
722
+ $INIT = 0;
723
+ }
724
+ /* Restrict maxiumum possible downpayment percentage to less then or equal 50% */
725
+ if(!$MIND || $MIND<20 || $MIND>50){
726
+ $MIND = 20;
727
+ }
728
+ if(!$MAXD || $MAXD<20 || $MAXD>50){
729
+ $MAXD = 50;
730
+ }
731
+ if($IMAGE){
732
+ $IMAGE = Mage::getBaseUrl('media')."laybuy/".$IMAGE;
733
+ }else{
734
+ $IMAGE = 'http://lay-buys.com/lb2.jpg';
735
+ }
736
+ if(!$MONTHS || $MONTHS<0){
737
+ $MONTHS = 3;
738
+ }
739
+ if($INIT){
740
+
741
+ $request["INIT"]=$INIT;
742
+ }
743
+ $request["MIND"]=$MIND ;
744
+ $request["MAXD"]=$MAXD;
745
+ $request["IMAGE"]=$IMAGE;
746
+ $request["MONTHS"]=$MONTHS;
747
+ $request["DO_EXPRESS"]="1";
748
+ $request['SANDBOX']=$sandbox;
749
+ $request['VPAYMENTID']=$vpayment;
750
+
751
+ $helper=Mage::helper('laybuy');
752
+ $redirectURL="https://lay-buys.com/expressgateway/doexpress/";
753
+
754
+ $postdata ='';
755
+
756
+ foreach($request as $lname=>$lvalue){
757
+ /* if($lname == 'MEMBER') continue; */
758
+ $postdata .= $lname."=".urlencode($lvalue)."&";
759
+ }
760
+ $postdata = rtrim($postdata,'&');
761
+
762
+ $ch = curl_init();
763
+ curl_setopt($ch, CURLOPT_URL,$redirectURL);
764
+ curl_setopt($ch, CURLOPT_POST, 1);
765
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
766
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
767
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
768
+ $result = curl_exec($ch);
769
+ curl_close ($ch);
770
+ $result = json_decode($result,true);
771
+ if($result['ACK']=="FAILURE"){
772
+ print_r($result);die();
773
+ }
774
+ $doexpressresponse="";
775
+ $laybuyresponse="";
776
+ if(isset($result['doexpressresponse'])){
777
+ $doexpressresponse=$result['doexpressresponse'];
778
+ }
779
+ if(isset($result['laybuyresponse'])){
780
+ $laybuyresponse=$result['laybuyresponse'];
781
+ $this->_laybuyresponse=$result['laybuyresponse'];
782
+ $jsonresponse=json_encode($result['laybuyresponse']);
783
+ $respmodel=Mage::getModel("laybuy/laybuyresp");
784
+ $respmodel->setData("order_id",$result['laybuyresponse']["CUSTOM"]);
785
+ $respmodel->setData("response",$jsonresponse);
786
+ $respmodel->save();
787
+ }
788
+ if($laybuyresponse){
789
+ $this->_transaction_id=$laybuyresponse['DP_PAYPAL_TXN_ID'];
790
+ }
791
+ if($doexpressresponse){
792
+ $this->_redirect_req=$doexpressresponse['SUCCESSPAGEREDIRECTREQUESTED'];
793
+ }
794
+ /* $this->_prepareExpressCheckoutCallRequest($this->_doExpressCheckoutPaymentRequest);
795
+ $request = $this->_exportToRequest($this->_doExpressCheckoutPaymentRequest);
796
+ $this->_exportLineItems($request);
797
+
798
+ if ($this->getAddress()) {
799
+ $request = $this->_importAddresses($request);
800
+ $request['ADDROVERRIDE'] = 1;
801
+ }*/
802
+ $response = $doexpressresponse;
803
+ $this->_model_obj=new Ced_LayBuy_Model_Abstract();
804
+ $this->_model_obj->_importFromResponse($this->_paymentInformationResponse, $response);//$this
805
+ $this->_model_obj->_importFromResponse($this->_doExpressCheckoutPaymentResponse, $response);
806
+ $this->_model_obj->_importFromResponse($this->_createBillingAgreementResponse, $response);
807
+
808
+
809
+ }
810
+
811
+ public function returnfromgetexpressAction(){
812
+ if($this->getRequest()->getParams()){
813
+ $data=$this->getRequest()->getParams();
814
+ //var_dump($data);die("hellooooohiii");
815
+ Mage::getSingleton('core/session')->setSandbox($data['sand']);
816
+ Mage::getSingleton('core/session')->setVpaymentId($data['vpay']);
817
+ $token=$data['TOKEN'];
818
+ $this->_token=$data['TOKEN'];
819
+ $payer_id=$data['PAYERID'];
820
+ $this->_payer_id=$data['PAYERID'];
821
+ Mage::getSingleton('core/session')->setPaymentPayerId($payer_id);
822
+ Mage::getSingleton('core/session')->setLaybuyExpressToken($token);
823
+ $this->_importFromResponse($this->_paymentInformationResponse, $data);
824
+ $this->_exportAddressses($data);
825
+ $this->_initCheckout();
826
+ $quote = $this->_quote;
827
+ $this->_ignoreAddressValidation();
828
+ $billingAddress = $quote->getBillingAddress();
829
+ $exportedBillingAddress = $this->getExportedBillingAddress();
830
+ $quote->setCustomerEmail($billingAddress->getEmail());
831
+ $quote->setCustomerPrefix($billingAddress->getPrefix());
832
+ $quote->setCustomerFirstname($billingAddress->getFirstname());
833
+ $quote->setCustomerMiddlename($billingAddress->getMiddlename());
834
+ $quote->setCustomerLastname($billingAddress->getLastname());
835
+ $quote->setCustomerSuffix($billingAddress->getSuffix());
836
+ $quote->setCustomerNote($exportedBillingAddress->getData('note'));
837
+ $this->_setExportedAddressData($billingAddress, $exportedBillingAddress);
838
+ // import shipping address
839
+ $exportedShippingAddress = $this->getExportedShippingAddress();
840
+ if (!$quote->getIsVirtual()) {
841
+ $shippingAddress = $quote->getShippingAddress();
842
+ if ($shippingAddress) {
843
+ if ($exportedShippingAddress) {
844
+ $this->_setExportedAddressData($shippingAddress, $exportedShippingAddress);
845
+ $shippingAddress->setCollectShippingRates(true);
846
+ $shippingAddress->setSameAsBilling(0);
847
+
848
+ }
849
+
850
+ // import shipping method
851
+ /* $code = '';
852
+
853
+ if ($this->_api->getShippingRateCode()) {
854
+ if ($code = $this->_matchShippingMethodCode($shippingAddress, $this->_api->getShippingRateCode())) {
855
+ // possible bug of double collecting rates :-/
856
+ $shippingAddress->setShippingMethod($code)->setCollectShippingRates(true);
857
+ }
858
+ }
859
+ $quote->getPayment()->setAdditionalInformation(
860
+ self::PAYMENT_INFO_TRANSPORT_SHIPPING_METHOD,
861
+ $code
862
+ );*/
863
+ }
864
+ }
865
+ $payment = $quote->getPayment();
866
+
867
+ $payment->setMethod("laybuy_express");
868
+ $this->importToPayment($this, $payment);
869
+ $payment->setAdditionalInformation('laybuy_express_checkout_payer_id', $payer_id)
870
+ ->setAdditionalInformation('laybuy_express_checkout_token', $token);
871
+ $quote->collectTotals()->save();
872
+ $this->_redirect('*/*/review');
873
+ return;
874
+ }
875
+
876
+ }
877
+ /**
878
+ * Check whether the payment was processed successfully
879
+ *
880
+ * @param Mage_Payment_Model_Info $payment
881
+ * @return bool
882
+ */
883
+ public static function isPaymentSuccessful(Mage_Payment_Model_Info $payment)
884
+ {
885
+ $paymentStatus = $payment->getAdditionalInformation(self::PAYMENT_STATUS_GLOBAL);
886
+ if (in_array($paymentStatus, array(
887
+ self::PAYMENTSTATUS_COMPLETED, self::PAYMENTSTATUS_INPROGRESS, self::PAYMENTSTATUS_REFUNDED,
888
+ self::PAYMENTSTATUS_REFUNDEDPART, self::PAYMENTSTATUS_UNREVERSED, self::PAYMENTSTATUS_PROCESSED,
889
+ ))) {
890
+ return true;
891
+ }
892
+ $pendingReason = $payment->getAdditionalInformation(self::PENDING_REASON_GLOBAL);
893
+ return self::PAYMENTSTATUS_PENDING === $paymentStatus
894
+ && in_array($pendingReason, array('authorization', 'order'));
895
+ }
896
+ /**
897
+ * Check whether the payment was processed unsuccessfully or failed
898
+ *
899
+ * @param Mage_Payment_Model_Info $payment
900
+ * @return bool
901
+ */
902
+ public static function isPaymentFailed(Mage_Payment_Model_Info $payment)
903
+ {
904
+ $paymentStatus = $payment->getAdditionalInformation(self::PAYMENT_STATUS_GLOBAL);
905
+ return in_array($paymentStatus, array(
906
+ self::PAYMENTSTATUS_DENIED, self::PAYMENTSTATUS_EXPIRED, self::PAYMENTSTATUS_FAILED,
907
+ self::PAYMENTSTATUS_REVERSED, self::PAYMENTSTATUS_VOIDED,
908
+ ));
909
+ }
910
+ /**
911
+ * Check whether the payment is in review state
912
+ *
913
+ * @param Mage_Payment_Model_Info $payment
914
+ * @return bool
915
+ */
916
+ public static function isPaymentReviewRequired(Mage_Payment_Model_Info $payment)
917
+ {
918
+ $paymentStatus = $payment->getAdditionalInformation(self::PAYMENT_STATUS_GLOBAL);
919
+ if (self::PAYMENTSTATUS_PENDING === $paymentStatus) {
920
+ $pendingReason = $payment->getAdditionalInformation(self::PENDING_REASON_GLOBAL);
921
+ return !in_array($pendingReason, array('authorization', 'order'));
922
+ }
923
+ return false;
924
+ }
925
+ /**
926
+ * Grab data from source and map it into payment
927
+ *
928
+ * @param array|Varien_Object|callback $from
929
+ * @param Mage_Payment_Model_Info $payment
930
+ */
931
+ public function importToPayment($from, Mage_Payment_Model_Info $payment)
932
+ {
933
+ $fullMap = array_merge($this->_paymentMap, $this->_systemMap);
934
+
935
+ if (is_object($from)) {
936
+ $from = array($from, 'getDataUsingMethod');
937
+ }
938
+
939
+ Varien_Object_Mapper::accumulateByMap($from, array($payment, 'setAdditionalInformation'), $fullMap);
940
+
941
+ }
942
+
943
+ /**
944
+ * Import $this public data from a private response array
945
+ *
946
+ * @param array $privateResponseMap
947
+ * @param array $response
948
+ */
949
+ protected function _importFromResponse(array $privateResponseMap, array $response)
950
+ {
951
+ $map = array();
952
+ foreach ($privateResponseMap as $key) {
953
+ if (isset($this->_globalMap[$key])) {
954
+ $map[$key] = $this->_globalMap[$key];
955
+ }
956
+ if (isset($response[$key]) && isset($this->_importFromRequestFilters[$key])) {
957
+ $callback = $this->_importFromRequestFilters[$key];
958
+ $response[$key] = call_user_func(array($this, $callback), $response[$key], $key, $map[$key]);
959
+ }
960
+ }
961
+ Varien_Object_Mapper::accumulateByMap($response, array($this, 'setDataUsingMethod'), $map);
962
+ }
963
+
964
+ /**
965
+ * Sets address data from exported address
966
+ *
967
+ * @param Mage_Sales_Model_Quote_Address $address
968
+ * @param array $exportedAddress
969
+ */
970
+ protected function _setExportedAddressData($address, $exportedAddress)
971
+ {
972
+ foreach ($exportedAddress->getExportedKeys() as $key) {
973
+ $oldData = $address->getDataUsingMethod($key);
974
+ $isEmpty = null;
975
+ if (is_array($oldData)) {
976
+ foreach($oldData as $val) {
977
+ if(!empty($val)) {
978
+ $isEmpty = false;
979
+ break;
980
+ }
981
+ $isEmpty = true;
982
+ }
983
+ }
984
+ if (empty($oldData) || $isEmpty === true) {
985
+ $address->setDataUsingMethod($key, $exportedAddress->getData($key));
986
+ }
987
+ }
988
+ }
989
+ protected function setExportedBillingAddress($address=""){
990
+ $this->_billingaddress=$address;
991
+ }
992
+ protected function getExportedBillingAddress($address=""){
993
+ return $this->_billingaddress;
994
+ }
995
+ protected function setExportedShippingAddress($address=""){
996
+ $this->_shippingaddress=$address;
997
+ }
998
+ protected function getExportedShippingAddress($address=""){
999
+ return $this->_shippingaddress;
1000
+ }
1001
+ /**
1002
+ * Create billing and shipping addresses basing on response data
1003
+ * @param array $data
1004
+ */
1005
+ protected function _exportAddressses($data)
1006
+ {
1007
+ $address = new Varien_Object();
1008
+ Varien_Object_Mapper::accumulateByMap($data, $address, $this->_billingAddressMap);
1009
+ $address->setExportedKeys(array_values($this->_billingAddressMap));
1010
+ $this->_applyStreetAndRegionWorkarounds($address);
1011
+ $this->setExportedBillingAddress($address);
1012
+ // assume there is shipping address if there is at least one field specific to shipping
1013
+ if (isset($data['SHIPTONAME'])) {
1014
+ $shippingAddress = clone $address;
1015
+ Varien_Object_Mapper::accumulateByMap($data, $shippingAddress, $this->_shippingAddressMap);
1016
+ $this->_applyStreetAndRegionWorkarounds($shippingAddress);
1017
+ // PayPal doesn't provide detailed shipping name fields, so the name will be overwritten
1018
+ $firstName = $data['SHIPTONAME'];
1019
+ $lastName = null;
1020
+ if (isset($data['FIRSTNAME']) && $data['LASTNAME']) {
1021
+ $firstName = $data['FIRSTNAME'];
1022
+ $lastName = $data['LASTNAME'];
1023
+ }
1024
+ $shippingAddress->addData(array(
1025
+ 'prefix' => null,
1026
+ 'firstname' => $firstName,
1027
+ 'middlename' => null,
1028
+ 'lastname' => $lastName,
1029
+ 'suffix' => null,
1030
+ ));
1031
+ $this->setExportedShippingAddress($shippingAddress);
1032
+
1033
+ }
1034
+ }
1035
+ /**
1036
+ * Adopt specified address object to be compatible with Magento
1037
+ *
1038
+ * @param Varien_Object $address
1039
+ */
1040
+ protected function _applyStreetAndRegionWorkarounds(Varien_Object $address)
1041
+ {
1042
+ // merge street addresses into 1
1043
+ if ($address->hasStreet2()) {
1044
+ $address->setStreet(implode("\n", array($address->getStreet(), $address->getStreet2())));
1045
+ $address->unsStreet2();
1046
+ }
1047
+ // attempt to fetch region_id from directory
1048
+ if ($address->getCountryId() && $address->getRegion()) {
1049
+ $regions = Mage::getModel('directory/country')->loadByCode($address->getCountryId())->getRegionCollection()
1050
+ //->addRegionCodeOrNameFilter($address->getRegion())
1051
+ ->setPageSize(1);
1052
+ /**********************new added code*************************/
1053
+ $region1="";
1054
+ $condition="";
1055
+ $region1=$address->getRegion();
1056
+
1057
+ if (!empty($region1)) {
1058
+ $condition = is_array($region1) ? array('in' => $region1) : $region1;
1059
+ $regions->addFieldToFilter(array('main_table.code', 'main_table.default_name'), array($condition, $condition));
1060
+
1061
+ }
1062
+ /**********************new added code ends*************************/
1063
+ foreach ($regions as $region) {
1064
+ $address->setRegionId($region->getId());
1065
+ $address->setExportedKeys(array_merge($address->getExportedKeys(), array('region_id')));
1066
+ break;
1067
+ }
1068
+ }
1069
+ }
1070
+ /**
1071
+ * Make sure addresses will be saved without validation errors
1072
+ */
1073
+ private function _ignoreAddressValidation()
1074
+ {
1075
+ $this->_quote->getBillingAddress()->setShouldIgnoreValidation(true);
1076
+ if (!$this->_quote->getIsVirtual()) {
1077
+ $this->_quote->getShippingAddress()->setShouldIgnoreValidation(true);
1078
+ if ( !$this->_quote->getBillingAddress()->getEmail()) {//!$this->_config->requireBillingAddress &&
1079
+ $this->_quote->getBillingAddress()->setSameAsBilling(1);
1080
+ }
1081
+ }
1082
+ }
1083
+ public function continueAction(){
1084
+ $quote = $this->_getQuote();
1085
+ if (!$quote->hasItems() || $quote->getHasError()) {
1086
+ $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
1087
+ Mage::throwException(Mage::helper('laybuy')->__('Unable to initialize Express Checkout.'));
1088
+ }
1089
+ $this->_checkout = Mage::getSingleton("laybuy/express_checkout", array(
1090
+ 'quote' => $quote,
1091
+ ));
1092
+ if ($this->_getQuote()->getIsMultiShipping()) {
1093
+ $this->_getQuote()->setIsMultiShipping(false);
1094
+ $this->_getQuote()->removeAllAddresses();
1095
+ }
1096
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
1097
+ if ($customer && $customer->getId()) {
1098
+ $this->_checkout->setCustomerWithAddressChange(
1099
+ $customer, $this->_getQuote()->getBillingAddress(), $this->_getQuote()->getShippingAddress()
1100
+ );
1101
+ }
1102
+ $this->_checkout->prepareGiropayUrls(
1103
+ Mage::getUrl('checkout/onepage/success'),
1104
+ Mage::getUrl('laybuy/express/cancel'),
1105
+ Mage::getUrl('checkout/onepage/success')
1106
+ );
1107
+ $token = $this->_checkout->start(Mage::getUrl('*/*/return'), Mage::getUrl('*/*/cancel'));
1108
+
1109
+ }
1110
+ /**
1111
+ * when laybuy returns
1112
+ * The order information at this point is in POST
1113
+ */
1114
+ public function success($order_id)
1115
+ {
1116
+ //var_dump($order_id);echo "<br>";
1117
+ $respmodel=Mage::getModel("laybuy/laybuyresp")->getCollection();
1118
+ $laybuyresponse="";
1119
+ foreach($respmodel as $model)
1120
+ {
1121
+ if($order_id==$model->getData("order_id")){
1122
+ $resp="";
1123
+ $resp=$model->getData("response");
1124
+ $laybuyresponse=json_decode($resp,true);
1125
+ break;
1126
+ }
1127
+ }
1128
+ //var_dump($laybuyresponse);echo "<br>";
1129
+ $format = Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM);
1130
+ $status = array_change_key_case($laybuyresponse,CASE_LOWER);
1131
+ //var_dump($status);echo "<br>";
1132
+ if(isset($status['result']) && $status['result']=='FAILURE'){
1133
+ $this->_forward('cancel');
1134
+ }
1135
+ $session = Mage::getSingleton('checkout/session');
1136
+ try{
1137
+ $status['_secure'] = true;
1138
+ $str = print_r($status, true);
1139
+ /* $status['first_payment_due'] = '13/12/13';
1140
+ $status['last_payment_due'] = '13/01/14'; */
1141
+ $status['first_payment_due'] = date('Y-m-d h:i:s', strtotime(str_replace('/','-',$status['first_payment_due'])));
1142
+ $status['last_payment_due'] = date('Y-m-d h:i:s', strtotime(str_replace('/','-',$status['last_payment_due'])));
1143
+ //$session->setQuoteId($session->getLayBuyStandardQuoteId(true));
1144
+ //Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
1145
+ $order = Mage::getModel('sales/order')->loadByIncrementId($status['custom']);
1146
+ $payment_info = array();
1147
+ if($order && $order->getId()){
1148
+ $order->sendNewOrderEmail();
1149
+ $order->setEmailSent(true);
1150
+ $payment_info = $order->getPayment()->getData('additional_information');
1151
+ $payment_info['transactions'][$status['paypal_profile_id']][] = array(
1152
+ 'txnID' => $status['dp_paypal_txn_id'],
1153
+ 'type' => 'd',
1154
+ 'paymentStatus' => 'Completed',
1155
+ 'paymentDate' => $order->getCreatedAt(),
1156
+ 'amount' => $status['downpayment_amount']
1157
+ );
1158
+ $order->getPayment()->setData('additional_information',$payment_info);
1159
+ $order->setData('state', "new");
1160
+ $order->setStatus("pending");
1161
+ //$order->addStatusToHistory("pending", 'Put your comment here', true);
1162
+ /* $history = Mage::getModel('sales/order_status_history')
1163
+ ->setStatus("pending")
1164
+ ->setComment('My Comment!')
1165
+ ->setEntityName(Mage_Sales_Model_Order::HISTORY_ENTITY_NAME)
1166
+ ->setIsCustomerNotified(false)
1167
+ ->setCreatedAt(date('Y-m-d H:i:s', time() - 60*60*24));
1168
+
1169
+ $order->addStatusHistory($history); */
1170
+ $comments = $order->getStatusHistoryCollection(true);
1171
+ $com="Authorized amount of ".Mage::app()->getLocale()->currency($status['currency'])->toCurrency($status['downpayment_amount']).". Transaction ID: \"".$status['dp_paypal_txn_id']."\".";
1172
+ foreach ($comments as $c) {
1173
+
1174
+ $c->setStatus("complete");
1175
+ $c->setComment($com)->save();
1176
+
1177
+ }
1178
+ $order->save();
1179
+ $createdAt = Mage::helper('core')->formatDate($order->getCreatedAt(), Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true);
1180
+ $newStr = '<div class="grid"><div class="hor-scroll"><table cellspacing=0 class="data"><thead><tr class="headings"><th colspan=2 class=" no-link" style="text-align: center;"><span class="nobr">Installment</span></th><th class=" no-link" style="text-align: center;"><span class="nobr">Date</span></th><th class=" no-link" style="text-align: center;"><span class="nobr">PayPal Transaction ID</span></th><th class=" no-link" style="text-align: center;"><span class="nobr">Status</span></th></tr></thead>';
1181
+ $newStr .= '<colgroup>
1182
+ <col width="100">
1183
+ <col width="75">
1184
+ <col width="183">
1185
+ <col width="183">
1186
+ <col width="98">
1187
+ </colgroup>';
1188
+ $months = (int)$status['months'];
1189
+ $newStr .= '<tbody><tr class="even" ><td style="text-align: center;"> DP: </td><td style="text-align: center;"> '.Mage::app()->getLocale()
1190
+ ->currency($status['currency'])
1191
+ ->toCurrency($status['downpayment_amount']).' </td>'.
1192
+ '<td style="text-align: center;"> '.$createdAt.' </td>'.
1193
+ '<td style="text-align: center;">'.$status['dp_paypal_txn_id'].'</td>'.
1194
+ '<td style="text-align: center;"> Completed </td></tr>';
1195
+ for($month=1;$month<=$months;$month++){
1196
+ $newStr .= '<tr ';
1197
+ if($month%2==0)
1198
+ $newStr .= 'class="even"';
1199
+ $newStr .= '>';
1200
+ $newStr .= '<td style="text-align: center;"> Month '.$month.': </td><td style="text-align: center;"> '.Mage::app()->getLocale()
1201
+ ->currency($status['currency'])
1202
+ ->toCurrency($status['payment_amounts']).' </td>';
1203
+ $date = date("Y-m-d h:i:s", strtotime($status['first_payment_due'] . " +".($month-1)." month"));
1204
+ $date = Mage::helper('core')->formatDate($date, Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true);
1205
+ $newStr .= '<td style="text-align: center;"> '.$date.' </td>';
1206
+ $newStr .= '<td style="text-align: center;">&nbsp;</td>';
1207
+ $newStr .= '<td style="text-align: center;"> Pending </td></tr>';
1208
+ }
1209
+ $newStr .= '</tbody></table></div></div>';
1210
+ $model = Mage::getModel('laybuy/report')->setData($status)
1211
+ ->setOrderId($status['custom'])
1212
+ ->setStoreId($order->getStoreId())
1213
+ ->setCreatedAt($order->getCreatedAt())
1214
+ ->setStatus(0)
1215
+ ->setReport($newStr)
1216
+ /* ->setTransaction(0) */
1217
+ ->save();
1218
+ Mage::log('Response Array From LayBuy {{'.$str."}}", null, 'laybuy_success.log');
1219
+ }
1220
+ $session->addSuccess($this->__('Payment was recieved successfully.'));
1221
+ }catch(Exception $e){
1222
+ $status = array_change_key_case($this->getRequest()->getParams(),CASE_LOWER);
1223
+ if($status){
1224
+ $str = print_r($status, true);
1225
+ $session->addError($this->__('Payment Recieved.But transaction not saved please contact us.'));
1226
+ Mage::log('Exception Order of LayBuy {{'."Order_id=".$status['custom']."|".$status['errormessage']."|".'Response Array From LayBuy {{'.$status."}}"."}}", null, 'laybuy_failure.log');
1227
+ }else{
1228
+ $session->addError($this->__('Try Again Later.'));
1229
+ }
1230
+ }
1231
+ //$this->_redirect('checkout/onepage/success',array('_secure' => true));
1232
+ }
1233
+ public function returnAction()
1234
+ {
1235
+ try {
1236
+ $this->_initCheckout();
1237
+ $this->_checkout->returnFromPaypal($this->_initToken());
1238
+ $this->_redirect('*/*/review');
1239
+ return;
1240
+ }
1241
+ catch (Mage_Core_Exception $e) {
1242
+ Mage::getSingleton('checkout/session')->addError($e->getMessage());
1243
+ }
1244
+ catch (Exception $e) {
1245
+ Mage::getSingleton('checkout/session')->addError($this->__('Unable to process Express Checkout approval.'));
1246
+ Mage::logException($e);
1247
+ }
1248
+ $this->_redirect('checkout/cart');
1249
+ }
1250
+ public function _initToken(){
1251
+ return $this->_token;
1252
+ }
1253
+ /**
1254
+ * Get checkout method
1255
+ *
1256
+ * @return string
1257
+ */
1258
+ public function getCheckoutMethod()
1259
+ {
1260
+ if ($this->getCustomerSession()->isLoggedIn()) {
1261
+ return Mage_Checkout_Model_Type_Onepage::METHOD_CUSTOMER;
1262
+ }
1263
+
1264
+ if (!$this->_quote->getCheckoutMethod()) {
1265
+ if (Mage::helper('checkout')->isAllowedGuestCheckout($this->_quote)) {
1266
+ $this->_quote->setCheckoutMethod(Mage_Checkout_Model_Type_Onepage::METHOD_GUEST);
1267
+ } else {
1268
+ $this->_quote->setCheckoutMethod(Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER);
1269
+ }
1270
+ }
1271
+ return $this->_quote->getCheckoutMethod();
1272
+ }
1273
+
1274
+ /**
1275
+ * Set shipping method to quote, if needed
1276
+ * @param string $methodCode
1277
+ */
1278
+ public function updateShippingMethod($methodCode)
1279
+ {
1280
+ if (!$this->_quote->getIsVirtual() && $shippingAddress = $this->_quote->getShippingAddress()) {
1281
+ if ($methodCode != $shippingAddress->getShippingMethod()) {
1282
+ $this->_ignoreAddressValidation();
1283
+ $shippingAddress->setShippingMethod($methodCode)->setCollectShippingRates(true);
1284
+ $this->_quote->collectTotals();
1285
+ }
1286
+ }
1287
+ }
1288
+ /**
1289
+ * Prepare quote for guest checkout order submit
1290
+ *
1291
+ * @return Mage_Paypal_Model_Express_Checkout
1292
+ */
1293
+ protected function _prepareGuestQuote()
1294
+ {
1295
+ $quote = $this->_quote;
1296
+ $quote->setCustomerId(null)
1297
+ ->setCustomerEmail($quote->getBillingAddress()->getEmail())
1298
+ ->setCustomerIsGuest(true)
1299
+ ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID);
1300
+ return $this;
1301
+ }
1302
+ /**
1303
+ * Checks if customer with email coming from Express checkout exists
1304
+ *
1305
+ * @return int
1306
+ */
1307
+ protected function _lookupCustomerId()
1308
+ {
1309
+ return Mage::getModel('customer/customer')
1310
+ ->setWebsiteId(Mage::app()->getWebsite()->getId())
1311
+ ->loadByEmail($this->_quote->getCustomerEmail())
1312
+ ->getId();
1313
+ }
1314
+ /**
1315
+ * Get customer session object
1316
+ *
1317
+ * @return Mage_Customer_Model_Session
1318
+ */
1319
+ public function getCustomerSession()
1320
+ {
1321
+ return Mage::getSingleton('customer/session');
1322
+ }
1323
+ /**
1324
+ * Prepare quote for customer order submit
1325
+ *
1326
+ * @return Mage_Paypal_Model_Express_Checkout
1327
+ */
1328
+ protected function _prepareCustomerQuote()
1329
+ {
1330
+ $quote = $this->_quote;
1331
+ $billing = $quote->getBillingAddress();
1332
+ $shipping = $quote->isVirtual() ? null : $quote->getShippingAddress();
1333
+
1334
+ $customer = $this->getCustomerSession()->getCustomer();
1335
+ if (!$billing->getCustomerId() || $billing->getSaveInAddressBook()) {
1336
+ $customerBilling = $billing->exportCustomerAddress();
1337
+ $customer->addAddress($customerBilling);
1338
+ $billing->setCustomerAddress($customerBilling);
1339
+ }
1340
+ if ($shipping && ((!$shipping->getCustomerId() && !$shipping->getSameAsBilling())
1341
+ || (!$shipping->getSameAsBilling() && $shipping->getSaveInAddressBook()))) {
1342
+ $customerShipping = $shipping->exportCustomerAddress();
1343
+ $customer->addAddress($customerShipping);
1344
+ $shipping->setCustomerAddress($customerShipping);
1345
+ }
1346
+
1347
+ if (isset($customerBilling) && !$customer->getDefaultBilling()) {
1348
+ $customerBilling->setIsDefaultBilling(true);
1349
+ }
1350
+ if ($shipping && isset($customerBilling) && !$customer->getDefaultShipping() && $shipping->getSameAsBilling()) {
1351
+ $customerBilling->setIsDefaultShipping(true);
1352
+ } elseif ($shipping && isset($customerShipping) && !$customer->getDefaultShipping()) {
1353
+ $customerShipping->setIsDefaultShipping(true);
1354
+ }
1355
+ $quote->setCustomer($customer);
1356
+
1357
+ return $this;
1358
+ }
1359
+
1360
+ /**
1361
+ * Prepare quote for customer registration and customer order submit
1362
+ * and restore magento customer data from quote
1363
+ *
1364
+ * @return Mage_Paypal_Model_Express_Checkout
1365
+ */
1366
+ protected function _prepareNewCustomerQuote()
1367
+ {
1368
+ $quote = $this->_quote;
1369
+ $billing = $quote->getBillingAddress();
1370
+ $shipping = $quote->isVirtual() ? null : $quote->getShippingAddress();
1371
+
1372
+ $customerId = $this->_lookupCustomerId();
1373
+ if ($customerId) {
1374
+ $this->getCustomerSession()->loginById($customerId);
1375
+ return $this->_prepareCustomerQuote();
1376
+ }
1377
+
1378
+ $customer = $quote->getCustomer();
1379
+ /** @var $customer Mage_Customer_Model_Customer */
1380
+ $customerBilling = $billing->exportCustomerAddress();
1381
+ $customer->addAddress($customerBilling);
1382
+ $billing->setCustomerAddress($customerBilling);
1383
+ $customerBilling->setIsDefaultBilling(true);
1384
+ if ($shipping && !$shipping->getSameAsBilling()) {
1385
+ $customerShipping = $shipping->exportCustomerAddress();
1386
+ $customer->addAddress($customerShipping);
1387
+ $shipping->setCustomerAddress($customerShipping);
1388
+ $customerShipping->setIsDefaultShipping(true);
1389
+ } elseif ($shipping) {
1390
+ $customerBilling->setIsDefaultShipping(true);
1391
+ }
1392
+ /**
1393
+ * @todo integration with dynamica attributes customer_dob, customer_taxvat, customer_gender
1394
+ */
1395
+ if ($quote->getCustomerDob() && !$billing->getCustomerDob()) {
1396
+ $billing->setCustomerDob($quote->getCustomerDob());
1397
+ }
1398
+
1399
+ if ($quote->getCustomerTaxvat() && !$billing->getCustomerTaxvat()) {
1400
+ $billing->setCustomerTaxvat($quote->getCustomerTaxvat());
1401
+ }
1402
+
1403
+ if ($quote->getCustomerGender() && !$billing->getCustomerGender()) {
1404
+ $billing->setCustomerGender($quote->getCustomerGender());
1405
+ }
1406
+
1407
+ Mage::helper('core')->copyFieldset('checkout_onepage_billing', 'to_customer', $billing, $customer);
1408
+ $customer->setEmail($quote->getCustomerEmail());
1409
+ $customer->setPrefix($quote->getCustomerPrefix());
1410
+ $customer->setFirstname($quote->getCustomerFirstname());
1411
+ $customer->setMiddlename($quote->getCustomerMiddlename());
1412
+ $customer->setLastname($quote->getCustomerLastname());
1413
+ $customer->setSuffix($quote->getCustomerSuffix());
1414
+ $customer->setPassword($customer->decryptPassword($quote->getPasswordHash()));
1415
+ $customer->setPasswordHash($customer->hashPassword($customer->getPassword()));
1416
+ $customer->save();
1417
+ $quote->setCustomer($customer);
1418
+
1419
+ return $this;
1420
+ }
1421
+ /**
1422
+ * Involve new customer to system
1423
+ *
1424
+ * @return Mage_Paypal_Model_Express_Checkout
1425
+ */
1426
+ protected function _involveNewCustomer()
1427
+ {
1428
+ $customer = $this->_quote->getCustomer();
1429
+ if ($customer->isConfirmationRequired()) {
1430
+ $customer->sendNewAccountEmail('confirmation');
1431
+ $url = Mage::helper('customer')->getEmailConfirmationUrl($customer->getEmail());
1432
+ $this->getCustomerSession()->addSuccess(
1433
+ Mage::helper('customer')->__('Account confirmation is required. Please, check your e-mail for confirmation link. To resend confirmation email please <a href="%s">click here</a>.', $url)
1434
+ );
1435
+ } else {
1436
+ $customer->sendNewAccountEmail();
1437
+ $this->getCustomerSession()->loginById($customer->getId());
1438
+ }
1439
+ return $this;
1440
+ }
1441
+
1442
+ /**
1443
+ * Place the order and recurring payment profiles when customer returned from paypal
1444
+ * Until this moment all quote data must be valid
1445
+ *
1446
+ * @param string $token
1447
+ * @param string $shippingMethodCode
1448
+ */
1449
+ public function place($token, $shippingMethodCode = null)
1450
+ {
1451
+ if ($shippingMethodCode) {
1452
+ $this->updateShippingMethod($shippingMethodCode);
1453
+ }
1454
+
1455
+ $isNewCustomer = false;
1456
+ switch ($this->getCheckoutMethod()) {
1457
+ case Mage_Checkout_Model_Type_Onepage::METHOD_GUEST:
1458
+ $this->_prepareGuestQuote();
1459
+ break;
1460
+ case Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER:
1461
+ $this->_prepareNewCustomerQuote();
1462
+ $isNewCustomer = true;
1463
+ break;
1464
+ default:
1465
+ $this->_prepareCustomerQuote();
1466
+ break;
1467
+ }
1468
+
1469
+ $this->_ignoreAddressValidation();
1470
+ $this->_quote->collectTotals();
1471
+
1472
+ $service = Mage::getModel('sales/service_quote', $this->_quote);
1473
+
1474
+ $service->submitAll();
1475
+
1476
+
1477
+ $this->_quote->save();
1478
+
1479
+ if ($isNewCustomer) {
1480
+ try {
1481
+ $this->_involveNewCustomer();
1482
+ } catch (Exception $e) {
1483
+ Mage::logException($e);
1484
+ }
1485
+ }
1486
+
1487
+ $this->_recurringPaymentProfiles = $service->getRecurringPaymentProfiles();
1488
+ // TODO: send recurring profile emails
1489
+
1490
+ $order = $service->getOrder();
1491
+ if (!$order) {
1492
+ return;
1493
+ }
1494
+ $this->_billingAgreement = $order->getPayment()->getBillingAgreement();
1495
+
1496
+
1497
+ // commence redirecting to finish payment, if paypal requires it
1498
+
1499
+ if ($order->getPayment()->getAdditionalInformation(
1500
+ 'laybuy_express_checkout_redirect_required'
1501
+ )) {
1502
+ $this->_redirectUrl = $this->getExpressCheckoutCompleteUrl($token);
1503
+ }
1504
+
1505
+ switch ($order->getState()) {
1506
+ // even after placement paypal can disallow to authorize/capture, but will wait until bank transfers money
1507
+ case Mage_Sales_Model_Order::STATE_PENDING_PAYMENT:
1508
+ // TODO
1509
+ break;
1510
+ // regular placement, when everything is ok
1511
+ case Mage_Sales_Model_Order::STATE_PROCESSING:
1512
+ case Mage_Sales_Model_Order::STATE_COMPLETE:
1513
+ case Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW:
1514
+ $order->sendNewOrderEmail();
1515
+ break;
1516
+ }
1517
+
1518
+ $this->_order = $order;
1519
+ }
1520
+ /**
1521
+ * Get url for additional actions that PayPal may require customer to do after placing the order.
1522
+ * For instance, redirecting customer to bank for payment confirmation.
1523
+ *
1524
+ * @param string $token
1525
+ * @return string
1526
+ */
1527
+ public function getExpressCheckoutCompleteUrl($token)
1528
+ {
1529
+ return $this->getLaybuyUrl(array(
1530
+ 'cmd' => '_complete-express-checkout',
1531
+ 'token' => $token,
1532
+ ));
1533
+ }
1534
+
1535
+ /**
1536
+ * PayPal web URL generic getter
1537
+ *
1538
+ * @param array $params
1539
+ * @return string
1540
+ */
1541
+ public function getLaybuyUrl(array $params = array())
1542
+ {
1543
+ /* return sprintf('https://www.%spaypal.com/cgi-bin/webscr%s',
1544
+ $this->sandboxFlag ? 'sandbox.' : '',
1545
+ $params ? '?' . http_build_query($params) : ''
1546
+ ); */
1547
+ $url="http://lay-buys.com/expressgateway".'?' . http_build_query($params) ;
1548
+ return $url;
1549
+ }
1550
+ /**
1551
+ * Submit the order
1552
+ */
1553
+ public function placeOrderAction()
1554
+ {
1555
+
1556
+ try {
1557
+ $requiredAgreements = Mage::helper('checkout')->getRequiredAgreementIds();
1558
+ if ($requiredAgreements) {
1559
+ $postedAgreements = array_keys($this->getRequest()->getPost('agreement', array()));
1560
+ if (array_diff($requiredAgreements, $postedAgreements)) {
1561
+ Mage::throwException(Mage::helper('laybuy')->__('Please agree to all the terms and conditions before placing the order.'));
1562
+ }
1563
+ }
1564
+
1565
+ $this->_initCheckout();
1566
+ $this->place($this->_initToken());
1567
+ // prepare session to success or cancellation page
1568
+ $session = $this->_getCheckoutSession();
1569
+ $session->clearHelperData();
1570
+
1571
+ // "last successful quote"
1572
+ $quoteId = $this->_getQuote()->getId();
1573
+ $session->setLastQuoteId($quoteId)->setLastSuccessQuoteId($quoteId);
1574
+
1575
+ // an order may be created
1576
+ $order = $this->getOrder();
1577
+ if ($order) {
1578
+ $session->setLastOrderId($order->getId())
1579
+ ->setLastRealOrderId($order->getIncrementId());
1580
+ // as well a billing agreement can be created
1581
+ $agreement = $this->getBillingAgreement();
1582
+ if ($agreement) {
1583
+ $session->setLastBillingAgreementId($agreement->getId());
1584
+ }
1585
+ }
1586
+
1587
+ // recurring profiles may be created along with the order or without it
1588
+ $profiles = $this->getRecurringPaymentProfiles();
1589
+ if ($profiles) {
1590
+ $ids = array();
1591
+ foreach($profiles as $profile) {
1592
+ $ids[] = $profile->getId();
1593
+ }
1594
+ $session->setLastRecurringProfileIds($ids);
1595
+ }
1596
+
1597
+ // redirect if PayPal specified some URL (for example, to Giropay bank)
1598
+ /* $url = $this->getRedirectUrl();
1599
+ if ($url) {
1600
+ $this->getResponse()->setRedirect($url);
1601
+ return;
1602
+ } */
1603
+ //$this->_initToken(false); // no need in token anymore
1604
+ $order_id=$order->getIncrementId();
1605
+ $this->success($order_id);
1606
+ $this->_redirect('checkout/onepage/success');
1607
+ return;
1608
+ }
1609
+ catch (Mage_Core_Exception $e) {
1610
+ $this->_getSession()->addError($e->getMessage());
1611
+ }
1612
+ catch (Exception $e) {
1613
+ $this->_getSession()->addError($this->__('Unable to place the order.'));
1614
+ Mage::logException($e);
1615
+ }
1616
+ $this->_redirect('*/*/review');
1617
+ }
1618
+ /**
1619
+ * Determine whether redirect somewhere specifically is required
1620
+ *
1621
+ * @return string
1622
+ */
1623
+ public function getRedirectUrl()
1624
+ {
1625
+ return $this->_redirectUrl;
1626
+ }
1627
+ /**
1628
+ * PayPal session instance getter
1629
+ *
1630
+ * @return Mage_PayPal_Model_Session
1631
+ */
1632
+ private function _getSession()
1633
+ {
1634
+ return Mage::getSingleton('core/session');
1635
+ }
1636
+ /**
1637
+ * Return recurring payment profiles
1638
+ *
1639
+ * @return array
1640
+ */
1641
+ public function getRecurringPaymentProfiles()
1642
+ {
1643
+ return $this->_recurringPaymentProfiles;
1644
+ }
1645
+ /**
1646
+ * Get created billing agreement
1647
+ *
1648
+ * @return Mage_Sales_Model_Billing_Agreement|null
1649
+ */
1650
+ public function getBillingAgreement()
1651
+ {
1652
+ return $this->_billingAgreement;
1653
+ }
1654
+ /**
1655
+ * Return order
1656
+ *
1657
+ * @return Mage_Sales_Model_Order
1658
+ */
1659
+ public function getOrder()
1660
+ {
1661
+ return $this->_order;
1662
+ }
1663
+ public function reviewAction()
1664
+ {
1665
+ try {
1666
+ $this->_initCheckout();
1667
+ $this->prepareOrderReview($this->_initToken());
1668
+ $this->loadLayout();
1669
+ $this->_initLayoutMessages('paypal/session');
1670
+ $reviewBlock = $this->getLayout()->getBlock('laybuy.express.review');
1671
+ $reviewBlock->setQuote($this->_getQuote());
1672
+ $reviewBlock->getChild('details')->setQuote($this->_getQuote());
1673
+ if ($reviewBlock->getChild('shipping_method')) {
1674
+ $reviewBlock->getChild('shipping_method')->setQuote($this->_getQuote());
1675
+ }
1676
+ $this->renderLayout();
1677
+ return;
1678
+ }
1679
+ catch (Mage_Core_Exception $e) {
1680
+ Mage::getSingleton('checkout/session')->addError($e->getMessage());
1681
+ }
1682
+ catch (Exception $e) {
1683
+ Mage::getSingleton('checkout/session')->addError(
1684
+ $this->__('Unable to initialize Express Checkout review.')
1685
+ );
1686
+ Mage::logException($e);
1687
+ }
1688
+ $this->_redirect('checkout/cart');
1689
+ }
1690
+ /**
1691
+ * Update Order (combined action for ajax and regular request)
1692
+ */
1693
+ public function updateOrderAction()
1694
+ {
1695
+ try {
1696
+ $isAjax = $this->getRequest()->getParam('isAjax');
1697
+ $this->_initCheckout();
1698
+ $this->updateOrders($this->getRequest()->getParams());
1699
+ if ($isAjax) {
1700
+ $this->loadLayout('laybuy_express_review_details');
1701
+ $this->getResponse()->setBody($this->getLayout()->getBlock('root')
1702
+ ->setQuote($this->_getQuote())
1703
+ ->toHtml());
1704
+ return;
1705
+ }
1706
+ } catch (Mage_Core_Exception $e) {
1707
+ $this->_getSession()->addError($e->getMessage());
1708
+ } catch (Exception $e) {
1709
+ $this->_getSession()->addError($this->__('Unable to update Order data.'));
1710
+ Mage::logException($e);
1711
+ }
1712
+ if ($isAjax) {
1713
+ $this->getResponse()->setBody('<script type="text/javascript">window.location.href = '
1714
+ . Mage::getUrl('*/*/review') . ';</script>');
1715
+ } else {
1716
+ $this->_redirect('*/*/review');
1717
+ }
1718
+ }
1719
+ /**
1720
+ * Update order data
1721
+ *
1722
+ * @param array $data
1723
+ */
1724
+ public function updateOrders($data)
1725
+ {
1726
+ /** @var $checkout Mage_Checkout_Model_Type_Onepage */
1727
+ $checkout = Mage::getModel('checkout/type_onepage');
1728
+
1729
+ $this->_quote->setTotalsCollectedFlag(true);
1730
+ $checkout->setQuote($this->_quote);
1731
+ if (isset($data['billing'])) {
1732
+ if (isset($data['customer-email'])) {
1733
+ $data['billing']['email'] = $data['customer-email'];
1734
+ }
1735
+ $checkout->saveBilling($data['billing'], 0);
1736
+ }
1737
+ if (!$this->_quote->getIsVirtual() && isset($data['shipping'])) {
1738
+ $checkout->saveShipping($data['shipping'], 0);
1739
+ }
1740
+
1741
+ if (isset($data['shipping_method'])) {
1742
+ $this->updateShippingMethod($data['shipping_method']);
1743
+ }
1744
+ $this->_quote->setTotalsCollectedFlag(false);
1745
+ $this->_quote->collectTotals();
1746
+ $this->_quote->setDataChanges(true);
1747
+ $this->_quote->save();
1748
+ }
1749
+
1750
+ /**
1751
+ * Update Order (combined action for ajax and regular request)
1752
+ */
1753
+ public function updateShippingMethodsAction()
1754
+ {
1755
+ try {
1756
+ $this->_initCheckout();
1757
+ $this->prepareOrderReview($this->_initToken());
1758
+ $this->loadLayout('laybuy_express_review');
1759
+
1760
+ $this->getResponse()->setBody($this->getLayout()->getBlock('express.review.shipping.method')
1761
+ ->setQuote($this->_getQuote())
1762
+ ->toHtml());
1763
+ return;
1764
+ } catch (Mage_Core_Exception $e) {
1765
+ $this->_getSession()->addError($e->getMessage());
1766
+ } catch (Exception $e) {
1767
+ $this->_getSession()->addError($this->__('Unable to update Order data.'));
1768
+ Mage::logException($e);
1769
+ }
1770
+ $this->getResponse()->setBody('<script type="text/javascript">window.location.href = '
1771
+ . Mage::getUrl('*/*/review') . ';</script>');
1772
+ }
1773
+
1774
+ /**
1775
+ * Check whether order review has enough data to initialize
1776
+ *
1777
+ * @param $token
1778
+ * @throws Mage_Core_Exception
1779
+ */
1780
+ public function prepareOrderReview($token = null)
1781
+ {
1782
+ $payment = $this->_quote->getPayment();
1783
+ if (!$payment || !$payment->getAdditionalInformation("laybuy_express_checkout_payer_id")) {
1784
+ Mage::throwException(Mage::helper('laybuy')->__('Payer is not identified.'));
1785
+ }
1786
+ $this->_quote->setMayEditShippingAddress(
1787
+ 1 != $this->_quote->getPayment()->getAdditionalInformation('laybuy_express_checkout_shipping_overriden')
1788
+ );
1789
+ $this->_quote->setMayEditShippingMethod(
1790
+ '' == $this->_quote->getPayment()->getAdditionalInformation('laybuy_express_checkout_shipping_method')
1791
+ );
1792
+ $this->_ignoreAddressValidation();
1793
+ $this->_quote->collectTotals()->save();
1794
+ }
1795
+
1796
+ private function _initCheckout()
1797
+ {
1798
+ $quote = $this->_getQuote();
1799
+ if (!$quote->hasItems() || $quote->getHasError()) {
1800
+ $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
1801
+ Mage::throwException(Mage::helper('laybuy')->__('Unable to initialize Express Checkout.'));
1802
+ }
1803
+
1804
+ $this->_checkout = Mage::getSingleton($this->_checkoutType, array(
1805
+ 'quote' => $quote,
1806
+ ));
1807
+ }
1808
+ public function cancelAction()
1809
+ {
1810
+ try {
1811
+ //$this->_initToken(false);
1812
+ $this->_token=null;
1813
+ // TODO verify if this logic of order cancelation is deprecated
1814
+ // if there is an order - cancel it
1815
+ $orderId = $this->_getCheckoutSession()->getLastOrderId();
1816
+ $order = ($orderId) ? Mage::getModel('sales/order')->load($orderId) : false;
1817
+ if ($order && $order->getId() && $order->getQuoteId() == $this->_getCheckoutSession()->getQuoteId()) {
1818
+ $order->cancel()->save();
1819
+ $this->_getCheckoutSession()
1820
+ ->unsLastQuoteId()
1821
+ ->unsLastSuccessQuoteId()
1822
+ ->unsLastOrderId()
1823
+ ->unsLastRealOrderId()
1824
+ ->addSuccess($this->__('Laybuy Express Checkout and Order have been canceled.'))
1825
+ ;
1826
+ } else {
1827
+ $this->_getCheckoutSession()->addSuccess($this->__('Laybuy Express Checkout has been canceled.'));
1828
+ }
1829
+ } catch (Mage_Core_Exception $e) {
1830
+ $this->_getCheckoutSession()->addError($e->getMessage());
1831
+ } catch (Exception $e) {
1832
+ $this->_getCheckoutSession()->addError($this->__('Unable to cancel Laybuy Express Checkout.'));
1833
+ Mage::logException($e);
1834
+ }
1835
+
1836
+ $this->_redirect('checkout/cart');
1837
+ }
1838
+
1839
+ }
1840
+
1841
+ ?>
app/code/local/Ced/LayBuy/etc/config.xml CHANGED
@@ -1,189 +1,213 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <config>
3
- <modules>
4
- <Ced_LayBuy>
5
- <version>1.0.0</version>
6
- <author>ASHEESH SINGH (asheeshsingh@cedcoss.com)</author>
7
- </Ced_LayBuy>
8
- </modules>
9
- <admin>
10
- <routers>
11
- <laybuy>
12
- <use>admin</use>
13
- <args>
14
- <module>Ced_LayBuy</module>
15
- <frontName>laybuy</frontName>
16
- </args>
17
- </laybuy>
18
- </routers>
19
- </admin>
20
- <adminhtml>
21
- <translate>
22
- <modules>
23
- <Ced_LayBuy>
24
- <files>
25
- <default>Ced_LayBuy.csv</default>
26
- </files>
27
- </Ced_LayBuy>
28
- </modules>
29
- </translate>
30
- <layout>
31
- <updates>
32
- <laybuy>
33
- <file>laybuy.xml</file>
34
- </laybuy>
35
- </updates>
36
- </layout>
37
- </adminhtml>
38
- <frontend>
39
- <routers>
40
- <laybuy>
41
- <use>standard</use>
42
- <args>
43
- <module>Ced_LayBuy</module>
44
- <frontName>laybuy</frontName>
45
- </args>
46
- </laybuy>
47
- </routers>
48
- <layout>
49
- <updates>
50
- <laybuy>
51
- <file>laybuy.xml</file>
52
- </laybuy>
53
- </updates>
54
- </layout>
55
- <translate>
56
- <modules>
57
- <Ced_LayBuy>
58
- <files>
59
- <default>Ced_LayBuy.csv</default>
60
- </files>
61
- </Ced_LayBuy>
62
- </modules>
63
- </translate>
64
- </frontend>
65
- <global>
66
- <fieldsets>
67
- <sales_convert_quote_payment>
68
- <laybuy_init>
69
- <to_order_payment>*</to_order_payment>
70
- </laybuy_init>
71
- <laybuy_months>
72
- <to_order_payment>*</to_order_payment>
73
- </laybuy_months>
74
- </sales_convert_quote_payment>
75
- </fieldsets>
76
- <models>
77
- <laybuy>
78
- <class>Ced_LayBuy_Model</class>
79
- <resourceModel>laybuy_mysql4</resourceModel>
80
- </laybuy>
81
- <laybuy_mysql4>
82
- <class>Ced_LayBuy_Model_Mysql4</class>
83
- <entities>
84
- <report>
85
- <table>laybuy_transaction_report</table>
86
- </report>
87
- <revise>
88
- <table>laybuy_revise_request_report</table>
89
- </revise>
90
- </entities>
91
- </laybuy_mysql4>
92
- </models>
93
- <resources>
94
- <laybuy_setup>
95
- <setup>
96
- <module>Ced_LayBuy</module>
97
- <class>Ced_LayBuy_Model_Mysql4_Setup</class>
98
- </setup>
99
- </laybuy_setup>
100
- </resources>
101
- <helpers>
102
- <laybuy>
103
- <class>Ced_LayBuy_Helper</class>
104
- </laybuy>
105
- </helpers>
106
- <blocks>
107
- <laybuy>
108
- <class>Ced_LayBuy_Block</class>
109
- </laybuy>
110
- </blocks>
111
- <events>
112
- <payment_info_block_prepare_specific_information>
113
- <observers>
114
- <laybuy_payment_info>
115
- <type>model</type>
116
- <class>laybuy/observer</class>
117
- <method>paymentInfoBlockPrepareSpecificInformation</method>
118
- </laybuy_payment_info>
119
- </observers>
120
- </payment_info_block_prepare_specific_information>
121
- <order_cancel_after>
122
- <observers>
123
- <laybuy_order_cancel>
124
- <type>model</type>
125
- <class>laybuy/observer</class>
126
- <method>orderCancelAfter</method>
127
- </laybuy_order_cancel>
128
- </observers>
129
- </order_cancel_after>
130
- </events>
131
- </global>
132
- <default>
133
- <payment>
134
- <laybuy>
135
- <model>laybuy/standard</model><!-- very important thing, here you select the model for your payment method -->
136
- <active>1</active>
137
- <order_status>pending</order_status>
138
- <title>Lay-Buy</title>
139
- <payment_action>sale</payment_action>
140
- <submit_url>http://lay-buys.com/gateway/</submit_url>
141
- <multipledesc>1</multipledesc>
142
- <desc>Description of products / services</desc>
143
- <mind>20%</mind>
144
- <maxd>50%</maxd>
145
- <months>3</months>
146
- <adminfee>0</adminfee>
147
- <ftp_ip>https://lay-buys.com/report/</ftp_ip>
148
- <allowspecific>0</allowspecific>
149
- <sort_order>1</sort_order>
150
- <bypasslaybuy>1</bypasslaybuy>
151
- <cronenabled>0</cronenabled>
152
- </laybuy>
153
- </payment>
154
- <laybuy>
155
- <conditional_criteria>
156
- <total>0</total>
157
- <allowspecificcategory>0</allowspecificcategory>
158
- <allowspecificgroup>0</allowspecificgroup>
159
- </conditional_criteria>
160
- <fetch_reports>
161
- <schedule>1</schedule>
162
- <time>00,00,00</time>
163
- </fetch_reports>
164
- </laybuy>
165
- </default>
166
- <crontab>
167
- <jobs>
168
- <LayBuy_Cron_Check>
169
- <schedule>
170
- <cron_expr>* * * * *</cron_expr>
171
- </schedule>
172
- <run>
173
- <model>laybuy/Observer::checkCron</model>
174
-
175
- </run>
176
- </LayBuy_Cron_Check>
177
- <LayBuy_Automated_Fetch_Updates>
178
- <schedule>
179
-
180
- <config_path>crontab/jobs/LayBuy_Automated_Fetch_Updates/schedule/cron_expr</config_path>
181
- </schedule>
182
- <run>
183
- <model>laybuy/Observer::fetchUpdates</model>
184
-
185
- </run>
186
- </LayBuy_Automated_Fetch_Updates>
187
- </jobs>
188
- </crontab>
189
- </config>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <config>
3
+ <modules>
4
+ <Ced_LayBuy>
5
+ <version>1.0.1</version>
6
+ <author>ASHEESH SINGH (asheeshsingh@cedcoss.com)</author>
7
+ </Ced_LayBuy>
8
+ </modules>
9
+ <admin>
10
+ <routers>
11
+ <laybuy>
12
+ <use>admin</use>
13
+ <args>
14
+ <module>Ced_LayBuy</module>
15
+ <frontName>laybuy</frontName>
16
+ </args>
17
+ </laybuy>
18
+ </routers>
19
+ </admin>
20
+ <adminhtml>
21
+ <translate>
22
+ <modules>
23
+ <Ced_LayBuy>
24
+ <files>
25
+ <default>Ced_LayBuy.csv</default>
26
+ </files>
27
+ </Ced_LayBuy>
28
+ </modules>
29
+ </translate>
30
+ <layout>
31
+ <updates>
32
+ <laybuy>
33
+ <file>laybuy.xml</file>
34
+ </laybuy>
35
+ </updates>
36
+ </layout>
37
+ </adminhtml>
38
+ <frontend>
39
+ <routers>
40
+ <laybuy>
41
+ <use>standard</use>
42
+ <args>
43
+ <module>Ced_LayBuy</module>
44
+ <frontName>laybuy</frontName>
45
+ </args>
46
+ </laybuy>
47
+ </routers>
48
+ <layout>
49
+ <updates>
50
+ <laybuy>
51
+ <file>laybuy.xml</file>
52
+ </laybuy>
53
+ </updates>
54
+ </layout>
55
+ <translate>
56
+ <modules>
57
+ <Ced_LayBuy>
58
+ <files>
59
+ <default>Ced_LayBuy.csv</default>
60
+ </files>
61
+ </Ced_LayBuy>
62
+ </modules>
63
+ </translate>
64
+ </frontend>
65
+ <global>
66
+ <fieldsets>
67
+ <sales_convert_quote_payment>
68
+ <laybuy_init>
69
+ <to_order_payment>*</to_order_payment>
70
+ </laybuy_init>
71
+ <laybuy_months>
72
+ <to_order_payment>*</to_order_payment>
73
+ </laybuy_months>
74
+ </sales_convert_quote_payment>
75
+ </fieldsets>
76
+ <models>
77
+ <!-- <directory_mysql4>
78
+ <rewrite>
79
+ <region_collection>Ced_Laybuy_Model_Mysql4_Region_Collection</region_collection>
80
+ </rewrite>
81
+ </directory_mysql4>-->
82
+ <laybuy>
83
+ <class>Ced_LayBuy_Model</class>
84
+ <resourceModel>laybuy_mysql4</resourceModel>
85
+ </laybuy>
86
+ <laybuy_mysql4>
87
+ <class>Ced_LayBuy_Model_Mysql4</class>
88
+ <entities>
89
+ <report>
90
+ <table>laybuy_transaction_report</table>
91
+ </report>
92
+ <revise>
93
+ <table>laybuy_revise_request_report</table>
94
+ </revise>
95
+ <laybuyresp>
96
+ <table>laybuy_final_response</table>
97
+ </laybuyresp>
98
+ </entities>
99
+ </laybuy_mysql4>
100
+ </models>
101
+ <resources>
102
+ <laybuy_setup>
103
+ <setup>
104
+ <module>Ced_LayBuy</module>
105
+ <class>Ced_LayBuy_Model_Mysql4_Setup</class>
106
+ </setup>
107
+ </laybuy_setup>
108
+ </resources>
109
+ <helpers>
110
+ <laybuy>
111
+ <class>Ced_LayBuy_Helper</class>
112
+ </laybuy>
113
+ </helpers>
114
+ <blocks>
115
+ <laybuy>
116
+ <class>Ced_LayBuy_Block</class>
117
+ </laybuy>
118
+ </blocks>
119
+ <events>
120
+ <payment_info_block_prepare_specific_information>
121
+ <observers>
122
+ <laybuy_payment_info>
123
+ <type>model</type>
124
+ <class>laybuy/observer</class>
125
+ <method>paymentInfoBlockPrepareSpecificInformation</method>
126
+ </laybuy_payment_info>
127
+ </observers>
128
+ </payment_info_block_prepare_specific_information>
129
+ <order_cancel_after>
130
+ <observers>
131
+ <laybuy_order_cancel>
132
+ <type>model</type>
133
+ <class>laybuy/observer</class>
134
+ <method>orderCancelAfter</method>
135
+ </laybuy_order_cancel>
136
+ </observers>
137
+ </order_cancel_after>
138
+ </events>
139
+ </global>
140
+ <default>
141
+ <payment>
142
+ <laybuy>
143
+ <model>laybuy/standard</model><!-- very important thing, here you select the model for your payment method -->
144
+ <active>1</active>
145
+ <order_status>pending</order_status>
146
+ <title>Lay-Buy</title>
147
+ <payment_action>sale</payment_action>
148
+ <submit_url>http://lay-buys.com/gateway/</submit_url>
149
+ <multipledesc>1</multipledesc>
150
+ <desc>Description of products / services</desc>
151
+ <mind>20%</mind>
152
+ <maxd>50%</maxd>
153
+ <months>3</months>
154
+ <adminfee>0</adminfee>
155
+ <ftp_ip>https://lay-buys.com/report/</ftp_ip>
156
+ <allowspecific>0</allowspecific>
157
+ <sort_order>1</sort_order>
158
+ <bypasslaybuy>1</bypasslaybuy>
159
+ <cronenabled>0</cronenabled>
160
+ </laybuy>
161
+ <laybuy_express>
162
+ <model>laybuy/express</model>
163
+ <active>1</active>
164
+ <title>Laybuy Express Checkout</title>
165
+ <payment_action>Authorization</payment_action>
166
+ <solution_type>Mark</solution_type>
167
+ <line_items_enabled>1</line_items_enabled>
168
+ <visible_on_cart>1</visible_on_cart>
169
+ <visible_on_product>1</visible_on_product>
170
+ <allow_ba_signup>never</allow_ba_signup>
171
+ <group>paypal</group>
172
+ <authorization_honor_period>3</authorization_honor_period>
173
+ <order_valid_period>29</order_valid_period>
174
+ <child_authorization_number>1</child_authorization_number>
175
+ <verify_peer>1</verify_peer>
176
+ </laybuy_express>
177
+ </payment>
178
+ <laybuy>
179
+ <conditional_criteria>
180
+ <total>0</total>
181
+ <allowspecificcategory>0</allowspecificcategory>
182
+ <allowspecificgroup>0</allowspecificgroup>
183
+ </conditional_criteria>
184
+ <fetch_reports>
185
+ <schedule>1</schedule>
186
+ <time>00,00,00</time>
187
+ </fetch_reports>
188
+ </laybuy>
189
+ </default>
190
+ <crontab>
191
+ <jobs>
192
+ <LayBuy_Cron_Check>
193
+ <schedule>
194
+ <cron_expr>* * * * *</cron_expr>
195
+ </schedule>
196
+ <run>
197
+ <model>laybuy/Observer::checkCron</model>
198
+
199
+ </run>
200
+ </LayBuy_Cron_Check>
201
+ <LayBuy_Automated_Fetch_Updates>
202
+ <schedule>
203
+
204
+ <config_path>crontab/jobs/LayBuy_Automated_Fetch_Updates/schedule/cron_expr</config_path>
205
+ </schedule>
206
+ <run>
207
+ <model>laybuy/Observer::fetchUpdates</model>
208
+
209
+ </run>
210
+ </LayBuy_Automated_Fetch_Updates>
211
+ </jobs>
212
+ </crontab>
213
+ </config>
app/code/local/Ced/LayBuy/etc/system.xml CHANGED
@@ -1,279 +1,297 @@
1
- <?xml version="1.0"?>
2
- <config>
3
- <sections>
4
- <payment>
5
- <groups>
6
- <laybuy translate="label comment" module="laybuy">
7
- <label>PUT IT ON LAY-BUY (powered by PayPal)</label>
8
- <frontend_type>text</frontend_type>
9
- <sort_order>999</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
- <active translate="label comment">
15
- <label>Enabled</label>
16
- <frontend_type>select</frontend_type>
17
- <source_model>adminhtml/system_config_source_yesno</source_model>
18
- <sort_order>10</sort_order>
19
- <show_in_default>1</show_in_default>
20
- <show_in_website>1</show_in_website>
21
- <show_in_store>0</show_in_store>
22
- </active>
23
- <title translate="label comment">
24
- <label>Title</label>
25
- <frontend_type>text</frontend_type>
26
- <sort_order>20</sort_order>
27
- <show_in_default>1</show_in_default>
28
- <show_in_website>1</show_in_website>
29
- <show_in_store>1</show_in_store>
30
- </title>
31
- <order_status translate="label comment">
32
- <label>New Order Status</label>
33
- <frontend_type>select</frontend_type>
34
- <source_model>adminhtml/system_config_source_order_status</source_model>
35
- <sort_order>51</sort_order>
36
- <show_in_default>1</show_in_default>
37
- <show_in_website>1</show_in_website>
38
- <show_in_store>0</show_in_store>
39
- </order_status>
40
- <submit_url translate="label comment">
41
- <label>Gateway URL</label>
42
- <frontend_type>text</frontend_type>
43
- <sort_order>58</sort_order>
44
- <show_in_default>1</show_in_default>
45
- <show_in_website>0</show_in_website>
46
- <show_in_store>0</show_in_store>
47
- </submit_url>
48
- <membership_number translate="label comment">
49
- <label>Lay-Buys Membership Number</label>
50
- <frontend_type>password</frontend_type>
51
- <sort_order>59</sort_order>
52
- <show_in_default>1</show_in_default>
53
- <show_in_website>1</show_in_website>
54
- <show_in_store>0</show_in_store>
55
- </membership_number>
56
- <multipledesc translate="label comment">
57
- <label>Line Items Description</label>
58
- <frontend_type>select</frontend_type>
59
- <source_model>adminhtml/system_config_source_yesno</source_model>
60
- <sort_order>60</sort_order>
61
- <show_in_default>1</show_in_default>
62
- <show_in_website>1</show_in_website>
63
- <show_in_store>1</show_in_store>
64
- </multipledesc>
65
- <desc translate="label comment">
66
- <label>Description</label>
67
- <frontend_type>textarea</frontend_type>
68
- <sort_order>61</sort_order>
69
- <show_in_default>1</show_in_default>
70
- <show_in_website>1</show_in_website>
71
- <show_in_store>1</show_in_store>
72
- <depends><multipledesc>0</multipledesc></depends>
73
- <comment>Description of products / services</comment>
74
- </desc>
75
- <mind translate="label comment">
76
- <label>Minimum</label>
77
- <frontend_type>text</frontend_type>
78
- <sort_order>62</sort_order>
79
- <show_in_default>1</show_in_default>
80
- <show_in_website>1</show_in_website>
81
- <show_in_store>1</show_in_store>
82
- <comment>Minimum Deposit Amount (defaults to 20%)</comment>
83
- </mind>
84
- <maxd translate="label comment">
85
- <label>Maximum</label>
86
- <frontend_type>text</frontend_type>
87
- <sort_order>63</sort_order>
88
- <show_in_default>1</show_in_default>
89
- <show_in_website>1</show_in_website>
90
- <show_in_store>1</show_in_store>
91
- <comment>Maximum Deposit Amount (defaults to 50%)</comment>
92
- </maxd>
93
- <months translate="label comment">
94
- <label>Months</label>
95
- <frontend_type>text</frontend_type>
96
- <sort_order>64</sort_order>
97
- <show_in_default>1</show_in_default>
98
- <show_in_website>1</show_in_website>
99
- <show_in_store>1</show_in_store>
100
- <comment>Maximum Number of Months to pay Balance (defaults to 3)</comment>
101
- </months>
102
- <adminfee translate="label comment">
103
- <label>Show Lay-Buy Fee in Description</label>
104
- <frontend_type>select</frontend_type>
105
- <source_model>adminhtml/system_config_source_yesno</source_model>
106
- <sort_order>65</sort_order>
107
- <show_in_default>1</show_in_default>
108
- <show_in_website>1</show_in_website>
109
- <show_in_store>0</show_in_store>
110
- <comment><![CDATA[ This payment option attracts a 0.9% surcharge. For more detail please login to <a href="https://www.lay-buys.com/vtmob/login/" target="_blank" title="https://www.lay-buys.com/vtmob/login/">merchant panel</a> using your merchant credentials.]]></comment>
111
- </adminfee>
112
- <conditional_criteria_total translate="label comment">
113
- <label>Minimum Cart Total</label>
114
- <config_path>laybuy/conditional_criteria/total</config_path>
115
- <frontend_type>text</frontend_type>
116
- <comment>The checkout total the order must reach before this payment method becomes active.</comment>
117
- <sort_order>67</sort_order>
118
- <show_in_default>1</show_in_default>
119
- <show_in_website>1</show_in_website>
120
- <show_in_store>1</show_in_store>
121
- <shared>1</shared>
122
- </conditional_criteria_total>
123
- <allowspecificcategory translate="label comment">
124
- <label>Allowed Categories</label>
125
- <config_path>laybuy/conditional_criteria/allowspecificcategory</config_path>
126
- <frontend_type>select</frontend_type>
127
- <sort_order>69</sort_order>
128
- <source_model>laybuy/system_config_source_allowspecificcategory</source_model>
129
- <show_in_default>1</show_in_default>
130
- <show_in_website>1</show_in_website>
131
- <show_in_store>1</show_in_store>
132
- </allowspecificcategory>
133
- <conditional_criteria_category translate="comment">
134
- <config_path>laybuy/conditional_criteria/categories</config_path>
135
- <frontend_type>multiselect</frontend_type>
136
- <source_model>laybuy/system_config_source_categories</source_model>
137
- <can_be_empty>1</can_be_empty>
138
- <comment>The checkout products of the orders must be in these categories before this payment method becomes active.</comment>
139
- <sort_order>71</sort_order>
140
- <depends><allowspecificcategory>1</allowspecificcategory></depends>
141
- <show_in_default>1</show_in_default>
142
- <show_in_website>1</show_in_website>
143
- <show_in_store>1</show_in_store>
144
- <shared>1</shared>
145
- </conditional_criteria_category>
146
- <allowspecificgroup translate="label comment">
147
- <label>Allowed Customer Groups</label>
148
- <config_path>laybuy/conditional_criteria/allowspecificgroup</config_path>
149
- <frontend_type>select</frontend_type>
150
- <sort_order>72</sort_order>
151
- <source_model>laybuy/system_config_source_allowspecificgroup</source_model>
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
- </allowspecificgroup>
156
- <conditional_criteria_customergroup translate="comment">
157
- <config_path>laybuy/conditional_criteria/customergroup</config_path>
158
- <frontend_type>multiselect</frontend_type>
159
- <source_model>laybuy/system_config_source_groups</source_model>
160
- <comment>The checkout customer must be in these customer groups before this payment method becomes active.</comment>
161
- <sort_order>73</sort_order>
162
- <depends><allowspecificgroup>1</allowspecificgroup></depends>
163
- <show_in_default>1</show_in_default>
164
- <show_in_website>1</show_in_website>
165
- <show_in_store>1</show_in_store>
166
- <shared>1</shared>
167
- </conditional_criteria_customergroup>
168
- <conditional_criteria_exclude_products translate="label comment">
169
- <label>Excluded Product Ids</label>
170
- <config_path>laybuy/conditional_criteria/xproducts</config_path>
171
- <frontend_type>textarea</frontend_type>
172
- <can_be_empty>1</can_be_empty>
173
- <comment>Add product ids separated by comma(,) for which method will not available.</comment>
174
- <sort_order>75</sort_order>
175
- <show_in_default>1</show_in_default>
176
- <show_in_website>1</show_in_website>
177
- <show_in_store>1</show_in_store>
178
- <shared>1</shared>
179
- </conditional_criteria_exclude_products>
180
- <image translate="label comment">
181
- <label>Image/Logo</label>
182
- <frontend_type>image</frontend_type>
183
- <backend_model>adminhtml/system_config_backend_image</backend_model>
184
- <upload_dir config="system/filesystem/media" scope_info="1">laybuy</upload_dir>
185
- <base_url type="media" scope_info="1">laybuy</base_url>
186
- <sort_order>77</sort_order>
187
- <show_in_default>1</show_in_default>
188
- <show_in_website>1</show_in_website>
189
- <show_in_store>1</show_in_store>
190
- <comment>logo or image (max. 750x90) to appear on Lay-Buys page for your branding or white-labeling.</comment>
191
- </image>
192
- <allowspecific translate="label comment">
193
- <label>Payment Applicable From</label>
194
- <frontend_type>select</frontend_type>
195
- <sort_order>79</sort_order>
196
- <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
197
- <show_in_default>1</show_in_default>
198
- <show_in_website>1</show_in_website>
199
- </allowspecific>
200
- <specificcountry translate="label comment">
201
- <label>Countries Payment Applicable From</label>
202
- <frontend_type>multiselect</frontend_type>
203
- <sort_order>81</sort_order>
204
- <source_model>adminhtml/system_config_source_country</source_model>
205
- <show_in_default>1</show_in_default>
206
- <show_in_website>1</show_in_website>
207
- <depends><allowspecific>1</allowspecific></depends>
208
- </specificcountry>
209
- <sort_order translate="label comment">
210
- <label>Sort Order</label>
211
- <frontend_type>text</frontend_type>
212
- <sort_order>82</sort_order>
213
- <show_in_default>1</show_in_default>
214
- <show_in_website>1</show_in_website>
215
- <show_in_store>1</show_in_store>
216
- </sort_order>
217
- <heading_sftp translate="label">
218
- <label>Api Credentials</label>
219
- <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
220
- <sort_order>83</sort_order>
221
- <show_in_default>1</show_in_default>
222
- <show_in_website>1</show_in_website>
223
- </heading_sftp>
224
- <settlement_reports_ftp_ip translate="label comment">
225
- <label>Api IP-Address</label>
226
- <comment>By default it is "https://lay-buys.com/report/".</comment>
227
- <config_path>laybuy/fetch_reports/ftp_ip</config_path>
228
- <frontend_type>text</frontend_type>
229
- <sort_order>85</sort_order>
230
- <show_in_default>1</show_in_default>
231
- <show_in_website>1</show_in_website>
232
- <shared>1</shared>
233
- </settlement_reports_ftp_ip>
234
- <heading_schedule translate="label">
235
- <label>Scheduled Fetching</label>
236
- <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
237
- <sort_order>87</sort_order>
238
- <show_in_default>1</show_in_default>
239
- <show_in_website>1</show_in_website>
240
- <shared>1</shared>
241
- </heading_schedule>
242
- <settlement_reports_active translate="label">
243
- <label>Enable Automatic Fetching</label>
244
- <config_path>laybuy/fetch_reports/active</config_path>
245
- <frontend_type>select</frontend_type>
246
- <source_model>adminhtml/system_config_source_yesno</source_model>
247
- <sort_order>89</sort_order>
248
- <show_in_default>1</show_in_default>
249
- <show_in_website>1</show_in_website>
250
- <shared>1</shared>
251
- </settlement_reports_active>
252
- <settlement_reports_schedule translate="label comment">
253
- <label>Schedule</label>
254
- <config_path>laybuy/fetch_reports/schedule</config_path>
255
- <frontend_type>select</frontend_type>
256
- <source_model>laybuy/system_config_source_fetchingSchedule</source_model>
257
- <backend_model>laybuy/system_config_backend_cron</backend_model>
258
- <sort_order>91</sort_order>
259
- <show_in_default>1</show_in_default>
260
- <shared>1</shared>
261
- </settlement_reports_schedule>
262
- <settlement_reports_time translate="label">
263
- <label>Time of Day</label>
264
- <config_path>laybuy/fetch_reports/time</config_path>
265
- <frontend_type>time</frontend_type>
266
- <sort_order>100</sort_order>
267
- <show_in_default>1</show_in_default>
268
- <shared>1</shared>
269
- </settlement_reports_time>
270
- <sort_order>101</sort_order>
271
- <show_in_default>1</show_in_default>
272
- <show_in_website>1</show_in_website>
273
- <show_in_store>0</show_in_store>
274
- </fields>
275
- </laybuy>
276
- </groups>
277
- </payment>
278
- </sections>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
279
  </config>
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <sections>
4
+ <payment>
5
+ <groups>
6
+ <laybuy translate="label comment" module="laybuy">
7
+ <label>PUT IT ON LAY-BUY (powered by PayPal)</label>
8
+ <frontend_type>text</frontend_type>
9
+ <sort_order>999</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
+ <active translate="label comment">
15
+ <label>Enabled</label>
16
+ <frontend_type>select</frontend_type>
17
+ <source_model>adminhtml/system_config_source_yesno</source_model>
18
+ <sort_order>10</sort_order>
19
+ <show_in_default>1</show_in_default>
20
+ <show_in_website>1</show_in_website>
21
+ <show_in_store>0</show_in_store>
22
+ </active>
23
+ <title translate="label comment">
24
+ <label>Title</label>
25
+ <frontend_type>text</frontend_type>
26
+ <sort_order>20</sort_order>
27
+ <show_in_default>1</show_in_default>
28
+ <show_in_website>1</show_in_website>
29
+ <show_in_store>1</show_in_store>
30
+ </title>
31
+ <order_status translate="label comment">
32
+ <label>New Order Status</label>
33
+ <frontend_type>select</frontend_type>
34
+ <source_model>adminhtml/system_config_source_order_status</source_model>
35
+ <sort_order>51</sort_order>
36
+ <show_in_default>1</show_in_default>
37
+ <show_in_website>1</show_in_website>
38
+ <show_in_store>0</show_in_store>
39
+ </order_status>
40
+ <submit_url translate="label comment">
41
+ <label>Gateway URL</label>
42
+ <frontend_type>text</frontend_type>
43
+ <sort_order>58</sort_order>
44
+ <show_in_default>1</show_in_default>
45
+ <show_in_website>0</show_in_website>
46
+ <show_in_store>0</show_in_store>
47
+ </submit_url>
48
+ <membership_number translate="label comment">
49
+ <label>Lay-Buys Membership Number</label>
50
+ <frontend_type>password</frontend_type>
51
+ <sort_order>59</sort_order>
52
+ <show_in_default>1</show_in_default>
53
+ <show_in_website>1</show_in_website>
54
+ <show_in_store>0</show_in_store>
55
+ </membership_number>
56
+ <multipledesc translate="label comment">
57
+ <label>Line Items Description</label>
58
+ <frontend_type>select</frontend_type>
59
+ <source_model>adminhtml/system_config_source_yesno</source_model>
60
+ <sort_order>60</sort_order>
61
+ <show_in_default>1</show_in_default>
62
+ <show_in_website>1</show_in_website>
63
+ <show_in_store>1</show_in_store>
64
+ </multipledesc>
65
+ <desc translate="label comment">
66
+ <label>Description</label>
67
+ <frontend_type>textarea</frontend_type>
68
+ <sort_order>61</sort_order>
69
+ <show_in_default>1</show_in_default>
70
+ <show_in_website>1</show_in_website>
71
+ <show_in_store>1</show_in_store>
72
+ <depends><multipledesc>0</multipledesc></depends>
73
+ <comment>Description of products / services</comment>
74
+ </desc>
75
+ <mind translate="label comment">
76
+ <label>Minimum</label>
77
+ <frontend_type>text</frontend_type>
78
+ <sort_order>62</sort_order>
79
+ <show_in_default>1</show_in_default>
80
+ <show_in_website>1</show_in_website>
81
+ <show_in_store>1</show_in_store>
82
+ <comment>Minimum Deposit Amount (defaults to 20%)</comment>
83
+ </mind>
84
+ <maxd translate="label comment">
85
+ <label>Maximum</label>
86
+ <frontend_type>text</frontend_type>
87
+ <sort_order>63</sort_order>
88
+ <show_in_default>1</show_in_default>
89
+ <show_in_website>1</show_in_website>
90
+ <show_in_store>1</show_in_store>
91
+ <comment>Maximum Deposit Amount (defaults to 50%)</comment>
92
+ </maxd>
93
+ <months translate="label comment">
94
+ <label>Months</label>
95
+ <frontend_type>text</frontend_type>
96
+ <sort_order>64</sort_order>
97
+ <show_in_default>1</show_in_default>
98
+ <show_in_website>1</show_in_website>
99
+ <show_in_store>1</show_in_store>
100
+ <comment>Maximum Number of Months to pay Balance (defaults to 3)</comment>
101
+ </months>
102
+ <adminfee translate="label comment">
103
+ <label>Show Lay-Buy Fee in Description</label>
104
+ <frontend_type>select</frontend_type>
105
+ <source_model>adminhtml/system_config_source_yesno</source_model>
106
+ <sort_order>65</sort_order>
107
+ <show_in_default>1</show_in_default>
108
+ <show_in_website>1</show_in_website>
109
+ <show_in_store>0</show_in_store>
110
+ <comment><![CDATA[ This payment option attracts a 0.9% surcharge. For more detail please login to <a href="https://www.lay-buys.com/vtmob/login/" target="_blank" title="https://www.lay-buys.com/vtmob/login/">merchant panel</a> using your merchant credentials.]]></comment>
111
+ </adminfee>
112
+ <conditional_criteria_total translate="label comment">
113
+ <label>Minimum Cart Total</label>
114
+ <config_path>laybuy/conditional_criteria/total</config_path>
115
+ <frontend_type>text</frontend_type>
116
+ <comment>The checkout total the order must reach before this payment method becomes active.</comment>
117
+ <sort_order>67</sort_order>
118
+ <show_in_default>1</show_in_default>
119
+ <show_in_website>1</show_in_website>
120
+ <show_in_store>1</show_in_store>
121
+ <shared>1</shared>
122
+ </conditional_criteria_total>
123
+ <allowspecificcategory translate="label comment">
124
+ <label>Allowed Categories</label>
125
+ <config_path>laybuy/conditional_criteria/allowspecificcategory</config_path>
126
+ <frontend_type>select</frontend_type>
127
+ <sort_order>69</sort_order>
128
+ <source_model>laybuy/system_config_source_allowspecificcategory</source_model>
129
+ <show_in_default>1</show_in_default>
130
+ <show_in_website>1</show_in_website>
131
+ <show_in_store>1</show_in_store>
132
+ </allowspecificcategory>
133
+ <conditional_criteria_category translate="comment">
134
+ <config_path>laybuy/conditional_criteria/categories</config_path>
135
+ <frontend_type>multiselect</frontend_type>
136
+ <source_model>laybuy/system_config_source_categories</source_model>
137
+ <can_be_empty>1</can_be_empty>
138
+ <comment>The checkout products of the orders must be in these categories before this payment method becomes active.</comment>
139
+ <sort_order>71</sort_order>
140
+ <depends><allowspecificcategory>1</allowspecificcategory></depends>
141
+ <show_in_default>1</show_in_default>
142
+ <show_in_website>1</show_in_website>
143
+ <show_in_store>1</show_in_store>
144
+ <shared>1</shared>
145
+ </conditional_criteria_category>
146
+ <allowspecificgroup translate="label comment">
147
+ <label>Allowed Customer Groups</label>
148
+ <config_path>laybuy/conditional_criteria/allowspecificgroup</config_path>
149
+ <frontend_type>select</frontend_type>
150
+ <sort_order>72</sort_order>
151
+ <source_model>laybuy/system_config_source_allowspecificgroup</source_model>
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
+ </allowspecificgroup>
156
+ <conditional_criteria_customergroup translate="comment">
157
+ <config_path>laybuy/conditional_criteria/customergroup</config_path>
158
+ <frontend_type>multiselect</frontend_type>
159
+ <source_model>laybuy/system_config_source_groups</source_model>
160
+ <comment>The checkout customer must be in these customer groups before this payment method becomes active.</comment>
161
+ <sort_order>73</sort_order>
162
+ <depends><allowspecificgroup>1</allowspecificgroup></depends>
163
+ <show_in_default>1</show_in_default>
164
+ <show_in_website>1</show_in_website>
165
+ <show_in_store>1</show_in_store>
166
+ <shared>1</shared>
167
+ </conditional_criteria_customergroup>
168
+ <conditional_criteria_exclude_products translate="label comment">
169
+ <label>Excluded Product Ids</label>
170
+ <config_path>laybuy/conditional_criteria/xproducts</config_path>
171
+ <frontend_type>textarea</frontend_type>
172
+ <can_be_empty>1</can_be_empty>
173
+ <comment>Add product ids separated by comma(,) for which method will not available.</comment>
174
+ <sort_order>75</sort_order>
175
+ <show_in_default>1</show_in_default>
176
+ <show_in_website>1</show_in_website>
177
+ <show_in_store>1</show_in_store>
178
+ <shared>1</shared>
179
+ </conditional_criteria_exclude_products>
180
+ <image translate="label comment">
181
+ <label>Image/Logo</label>
182
+ <frontend_type>image</frontend_type>
183
+ <backend_model>adminhtml/system_config_backend_image</backend_model>
184
+ <upload_dir config="system/filesystem/media" scope_info="1">laybuy</upload_dir>
185
+ <base_url type="media" scope_info="1">laybuy</base_url>
186
+ <sort_order>77</sort_order>
187
+ <show_in_default>1</show_in_default>
188
+ <show_in_website>1</show_in_website>
189
+ <show_in_store>1</show_in_store>
190
+ <comment>logo or image (max. 750x90) to appear on Lay-Buys page for your branding or white-labeling.</comment>
191
+ </image>
192
+ <allowspecific translate="label comment">
193
+ <label>Payment Applicable From</label>
194
+ <frontend_type>select</frontend_type>
195
+ <sort_order>79</sort_order>
196
+ <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
197
+ <show_in_default>1</show_in_default>
198
+ <show_in_website>1</show_in_website>
199
+ </allowspecific>
200
+ <specificcountry translate="label comment">
201
+ <label>Countries Payment Applicable From</label>
202
+ <frontend_type>multiselect</frontend_type>
203
+ <sort_order>81</sort_order>
204
+ <source_model>adminhtml/system_config_source_country</source_model>
205
+ <show_in_default>1</show_in_default>
206
+ <show_in_website>1</show_in_website>
207
+ <depends><allowspecific>1</allowspecific></depends>
208
+ </specificcountry>
209
+ <sort_order translate="label comment">
210
+ <label>Sort Order</label>
211
+ <frontend_type>text</frontend_type>
212
+ <sort_order>82</sort_order>
213
+ <show_in_default>1</show_in_default>
214
+ <show_in_website>1</show_in_website>
215
+ <show_in_store>1</show_in_store>
216
+ </sort_order>
217
+ <heading_sftp translate="label">
218
+ <label>Api Credentials</label>
219
+ <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
220
+ <sort_order>83</sort_order>
221
+ <show_in_default>1</show_in_default>
222
+ <show_in_website>1</show_in_website>
223
+ </heading_sftp>
224
+ <settlement_reports_ftp_ip translate="label comment">
225
+ <label>Api IP-Address</label>
226
+ <comment>By default it is "https://lay-buys.com/report/".</comment>
227
+ <config_path>laybuy/fetch_reports/ftp_ip</config_path>
228
+ <frontend_type>text</frontend_type>
229
+ <sort_order>85</sort_order>
230
+ <show_in_default>1</show_in_default>
231
+ <show_in_website>1</show_in_website>
232
+ <shared>1</shared>
233
+ </settlement_reports_ftp_ip>
234
+ <heading_schedule translate="label">
235
+ <label>Scheduled Fetching</label>
236
+ <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
237
+ <sort_order>87</sort_order>
238
+ <show_in_default>1</show_in_default>
239
+ <show_in_website>1</show_in_website>
240
+ <shared>1</shared>
241
+ </heading_schedule>
242
+ <settlement_reports_active translate="label">
243
+ <label>Enable Automatic Fetching</label>
244
+ <config_path>laybuy/fetch_reports/active</config_path>
245
+ <frontend_type>select</frontend_type>
246
+ <source_model>adminhtml/system_config_source_yesno</source_model>
247
+ <sort_order>89</sort_order>
248
+ <show_in_default>1</show_in_default>
249
+ <show_in_website>1</show_in_website>
250
+ <shared>1</shared>
251
+ </settlement_reports_active>
252
+ <settlement_reports_schedule translate="label comment">
253
+ <label>Schedule</label>
254
+ <config_path>laybuy/fetch_reports/schedule</config_path>
255
+ <frontend_type>select</frontend_type>
256
+ <source_model>laybuy/system_config_source_fetchingSchedule</source_model>
257
+ <backend_model>laybuy/system_config_backend_cron</backend_model>
258
+ <sort_order>91</sort_order>
259
+ <show_in_default>1</show_in_default>
260
+ <shared>1</shared>
261
+ </settlement_reports_schedule>
262
+ <settlement_reports_time translate="label">
263
+ <label>Time of Day</label>
264
+ <config_path>laybuy/fetch_reports/time</config_path>
265
+ <frontend_type>time</frontend_type>
266
+ <sort_order>100</sort_order>
267
+ <show_in_default>1</show_in_default>
268
+ <shared>1</shared>
269
+ </settlement_reports_time>
270
+ <heading_express translate="label">
271
+ <label>Enable Express Checkout</label>
272
+ <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
273
+ <sort_order>100</sort_order>
274
+ <show_in_default>1</show_in_default>
275
+ <show_in_website>1</show_in_website>
276
+ <shared>1</shared>
277
+ </heading_express>
278
+ <active_express translate="label comment">
279
+ <label>Enabled</label>
280
+ <frontend_type>select</frontend_type>
281
+ <config_path>payment/laybuy_express/active</config_path>
282
+ <source_model>adminhtml/system_config_source_yesno</source_model>
283
+ <sort_order>101</sort_order>
284
+ <show_in_default>1</show_in_default>
285
+ <show_in_website>1</show_in_website>
286
+ <show_in_store>0</show_in_store>
287
+ </active_express>
288
+ <sort_order>101</sort_order>
289
+ <show_in_default>1</show_in_default>
290
+ <show_in_website>1</show_in_website>
291
+ <show_in_store>0</show_in_store>
292
+ </fields>
293
+ </laybuy>
294
+ </groups>
295
+ </payment>
296
+ </sections>
297
  </config>
app/code/local/Ced/LayBuy/sql/laybuy_setup/mysql4-upgrade-1.0.0-1.0.1.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $installer = $this;
3
+ /* @var $installer Mage_Customer_Model_Entity_Setup */
4
+
5
+ $installer->startSetup();
6
+
7
+ $installer->run("
8
+ CREATE TABLE IF NOT EXISTS `{$installer->getTable('laybuy/laybuyresp')}` (
9
+ `resp_id` int(100) NOT NULL AUTO_INCREMENT,
10
+ `order_id` int(100) NOT NULL,
11
+ `response` text NOT NULL,
12
+ PRIMARY KEY (`resp_id`)
13
+ ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
14
+ ");
15
+
16
+ $installer->endSetup();
app/design/frontend/base/default/layout/laybuy.xml CHANGED
@@ -49,4 +49,85 @@
49
  <block type="laybuy/customer_account_grid" name="transaction_grid" template="laybuy/customer/account/grid.phtml"/>
50
  </reference>
51
  </laybuy_report_grid>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  </layout>
49
  <block type="laybuy/customer_account_grid" name="transaction_grid" template="laybuy/customer/account/grid.phtml"/>
50
  </reference>
51
  </laybuy_report_grid>
52
+
53
+ <!-- new code by me starts-->
54
+ <catalog_product_view>
55
+ <reference name="product.info.addtocart">
56
+ <block type="page/html_wrapper" name="product.info.addtocart.laybuy.wrapper" translate="label">
57
+ <label>Laybuy Express Checkout Shortcut Wrapper</label>
58
+ <block type="laybuy/express_layshortcut" name="product.info.addtocart.laybuy" template="laybuy/express/layshortcut.phtml">
59
+ <action method="setIsInCatalogProduct"><value>1</value></action>
60
+ </block>
61
+ </block>
62
+ </reference>
63
+ </catalog_product_view>
64
+ <default>
65
+ <reference name="topCart.extra_actions">
66
+ <block type="laybuy/express_layshortcut" name="laybuy.partner.top_cart.shortcut" template="laybuy/express/layshortcut1.phtml"/>
67
+ </reference>
68
+ <reference name="cart_sidebar.extra_actions">
69
+ <block type="laybuy/express_layshortcut" name="laybuy.partner.cart_sidebar.shortcut" template="laybuy/express/layshortcut1.phtml"/>
70
+ </reference>
71
+ </default>
72
+ <checkout_cart_index>
73
+ <reference name="checkout.cart.top_methods">
74
+ <block type="laybuy/express_layshortcut" name="checkout.cart.methods.laybuy_express.top" before="-" template="laybuy/express/layshortcut1.phtml">
75
+ <action method="setIsQuoteAllowed"><value>1</value></action>
76
+ </block>
77
+ </reference>
78
+
79
+ <reference name="checkout.cart.methods">
80
+ <block type="laybuy/express_layshortcut" name="checkout.cart.methods.laybuy_express.bottom" before="-" template="laybuy/express/layshortcut1.phtml">
81
+ <action method="setIsQuoteAllowed"><value>1</value></action>
82
+ </block>
83
+ </reference>
84
+
85
+ <!-- <update handle="SHORTCUT_popup" />-->
86
+ </checkout_cart_index>
87
+ <laybuy_express_index>
88
+ <remove name="right"/>
89
+ <remove name="left"/>
90
+ <reference name="root">
91
+ <action method="setTemplate"><template>page/1column.phtml</template></action>
92
+ </reference>
93
+ <reference name="content">
94
+ <block type="laybuy/express_layform" name="laybuy.express.layform" template="laybuy/express/extraexpress.phtml">
95
+ </block>
96
+ </reference>
97
+ </laybuy_express_index>
98
+ <laybuy_express_review translate="label">
99
+ <label>Laybuy Express Order Review Form</label>
100
+ <remove name="right"/>
101
+ <remove name="left"/>
102
+ <reference name="root">
103
+ <action method="setTemplate"><template>page/1column.phtml</template></action>
104
+ </reference>
105
+ <reference name="content">
106
+ <block type="laybuy/express_review" name="laybuy.express.review" template="laybuy/express/review.phtml">
107
+ <block type="laybuy/express_review_billing" name="express.review.billing" as="billing" template="laybuy/express/review/address.phtml"/>
108
+ <block type="laybuy/express_review_shipping" name="express.review.shipping" as="shipping" template="laybuy/express/review/address.phtml"/>
109
+ <block type="laybuy/express_review" name="express.review.shipping.method" as="shipping_method" template="laybuy/express/review/shipping/method.phtml"/>
110
+ <block type="laybuy/express_review_details" name="laybuy.express.review.details" as="details" template="laybuy/express/review/details.phtml">
111
+ <action method="addItemRender"><type>default</type><block>checkout/cart_item_renderer</block><template>checkout/onepage/review/item.phtml</template></action>
112
+ <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/onepage/review/item.phtml</template></action>
113
+ <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/onepage/review/item.phtml</template></action>
114
+ <block type="checkout/cart_totals" name="laybuy.express.review.details.totals" as="totals" template="checkout/onepage/review/totals.phtml"/>
115
+ </block>
116
+ <block type="checkout/agreements" name="laybuy.express.review.details.agreements" as="agreements" template="checkout/onepage/agreements.phtml"/>
117
+ </block>
118
+ </reference>
119
+ <reference name="head">
120
+ <action method="addItem"><type>skin_js</type><name>js/checkout/review.js</name></action>
121
+ </reference>
122
+ <block type="core/text_list" name="additional.product.info" />
123
+ </laybuy_express_review>
124
+ <laybuy_express_review_details>
125
+ <block type="laybuy/express_review_details" name="root" output="toHtml" template="laybuy/express/review/details.phtml">
126
+ <action method="addItemRender"><type>default</type><block>checkout/cart_item_renderer</block><template>checkout/onepage/review/item.phtml</template></action>
127
+ <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/onepage/review/item.phtml</template></action>
128
+ <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/onepage/review/item.phtml</template></action>
129
+ <block type="checkout/cart_totals" name="laybuy.express.review.details.totals" as="totals" template="checkout/onepage/review/totals.phtml"/>
130
+ </block>
131
+ </laybuy_express_review_details>
132
+ <!-- new code by me ends -->
133
  </layout>
app/design/frontend/base/default/template/laybuy/express/extraexpress.phtml ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Lay-Buys
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @author Asheesh Singh<asheeshsingh@cedcoss.com>
24
+ * @copyright Copyright LAY-BUYS (2011). (http://lay-buys.com/)
25
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
26
+ */
27
+ ?>
28
+ <?php
29
+ /**
30
+ * @see Ced_LayBuy_Block_Form_Laybuy
31
+ */
32
+ ?>
33
+
34
+ <?php
35
+ $storeId=Mage::app()->getStore()->getId();
36
+ $adminFeeDescription = '';
37
+ if(Mage::getStoreConfig('payment/laybuy/adminfee',$storeId)) {
38
+ //$adminFeeDescription = " A 0.9% admin fee is payable to Lay-Buys.";
39
+ $adminFeeDescription = " This payment option attracts a 0.9% surcharge.";
40
+ }
41
+ if(Mage::getStoreConfig('payment/laybuy/months',$storeId)) {
42
+ $paymentmonths=Mage::getStoreConfig('payment/laybuy/months',$storeId);
43
+ }
44
+
45
+
46
+ ?>
47
+
48
+ <link media="all" rel="stylesheet" href="<?php echo Mage::getBaseUrl('skin'); ?>frontend/base/default/css/laybuy/tooltip.css" type="text/css">
49
+ <?php
50
+ $sessionPayment = Mage::getSingleton('checkout/session')->getQuote()->getPayment();
51
+ $customerOptions = Mage::helper('laybuy')->getInstalmentData($sessionPayment);
52
+ /* $customerOptions['INIT'] = $sessionPayment->getData('laybuy_init');
53
+ $customerOptions['MONTHS'] = $sessionPayment->getData('laybuy_months'); */
54
+
55
+ $totals = Mage::getSingleton('checkout/session')->getQuote()->getTotals();
56
+ $grandtotal = $totals["grand_total"]->getValue();
57
+ ?>
58
+ <form method="post" action="<?php echo Mage::getBaseUrl();?>laybuy/express/form">
59
+ <div class="fieldset">
60
+ <ul class="form-list" id="payment_form" style="display:block;">
61
+ <li class="form-alt"><h2 class="legend"><?php echo $this->getExtraMessage() ?></h2></li>
62
+
63
+ <li>
64
+ <label for="init" class="required"><em>*</em><?php echo $this->__('Initial Payment') ?> : </label>
65
+ <div class="input-box">
66
+ <select onChange="document.getElementById('preview-tbl1').src = '<?php echo $this->getUrl('laybuy/standard/docalc',array('_secure'=>true)); ?>?currency=<?php echo Mage::app()->getStore()->getCurrentCurrencyCode(); ?>&amt=<?php echo $grandtotal; ?>&init='+document.getElementById('init').value+'&mnth='+document.getElementById('months').value+'&rnd='+Math.random()+'&html=1';" id="init" name="payment[laybuy_init]" title="<?php echo $this->__('Initial Payment') ?>" class="required-entry">
67
+ <?php foreach ($this->getArray('dp_amount') as $_data): ?>
68
+ <option value="<?php echo $_data['value'] ?>" <?php if(isset($customerOptions['INIT']) && $customerOptions['INIT'] && $customerOptions['INIT']==$_data['value']){ ?> selected="selected" <?php } ?>><?php echo $_data['label'] ?></option>
69
+ <?php endforeach ?>
70
+ </select>
71
+ </div>
72
+ </li>
73
+ <li>
74
+ <label for="months" class="required"><em>*</em><?php echo $this->__('Months to Pay') ?> : </label>
75
+ <div class="input-box">
76
+ <select onChange="document.getElementById('preview-tbl1').src = '<?php echo $this->getUrl('laybuy/standard/docalc',array('_secure'=>true)); ?>?currency=<?php echo Mage::app()->getStore()->getCurrentCurrencyCode(); ?>&amt=<?php echo $grandtotal; ?>&init='+document.getElementById('init').value+'&mnth='+document.getElementById('months').value+'&rnd='+Math.random()+'&html=1';" id="months" name="payment[laybuy_months]" title="<?php echo $this->__('Months to Pay') ?>" class="required-entry">
77
+ <?php $_recommendedMonth = isset($customerOptions['MONTHS']) && $customerOptions['MONTHS']?$customerOptions['MONTHS']:$this->getConfigData('months'); ?>
78
+ <?php foreach ($this->getArray('months') as $_data): ?>
79
+ <option value="<?php echo $_data['value'] ?>"<?php if($_data['value']==$_recommendedMonth): ?> selected="selected"<?php endif ?>><?php echo $_data['label'] ?></option>
80
+ <?php endforeach ?>
81
+ </select>
82
+ </div>
83
+ </li>
84
+ <li>
85
+ <label for="preview-tbl1"><?php echo $this->__('Plan Preview') ?></label>
86
+ <div id="preview-tbl1-wrapper" class="input-box" style="width:100% !important">
87
+ <iframe src="<?php echo $this->getUrl('laybuy/standard/docalc',array('_secure'=>true)); ?>?currency=<?php echo Mage::app()->getStore()->getCurrentCurrencyCode(); ?>&amt=<?php echo $grandtotal; ?>&init=<?php if(isset($customerOptions['INIT']) && $customerOptions['INIT']){ $a=$customerOptions['INIT'];$b=trim($a,"%");echo $b; } else { $c=$this->getConfigData('mind');$d=trim($c,"%");echo $d; } ?>&mnth=<?php echo $_recommendedMonth; ?>&html=1" name="preview-tbl1" id="preview-tbl1" style="width:100%; height:120px; border:0; margin:0; overflow:hidden" marginheight="0" marginwidth="0" noscroll></iframe>
88
+
89
+ </div>
90
+ </li>
91
+
92
+ <li>
93
+ <div class="buttons-set" style="margin-top: 0px; text-align:left;">
94
+ <label for="preview-tbl12"><?php echo $this->__('* Here initial Down-Payment and Lay-Buy Installment Plan excludes the shipping.') ?></label>
95
+ <br> <label for="preview-tbl12"><?php echo $this->__('Your goods/services will be delivered once your final payment has been received.') ?></label>
96
+ <p class="required">* Required Fields</p>
97
+ <button class="button" title="Continue" type="submit"><span><span>Continue</span></span></button>
98
+ <label style="float: right ! important; padding-top: 6px;">
99
+ <a class="callBackTip" title="<?php echo Mage::helper('laybuy')->__('Lay-Buy is an affordable payment plan option that allows you to pay-off a product or service via one down payment, with the balance paid over')?>
100
+ <?php
101
+ $secondlast=$paymentmonths-1;
102
+ for($i=1;$i<=$paymentmonths;$i++){
103
+
104
+ echo $i;
105
+ if($i==$paymentmonths){
106
+ }
107
+ else{
108
+ if($i==$secondlast){
109
+ echo " ";
110
+ }
111
+ else{
112
+ echo ",";
113
+ }
114
+
115
+ }
116
+
117
+ if($i==$secondlast){
118
+ echo "or"." ";
119
+ }
120
+
121
+ }
122
+
123
+ ?>
124
+ <?php echo Mage::helper('laybuy')->__('monthly instalments. Your purchase is delivered to you after the final instalment payment is completed.'.$adminFeeDescription) ?>">
125
+ <?php echo Mage::helper('laybuy')->__('What is LAY-BUY?') ?></a></label>
126
+ <script type="text/javascript">
127
+ laybuy(function(){
128
+ // List of all parameters and their default values:
129
+ laybuy('a.callBackTip').aToolTip({
130
+ // no need to change/override
131
+ closeTipBtn: 'aToolTipCloseBtn',
132
+ toolTipId: 'aToolTip',
133
+ // ok to override
134
+ fixed: false, // Set true to activate fixed position
135
+ clickIt: true, // set to true for click activated tooltip
136
+ inSpeed: 200, // Speed tooltip fades in
137
+ outSpeed: 100, // Speed tooltip fades out
138
+ tipContent: '<?php echo Mage::helper('laybuy')->__('Lay-Buy is an affordable payment plan option that allows you to pay-off a product or service via one down payment, with the balance paid over 1, 2 or 3 monthly instalments. Your purchase is delivered to you after the final instalment payment is completed.'.$adminFeeDescription) ?>', // Pass in content or it will use objects 'title' attribute
139
+ toolTipClass: 'defaultTheme', // Set class name for custom theme/styles
140
+ xOffset: 5, // x position
141
+ yOffset: 5, // y position
142
+ onShow: function(){}, // callback function that fires after atooltip has shown
143
+ onHide: function(){} // callback function that fires after atooltip has faded out
144
+ });
145
+
146
+
147
+
148
+ });
149
+ </script>
150
+ </div>
151
+ </li>
152
+ </ul>
153
+ </div>
154
+ </form>
app/design/frontend/base/default/template/laybuy/express/layshortcut.phtml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <?php $model="";?>
3
+ <?php $product_id="";?>
4
+ <?php $store_id="";?>
5
+ <?php $store_id=Mage::app()->getStore()->getStoreId();?>
6
+ <?php $model=Mage::getModel("laybuy/express");?>
7
+ <?php $quote=Mage::getModel('checkout/cart')->getQuote();?>
8
+ <?php $product_id = Mage::registry('current_product')->getId();?>
9
+ <?php if($model->isAvailable($quote) && $model->checkForCategoriesAndProducts($product_id,$store_id)){// ?>
10
+ <p class="paypal-logo">
11
+ <?php if ($this->isOrPositionBefore()): ?>
12
+ <span class="paypal-or"><?php echo $this->__('-OR-');?></span>
13
+ <?php endif; ?>
14
+
15
+ <a id="laybuy_express_link" style="cursor: pointer;float:left;"><img src="https://lay-buys.com/gateway/LAY-BUY.png" alt="<?php echo Mage::helper('laybuy')->__('Checkout with Laybuy Express');?>" title="<?php echo Mage::helper('laybuy')->__('Checkout with Laybuy Express');?>" /></a>
16
+ <span id="payment-please-wait" class="please-wait" style="display:none;margin:5px;float:left;">
17
+ <img class="v-middle" title="Loading next step..." alt="Loading next step..." src="<?php echo Mage::getBaseUrl("skin");?>frontend/default/default/images/opc-ajax-loader.gif"/>
18
+ </span>
19
+ <p style="clear:both;"></p>
20
+ <?php if ($this->isOrPositionAfter()): ?>
21
+ <span class="paypal-or"><?php echo $this->__('-OR-');?></span>
22
+ <?php endif; ?>
23
+ </p>
24
+
25
+ <script type="text/javascript">
26
+ laybuy(document).ready(function(){
27
+ laybuy("a#laybuy_express_link").click(function(){
28
+ laybuy("#payment-please-wait").css("display","block");
29
+ var other_data = laybuy('#product_addtocart_form').serialize();
30
+ var url=laybuy('#product_addtocart_form').attr('action');
31
+ var url1='<?php echo Mage::getBaseurl();?>laybuy/express';
32
+ laybuy.post( url, other_data,function(data){
33
+ window.location = url1;
34
+ });
35
+ });
36
+
37
+ });
38
+
39
+ </script>
40
+
41
+ <?php }?>
app/design/frontend/base/default/template/laybuy/express/layshortcut1.phtml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $model="";?>
2
+ <?php $product_id="";?>
3
+ <?php $store_id="";?>
4
+ <?php $store_id=Mage::app()->getStore()->getStoreId();?>
5
+ <?php $quote=Mage::getModel('checkout/cart')->getQuote();?>
6
+ <?php $model=Mage::getModel("laybuy/express");?>
7
+ <?php if($model->isAvailable($quote)){ // && $model->checkForCategoriesAndProducts($product_id,$store_id)?>
8
+ <p class="paypal-logo">
9
+ <?php if ($this->isOrPositionBefore()): ?>
10
+ <span class="paypal-or"><?php echo $this->__('-OR-');?></span>
11
+ <?php endif; ?>
12
+ <a id="laybuy_express_link" style="cursor: pointer;" href="<?php echo Mage::getBaseurl();?>laybuy/express" ><img src="https://lay-buys.com/gateway/LAY-BUY.png" alt="<?php echo Mage::helper('laybuy')->__('Checkout with Laybuy Express');?>" title="<?php echo Mage::helper('laybuy')->__('Checkout with Laybuy Express');?>" /></a>
13
+ <?php if ($this->isOrPositionAfter()): ?>
14
+ <span class="paypal-or"><?php echo $this->__('-OR-');?></span>
15
+ <?php endif; ?>
16
+ </p>
17
+ <?php }?>
app/design/frontend/base/default/template/laybuy/express/review.phtml ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ /** @var $this Mage_Paypal_Block_Express_Review */
27
+
28
+ $billingBlock = $this->getChild('billing')->setFieldNamePrefix('billing')->setHideEmailAddress(true);
29
+ $shippingAddress = $this->getShippingAddress();
30
+ ?>
31
+ <div class="page-title">
32
+ <h1><?php echo $this->__('Review Order') ?></h1>
33
+ </div>
34
+ <?php echo $this->getMessagesBlock()->toHtml() ?>
35
+ <script type="text/javascript">
36
+ //<![CDATA[
37
+ var countryRegions = <?php echo $this->helper('directory')->getRegionJson() ?>
38
+ //]]>
39
+ </script>
40
+ <h2 class="sub-title">
41
+ Please confirm your addresses
42
+ </h2>
43
+ <div class="paypal-review-order">
44
+ <form method="post" id="order_review_form" action="<?php echo $this->getPlaceOrderUrl() ?>">
45
+ <?php if(!$billingBlock->isCustomerLoggedIn()): ?>
46
+ <div class="info-set col2-set">
47
+ <h2 class="legend"><?php echo $this->__('Customer Information') ?></h2>
48
+ <ul class="form-list form-list-narrow">
49
+ <li id="customer-info-form" class="address-form">
50
+ <div class="field">
51
+ <label for="customer:email" class="required"><em>*</em><?php echo $this->__('Email Address') ?></label>
52
+ <div class="input-box">
53
+ <input type="text" name="customer-email" id="customer:email" value="<?php echo $this->escapeHtml($billingBlock->getAddress()->getEmail()) ?>" title="<?php echo $this->__('Email Address') ?>" class="input-text validate-email required-entry" />
54
+ </div>
55
+ </div>
56
+ </li>
57
+ </ul>
58
+ </div>
59
+ <?php endif ?>
60
+ <div class="info-set col2-set">
61
+ <div class="col-1" id="billing-address">
62
+ <h2 class="legend"><?php echo $this->__('Billing Address') ?></h2>
63
+ <?php if ($shippingAddress): ?>
64
+ <?php echo $billingBlock->setShowAsShippingCheckbox(true)->toHtml(); ?>
65
+ <?php else: ?>
66
+ <?php echo $billingBlock->toHtml(); ?>
67
+ <?php endif; ?>
68
+ </div>
69
+ <?php if ($shippingAddress): ?>
70
+ <div class="col-2" id="shipping-address">
71
+ <h2 class="legend"><?php echo $this->__('Shipping Address') ?></h2>
72
+ <?php echo $this->getChild('shipping')->setFieldNamePrefix('shipping')->setHideEmailAddress(true)->toHtml(); ?>
73
+ </div>
74
+ </div>
75
+
76
+ <div class="info-set col2-set">
77
+ <div class="col-2">
78
+ <div class="box paypal-shipping-method">
79
+ <div class="box-title">
80
+ <h3><?php echo $this->__('Shipping Method') ?></h3>
81
+ </div>
82
+ <div class="box-content">
83
+ <?php echo $this->getChild('shipping_method')->toHtml(); ?>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ <?php endif; ?>
88
+ </div>
89
+
90
+ <div class="info-set">
91
+ <h2 class="legend"><?php echo $this->__('Items in Your Shopping Cart') ?><span class="separator"> | </span><a href="<?php echo $this->getUrl('checkout/cart') ?>"><?php echo $this->__('Edit Shopping Cart') ?></a></h2>
92
+ <div id="details-reload">
93
+ <?php echo $this->getChildHtml('details') ?>
94
+ </div>
95
+ </div>
96
+ <?php echo $this->getChildHtml('agreements'); ?>
97
+ <div class="buttons-set buttons-set-order" id="review-buttons-container">
98
+ <button type="button" id="review_button" value="<?php echo $this->__('Place Order') ?>" class="button btn-checkout"><span><span><?php echo $this->__('Place Order') ?></span></span></button>
99
+ <button type="button" id="review_submit" value="<?php echo $this->__('Place Order') ?>" class="button btn-checkout"><span><span><?php echo $this->__('Place Order') ?></span></span></button>
100
+ <button type="button" id="update_order" class="button btn-checkout"><span><span><?php echo $this->__('Update Order Data') ?></span></span></button>
101
+ <span class="please-wait" id="review-please-wait" style="display:none;">
102
+ <img src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif') ?>" alt="<?php echo $this->__('Submitting order information...') ?>" title="<?php echo $this->__('Submitting order information...') ?>" class="v-middle" /> <?php echo $this->__('Submitting order information...') ?>
103
+ </span>
104
+ </div>
105
+ </form>
106
+ </div>
107
+ <script type="text/javascript">
108
+ //<![CDATA[
109
+ // submit buttons are not needed when submitting with ajax
110
+ $('review_submit').hide();
111
+ if ($('update_shipping_method_submit')) {
112
+ $('update_shipping_method_submit').hide();
113
+ }
114
+
115
+ <?php if ($this->getUseAjax()):?>
116
+ OrderReviewController.prototype._submitOrder = function() {
117
+ if (this._canSubmitOrder) {
118
+ if (this._pleaseWait) {
119
+ this._pleaseWait.show();
120
+ }
121
+ new Ajax.Request(this.form.action, {
122
+ parameters: {isAjax: 1, method: 'POST'},
123
+ onSuccess: function(transport) {
124
+ try{
125
+ response = eval('(' + transport.responseText + ')');
126
+ } catch (e) {
127
+ response = {};
128
+ }
129
+ if (response.redirect) {
130
+ setLocation(response.redirect);
131
+ return;
132
+ }
133
+ if (response.success) {
134
+ setLocation('<?php echo $this->getSuccessUrl()?>');
135
+ return;
136
+ } else {
137
+ var msg = response.error_messages;
138
+ if (typeof(msg)=='object') {
139
+ msg = msg.join("\n");
140
+ }
141
+ if (msg) {
142
+ $('review-please-wait').hide();
143
+ alert(msg);
144
+ return;
145
+ }
146
+ }
147
+ $('review-please-wait').hide();
148
+ alert('<?php echo $this->jsQuoteEscape($this->__('Unknown Error. Please try again later.')); ?>');
149
+ return;
150
+ },
151
+ onFailure: function(){
152
+ alert('<?php echo $this->jsQuoteEscape($this->__('Server Error. Please try again.')) ?>');
153
+ $('review-please-wait').hide();
154
+ }
155
+ });
156
+ }
157
+ }
158
+ <?php endif ?>
159
+ <?php
160
+ /* $shippingMethodsUpdateUrl="";
161
+ $UpdateOrderSubmitUrl="";
162
+ $shippingMethodsUpdateUrl="http://192.168.1.44/magento18/magento/index.php/laybuy/express/updateOrder/";
163
+ $UpdateOrderSubmitUrl="http://192.168.1.44/magento18/magento/index.php/laybuy/express/updateShippingMethods/" ; */?>
164
+ PayPalExpressAjax = new OrderReviewController($('order_review_form'), $('review_button'),
165
+ 'shipping_method', null, 'details-reload'
166
+ );
167
+ PayPalExpressAjax.addPleaseWait($('review-please-wait'));
168
+ PayPalExpressAjax.setShippingAddressContainer($('shipping-address'));
169
+ PayPalExpressAjax.setShippingMethodContainer('shipping-method-container');
170
+ PayPalExpressAjax.shippingMethodsUpdateUrl = '<?php echo $this->escapeHtml($this->getUpdateShippingMethodsUrl());?>';//$this->escapeHtml($this->getUpdateShippingMethodsUrl()) $UpdateOrderSubmitUrl
171
+ PayPalExpressAjax.setUpdateButton($('update_order'),'<?php echo $this->escapeHtml($this->getUpdateOrderSubmitUrl());?>','details-reload');//$this->escapeHtml($this->getUpdateOrderSubmitUrl()) $shippingMethodsUpdateUrl
172
+ if ($('billing:as_shipping')) {
173
+ PayPalExpressAjax.setCopyElement($('billing:as_shipping'));
174
+ }
175
+ //]]>
176
+ </script>
app/design/frontend/base/default/template/laybuy/express/review/address.phtml ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php $prefix = $this->getFieldNamePrefix();?>
28
+
29
+ <fieldset>
30
+ <ul class="form-list form-list-narrow">
31
+ <li id="<?php echo $prefix ?>-address-form" class="address-form">
32
+ <fieldset>
33
+ <input type="hidden" name="<?php echo $prefix ?>[address_id]" value="<?php echo $this->getAddress()->getId() ?>" id="<?php echo $prefix ?>:address_id" />
34
+ <ul>
35
+ <li class="fields"><?php echo $this->getLayout()->createBlock('customer/widget_name')->setObject($this->getAddress()->getFirstname() ? $this->getAddress() : $this->getQuote()->getCustomer())->setForceUseCustomerRequiredAttributes(!$this->isCustomerLoggedIn())->setFieldIdFormat($prefix . ':%s')->setFieldNameFormat($prefix . '[%s]')->toHtml() ?></li>
36
+ <li class="fields">
37
+ <div class="field">
38
+ <label for="<?php echo $prefix ?>:company"><?php echo $this->__('Company') ?></label>
39
+ <div class="input-box">
40
+ <input type="text" id="<?php echo $prefix ?>:company" name="<?php echo $prefix ?>[company]" value="<?php echo $this->escapeHtml($this->getAddress()->getCompany()) ?>" title="<?php echo $this->__('Company') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('company') ?>" />
41
+ </div>
42
+ </div>
43
+ <?php if(!$this->isCustomerLoggedIn() && !$this->getHideEmailAddress()): ?>
44
+ <div class="field">
45
+ <label for="<?php echo $prefix ?>:email" class="required"><em>*</em><?php echo $this->__('Email Address') ?></label>
46
+ <div class="input-box">
47
+ <input type="text" name="<?php echo $prefix ?>[email]" id="<?php echo $prefix ?>:email" value="<?php echo $this->escapeHtml($this->getAddress()->getEmail()) ?>" title="<?php echo $this->__('Email Address') ?>" class="input-text validate-email required-entry" />
48
+ </div>
49
+ </div>
50
+ <?php endif; ?>
51
+ </li>
52
+ <?php $_streetValidationClass = $this->helper('customer/address')->getAttributeValidationClass('street'); ?>
53
+ <li class="wide">
54
+ <label for="<?php echo $prefix ?>:street1" class="required"><em>*</em><?php echo $this->__('Address') ?></label>
55
+ <div class="input-box">
56
+ <input type="text" title="<?php echo $this->__('Street Address') ?>" name="<?php echo $prefix ?>[street][]" id="<?php echo $prefix ?>:street1" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet(1)) ?>" class="input-text <?php echo $_streetValidationClass ?>" />
57
+ </div>
58
+ </li>
59
+ <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?>
60
+ <?php for ($_i = 2, $_n = $this->helper('customer/address')->getStreetLines(); $_i <= $_n; $_i++): ?>
61
+ <li class="add-field">
62
+ <div class="input-box">
63
+ <input type="text" title="<?php echo $this->__('Street Address %s', $_i) ?>" name="<?php echo $prefix ?>[street][]" id="<?php echo $prefix ?>:street<?php echo $_i?>" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet($_i)) ?>" class="input-text <?php echo $_streetValidationClass ?>" />
64
+ </div>
65
+ </li>
66
+ <?php endfor; ?>
67
+ <?php if ($this->helper('customer/address')->isVatAttributeVisible()) : ?>
68
+ <li class="wide">
69
+ <label for="<?php echo $prefix ?>:vat_id"><?php echo $this->__('VAT Number') ?></label>
70
+ <div class="input-box">
71
+ <input type="text" id="<?php echo $prefix ?>:vat_id" name="<?php echo $prefix ?>[vat_id]" value="<?php echo $this->escapeHtml($this->getAddress()->getVatId()) ?>" title="<?php echo $this->__('VAT Number') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('vat_id') ?>" />
72
+ </div>
73
+ </li>
74
+ <?php endif; ?>
75
+ <li class="fields">
76
+ <div class="field">
77
+ <label for="<?php echo $prefix ?>:city" class="required"><em>*</em><?php echo $this->__('City') ?></label>
78
+ <div class="input-box">
79
+ <input type="text" title="<?php echo $this->__('City') ?>" name="<?php echo $prefix ?>[city]" value="<?php echo $this->escapeHtml($this->getAddress()->getCity()) ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('city') ?>" id="<?php echo $prefix ?>:city" />
80
+ </div>
81
+ </div>
82
+ <div class="field">
83
+ <label for="<?php echo $prefix ?>:region_id" class="required"><em>*</em><?php echo $this->__('State/Province') ?></label>
84
+ <div class="input-box">
85
+ <select id="<?php echo $prefix ?>:region_id" name="<?php echo $prefix ?>[region_id]" title="<?php echo $this->__('State/Province') ?>" class="validate-select" style="display:none;">
86
+ <option value=""><?php echo $this->__('Please select region, state or province') ?></option>
87
+ </select>
88
+ <script type="text/javascript">
89
+ //<![CDATA[
90
+ $('<?php echo $prefix ?>:region_id').setAttribute('defaultValue', "<?php echo $this->getAddress()->getRegionId() ?>");
91
+ //]]>
92
+ </script>
93
+ <input type="text" id="<?php echo $prefix ?>:region" name="<?php echo $prefix ?>[region]" value="<?php echo $this->escapeHtml($this->getAddress()->getRegion()) ?>" title="<?php echo $this->__('State/Province') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('region') ?>" style="display:none;" />
94
+ </div>
95
+ </div>
96
+ </li>
97
+ <li class="fields">
98
+ <div class="field">
99
+ <label for="<?php echo $prefix ?>:postcode" class="required"><em>*</em><?php echo $this->__('Zip/Postal Code') ?></label>
100
+ <div class="input-box">
101
+ <input type="text" title="<?php echo $this->__('Zip/Postal Code') ?>" name="<?php echo $prefix ?>[postcode]" id="<?php echo $prefix ?>:postcode" value="<?php echo $this->escapeHtml($this->getAddress()->getPostcode()) ?>" class="input-text validate-zip-international <?php echo $this->helper('customer/address')->getAttributeValidationClass('postcode') ?>" />
102
+ </div>
103
+ </div>
104
+ <div class="field">
105
+ <label for="<?php echo $prefix ?>:country_id" class="required"><em>*</em><?php echo $this->__('Country') ?></label>
106
+ <div class="input-box">
107
+ <?php echo $this->getCountryHtmlSelect($prefix) ?>
108
+ </div>
109
+ </div>
110
+ </li>
111
+ <li class="fields">
112
+ <div class="field">
113
+ <label for="<?php echo $prefix ?>:telephone" class="required"><em>*</em><?php echo $this->__('Telephone') ?></label>
114
+ <div class="input-box">
115
+ <input type="text" name="<?php echo $prefix ?>[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('telephone') ?>" id="<?php echo $prefix ?>:telephone" />
116
+ </div>
117
+ </div>
118
+ <div class="field">
119
+ <label for="<?php echo $prefix ?>:fax"><?php echo $this->__('Fax') ?></label>
120
+ <div class="input-box">
121
+ <input type="text" name="<?php echo $prefix ?>[fax]" value="<?php echo $this->escapeHtml($this->getAddress()->getFax()) ?>" title="<?php echo $this->__('Fax') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('fax') ?>" id="<?php echo $prefix ?>:fax" />
122
+ </div>
123
+ </div>
124
+ </li>
125
+ <?php echo $this->getChildHtml('form.additional.info'); ?>
126
+ <?php if ($this->getShowAsShippingCheckbox()): ?>
127
+ <li class="control">
128
+ <div class="field">
129
+ <div class="input-box">
130
+ <input type="checkbox" name="<?php echo $prefix ?>[as_shipping]" class="checkbox" value="1" title="<?php echo $this->__('Same as shipping') ?>" id="<?php echo $prefix ?>:as_shipping" <?php if ($this->getAddress()->getSameAsBilling()):?>checked="checked"<?php endif;?>/>
131
+ </div>
132
+ <label for="<?php echo $prefix ?>:as_shipping"><?php echo $this->__('Same as shipping') ?></label>
133
+ </div>
134
+ </li>
135
+ <?php endif; ?>
136
+ </ul>
137
+ </fieldset>
138
+ </li>
139
+ </ul>
140
+ </fieldset>
141
+ <script type="text/javascript">
142
+ //<![CDATA[
143
+ var <?php echo $prefix ?>RegionUpdater = new RegionUpdater('<?php echo $prefix ?>:country_id', '<?php echo $prefix ?>:region', '<?php echo $prefix ?>:region_id', <?php echo $this->helper('directory')->getRegionJson() ?>, undefined, '<?php echo $prefix ?>:postcode');
144
+ <?php echo $prefix ?>RegionUpdater.update();
145
+ //]]>
146
+ </script>
app/design/frontend/base/default/template/laybuy/express/review/details.phtml ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+
27
+ /**
28
+ * @see Mage_Paypal_Block_Express_Review_Details
29
+ */
30
+ ?>
31
+ <table id="details-table" class="data-table">
32
+ <?php if ($this->helper('tax')->displayCartBothPrices()): $colspan = $rowspan = 2; else: $colspan = $rowspan = 1; endif; ?>
33
+ <col />
34
+ <col width="1" />
35
+ <col width="1" />
36
+ <col width="1" />
37
+ <?php if ($this->helper('tax')->displayCartBothPrices()): ?>
38
+ <col width="1" />
39
+ <col width="1" />
40
+ <?php endif; ?>
41
+ <thead>
42
+ <tr>
43
+ <th rowspan="<?php echo $rowspan ?>"><?php echo $this->__('Product Name') ?></th>
44
+ <th colspan="<?php echo $colspan ?>" class="a-center"><?php echo $this->__('Price') ?></th>
45
+ <th rowspan="<?php echo $rowspan ?>" class="a-center"><?php echo $this->__('Qty') ?></th>
46
+ <th colspan="<?php echo $colspan ?>" class="a-center"><?php echo $this->__('Subtotal') ?></th>
47
+ </tr>
48
+ <?php if ($this->helper('tax')->displayCartBothPrices()): ?>
49
+ <tr>
50
+ <th class="a-right"><?php echo $this->helper('tax')->getIncExcTaxLabel(false) ?></th>
51
+ <th><?php echo $this->helper('tax')->getIncExcTaxLabel(true) ?></th>
52
+ <th class="a-right"><?php echo $this->helper('tax')->getIncExcTaxLabel(false) ?></th>
53
+ <th><?php echo $this->helper('tax')->getIncExcTaxLabel(true) ?></th>
54
+ </tr>
55
+ <?php endif; ?>
56
+ </thead>
57
+ <?php echo $this->getChildHtml('totals'); ?>
58
+ <tbody>
59
+ <?php foreach($this->getItems() as $_item): ?>
60
+ <?php echo $this->getItemHtml($_item) ?>
61
+ <?php endforeach ?>
62
+ </tbody>
63
+ </table>
64
+ <script type="text/javascript">decorateTable('details-table');</script>
app/design/frontend/base/default/template/laybuy/express/review/shipping/method.phtml ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ /** @var $this Mage_Paypal_Block_Express_Review */
27
+ ?>
28
+ <fieldset id="shipping-method-container">
29
+ <?php if ($this->getCanEditShippingMethod() || !$this->getCurrentShippingRate()):?>
30
+ <?php if ($groups = $this->getShippingRateGroups()):?>
31
+ <?php $currentRate = $this->getCurrentShippingRate(); ?>
32
+ <select name="shipping_method" id="shipping_method" style="width:250px;" class="required-entry">
33
+ <?php if (!$currentRate):?>
34
+ <option value=""><?php echo $this->__('Please select a shipping method...') ?></option>
35
+ <?php endif;?>
36
+ <?php foreach ($groups as $code => $rates):?>
37
+ <optgroup label="<?php echo $this->escapeHtml($this->getCarrierName($code)) ?>" style="font-style:normal;">
38
+ <?php foreach ($rates as $rate):?>
39
+ <option value="<?php echo $this->renderShippingRateValue($rate)?>"<?php echo ($currentRate === $rate) ? ' selected="selected"' : '' ;?>>
40
+ <?php echo $this->renderShippingRateOption($rate)?>
41
+ </option>
42
+ <?php endforeach;?>
43
+ </optgroup>
44
+ <?php endforeach;?>
45
+ </select>
46
+ <?php else: ?>
47
+ <p><strong><?php echo $this->__('Sorry, no quotes are available for this order at this time.') ?></strong></p>
48
+ <?php endif;?>
49
+ <?php else: ?>
50
+ <p><strong><?php echo $this->renderShippingRateOption($this->getCurrentShippingRate())?></strong></p>
51
+ <?php endif; ?>
52
+ </fieldset>
53
+ <div style="display:none" id="shipping_method_update"><p><?php echo $this->__('Please update order data to get shipping methods and rates') ?></p></div>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Ced_LayBuy</name>
4
- <version>2.1.8.3</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
  <channel>community</channel>
@@ -18,12 +18,11 @@ PUT IT ON LAY-BUY enables online shoppers to pay-off a product or service via a
18
  Merchants however only deliver the product or service after receipt of the final instalment payment&#xD;
19
  &#xD;
20
  This effectively increases sales and radically improves cash flow where all the customer monies are paid directly into your PayPal account</description>
21
- <notes>1. New secure communication protocal,&#xD;
22
- .</notes>
23
- <authors><author><name>Warrin</name><user>Warrin</user><email>warrin@lay-buys.com</email></author><author><name>Asheesh Singh</name><user>asheeshsingh</user><email>asheeshsingh@cedcoss.com</email></author></authors>
24
- <date>2015-03-04</date>
25
- <time>09:49:23</time>
26
- <contents><target name="magelocal"><dir name="Ced"><dir name="LayBuy"><dir name="Block"><dir name="Adminhtml"><file name="Docalc.php" hash="c12af05bee0d480ac49835b46ca8011e"/><dir name="Orders"><file name="Grid.php" hash="54a924cd69f95cf9496f91702a4edeec"/><file name="Grid.php.bkp" hash="b37908e3e7f57787c4b3d441be869ba9"/></dir><file name="Orders.php" hash="aa89abe43868eedab8cb195b5dcbe77f"/><dir name="Report"><dir name="Details"><file name="Form.php" hash="e0ce57d85efc14656d4294021e5f5257"/></dir><file name="Details.php" hash="16317e0652d7e33e1207d0a1b29ed185"/><dir name="Edit"><file name="Form.php" hash="ca0b74b0301d0051930478f87aec2080"/></dir><file name="Edit.php" hash="5dc6f961714c5d38a228f6b943c3127d"/><file name="Grid.php" hash="a94a86483b880c9908572e3fc8f5d30d"/><dir name="Renderer"><file name="Email.php" hash="8e6c0938d80f629cd285303018945ea1"/><file name="Order.php" hash="51a2ba685b652f69df633ccfa4b5900a"/><file name="Record.php" hash="95eb9f836a50f3f80d254a7cdd8e1d6e"/></dir></dir><file name="Report.php" hash="ff77fef080779db3a699cdb8a4703c49"/></dir><dir name="Customer"><dir name="Account"><file name="Details.php" hash="5bb9caf5b0a6e9584046f6af9ee4ae5f"/><file name="Grid.php" hash="3b170ed3f70422b3a64263535d3543e3"/></dir></dir><dir name="Form"><file name="Laybuy.php" hash="cbf8b96d0fa26d4b772bafd021e3fc83"/></dir><dir name="Info"><file name="Laybuy.php" hash="bced26100dc8bbadc334b54349734637"/></dir><dir name="Revise"><file name="Redirect.php" hash="6f63613d0fe5540a296804c14263a614"/></dir><dir name="Standard"><file name="Docalc.php" hash="42b2b63a23577c888cccc5f6c20b8867"/><file name="Redirect.php" hash="bdf403ef8c7c290ce0af83cdd172dcb7"/></dir></dir><dir name="Helper"><file name="Config.php" hash="360b6125612be9de5cd0e3b69f4422c2"/><file name="Data.php" hash="7e5ba01ef723858f4752d03cf2242103"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Report"><file name="Collection.php" hash="a3e133f1128200662330a5e21a94c809"/></dir><file name="Report.php" hash="25568238c401ab5e5768596fb76f7ef8"/><dir name="Revise"><file name="Collection.php" hash="2a502f75e4634e4f231f93226ef49b8a"/></dir><file name="Revise.php" hash="cd1a424882417e0ec94561a8cca378e8"/><file name="Setup.php" hash="261838defadf805c7ee29768f6ea8cec"/></dir><file name="Observer.php" hash="e085e396516583f6685648f75d967a66"/><file name="Report.php" hash="ffb651448186ad401e238b2060074317"/><file name="Revise.php" hash="b9bbea4b6760b464ec8ff66c872def7a"/><file name="Standard.php" hash="b991b733940156d1b24b6a0c813d68e0"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="955ae77c29ecbc063d8f779898d08472"/><file name="Cron.php.bkp" hash="24c8fcf93531c9877d03f2eebde2e2dd"/></dir><dir name="Source"><file name="Allowspecificcategory.php" hash="0463f2be60a2695e4f76411c979b6bc8"/><file name="Allowspecificgroup.php" hash="a27c9bf1231a59a8f38668b525c420ba"/><file name="Categories.php" hash="92c61dba3c23e7838cddbaaee8f21d05"/><file name="FetchingSchedule.php" hash="7ad862c46ec8f54299cc92ae87b61322"/><file name="FetchingSchedule.php.bkp" hash="4f3e5aec5a17991d1625d6f17c0f7d32"/><file name="Groups.php" hash="87a205676d93d59a26d1d7bb69266991"/></dir></dir></dir></dir><file name="README.txt" hash="7930d4ac1e8f9957bb2052983eab4340"/><dir name="controllers"><dir name="Adminhtml"><file name="OrdersController.php" hash="b439600c08514fb9ada1ae0e75272e21"/><file name="ReportController.php" hash="b22ab26daaeca1c067427288230d1656"/></dir><file name="ReportController.php" hash="e2c5e9ce734b2c3320eb503e05baecae"/><file name="ReviseController.php" hash="39cf4f4031522b1cf0f623f51c186715"/><file name="StandardController.php" hash="0c4233798441091d6749766c0a894789"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6bc550c65f0f65b11d6dbb38aafcb63d"/><file name="config.xml" hash="b4989e2e7bc0e017b0202523cdc13097"/><file name="system.xml" hash="de7ca437cd91076c098ec22b3cf10fb8"/></dir><dir name="sql"><dir name="laybuy_setup"><file name="mysql4-install-0.1.0.php" hash="68e359cd24b6051d0c2a91daad899d71"/><file name="mysql4-upgrade-0.1.0-0.2.0.php" hash="bec5e37090cb5a6da6c8ba3652a8bd32"/><file name="mysql4-upgrade-0.2.0-0.3.0.php" hash="97aa7a2a8c91e46c896a6d04d9554aeb"/><file name="mysql4-upgrade-0.3.0-0.4.0.php" hash="9b147158166b94d52e0cfff369ce965c"/><file name="mysql4-upgrade-0.4.0-0.5.0.php" hash="7626925b0cac03d0918eb6b1d51e6d19"/><file name="mysql4-upgrade-0.5.0-0.6.0.php" hash="bc96daed76ca1f04b1eb422508bc3a4b"/><file name="mysql4-upgrade-0.6.0-0.7.0.php" hash="6aa013f47e3b78e4d78e2cba9b471cd4"/><file name="mysql4-upgrade-0.7.0-0.8.0.php" hash="c2ea0f16c8f1e0dc7412a6a0fda1c622"/><file name="mysql4-upgrade-0.8.0-0.9.0.php" hash="d98ba6bef5f4f46ca741d5db014686f1"/><file name="mysql4-upgrade-0.9.0-1.0.0.php" hash="a20364c9f3a1b2a6a7e33a2e2f03bd60"/></dir></dir><file name="README.txt" hash="7930d4ac1e8f9957bb2052983eab4340"/></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="laybuy.xml" hash="963cc90317ac79c032f2530eca1813ba"/></dir><dir name="template"><dir name="laybuy"><dir name="checkout"><dir name="onepage"><dir name="review"><file name="button.phtml" hash="a1e678a76d674b223e944bdd4de0625a"/></dir></dir></dir><dir name="customer"><dir name="account"><file name="details.phtml" hash="965a58454b4b3cdcc115d78e595f7c33"/><file name="grid.phtml" hash="2dc802991a69b459f263f4e78c657549"/></dir></dir><dir name="form"><file name="extra.phtml" hash="535609083ce3e06706ec30766b354d8a"/><file name="extra.phtml.bkp" hash="e089ba0a3bd4ff1c0bc631c88ba32dd2"/><file name="laybuy.phtml" hash="5169cbb58cb7fec4312eb70325829e70"/><file name="laybuy.phtml.bkp" hash="a1c8dc8ff7ebd565d0100785ad089f64"/></dir><dir name="info"><file name="default.phtml" hash="b0bdfa731e4410c99a79c3b5b0a86cff"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="laybuy.xml" hash="b60d76e466dac9154654041350d5e829"/></dir><dir name="template"><dir name="laybuy"><dir name="info"><file name="default.phtml" hash="a9dfb322a83df7bc53bb2a64c6f192e3"/><dir name="pdf"><file name="laybuy.phtml" hash="e96cab97e4bd4ca32a022e90d5449eae"/></dir></dir><file name="notification.phtml" hash="efb99f36ea192d6bc8c60d53dec8a6e1"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Ced_LayBuy.xml" hash="394d4e115e1955ba12681f6a81cb118d"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Ced_LayBuy.csv" hash="f79a1a6ca61c5e7a7463c380eb00896d"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="laybuy"><file name="tooltip.css" hash="ece078bf3d8bb27db4a616fdad505671"/></dir></dir><dir name="images"><dir name="laybuy"><file name="closeBtn.png" hash="b0be9d9ef1053c79b0ebdcef83b53f44"/></dir></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="laybuy"><file name="jquery.atooltip.js" hash="5ad78b7e8ac539053ff56a2ea25e4d4c"/><file name="jquery.min.js" hash="41ab3fafa358a66f764b91d072f16615"/></dir></dir></target></contents>
27
  <compatible/>
28
  <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
29
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Ced_LayBuy</name>
4
+ <version>2.1.8.4</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
  <channel>community</channel>
18
  Merchants however only deliver the product or service after receipt of the final instalment payment&#xD;
19
  &#xD;
20
  This effectively increases sales and radically improves cash flow where all the customer monies are paid directly into your PayPal account</description>
21
+ <notes>1.New secure communication protocal.</notes>
22
+ <authors><author><name>Warrin</name><user>Warrin</user><email>warrin@lay-buys.com</email></author><author><name>Asheesh Singh</name><user>asheeshsingh</user><email>asheeshsingh@cedcoss.com</email></author><author><name>Sanjeev Kumar Gupta</name><user>sanjeevgupta</user><email>sanjeevkumargupta@cedcoss.com</email></author></authors>
23
+ <date>2015-04-14</date>
24
+ <time>11:52:59</time>
25
+ <contents><target name="magelocal"><dir name="Ced"><dir name="LayBuy"><dir><dir name="Block"><dir name="Adminhtml"><file name="Docalc.php" hash="c12af05bee0d480ac49835b46ca8011e"/><dir name="Orders"><file name="Grid.php" hash="54a924cd69f95cf9496f91702a4edeec"/><file name="Grid.php.bkp" hash="b37908e3e7f57787c4b3d441be869ba9"/></dir><file name="Orders.php" hash="aa89abe43868eedab8cb195b5dcbe77f"/><dir name="Report"><dir name="Details"><file name="Form.php" hash="e0ce57d85efc14656d4294021e5f5257"/></dir><file name="Details.php" hash="16317e0652d7e33e1207d0a1b29ed185"/><dir name="Edit"><file name="Form.php" hash="ca0b74b0301d0051930478f87aec2080"/></dir><file name="Edit.php" hash="5dc6f961714c5d38a228f6b943c3127d"/><file name="Grid.php" hash="a94a86483b880c9908572e3fc8f5d30d"/><dir name="Renderer"><file name="Email.php" hash="8e6c0938d80f629cd285303018945ea1"/><file name="Order.php" hash="51a2ba685b652f69df633ccfa4b5900a"/><file name="Record.php" hash="95eb9f836a50f3f80d254a7cdd8e1d6e"/></dir></dir><file name="Report.php" hash="ff77fef080779db3a699cdb8a4703c49"/></dir><dir name="Customer"><dir name="Account"><file name="Details.php" hash="5bb9caf5b0a6e9584046f6af9ee4ae5f"/><file name="Grid.php" hash="3b170ed3f70422b3a64263535d3543e3"/></dir></dir><dir name="Express"><file name="Layform.php" hash="5220c8b272517893117c106cfcb225f1"/><file name="Layshortcut.php" hash="6f816b7629cd900f0fa96717a717d54e"/><file name="Redirect.php" hash="6f55337e5b979cca8c7cff64e955327f"/><dir name="Review"><file name="Billing.php" hash="b54899379bc5203920b8ebb92a557783"/><file name="Details.php" hash="94e0a0692b80c2e74897bded2e3d8bfb"/><file name="Shipping.php" hash="419447e905bd26df390660b906de4293"/></dir><file name="Review.php" hash="2aaa2ee5979b99f9e1c8fc62f8462056"/></dir><dir name="Form"><file name="Laybuy.php" hash="cbf8b96d0fa26d4b772bafd021e3fc83"/></dir><dir name="Info"><file name="Laybuy.php" hash="bced26100dc8bbadc334b54349734637"/></dir><dir name="Payment"><file name="Info.php" hash="ada79889134af121d15cc20b5d20e631"/></dir><dir name="Revise"><file name="Redirect.php" hash="6f63613d0fe5540a296804c14263a614"/></dir><dir name="Standard"><file name="Docalc.php" hash="42b2b63a23577c888cccc5f6c20b8867"/><file name="Redirect.php" hash="bdf403ef8c7c290ce0af83cdd172dcb7"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="OrdersController.php" hash="b439600c08514fb9ada1ae0e75272e21"/><file name="ReportController.php" hash="b22ab26daaeca1c067427288230d1656"/></dir><file name="ExpressController.php" hash="7ea759f39d712fb1ae1fc5216c503bc6"/><file name="ReportController.php" hash="e2c5e9ce734b2c3320eb503e05baecae"/><file name="ReviseController.php" hash="39cf4f4031522b1cf0f623f51c186715"/><file name="StandardController.php" hash="0c4233798441091d6749766c0a894789"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6bc550c65f0f65b11d6dbb38aafcb63d"/><file name="config.xml" hash="80e5e4827e2bfd3dd5fe16aa567bb284"/><file name="system.xml" hash="083f553c6c6a29b965467e91ba722446"/></dir><dir name="Helper"><file name="Config.php" hash="360b6125612be9de5cd0e3b69f4422c2"/><file name="Data.php" hash="6860d634141dd0f96ac93fe17e57d6ff"/></dir><dir name="Model"><file name="Abstract.php" hash="bbe69ad50f5aa1e02fa0d581addbc06e"/><file name="Config.php" hash="6d45f8a0d8d6d3deeb0ed6e13fbeafc0"/><file name="Express.php" hash="b411edad160b1adf63e9581884b3579b"/><file name="Laybuyresp.php" hash="66379c09b62cc940a8aef23e796f3128"/><dir name="Mysql4"><dir name="Laybuyresp"><file name="Collection.php" hash="fff7dbedfd6536c10251d50843924798"/></dir><file name="Laybuyresp.php" hash="1270556aab8ccaf4c92e1f3c902153dc"/><dir name="Region"><file name="Collection.php" hash="8c99fda8daf14cbb54ff4a6bd515084c"/></dir><dir name="Report"><file name="Collection.php" hash="a3e133f1128200662330a5e21a94c809"/></dir><file name="Report.php" hash="25568238c401ab5e5768596fb76f7ef8"/><dir name="Revise"><file name="Collection.php" hash="2a502f75e4634e4f231f93226ef49b8a"/></dir><file name="Revise.php" hash="cd1a424882417e0ec94561a8cca378e8"/><file name="Setup.php" hash="261838defadf805c7ee29768f6ea8cec"/></dir><file name="Observer.php" hash="e085e396516583f6685648f75d967a66"/><file name="Pro.php" hash="47788ab1d076d7cd809e19b4a4e8bc11"/><file name="Report.php" hash="ffb651448186ad401e238b2060074317"/><file name="Revise.php" hash="b9bbea4b6760b464ec8ff66c872def7a"/><file name="Standard.php" hash="b991b733940156d1b24b6a0c813d68e0"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="955ae77c29ecbc063d8f779898d08472"/><file name="Cron.php.bkp" hash="24c8fcf93531c9877d03f2eebde2e2dd"/></dir><dir name="Source"><file name="Allowspecificcategory.php" hash="0463f2be60a2695e4f76411c979b6bc8"/><file name="Allowspecificgroup.php" hash="a27c9bf1231a59a8f38668b525c420ba"/><file name="Categories.php" hash="92c61dba3c23e7838cddbaaee8f21d05"/><file name="FetchingSchedule.php" hash="7ad862c46ec8f54299cc92ae87b61322"/><file name="FetchingSchedule.php.bkp" hash="4f3e5aec5a17991d1625d6f17c0f7d32"/><file name="Groups.php" hash="87a205676d93d59a26d1d7bb69266991"/></dir></dir></dir></dir><dir name="sql"><dir name="laybuy_setup"><file name="mysql4-install-0.1.0.php" hash="68e359cd24b6051d0c2a91daad899d71"/><file name="mysql4-upgrade-0.1.0-0.2.0.php" hash="bec5e37090cb5a6da6c8ba3652a8bd32"/><file name="mysql4-upgrade-0.2.0-0.3.0.php" hash="97aa7a2a8c91e46c896a6d04d9554aeb"/><file name="mysql4-upgrade-0.3.0-0.4.0.php" hash="9b147158166b94d52e0cfff369ce965c"/><file name="mysql4-upgrade-0.4.0-0.5.0.php" hash="7626925b0cac03d0918eb6b1d51e6d19"/><file name="mysql4-upgrade-0.5.0-0.6.0.php" hash="bc96daed76ca1f04b1eb422508bc3a4b"/><file name="mysql4-upgrade-0.6.0-0.7.0.php" hash="6aa013f47e3b78e4d78e2cba9b471cd4"/><file name="mysql4-upgrade-0.7.0-0.8.0.php" hash="c2ea0f16c8f1e0dc7412a6a0fda1c622"/><file name="mysql4-upgrade-0.8.0-0.9.0.php" hash="d98ba6bef5f4f46ca741d5db014686f1"/><file name="mysql4-upgrade-0.9.0-1.0.0.php" hash="a20364c9f3a1b2a6a7e33a2e2f03bd60"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="047c77c6ad5a49b47165ed242279fd4e"/></dir></dir></dir><file name="README.txt" hash="7930d4ac1e8f9957bb2052983eab4340"/></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="laybuy.xml" hash="b8732c983d0c9c7c8807208985ca3953"/></dir><dir name="template"><dir name="laybuy"><dir><dir name="checkout"><dir name="onepage"><dir name="review"><file name="button.phtml" hash="a1e678a76d674b223e944bdd4de0625a"/></dir></dir></dir><dir name="customer"><dir name="account"><file name="details.phtml" hash="965a58454b4b3cdcc115d78e595f7c33"/><file name="grid.phtml" hash="2dc802991a69b459f263f4e78c657549"/></dir></dir><dir name="express"><file name="extraexpress.phtml" hash="51ceb076c4eff7c1ea7cd931d65c9f3f"/><file name="layshortcut1.phtml" hash="a3b7490f991dcd03571a02c2e68a8020"/><file name="layshortcut.phtml" hash="96e953a90a36b7fd98f714db1ca6a407"/><dir name="review"><file name="address.phtml" hash="56f47a05c89dcff636144d1e5171188d"/><file name="details.phtml" hash="d9cfdaa646d2d6693002bf6f00064201"/><dir name="shipping"><file name="method.phtml" hash="f71cbdfc5a8fe543eb03c8475a1818d3"/></dir></dir><file name="review.phtml" hash="962f5e4e7d5e0720849eea77db6098b1"/></dir><dir name="form"><file name="extra.phtml" hash="535609083ce3e06706ec30766b354d8a"/><file name="extra.phtml.bkp" hash="e089ba0a3bd4ff1c0bc631c88ba32dd2"/><file name="laybuy.phtml" hash="5169cbb58cb7fec4312eb70325829e70"/><file name="laybuy.phtml.bkp" hash="a1c8dc8ff7ebd565d0100785ad089f64"/></dir><dir name="info"><file name="default.phtml" hash="b0bdfa731e4410c99a79c3b5b0a86cff"/></dir></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="laybuy.xml" hash="b60d76e466dac9154654041350d5e829"/></dir><dir name="template"><dir name="laybuy"><dir><dir name="info"><file name="default.phtml" hash="a9dfb322a83df7bc53bb2a64c6f192e3"/><dir name="pdf"><file name="laybuy.phtml" hash="e96cab97e4bd4ca32a022e90d5449eae"/></dir></dir></dir><file name="notification.phtml" hash="efb99f36ea192d6bc8c60d53dec8a6e1"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Ced_LayBuy.xml" hash="394d4e115e1955ba12681f6a81cb118d"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Ced_LayBuy.csv" hash="f79a1a6ca61c5e7a7463c380eb00896d"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="laybuy"><file name="tooltip.css" hash="ece078bf3d8bb27db4a616fdad505671"/></dir></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="laybuy"><file name="jquery.atooltip.js" hash="5ad78b7e8ac539053ff56a2ea25e4d4c"/><file name="jquery.min.js" hash="41ab3fafa358a66f764b91d072f16615"/></dir></dir></target></contents>
 
26
  <compatible/>
27
  <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
28
  </package>
skin/frontend/base/default/images/laybuy/closeBtn.png DELETED
Binary file