order.php (31220B)
1 <?php 2 class ControllerApiOrder extends Controller { 3 public function add() { 4 $this->load->language('api/order'); 5 6 $json = array(); 7 8 if (!isset($this->session->data['api_id'])) { 9 $json['error'] = $this->language->get('error_permission'); 10 } else { 11 // Customer 12 if (!isset($this->session->data['customer'])) { 13 $json['error'] = $this->language->get('error_customer'); 14 } 15 16 // Payment Address 17 if (!isset($this->session->data['payment_address'])) { 18 $json['error'] = $this->language->get('error_payment_address'); 19 } 20 21 // Payment Method 22 if (!$json && !empty($this->request->post['payment_method'])) { 23 if (empty($this->session->data['payment_methods'])) { 24 $json['error'] = $this->language->get('error_no_payment'); 25 } elseif (!isset($this->session->data['payment_methods'][$this->request->post['payment_method']])) { 26 $json['error'] = $this->language->get('error_payment_method'); 27 } 28 29 if (!$json) { 30 $this->session->data['payment_method'] = $this->session->data['payment_methods'][$this->request->post['payment_method']]; 31 } 32 } 33 34 if (!isset($this->session->data['payment_method'])) { 35 $json['error'] = $this->language->get('error_payment_method'); 36 } 37 38 // Shipping 39 if ($this->cart->hasShipping()) { 40 // Shipping Address 41 if (!isset($this->session->data['shipping_address'])) { 42 $json['error'] = $this->language->get('error_shipping_address'); 43 } 44 45 // Shipping Method 46 if (!$json && !empty($this->request->post['shipping_method'])) { 47 if (empty($this->session->data['shipping_methods'])) { 48 $json['error'] = $this->language->get('error_no_shipping'); 49 } else { 50 $shipping = explode('.', $this->request->post['shipping_method']); 51 52 if (!isset($shipping[0]) || !isset($shipping[1]) || !isset($this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]])) { 53 $json['error'] = $this->language->get('error_shipping_method'); 54 } 55 } 56 57 if (!$json) { 58 $this->session->data['shipping_method'] = $this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]]; 59 } 60 } 61 62 // Shipping Method 63 if (!isset($this->session->data['shipping_method'])) { 64 $json['error'] = $this->language->get('error_shipping_method'); 65 } 66 } else { 67 unset($this->session->data['shipping_address']); 68 unset($this->session->data['shipping_method']); 69 unset($this->session->data['shipping_methods']); 70 } 71 72 // Cart 73 if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) { 74 $json['error'] = $this->language->get('error_stock'); 75 } 76 77 // Validate minimum quantity requirements. 78 $products = $this->cart->getProducts(); 79 80 foreach ($products as $product) { 81 $product_total = 0; 82 83 foreach ($products as $product_2) { 84 if ($product_2['product_id'] == $product['product_id']) { 85 $product_total += $product_2['quantity']; 86 } 87 } 88 89 if ($product['minimum'] > $product_total) { 90 $json['error'] = sprintf($this->language->get('error_minimum'), $product['name'], $product['minimum']); 91 92 break; 93 } 94 } 95 96 if (!$json) { 97 $json['success'] = $this->language->get('text_success'); 98 99 $order_data = array(); 100 101 // Store Details 102 $order_data['invoice_prefix'] = $this->config->get('config_invoice_prefix'); 103 $order_data['store_id'] = $this->config->get('config_store_id'); 104 $order_data['store_name'] = $this->config->get('config_name'); 105 $order_data['store_url'] = $this->config->get('config_url'); 106 107 // Customer Details 108 $order_data['customer_id'] = $this->session->data['customer']['customer_id']; 109 $order_data['customer_group_id'] = $this->session->data['customer']['customer_group_id']; 110 $order_data['firstname'] = $this->session->data['customer']['firstname']; 111 $order_data['lastname'] = $this->session->data['customer']['lastname']; 112 $order_data['email'] = $this->session->data['customer']['email']; 113 $order_data['telephone'] = $this->session->data['customer']['telephone']; 114 $order_data['custom_field'] = $this->session->data['customer']['custom_field']; 115 116 // Payment Details 117 $order_data['payment_firstname'] = $this->session->data['payment_address']['firstname']; 118 $order_data['payment_lastname'] = $this->session->data['payment_address']['lastname']; 119 $order_data['payment_company'] = $this->session->data['payment_address']['company']; 120 $order_data['payment_address_1'] = $this->session->data['payment_address']['address_1']; 121 $order_data['payment_address_2'] = $this->session->data['payment_address']['address_2']; 122 $order_data['payment_city'] = $this->session->data['payment_address']['city']; 123 $order_data['payment_postcode'] = $this->session->data['payment_address']['postcode']; 124 $order_data['payment_zone'] = $this->session->data['payment_address']['zone']; 125 $order_data['payment_zone_id'] = $this->session->data['payment_address']['zone_id']; 126 $order_data['payment_country'] = $this->session->data['payment_address']['country']; 127 $order_data['payment_country_id'] = $this->session->data['payment_address']['country_id']; 128 $order_data['payment_address_format'] = $this->session->data['payment_address']['address_format']; 129 $order_data['payment_custom_field'] = (isset($this->session->data['payment_address']['custom_field']) ? $this->session->data['payment_address']['custom_field'] : array()); 130 131 if (isset($this->session->data['payment_method']['title'])) { 132 $order_data['payment_method'] = $this->session->data['payment_method']['title']; 133 } else { 134 $order_data['payment_method'] = ''; 135 } 136 137 if (isset($this->session->data['payment_method']['code'])) { 138 $order_data['payment_code'] = $this->session->data['payment_method']['code']; 139 } else { 140 $order_data['payment_code'] = ''; 141 } 142 143 // Shipping Details 144 if ($this->cart->hasShipping()) { 145 $order_data['shipping_firstname'] = $this->session->data['shipping_address']['firstname']; 146 $order_data['shipping_lastname'] = $this->session->data['shipping_address']['lastname']; 147 $order_data['shipping_company'] = $this->session->data['shipping_address']['company']; 148 $order_data['shipping_address_1'] = $this->session->data['shipping_address']['address_1']; 149 $order_data['shipping_address_2'] = $this->session->data['shipping_address']['address_2']; 150 $order_data['shipping_city'] = $this->session->data['shipping_address']['city']; 151 $order_data['shipping_postcode'] = $this->session->data['shipping_address']['postcode']; 152 $order_data['shipping_zone'] = $this->session->data['shipping_address']['zone']; 153 $order_data['shipping_zone_id'] = $this->session->data['shipping_address']['zone_id']; 154 $order_data['shipping_country'] = $this->session->data['shipping_address']['country']; 155 $order_data['shipping_country_id'] = $this->session->data['shipping_address']['country_id']; 156 $order_data['shipping_address_format'] = $this->session->data['shipping_address']['address_format']; 157 $order_data['shipping_custom_field'] = (isset($this->session->data['shipping_address']['custom_field']) ? $this->session->data['shipping_address']['custom_field'] : array()); 158 159 if (isset($this->session->data['shipping_method']['title'])) { 160 $order_data['shipping_method'] = $this->session->data['shipping_method']['title']; 161 } else { 162 $order_data['shipping_method'] = ''; 163 } 164 165 if (isset($this->session->data['shipping_method']['code'])) { 166 $order_data['shipping_code'] = $this->session->data['shipping_method']['code']; 167 } else { 168 $order_data['shipping_code'] = ''; 169 } 170 } else { 171 $order_data['shipping_firstname'] = ''; 172 $order_data['shipping_lastname'] = ''; 173 $order_data['shipping_company'] = ''; 174 $order_data['shipping_address_1'] = ''; 175 $order_data['shipping_address_2'] = ''; 176 $order_data['shipping_city'] = ''; 177 $order_data['shipping_postcode'] = ''; 178 $order_data['shipping_zone'] = ''; 179 $order_data['shipping_zone_id'] = ''; 180 $order_data['shipping_country'] = ''; 181 $order_data['shipping_country_id'] = ''; 182 $order_data['shipping_address_format'] = ''; 183 $order_data['shipping_custom_field'] = array(); 184 $order_data['shipping_method'] = ''; 185 $order_data['shipping_code'] = ''; 186 } 187 188 // Products 189 $order_data['products'] = array(); 190 191 foreach ($this->cart->getProducts() as $product) { 192 $option_data = array(); 193 194 foreach ($product['option'] as $option) { 195 $option_data[] = array( 196 'product_option_id' => $option['product_option_id'], 197 'product_option_value_id' => $option['product_option_value_id'], 198 'option_id' => $option['option_id'], 199 'option_value_id' => $option['option_value_id'], 200 'name' => $option['name'], 201 'value' => $option['value'], 202 'type' => $option['type'] 203 ); 204 } 205 206 $order_data['products'][] = array( 207 'product_id' => $product['product_id'], 208 'name' => $product['name'], 209 'model' => $product['model'], 210 'option' => $option_data, 211 'download' => $product['download'], 212 'quantity' => $product['quantity'], 213 'subtract' => $product['subtract'], 214 'price' => $product['price'], 215 'total' => $product['total'], 216 'tax' => $this->tax->getTax($product['price'], $product['tax_class_id']), 217 'reward' => $product['reward'] 218 ); 219 } 220 221 // Gift Voucher 222 $order_data['vouchers'] = array(); 223 224 if (!empty($this->session->data['vouchers'])) { 225 foreach ($this->session->data['vouchers'] as $voucher) { 226 $order_data['vouchers'][] = array( 227 'description' => $voucher['description'], 228 'code' => token(10), 229 'to_name' => $voucher['to_name'], 230 'to_email' => $voucher['to_email'], 231 'from_name' => $voucher['from_name'], 232 'from_email' => $voucher['from_email'], 233 'voucher_theme_id' => $voucher['voucher_theme_id'], 234 'message' => $voucher['message'], 235 'amount' => $voucher['amount'] 236 ); 237 } 238 } 239 240 // Order Totals 241 $this->load->model('setting/extension'); 242 243 $totals = array(); 244 $taxes = $this->cart->getTaxes(); 245 $total = 0; 246 247 // Because __call can not keep var references so we put them into an array. 248 $total_data = array( 249 'totals' => &$totals, 250 'taxes' => &$taxes, 251 'total' => &$total 252 ); 253 254 $sort_order = array(); 255 256 $results = $this->model_setting_extension->getExtensions('total'); 257 258 foreach ($results as $key => $value) { 259 $sort_order[$key] = $this->config->get('total_' . $value['code'] . '_sort_order'); 260 } 261 262 array_multisort($sort_order, SORT_ASC, $results); 263 264 foreach ($results as $result) { 265 if ($this->config->get('total_' . $result['code'] . '_status')) { 266 $this->load->model('extension/total/' . $result['code']); 267 268 // We have to put the totals in an array so that they pass by reference. 269 $this->{'model_extension_total_' . $result['code']}->getTotal($total_data); 270 } 271 } 272 273 $sort_order = array(); 274 275 foreach ($total_data['totals'] as $key => $value) { 276 $sort_order[$key] = $value['sort_order']; 277 } 278 279 array_multisort($sort_order, SORT_ASC, $total_data['totals']); 280 281 $order_data = array_merge($order_data, $total_data); 282 283 if (isset($this->request->post['comment'])) { 284 $order_data['comment'] = $this->request->post['comment']; 285 } else { 286 $order_data['comment'] = ''; 287 } 288 289 if (isset($this->request->post['affiliate_id'])) { 290 $subtotal = $this->cart->getSubTotal(); 291 292 // Affiliate 293 $this->load->model('account/customer'); 294 295 $affiliate_info = $this->model_account_customer->getAffiliate($this->request->post['affiliate_id']); 296 297 if ($affiliate_info) { 298 $order_data['affiliate_id'] = $affiliate_info['customer_id']; 299 $order_data['commission'] = ($subtotal / 100) * $affiliate_info['commission']; 300 } else { 301 $order_data['affiliate_id'] = 0; 302 $order_data['commission'] = 0; 303 } 304 305 // Marketing 306 $order_data['marketing_id'] = 0; 307 $order_data['tracking'] = ''; 308 } else { 309 $order_data['affiliate_id'] = 0; 310 $order_data['commission'] = 0; 311 $order_data['marketing_id'] = 0; 312 $order_data['tracking'] = ''; 313 } 314 315 $order_data['language_id'] = $this->config->get('config_language_id'); 316 $order_data['currency_id'] = $this->currency->getId($this->session->data['currency']); 317 $order_data['currency_code'] = $this->session->data['currency']; 318 $order_data['currency_value'] = $this->currency->getValue($this->session->data['currency']); 319 $order_data['ip'] = $this->request->server['REMOTE_ADDR']; 320 321 if (!empty($this->request->server['HTTP_X_FORWARDED_FOR'])) { 322 $order_data['forwarded_ip'] = $this->request->server['HTTP_X_FORWARDED_FOR']; 323 } elseif (!empty($this->request->server['HTTP_CLIENT_IP'])) { 324 $order_data['forwarded_ip'] = $this->request->server['HTTP_CLIENT_IP']; 325 } else { 326 $order_data['forwarded_ip'] = ''; 327 } 328 329 if (isset($this->request->server['HTTP_USER_AGENT'])) { 330 $order_data['user_agent'] = $this->request->server['HTTP_USER_AGENT']; 331 } else { 332 $order_data['user_agent'] = ''; 333 } 334 335 if (isset($this->request->server['HTTP_ACCEPT_LANGUAGE'])) { 336 $order_data['accept_language'] = $this->request->server['HTTP_ACCEPT_LANGUAGE']; 337 } else { 338 $order_data['accept_language'] = ''; 339 } 340 341 $this->load->model('checkout/order'); 342 343 $json['order_id'] = $this->model_checkout_order->addOrder($order_data); 344 345 // Set the order history 346 if (isset($this->request->post['order_status_id'])) { 347 $order_status_id = $this->request->post['order_status_id']; 348 } else { 349 $order_status_id = $this->config->get('config_order_status_id'); 350 } 351 352 $this->model_checkout_order->addOrderHistory($json['order_id'], $order_status_id); 353 354 // clear cart since the order has already been successfully stored. 355 $this->cart->clear(); 356 } 357 } 358 359 $this->response->addHeader('Content-Type: application/json'); 360 $this->response->setOutput(json_encode($json)); 361 } 362 363 public function edit() { 364 $this->load->language('api/order'); 365 366 $json = array(); 367 368 if (!isset($this->session->data['api_id'])) { 369 $json['error'] = $this->language->get('error_permission'); 370 } else { 371 $this->load->model('checkout/order'); 372 373 if (isset($this->request->get['order_id'])) { 374 $order_id = $this->request->get['order_id']; 375 } else { 376 $order_id = 0; 377 } 378 379 $order_info = $this->model_checkout_order->getOrder($order_id); 380 381 if ($order_info) { 382 // Customer 383 if (!isset($this->session->data['customer'])) { 384 $json['error'] = $this->language->get('error_customer'); 385 } 386 387 // Payment Address 388 if (!isset($this->session->data['payment_address'])) { 389 $json['error'] = $this->language->get('error_payment_address'); 390 } 391 392 // Payment Method 393 if (!$json && !empty($this->request->post['payment_method'])) { 394 if (empty($this->session->data['payment_methods'])) { 395 $json['error'] = $this->language->get('error_no_payment'); 396 } elseif (!isset($this->session->data['payment_methods'][$this->request->post['payment_method']])) { 397 $json['error'] = $this->language->get('error_payment_method'); 398 } 399 400 if (!$json) { 401 $this->session->data['payment_method'] = $this->session->data['payment_methods'][$this->request->post['payment_method']]; 402 } 403 } 404 405 if (!isset($this->session->data['payment_method'])) { 406 $json['error'] = $this->language->get('error_payment_method'); 407 } 408 409 // Shipping 410 if ($this->cart->hasShipping()) { 411 // Shipping Address 412 if (!isset($this->session->data['shipping_address'])) { 413 $json['error'] = $this->language->get('error_shipping_address'); 414 } 415 416 // Shipping Method 417 if (!$json && !empty($this->request->post['shipping_method'])) { 418 if (empty($this->session->data['shipping_methods'])) { 419 $json['error'] = $this->language->get('error_no_shipping'); 420 } else { 421 $shipping = explode('.', $this->request->post['shipping_method']); 422 423 if (!isset($shipping[0]) || !isset($shipping[1]) || !isset($this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]])) { 424 $json['error'] = $this->language->get('error_shipping_method'); 425 } 426 } 427 428 if (!$json) { 429 $this->session->data['shipping_method'] = $this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]]; 430 } 431 } 432 433 if (!isset($this->session->data['shipping_method'])) { 434 $json['error'] = $this->language->get('error_shipping_method'); 435 } 436 } else { 437 unset($this->session->data['shipping_address']); 438 unset($this->session->data['shipping_method']); 439 unset($this->session->data['shipping_methods']); 440 } 441 442 // Cart 443 if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) { 444 $json['error'] = $this->language->get('error_stock'); 445 } 446 447 // Validate minimum quantity requirements. 448 $products = $this->cart->getProducts(); 449 450 foreach ($products as $product) { 451 $product_total = 0; 452 453 foreach ($products as $product_2) { 454 if ($product_2['product_id'] == $product['product_id']) { 455 $product_total += $product_2['quantity']; 456 } 457 } 458 459 if ($product['minimum'] > $product_total) { 460 $json['error'] = sprintf($this->language->get('error_minimum'), $product['name'], $product['minimum']); 461 462 break; 463 } 464 } 465 466 if (!$json) { 467 $json['success'] = $this->language->get('text_success'); 468 469 $order_data = array(); 470 471 // Store Details 472 $order_data['invoice_prefix'] = $this->config->get('config_invoice_prefix'); 473 $order_data['store_id'] = $this->config->get('config_store_id'); 474 $order_data['store_name'] = $this->config->get('config_name'); 475 $order_data['store_url'] = $this->config->get('config_url'); 476 477 // Customer Details 478 $order_data['customer_id'] = $this->session->data['customer']['customer_id']; 479 $order_data['customer_group_id'] = $this->session->data['customer']['customer_group_id']; 480 $order_data['firstname'] = $this->session->data['customer']['firstname']; 481 $order_data['lastname'] = $this->session->data['customer']['lastname']; 482 $order_data['email'] = $this->session->data['customer']['email']; 483 $order_data['telephone'] = $this->session->data['customer']['telephone']; 484 $order_data['custom_field'] = $this->session->data['customer']['custom_field']; 485 486 // Payment Details 487 $order_data['payment_firstname'] = $this->session->data['payment_address']['firstname']; 488 $order_data['payment_lastname'] = $this->session->data['payment_address']['lastname']; 489 $order_data['payment_company'] = $this->session->data['payment_address']['company']; 490 $order_data['payment_address_1'] = $this->session->data['payment_address']['address_1']; 491 $order_data['payment_address_2'] = $this->session->data['payment_address']['address_2']; 492 $order_data['payment_city'] = $this->session->data['payment_address']['city']; 493 $order_data['payment_postcode'] = $this->session->data['payment_address']['postcode']; 494 $order_data['payment_zone'] = $this->session->data['payment_address']['zone']; 495 $order_data['payment_zone_id'] = $this->session->data['payment_address']['zone_id']; 496 $order_data['payment_country'] = $this->session->data['payment_address']['country']; 497 $order_data['payment_country_id'] = $this->session->data['payment_address']['country_id']; 498 $order_data['payment_address_format'] = $this->session->data['payment_address']['address_format']; 499 $order_data['payment_custom_field'] = $this->session->data['payment_address']['custom_field']; 500 501 if (isset($this->session->data['payment_method']['title'])) { 502 $order_data['payment_method'] = $this->session->data['payment_method']['title']; 503 } else { 504 $order_data['payment_method'] = ''; 505 } 506 507 if (isset($this->session->data['payment_method']['code'])) { 508 $order_data['payment_code'] = $this->session->data['payment_method']['code']; 509 } else { 510 $order_data['payment_code'] = ''; 511 } 512 513 // Shipping Details 514 if ($this->cart->hasShipping()) { 515 $order_data['shipping_firstname'] = $this->session->data['shipping_address']['firstname']; 516 $order_data['shipping_lastname'] = $this->session->data['shipping_address']['lastname']; 517 $order_data['shipping_company'] = $this->session->data['shipping_address']['company']; 518 $order_data['shipping_address_1'] = $this->session->data['shipping_address']['address_1']; 519 $order_data['shipping_address_2'] = $this->session->data['shipping_address']['address_2']; 520 $order_data['shipping_city'] = $this->session->data['shipping_address']['city']; 521 $order_data['shipping_postcode'] = $this->session->data['shipping_address']['postcode']; 522 $order_data['shipping_zone'] = $this->session->data['shipping_address']['zone']; 523 $order_data['shipping_zone_id'] = $this->session->data['shipping_address']['zone_id']; 524 $order_data['shipping_country'] = $this->session->data['shipping_address']['country']; 525 $order_data['shipping_country_id'] = $this->session->data['shipping_address']['country_id']; 526 $order_data['shipping_address_format'] = $this->session->data['shipping_address']['address_format']; 527 $order_data['shipping_custom_field'] = $this->session->data['shipping_address']['custom_field']; 528 529 if (isset($this->session->data['shipping_method']['title'])) { 530 $order_data['shipping_method'] = $this->session->data['shipping_method']['title']; 531 } else { 532 $order_data['shipping_method'] = ''; 533 } 534 535 if (isset($this->session->data['shipping_method']['code'])) { 536 $order_data['shipping_code'] = $this->session->data['shipping_method']['code']; 537 } else { 538 $order_data['shipping_code'] = ''; 539 } 540 } else { 541 $order_data['shipping_firstname'] = ''; 542 $order_data['shipping_lastname'] = ''; 543 $order_data['shipping_company'] = ''; 544 $order_data['shipping_address_1'] = ''; 545 $order_data['shipping_address_2'] = ''; 546 $order_data['shipping_city'] = ''; 547 $order_data['shipping_postcode'] = ''; 548 $order_data['shipping_zone'] = ''; 549 $order_data['shipping_zone_id'] = ''; 550 $order_data['shipping_country'] = ''; 551 $order_data['shipping_country_id'] = ''; 552 $order_data['shipping_address_format'] = ''; 553 $order_data['shipping_custom_field'] = array(); 554 $order_data['shipping_method'] = ''; 555 $order_data['shipping_code'] = ''; 556 } 557 558 // Products 559 $order_data['products'] = array(); 560 561 foreach ($this->cart->getProducts() as $product) { 562 $option_data = array(); 563 564 foreach ($product['option'] as $option) { 565 $option_data[] = array( 566 'product_option_id' => $option['product_option_id'], 567 'product_option_value_id' => $option['product_option_value_id'], 568 'option_id' => $option['option_id'], 569 'option_value_id' => $option['option_value_id'], 570 'name' => $option['name'], 571 'value' => $option['value'], 572 'type' => $option['type'] 573 ); 574 } 575 576 $order_data['products'][] = array( 577 'product_id' => $product['product_id'], 578 'name' => $product['name'], 579 'model' => $product['model'], 580 'option' => $option_data, 581 'download' => $product['download'], 582 'quantity' => $product['quantity'], 583 'subtract' => $product['subtract'], 584 'price' => $product['price'], 585 'total' => $product['total'], 586 'tax' => $this->tax->getTax($product['price'], $product['tax_class_id']), 587 'reward' => $product['reward'] 588 ); 589 } 590 591 // Gift Voucher 592 $order_data['vouchers'] = array(); 593 594 if (!empty($this->session->data['vouchers'])) { 595 foreach ($this->session->data['vouchers'] as $voucher) { 596 $order_data['vouchers'][] = array( 597 'description' => $voucher['description'], 598 'code' => token(10), 599 'to_name' => $voucher['to_name'], 600 'to_email' => $voucher['to_email'], 601 'from_name' => $voucher['from_name'], 602 'from_email' => $voucher['from_email'], 603 'voucher_theme_id' => $voucher['voucher_theme_id'], 604 'message' => $voucher['message'], 605 'amount' => $voucher['amount'] 606 ); 607 } 608 } 609 610 // Order Totals 611 $this->load->model('setting/extension'); 612 613 $totals = array(); 614 $taxes = $this->cart->getTaxes(); 615 $total = 0; 616 617 // Because __call can not keep var references so we put them into an array. 618 $total_data = array( 619 'totals' => &$totals, 620 'taxes' => &$taxes, 621 'total' => &$total 622 ); 623 624 $sort_order = array(); 625 626 $results = $this->model_setting_extension->getExtensions('total'); 627 628 foreach ($results as $key => $value) { 629 $sort_order[$key] = $this->config->get('total_' . $value['code'] . '_sort_order'); 630 } 631 632 array_multisort($sort_order, SORT_ASC, $results); 633 634 foreach ($results as $result) { 635 if ($this->config->get('total_' . $result['code'] . '_status')) { 636 $this->load->model('extension/total/' . $result['code']); 637 638 // We have to put the totals in an array so that they pass by reference. 639 $this->{'model_extension_total_' . $result['code']}->getTotal($total_data); 640 } 641 } 642 643 $sort_order = array(); 644 645 foreach ($total_data['totals'] as $key => $value) { 646 $sort_order[$key] = $value['sort_order']; 647 } 648 649 array_multisort($sort_order, SORT_ASC, $total_data['totals']); 650 651 $order_data = array_merge($order_data, $total_data); 652 653 if (isset($this->request->post['comment'])) { 654 $order_data['comment'] = $this->request->post['comment']; 655 } else { 656 $order_data['comment'] = ''; 657 } 658 659 if (isset($this->request->post['affiliate_id'])) { 660 $subtotal = $this->cart->getSubTotal(); 661 662 // Affiliate 663 $this->load->model('account/customer'); 664 665 $affiliate_info = $this->model_account_customer->getAffiliate($this->request->post['affiliate_id']); 666 667 if ($affiliate_info) { 668 $order_data['affiliate_id'] = $affiliate_info['customer_id']; 669 $order_data['commission'] = ($subtotal / 100) * $affiliate_info['commission']; 670 } else { 671 $order_data['affiliate_id'] = 0; 672 $order_data['commission'] = 0; 673 } 674 } else { 675 $order_data['affiliate_id'] = 0; 676 $order_data['commission'] = 0; 677 } 678 679 $this->model_checkout_order->editOrder($order_id, $order_data); 680 681 // Set the order history 682 if (isset($this->request->post['order_status_id'])) { 683 $order_status_id = $this->request->post['order_status_id']; 684 } else { 685 $order_status_id = $this->config->get('config_order_status_id'); 686 } 687 688 $this->model_checkout_order->addOrderHistory($order_id, $order_status_id); 689 } 690 } else { 691 $json['error'] = $this->language->get('error_not_found'); 692 } 693 } 694 695 $this->response->addHeader('Content-Type: application/json'); 696 $this->response->setOutput(json_encode($json)); 697 } 698 699 public function delete() { 700 $this->load->language('api/order'); 701 702 $json = array(); 703 704 if (!isset($this->session->data['api_id'])) { 705 $json['error'] = $this->language->get('error_permission'); 706 } else { 707 $this->load->model('checkout/order'); 708 709 if (isset($this->request->get['order_id'])) { 710 $order_id = $this->request->get['order_id']; 711 } else { 712 $order_id = 0; 713 } 714 715 $order_info = $this->model_checkout_order->getOrder($order_id); 716 717 if ($order_info) { 718 $this->model_checkout_order->deleteOrder($order_id); 719 720 $json['success'] = $this->language->get('text_success'); 721 } else { 722 $json['error'] = $this->language->get('error_not_found'); 723 } 724 } 725 726 $this->response->addHeader('Content-Type: application/json'); 727 $this->response->setOutput(json_encode($json)); 728 } 729 730 public function info() { 731 $this->load->language('api/order'); 732 733 $json = array(); 734 735 if (!isset($this->session->data['api_id'])) { 736 $json['error'] = $this->language->get('error_permission'); 737 } else { 738 $this->load->model('checkout/order'); 739 740 if (isset($this->request->get['order_id'])) { 741 $order_id = $this->request->get['order_id']; 742 } else { 743 $order_id = 0; 744 } 745 746 $order_info = $this->model_checkout_order->getOrder($order_id); 747 748 if ($order_info) { 749 $json['order'] = $order_info; 750 751 $json['success'] = $this->language->get('text_success'); 752 } else { 753 $json['error'] = $this->language->get('error_not_found'); 754 } 755 } 756 757 $this->response->addHeader('Content-Type: application/json'); 758 $this->response->setOutput(json_encode($json)); 759 } 760 761 public function history() { 762 $this->load->language('api/order'); 763 764 $json = array(); 765 766 if (!isset($this->session->data['api_id'])) { 767 $json['error'] = $this->language->get('error_permission'); 768 } else { 769 // Add keys for missing post vars 770 $keys = array( 771 'order_status_id', 772 'notify', 773 'override', 774 'comment' 775 ); 776 777 foreach ($keys as $key) { 778 if (!isset($this->request->post[$key])) { 779 $this->request->post[$key] = ''; 780 } 781 } 782 783 $this->load->model('checkout/order'); 784 785 if (isset($this->request->get['order_id'])) { 786 $order_id = $this->request->get['order_id']; 787 } else { 788 $order_id = 0; 789 } 790 791 $order_info = $this->model_checkout_order->getOrder($order_id); 792 793 if ($order_info) { 794 $this->model_checkout_order->addOrderHistory($order_id, $this->request->post['order_status_id'], $this->request->post['comment'], $this->request->post['notify'], $this->request->post['override']); 795 796 $json['success'] = $this->language->get('text_success'); 797 } else { 798 $json['error'] = $this->language->get('error_not_found'); 799 } 800 } 801 802 $this->response->addHeader('Content-Type: application/json'); 803 $this->response->setOutput(json_encode($json)); 804 } 805 }