checkout.twig (41244B)
1 {{ header }} 2 <div id="checkout-checkout" class="container"> 3 <ul class="breadcrumb"> 4 {% for breadcrumb in breadcrumbs %} 5 <li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li> 6 {% endfor %} 7 </ul> 8 {% if error_warning %} 9 <div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> {{ error_warning }} 10 <button type="button" class="close" data-dismiss="alert">×</button> 11 </div> 12 {% endif %} 13 <div class="row">{{ column_left }} 14 {% if column_left and column_right %} 15 {% set class = 'col-sm-6' %} 16 {% elseif column_left or column_right %} 17 {% set class = 'col-sm-9' %} 18 {% else %} 19 {% set class = 'col-sm-12' %} 20 {% endif %} 21 <div id="content" class="{{ class }}">{{ content_top }} 22 <h1>{{ heading_title }}</h1> 23 <div class="panel-group" id="accordion"> 24 <div class="panel panel-default"> 25 <div class="panel-heading"> 26 <h4 class="panel-title">{{ text_checkout_option }}</h4> 27 </div> 28 <div class="panel-collapse collapse" id="collapse-checkout-option"> 29 <div class="panel-body"></div> 30 </div> 31 </div> 32 {% if not logged and account != 'guest' %} 33 <div class="panel panel-default"> 34 <div class="panel-heading"> 35 <h4 class="panel-title">{{ text_checkout_account }}</h4> 36 </div> 37 <div class="panel-collapse collapse" id="collapse-payment-address"> 38 <div class="panel-body"></div> 39 </div> 40 </div> 41 {% else %} 42 <div class="panel panel-default"> 43 <div class="panel-heading"> 44 <h4 class="panel-title">{{ text_checkout_payment_address }}</h4> 45 </div> 46 <div class="panel-collapse collapse" id="collapse-payment-address"> 47 <div class="panel-body"></div> 48 </div> 49 </div> 50 {% endif %} 51 {% if shipping_required %} 52 <div class="panel panel-default"> 53 <div class="panel-heading"> 54 <h4 class="panel-title">{{ text_checkout_shipping_address }}</h4> 55 </div> 56 <div class="panel-collapse collapse" id="collapse-shipping-address"> 57 <div class="panel-body"></div> 58 </div> 59 </div> 60 <div class="panel panel-default"> 61 <div class="panel-heading"> 62 <h4 class="panel-title">{{ text_checkout_shipping_method }}</h4> 63 </div> 64 <div class="panel-collapse collapse" id="collapse-shipping-method"> 65 <div class="panel-body"></div> 66 </div> 67 </div> 68 {% endif %} 69 <div class="panel panel-default"> 70 <div class="panel-heading"> 71 <h4 class="panel-title">{{ text_checkout_payment_method }}</h4> 72 </div> 73 <div class="panel-collapse collapse" id="collapse-payment-method"> 74 <div class="panel-body"></div> 75 </div> 76 </div> 77 <div class="panel panel-default"> 78 <div class="panel-heading"> 79 <h4 class="panel-title">{{ text_checkout_confirm }}</h4> 80 </div> 81 <div class="panel-collapse collapse" id="collapse-checkout-confirm"> 82 <div class="panel-body"></div> 83 </div> 84 </div> 85 </div> 86 {{ content_bottom }}</div> 87 {{ column_right }}</div> 88 </div> 89 <script type="text/javascript"><!-- 90 $(document).on('change', 'input[name=\'account\']', function() { 91 if ($('#collapse-payment-address').parent().find('.panel-heading .panel-title > *').is('a')) { 92 if (this.value == 'register') { 93 $('#collapse-payment-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_account }} <i class="fa fa-caret-down"></i></a>'); 94 } else { 95 $('#collapse-payment-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_payment_address }} <i class="fa fa-caret-down"></i></a>'); 96 } 97 } else { 98 if (this.value == 'register') { 99 $('#collapse-payment-address').parent().find('.panel-heading .panel-title').html('{{ text_checkout_account }}'); 100 } else { 101 $('#collapse-payment-address').parent().find('.panel-heading .panel-title').html('{{ text_checkout_payment_address }}'); 102 } 103 } 104 }); 105 106 {% if not logged %} 107 $(document).ready(function() { 108 $.ajax({ 109 url: 'index.php?route=checkout/login', 110 dataType: 'html', 111 success: function(html) { 112 $('#collapse-checkout-option .panel-body').html(html); 113 114 $('#collapse-checkout-option').parent().find('.panel-heading .panel-title').html('<a href="#collapse-checkout-option" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_option }} <i class="fa fa-caret-down"></i></a>'); 115 116 $('a[href=\'#collapse-checkout-option\']').trigger('click'); 117 }, 118 error: function(xhr, ajaxOptions, thrownError) { 119 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 120 } 121 }); 122 }); 123 {% else %} 124 $(document).ready(function() { 125 $.ajax({ 126 url: 'index.php?route=checkout/payment_address', 127 dataType: 'html', 128 success: function(html) { 129 $('#collapse-payment-address .panel-body').html(html); 130 131 $('#collapse-payment-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_payment_address }} <i class="fa fa-caret-down"></i></a>'); 132 133 $('a[href=\'#collapse-payment-address\']').trigger('click'); 134 }, 135 error: function(xhr, ajaxOptions, thrownError) { 136 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 137 } 138 }); 139 }); 140 {% endif %} 141 142 // Checkout 143 $(document).delegate('#button-account', 'click', function() { 144 $.ajax({ 145 url: 'index.php?route=checkout/' + $('input[name=\'account\']:checked').val(), 146 dataType: 'html', 147 beforeSend: function() { 148 $('#button-account').button('loading'); 149 }, 150 complete: function() { 151 $('#button-account').button('reset'); 152 }, 153 success: function(html) { 154 $('.alert-dismissible, .text-danger').remove(); 155 $('.form-group').removeClass('has-error'); 156 157 $('#collapse-payment-address .panel-body').html(html); 158 159 if ($('input[name=\'account\']:checked').val() == 'register') { 160 $('#collapse-payment-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_account }} <i class="fa fa-caret-down"></i></a>'); 161 } else { 162 $('#collapse-payment-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_payment_address }} <i class="fa fa-caret-down"></i></a>'); 163 } 164 165 $('a[href=\'#collapse-payment-address\']').trigger('click'); 166 }, 167 error: function(xhr, ajaxOptions, thrownError) { 168 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 169 } 170 }); 171 }); 172 173 // Login 174 $(document).delegate('#button-login', 'click', function() { 175 $.ajax({ 176 url: 'index.php?route=checkout/login/save', 177 type: 'post', 178 data: $('#collapse-checkout-option :input'), 179 dataType: 'json', 180 beforeSend: function() { 181 $('#button-login').button('loading'); 182 }, 183 complete: function() { 184 $('#button-login').button('reset'); 185 }, 186 success: function(json) { 187 $('.alert-dismissible, .text-danger').remove(); 188 $('.form-group').removeClass('has-error'); 189 190 if (json['redirect']) { 191 location = json['redirect']; 192 } else if (json['error']) { 193 $('#collapse-checkout-option .panel-body').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> ' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>'); 194 195 // Highlight any found errors 196 $('input[name=\'email\']').parent().addClass('has-error'); 197 $('input[name=\'password\']').parent().addClass('has-error'); 198 } 199 }, 200 error: function(xhr, ajaxOptions, thrownError) { 201 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 202 } 203 }); 204 }); 205 206 // Register 207 $(document).delegate('#button-register', 'click', function() { 208 $.ajax({ 209 url: 'index.php?route=checkout/register/save', 210 type: 'post', 211 data: $('#collapse-payment-address input[type=\'text\'], #collapse-payment-address input[type=\'date\'], #collapse-payment-address input[type=\'datetime-local\'], #collapse-payment-address input[type=\'time\'], #collapse-payment-address input[type=\'password\'], #collapse-payment-address input[type=\'hidden\'], #collapse-payment-address input[type=\'checkbox\']:checked, #collapse-payment-address input[type=\'radio\']:checked, #collapse-payment-address textarea, #collapse-payment-address select'), 212 dataType: 'json', 213 beforeSend: function() { 214 $('#button-register').button('loading'); 215 }, 216 success: function(json) { 217 $('.alert-dismissible, .text-danger').remove(); 218 $('.form-group').removeClass('has-error'); 219 220 if (json['redirect']) { 221 location = json['redirect']; 222 } else if (json['error']) { 223 $('#button-register').button('reset'); 224 225 if (json['error']['warning']) { 226 $('#collapse-payment-address .panel-body').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> ' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>'); 227 } 228 229 for (i in json['error']) { 230 var element = $('#input-payment-' + i.replace('_', '-')); 231 232 if ($(element).parent().hasClass('input-group')) { 233 $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>'); 234 } else { 235 $(element).after('<div class="text-danger">' + json['error'][i] + '</div>'); 236 } 237 } 238 239 // Highlight any found errors 240 $('.text-danger').parent().addClass('has-error'); 241 } else { 242 {% if shipping_required %} 243 var shipping_address = $('#payment-address input[name=\'shipping_address\']:checked').prop('value'); 244 245 if (shipping_address) { 246 $.ajax({ 247 url: 'index.php?route=checkout/shipping_method', 248 dataType: 'html', 249 success: function(html) { 250 // Add the shipping address 251 $.ajax({ 252 url: 'index.php?route=checkout/shipping_address', 253 dataType: 'html', 254 success: function(html) { 255 $('#collapse-shipping-address .panel-body').html(html); 256 257 $('#collapse-shipping-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_address }} <i class="fa fa-caret-down"></i></a>'); 258 }, 259 error: function(xhr, ajaxOptions, thrownError) { 260 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 261 } 262 }); 263 264 $('#collapse-shipping-method .panel-body').html(html); 265 266 $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_method }} <i class="fa fa-caret-down"></i></a>'); 267 268 $('a[href=\'#collapse-shipping-method\']').trigger('click'); 269 270 $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_shipping_method }}'); 271 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_payment_method }}'); 272 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 273 }, 274 error: function(xhr, ajaxOptions, thrownError) { 275 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 276 } 277 }); 278 } else { 279 $.ajax({ 280 url: 'index.php?route=checkout/shipping_address', 281 dataType: 'html', 282 success: function(html) { 283 $('#collapse-shipping-address .panel-body').html(html); 284 285 $('#collapse-shipping-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_address }} <i class="fa fa-caret-down"></i></a>'); 286 287 $('a[href=\'#collapse-shipping-address\']').trigger('click'); 288 289 $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_shipping_method }}'); 290 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_payment_method }}'); 291 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 292 }, 293 error: function(xhr, ajaxOptions, thrownError) { 294 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 295 } 296 }); 297 } 298 {% else %} 299 $.ajax({ 300 url: 'index.php?route=checkout/payment_method', 301 dataType: 'html', 302 success: function(html) { 303 $('#collapse-payment-method .panel-body').html(html); 304 305 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_payment_method }} <i class="fa fa-caret-down"></i></a>'); 306 307 $('a[href=\'#collapse-payment-method\']').trigger('click'); 308 309 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 310 }, 311 error: function(xhr, ajaxOptions, thrownError) { 312 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 313 } 314 }); 315 {% endif %} 316 317 $.ajax({ 318 url: 'index.php?route=checkout/payment_address', 319 dataType: 'html', 320 complete: function() { 321 $('#button-register').button('reset'); 322 }, 323 success: function(html) { 324 $('#collapse-payment-address .panel-body').html(html); 325 326 $('#collapse-payment-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_payment_address }} <i class="fa fa-caret-down"></i></a>'); 327 }, 328 error: function(xhr, ajaxOptions, thrownError) { 329 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 330 } 331 }); 332 } 333 }, 334 error: function(xhr, ajaxOptions, thrownError) { 335 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 336 } 337 }); 338 }); 339 340 // Payment Address 341 $(document).delegate('#button-payment-address', 'click', function() { 342 $.ajax({ 343 url: 'index.php?route=checkout/payment_address/save', 344 type: 'post', 345 data: $('#collapse-payment-address input[type=\'text\'], #collapse-payment-address input[type=\'date\'], #collapse-payment-address input[type=\'datetime-local\'], #collapse-payment-address input[type=\'time\'], #collapse-payment-address input[type=\'password\'], #collapse-payment-address input[type=\'checkbox\']:checked, #collapse-payment-address input[type=\'radio\']:checked, #collapse-payment-address input[type=\'hidden\'], #collapse-payment-address textarea, #collapse-payment-address select'), 346 dataType: 'json', 347 beforeSend: function() { 348 $('#button-payment-address').button('loading'); 349 }, 350 complete: function() { 351 $('#button-payment-address').button('reset'); 352 }, 353 success: function(json) { 354 $('.alert-dismissible, .text-danger').remove(); 355 $('.form-group').removeClass('has-error'); 356 357 if (json['redirect']) { 358 location = json['redirect']; 359 } else if (json['error']) { 360 if (json['error']['warning']) { 361 $('#collapse-payment-address .panel-body').prepend('<div class="alert alert-warning alert-dismissible">' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>'); 362 } 363 364 for (i in json['error']) { 365 var element = $('#input-payment-' + i.replace('_', '-')); 366 367 if ($(element).parent().hasClass('input-group')) { 368 $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>'); 369 } else { 370 $(element).after('<div class="text-danger">' + json['error'][i] + '</div>'); 371 } 372 } 373 374 // Highlight any found errors 375 $('.text-danger').parent().parent().addClass('has-error'); 376 } else { 377 {% if shipping_required %} 378 $.ajax({ 379 url: 'index.php?route=checkout/shipping_address', 380 dataType: 'html', 381 success: function(html) { 382 $('#collapse-shipping-address .panel-body').html(html); 383 384 $('#collapse-shipping-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_address }} <i class="fa fa-caret-down"></i></a>'); 385 386 $('a[href=\'#collapse-shipping-address\']').trigger('click'); 387 388 $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_shipping_method }}'); 389 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_payment_method }}'); 390 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 391 }, 392 error: function(xhr, ajaxOptions, thrownError) { 393 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 394 } 395 }).done(function() { 396 $.ajax({ 397 url: 'index.php?route=checkout/payment_address', 398 dataType: 'html', 399 success: function(html) { 400 $('#collapse-payment-address .panel-body').html(html); 401 }, 402 error: function(xhr, ajaxOptions, thrownError) { 403 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 404 } 405 }); 406 }); 407 {% else %} 408 $.ajax({ 409 url: 'index.php?route=checkout/payment_method', 410 dataType: 'html', 411 success: function(html) { 412 $('#collapse-payment-method .panel-body').html(html); 413 414 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_payment_method }} <i class="fa fa-caret-down"></i></a>'); 415 416 $('a[href=\'#collapse-payment-method\']').trigger('click'); 417 418 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 419 }, 420 error: function(xhr, ajaxOptions, thrownError) { 421 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 422 } 423 }).done(function() { 424 $.ajax({ 425 url: 'index.php?route=checkout/payment_address', 426 dataType: 'html', 427 success: function(html) { 428 $('#collapse-payment-address .panel-body').html(html); 429 }, 430 error: function(xhr, ajaxOptions, thrownError) { 431 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 432 } 433 }); 434 }); 435 {% endif %} 436 } 437 }, 438 error: function(xhr, ajaxOptions, thrownError) { 439 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 440 } 441 }); 442 }); 443 444 // Shipping Address 445 $(document).delegate('#button-shipping-address', 'click', function() { 446 $.ajax({ 447 url: 'index.php?route=checkout/shipping_address/save', 448 type: 'post', 449 data: $('#collapse-shipping-address input[type=\'text\'], #collapse-shipping-address input[type=\'date\'], #collapse-shipping-address input[type=\'datetime-local\'], #collapse-shipping-address input[type=\'time\'], #collapse-shipping-address input[type=\'password\'], #collapse-shipping-address input[type=\'checkbox\']:checked, #collapse-shipping-address input[type=\'radio\']:checked, #collapse-shipping-address textarea, #collapse-shipping-address select'), 450 dataType: 'json', 451 beforeSend: function() { 452 $('#button-shipping-address').button('loading'); 453 }, 454 success: function(json) { 455 $('.alert-dismissible, .text-danger').remove(); 456 $('.form-group').removeClass('has-error'); 457 458 if (json['redirect']) { 459 location = json['redirect']; 460 } else if (json['error']) { 461 $('#button-shipping-address').button('reset'); 462 463 if (json['error']['warning']) { 464 $('#collapse-shipping-address .panel-body').prepend('<div class="alert alert-warning alert-dismissible">' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>'); 465 } 466 467 for (i in json['error']) { 468 var element = $('#input-shipping-' + i.replace('_', '-')); 469 470 if ($(element).parent().hasClass('input-group')) { 471 $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>'); 472 } else { 473 $(element).after('<div class="text-danger">' + json['error'][i] + '</div>'); 474 } 475 } 476 477 // Highlight any found errors 478 $('.text-danger').parent().parent().addClass('has-error'); 479 } else { 480 $.ajax({ 481 url: 'index.php?route=checkout/shipping_method', 482 dataType: 'html', 483 complete: function() { 484 $('#button-shipping-address').button('reset'); 485 }, 486 success: function(html) { 487 $('#collapse-shipping-method .panel-body').html(html); 488 489 $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_method }} <i class="fa fa-caret-down"></i></a>'); 490 491 $('a[href=\'#collapse-shipping-method\']').trigger('click'); 492 493 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_payment_method }}'); 494 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 495 496 $.ajax({ 497 url: 'index.php?route=checkout/shipping_address', 498 dataType: 'html', 499 success: function(html) { 500 $('#collapse-shipping-address .panel-body').html(html); 501 }, 502 error: function(xhr, ajaxOptions, thrownError) { 503 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 504 } 505 }); 506 }, 507 error: function(xhr, ajaxOptions, thrownError) { 508 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 509 } 510 }).done(function() { 511 $.ajax({ 512 url: 'index.php?route=checkout/payment_address', 513 dataType: 'html', 514 success: function(html) { 515 $('#collapse-payment-address .panel-body').html(html); 516 }, 517 error: function(xhr, ajaxOptions, thrownError) { 518 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 519 } 520 }); 521 }); 522 } 523 }, 524 error: function(xhr, ajaxOptions, thrownError) { 525 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 526 } 527 }); 528 }); 529 530 // Guest 531 $(document).delegate('#button-guest', 'click', function() { 532 $.ajax({ 533 url: 'index.php?route=checkout/guest/save', 534 type: 'post', 535 data: $('#collapse-payment-address input[type=\'text\'], #collapse-payment-address input[type=\'date\'], #collapse-payment-address input[type=\'datetime-local\'], #collapse-payment-address input[type=\'time\'], #collapse-payment-address input[type=\'checkbox\']:checked, #collapse-payment-address input[type=\'radio\']:checked, #collapse-payment-address input[type=\'hidden\'], #collapse-payment-address textarea, #collapse-payment-address select'), 536 dataType: 'json', 537 beforeSend: function() { 538 $('#button-guest').button('loading'); 539 }, 540 success: function(json) { 541 $('.alert-dismissible, .text-danger').remove(); 542 $('.form-group').removeClass('has-error'); 543 544 if (json['redirect']) { 545 location = json['redirect']; 546 } else if (json['error']) { 547 $('#button-guest').button('reset'); 548 549 if (json['error']['warning']) { 550 $('#collapse-payment-address .panel-body').prepend('<div class="alert alert-warning alert-dismissible">' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>'); 551 } 552 553 for (i in json['error']) { 554 var element = $('#input-payment-' + i.replace('_', '-')); 555 556 if ($(element).parent().hasClass('input-group')) { 557 $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>'); 558 } else { 559 $(element).after('<div class="text-danger">' + json['error'][i] + '</div>'); 560 } 561 } 562 563 // Highlight any found errors 564 $('.text-danger').parent().addClass('has-error'); 565 } else { 566 {% if shipping_required %} 567 var shipping_address = $('#collapse-payment-address input[name=\'shipping_address\']:checked').prop('value'); 568 569 if (shipping_address) { 570 $.ajax({ 571 url: 'index.php?route=checkout/shipping_method', 572 dataType: 'html', 573 complete: function() { 574 $('#button-guest').button('reset'); 575 }, 576 success: function(html) { 577 // Add the shipping address 578 $.ajax({ 579 url: 'index.php?route=checkout/guest_shipping', 580 dataType: 'html', 581 success: function(html) { 582 $('#collapse-shipping-address .panel-body').html(html); 583 584 $('#collapse-shipping-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_address }} <i class="fa fa-caret-down"></i></a>'); 585 }, 586 error: function(xhr, ajaxOptions, thrownError) { 587 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 588 } 589 }); 590 591 $('#collapse-shipping-method .panel-body').html(html); 592 593 $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_method }} <i class="fa fa-caret-down"></i></a>'); 594 595 $('a[href=\'#collapse-shipping-method\']').trigger('click'); 596 597 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_payment_method }}'); 598 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 599 }, 600 error: function(xhr, ajaxOptions, thrownError) { 601 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 602 } 603 }); 604 } else { 605 $.ajax({ 606 url: 'index.php?route=checkout/guest_shipping', 607 dataType: 'html', 608 complete: function() { 609 $('#button-guest').button('reset'); 610 }, 611 success: function(html) { 612 $('#collapse-shipping-address .panel-body').html(html); 613 614 $('#collapse-shipping-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_address }} <i class="fa fa-caret-down"></i></a>'); 615 616 $('a[href=\'#collapse-shipping-address\']').trigger('click'); 617 618 $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_shipping_method }}'); 619 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_payment_method }}'); 620 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 621 }, 622 error: function(xhr, ajaxOptions, thrownError) { 623 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 624 } 625 }); 626 } 627 {% else %} 628 $.ajax({ 629 url: 'index.php?route=checkout/payment_method', 630 dataType: 'html', 631 complete: function() { 632 $('#button-guest').button('reset'); 633 }, 634 success: function(html) { 635 $('#collapse-payment-method .panel-body').html(html); 636 637 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_payment_method }} <i class="fa fa-caret-down"></i></a>'); 638 639 $('a[href=\'#collapse-payment-method\']').trigger('click'); 640 641 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 642 }, 643 error: function(xhr, ajaxOptions, thrownError) { 644 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 645 } 646 }); 647 {% endif %} 648 } 649 }, 650 error: function(xhr, ajaxOptions, thrownError) { 651 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 652 } 653 }); 654 }); 655 656 // Guest Shipping 657 $(document).delegate('#button-guest-shipping', 'click', function() { 658 $.ajax({ 659 url: 'index.php?route=checkout/guest_shipping/save', 660 type: 'post', 661 data: $('#collapse-shipping-address input[type=\'text\'], #collapse-shipping-address input[type=\'date\'], #collapse-shipping-address input[type=\'datetime-local\'], #collapse-shipping-address input[type=\'time\'], #collapse-shipping-address input[type=\'password\'], #collapse-shipping-address input[type=\'checkbox\']:checked, #collapse-shipping-address input[type=\'radio\']:checked, #collapse-shipping-address textarea, #collapse-shipping-address select'), 662 dataType: 'json', 663 beforeSend: function() { 664 $('#button-guest-shipping').button('loading'); 665 }, 666 success: function(json) { 667 $('.alert-dismissible, .text-danger').remove(); 668 $('.form-group').removeClass('has-error'); 669 670 if (json['redirect']) { 671 location = json['redirect']; 672 } else if (json['error']) { 673 $('#button-guest-shipping').button('reset'); 674 675 if (json['error']['warning']) { 676 $('#collapse-shipping-address .panel-body').prepend('<div class="alert alert-danger alert-dismissible">' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>'); 677 } 678 679 for (i in json['error']) { 680 var element = $('#input-shipping-' + i.replace('_', '-')); 681 682 if ($(element).parent().hasClass('input-group')) { 683 $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>'); 684 } else { 685 $(element).after('<div class="text-danger">' + json['error'][i] + '</div>'); 686 } 687 } 688 689 // Highlight any found errors 690 $('.text-danger').parent().addClass('has-error'); 691 } else { 692 $.ajax({ 693 url: 'index.php?route=checkout/shipping_method', 694 dataType: 'html', 695 complete: function() { 696 $('#button-guest-shipping').button('reset'); 697 }, 698 success: function(html) { 699 $('#collapse-shipping-method .panel-body').html(html); 700 701 $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_shipping_method }} <i class="fa fa-caret-down"></i>'); 702 703 $('a[href=\'#collapse-shipping-method\']').trigger('click'); 704 705 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('{{ text_checkout_payment_method }}'); 706 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 707 }, 708 error: function(xhr, ajaxOptions, thrownError) { 709 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 710 } 711 }); 712 } 713 }, 714 error: function(xhr, ajaxOptions, thrownError) { 715 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 716 } 717 }); 718 }); 719 720 $(document).delegate('#button-shipping-method', 'click', function() { 721 $.ajax({ 722 url: 'index.php?route=checkout/shipping_method/save', 723 type: 'post', 724 data: $('#collapse-shipping-method input[type=\'radio\']:checked, #collapse-shipping-method textarea'), 725 dataType: 'json', 726 beforeSend: function() { 727 $('#button-shipping-method').button('loading'); 728 }, 729 success: function(json) { 730 $('.alert-dismissible, .text-danger').remove(); 731 732 if (json['redirect']) { 733 location = json['redirect']; 734 } else if (json['error']) { 735 $('#button-shipping-method').button('reset'); 736 737 if (json['error']['warning']) { 738 $('#collapse-shipping-method .panel-body').prepend('<div class="alert alert-danger alert-dismissible">' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>'); 739 } 740 } else { 741 $.ajax({ 742 url: 'index.php?route=checkout/payment_method', 743 dataType: 'html', 744 complete: function() { 745 $('#button-shipping-method').button('reset'); 746 }, 747 success: function(html) { 748 $('#collapse-payment-method .panel-body').html(html); 749 750 $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-payment-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_payment_method }} <i class="fa fa-caret-down"></i></a>'); 751 752 $('a[href=\'#collapse-payment-method\']').trigger('click'); 753 754 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('{{ text_checkout_confirm }}'); 755 }, 756 error: function(xhr, ajaxOptions, thrownError) { 757 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 758 } 759 }); 760 } 761 }, 762 error: function(xhr, ajaxOptions, thrownError) { 763 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 764 } 765 }); 766 }); 767 768 $(document).delegate('#button-payment-method', 'click', function() { 769 $.ajax({ 770 url: 'index.php?route=checkout/payment_method/save', 771 type: 'post', 772 data: $('#collapse-payment-method input[type=\'radio\']:checked, #collapse-payment-method input[type=\'checkbox\']:checked, #collapse-payment-method textarea'), 773 dataType: 'json', 774 beforeSend: function() { 775 $('#button-payment-method').button('loading'); 776 }, 777 success: function(json) { 778 $('.alert-dismissible, .text-danger').remove(); 779 780 if (json['redirect']) { 781 location = json['redirect']; 782 } else if (json['error']) { 783 $('#button-payment-method').button('reset'); 784 785 if (json['error']['warning']) { 786 $('#collapse-payment-method .panel-body').prepend('<div class="alert alert-danger alert-dismissible">' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>'); 787 } 788 } else { 789 $.ajax({ 790 url: 'index.php?route=checkout/confirm', 791 dataType: 'html', 792 complete: function() { 793 $('#button-payment-method').button('reset'); 794 }, 795 success: function(html) { 796 $('#collapse-checkout-confirm .panel-body').html(html); 797 798 $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('<a href="#collapse-checkout-confirm" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle">{{ text_checkout_confirm }} <i class="fa fa-caret-down"></i></a>'); 799 800 $('a[href=\'#collapse-checkout-confirm\']').trigger('click'); 801 }, 802 error: function(xhr, ajaxOptions, thrownError) { 803 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 804 } 805 }); 806 } 807 }, 808 error: function(xhr, ajaxOptions, thrownError) { 809 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 810 } 811 }); 812 }); 813 //--></script> 814 {{ footer }}