Vn.Order = new Class ({ Extends: Vn.Module ,orderId: null ,currentStep: null ,activate: function () { // Configuring columns var amount = this.get ('column-amount'); amount.on ('changed', this.amountChanged.bind (this)); amount.renderer = this.amountRender; this.get ('column-subtotal').renderer = this.subtotalRender.bind (this); this.get ('stems').renderer = this.stemsRender.bind (this); this.get ('order-total').func = this.subtotal; // Connecting buttons events Vn.get ('delete-order').addEventListener ('click', this.deleteClicked.bind (this)); Vn.get ('go-catalog').addEventListener ('click', this.catalogClicked.bind (this)); Vn.get ('checkout-button').addEventListener ('click', this.checkoutClicked.bind (this)); Vn.get ('go-basket').addEventListener ('click', this.basketClicked.bind (this)); Vn.get ('confirm-button').addEventListener ('click', this.confirmClicked.bind (this)); // Loading order this.orderId = this.get ('order-id'); if (!this.orderId.value) { var orderId = Vn.Cookie.getInt ('order'); if (!orderId) { var sql = 'INSERT INTO order_view (date_send) VALUES (CURDATE());' +'SELECT LAST_INSERT_ID();'; this.conn.execQuery (sql, this.orderCreated.bind (this)); } else this.orderId.value = orderId; } this.showStep ('basket-step'); } ,amountRender: function (renderer, form) { var amount = form.get ('amount'); var grouping = form.get ('grouping'); if (amount && grouping) renderer.value = amount / grouping; else renderer.value = null; } ,amountChanged: function (renderer, row, newValue) { var model = this.get ('order-rows'); model.set (row, 'amount', newValue * model.get (row, 'grouping')); } ,stemsRender: function (renderer, form) { if (form.get ('amount') > form.get ('available')) renderer.td.className = 'available-exceeded'; else renderer.td.className = ''; } ,subtotalRender: function (renderer, form) { renderer.value = this.subtotal (form); } ,subtotal: function (form) { return form.get ('amount') * form.get ('price') * ((100 - form.get ('discount')) / 100); } ,availableRender: function (renderer, form) { if (form.get ('amount') > form.get ('avail')) renderer.value = 'unavailable'; else renderer.value = 'invisible'; } ,deleteClicked: function () { if (confirm (_('SureDelOrder'))) { var gui = this.gui; if (Vn.Cookie.getInt ('order') == this.orderId.value) Vn.Cookie.unset ('order'); this.get ('order-form').deleteRow (); this.hash.set ({'module': 'orders'}); } } ,catalogClicked: function () { Vn.Cookie.set ('order', this.orderId.value); this.hash.set ({'module': 'catalog'}); } ,showStep: function (stepId) { if (this.currentStep) this.currentStep.style.display = 'none'; this.currentStep = Vn.get (stepId); this.currentStep.style.display = 'inline'; } ,checkoutClicked: function () { this.showStep ('checkout-step'); } ,basketClicked: function () { this.showStep ('basket-step'); } ,confirmClicked: function () { if (!confirm (_('SureConfirmOrder'))) return; var query = 'CALL order_confirm (#order)'; var batch = new Sql.Batch (); batch.addParam ('order', this.orderId); this.conn.execQuery (query, this.confirmDone.bind (this), batch); } ,confirmDone: function (resultSet) { if (resultSet.fetchResult ()) { Vn.Cookie.unset ('order'); this.hash.set ({'module': 'orders'}); alert (_('OrderConfirmed')); } else { this.showStep ('basket-step'); this.get ('order-rows').refresh (); } } ,orderCreated: function (resultSet) { var insertOk = resultSet.fetchResult (); var orderId = resultSet.fetchValue (); if (insertOk && orderId) { this.orderId.value = orderId; Vn.Cookie.set ('order', orderId); } else this.hash.set ({'module': 'orders'}); } });