forked from verdnatura/hedera-web
176 lines
3.8 KiB
JavaScript
Executable File
176 lines
3.8 KiB
JavaScript
Executable File
|
|
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'});
|
|
}
|
|
});
|
|
|