1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: 13: 14:
15: class IllApps_Shipsync_Model_Shipping_Package_Origins
16: {
17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
31: public function prepareRequest (&$request, &$itemsByOrigin, &$packagesByOrigin)
32: {
33: if($request->getPackages())
34: {
35: foreach($request->getPackages() as $package)
36: {
37: if(isset($itemsByOrigin[(int) $package['alt_origin']])) {
38: $itemsToMerge = $itemsByOrigin[(int) $package['alt_origin']];
39: $itemsByOrigin[(int) $package['alt_origin']] = array_merge($itemsToMerge, $package['items']);
40: }
41: else {
42: $itemsByOrigin[(int) $package['alt_origin']] = $package['items'];
43: }
44: $packagesByOrigin[(int) $package['alt_origin']][] = $package;
45: }
46:
47: $request->setPackages(null);
48: }
49: else
50: {
51: $_items = Mage::getModel('shipsync/shipping_package')->getParsedItems($request->getAllItems());
52:
53: $itemsByOrigin = Mage::getModel('shipsync/shipping_package_item')->byOrigin($_items);
54: }
55: }
56:
57: 58: 59: 60: 61: 62: 63: 64: 65:
66: public function prepareShipRequest(&$request, &$itemsByOrigin, &$packagesByOrigin)
67: {
68: if($request->getPackages())
69: {
70: foreach($request->getPackages() as $package)
71: {
72: if(isset($itemsByOrigin[(int) $package->getOrigin()])) {
73: $itemsToMerge = $itemsByOrigin[(int) $package->getOrigin()];
74: $itemsByOrigin[(int) $package->getOrigin()] = array_merge($itemsToMerge, $package->getItems());
75: }
76: else {
77: $itemsByOrigin[(int) $package->getOrigin()] = $package->getItems();
78: }
79: $packagesByOrigin[(int) $package->getOrigin()][] = $package;
80: }
81:
82: $request->setPackages(null);
83: }
84: else
85: {
86: $_items = Mage::getModel('shipsync/shipping_package')->getParsedItems($request->getAllItems());
87:
88: $itemsByOrigin = Mage::getModel('shipsync/shipping_package_item')->byOrigin($_items);
89: }
90: }
91:
92: 93: 94: 95: 96: 97: 98: 99: 100:
101: public function setOrigins(&$request, $int)
102: {
103: $origin = Mage::getModel('shipsync/shipping_package_item')->getOrigin($int);
104:
105: $request->setOrigCountryId($origin['country']);
106: $request->setOrigRegionId($origin['regionId']);
107: $request->setOrigRegionCode($origin['regionCode']);
108: $request->setOrigPostcode($origin['postcode']);
109: $request->setOrigCity($origin['city']);
110: $request->setOrigStreet($origin['street']);
111: }
112:
113: 114: 115: 116: 117: 118: 119:
120: public function collectMultipleShipments($shipResultCollection)
121: {
122: foreach($shipResultCollection as $shipResult)
123: {
124: $retval = (isset($retval)) ? array_merge($retval, $shipResult) : $shipResult;
125: }
126: return $retval;
127: }
128:
129: 130: 131: 132: 133: 134: 135: 136: 137:
138: public function collectMultipleResponses($responseCollection)
139: {
140: $_responses = new Mage_Shipping_Model_Rate_Result;
141:
142: $responses = $responseCollection[0];
143:
144: if($responses->getError()) {return $responses;}
145:
146: unset($responseCollection[0]);
147:
148: foreach ($responseCollection as $cmpResponses)
149: {
150: $i = count($cmpResponses->getAllRates());
151:
152: if(!isset($cmpResponses)) {return $responses;}
153:
154: while($i)
155: {
156: $i--;
157: $match = false;
158:
159: foreach($cmpResponses->getAllRates() as $key => $cmpMethod)
160: {
161: if($responses->getRateById($i)->getMethod() == $cmpMethod->getMethod())
162: {
163: $responses->getRateById($i)->setCost($responses->getRateById($i)->getCost() + $cmpMethod->getCost());
164: $responses->getRateById($i)->setPrice($responses->getRateById($i)->getPrice() + $cmpMethod->getPrice());
165: $match = true;
166: }
167: }
168: if($match) { $_responses->append($responses->getRateById($i)); }
169: }
170: $responses = $_responses;
171: }
172: return $responses;
173: }
174:
175: public function collectSaturdayResponses ($responseCollection)
176: {
177: $_responses = new Mage_Shipping_Model_Rate_Result;
178:
179: if (isset($responseCollection[1])) { $responses = $responseCollection[1]; }
180:
181: $err = $responses->asArray();
182:
183: if(empty($err) || $responses->getError()) {return $responseCollection[0];}
184:
185: foreach ($responseCollection[0]->getAllRates() as $key => $method)
186: {
187: $methodKeys[$key] = $method->getMethod();
188: }
189:
190: foreach ($responses->getAllRates() as $key => $method)
191: {
192: if (in_array($method->getMethod(), $methodKeys))
193: {
194: unset($methodKeys[array_search($method->getMethod(), $methodKeys)]);
195: }
196: $_responses->append($method);
197: }
198:
199: if (isset($methodKeys))
200: {
201: foreach ($methodKeys as $key => $method)
202: {
203: $_responses->append($responseCollection[0]->getRateById($key));
204: }
205: }
206:
207: return $_responses;
208:
209: }
210: }
211: