1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
26:
27:
28: 29: 30: 31: 32: 33: 34:
35: class Mage_Shipping_Model_Carrier_Flatrate
36: extends Mage_Shipping_Model_Carrier_Abstract
37: implements Mage_Shipping_Model_Carrier_Interface
38: {
39:
40: protected $_code = 'flatrate';
41: protected $_isFixed = true;
42:
43: 44: 45: 46: 47: 48:
49: public function collectRates(Mage_Shipping_Model_Rate_Request $request)
50: {
51: if (!$this->getConfigFlag('active')) {
52: return false;
53: }
54:
55: $freeBoxes = 0;
56: if ($request->getAllItems()) {
57: foreach ($request->getAllItems() as $item) {
58:
59: if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
60: continue;
61: }
62:
63: if ($item->getHasChildren() && $item->isShipSeparately()) {
64: foreach ($item->getChildren() as $child) {
65: if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
66: $freeBoxes += $item->getQty() * $child->getQty();
67: }
68: }
69: } elseif ($item->getFreeShipping()) {
70: $freeBoxes += $item->getQty();
71: }
72: }
73: }
74: $this->setFreeBoxes($freeBoxes);
75:
76: $result = Mage::getModel('shipping/rate_result');
77: if ($this->getConfigData('type') == 'O') {
78: $shippingPrice = $this->getConfigData('price');
79: } elseif ($this->getConfigData('type') == 'I') {
80: $shippingPrice = ($request->getPackageQty() * $this->getConfigData('price')) - ($this->getFreeBoxes() * $this->getConfigData('price'));
81: } else {
82: $shippingPrice = false;
83: }
84:
85: $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice);
86:
87: if ($shippingPrice !== false) {
88: $method = Mage::getModel('shipping/rate_result_method');
89:
90: $method->setCarrier('flatrate');
91: $method->setCarrierTitle($this->getConfigData('title'));
92:
93: $method->setMethod('flatrate');
94: $method->setMethodTitle($this->getConfigData('name'));
95:
96: if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) {
97: $shippingPrice = '0.00';
98: }
99:
100:
101: $method->setPrice($shippingPrice);
102: $method->setCost($shippingPrice);
103:
104: $result->append($method);
105: }
106:
107: return $result;
108: }
109:
110: public function getAllowedMethods()
111: {
112: return array('flatrate'=>$this->getConfigData('name'));
113: }
114:
115: }
116: