0
1
Fork 0
hedera-web-mindshore/forms/ecomerce/checkout/checkout.js

224 lines
5.1 KiB
JavaScript
Raw Normal View History

2015-02-01 03:21:54 +00:00
2019-05-21 14:16:27 +00:00
Hedera.Checkout = new Class({
Extends: Hedera.Form,
2015-02-01 03:21:54 +00:00
activate: function() {
2015-07-10 12:30:08 +00:00
this.autoStepLocked = true;
this.$('assistant').stepsIndex = this.agencySteps;
2015-07-23 15:58:48 +00:00
this.today = new Date();
this.today.setHours(0, 0, 0, 0);
},
2015-07-15 13:39:07 +00:00
onValuesReady: function() {
2015-07-15 13:39:07 +00:00
var orderForm = this.$('order-form');
var defaultsForm = this.$('defaults');
2015-07-10 12:30:08 +00:00
2015-07-15 13:39:07 +00:00
if (!(orderForm.ready && defaultsForm.ready))
return;
var date;
if (orderForm.numRows > 0) {
2015-07-15 13:39:07 +00:00
var i = orderForm;
date = i.get('sent');
} else
2015-07-15 13:39:07 +00:00
var i = defaultsForm;
2018-09-14 13:13:28 +00:00
if (!date || date.getTime() < (new Date()).getTime()) {
date = new Date();
2020-05-04 19:55:18 +00:00
date.setHours(0, 0, 0, 0);
2018-09-14 13:13:28 +00:00
var addDays = 0;
switch(date.getDay()) {
case 6: // Saturday
addDays += 2;
break;
case 0: // Sunday
addDays++;
break;
}
2018-05-11 09:25:10 +00:00
if (i.get('deliveryMethod') != 'PICKUP')
2018-09-14 13:13:28 +00:00
addDays++;
2020-05-04 19:55:18 +00:00
date.setDate(date.getDate() + addDays);
2015-07-10 12:30:08 +00:00
}
2015-07-15 13:39:07 +00:00
2015-07-17 14:34:42 +00:00
this.$('date').value = date;
this.$('method').value = i.get('deliveryMethod');
this.$('agency').value = i.get('agencyModeFk');
this.$('address').value = i.get('addressFk');
2015-07-15 13:39:07 +00:00
this.autoStepLocked = false;
},
2015-12-10 13:48:43 +00:00
disableButtons: function(disable) {
2018-05-17 08:52:27 +00:00
this.$('assistant-bar').disabled = disable;
},
2015-07-15 13:39:07 +00:00
onConfirmClick: function() {
this.disableButtons(true);
2015-12-10 13:48:43 +00:00
2019-05-21 14:16:27 +00:00
var query = 'CALL myBasket_configure(#date, #method, #agency, #address)';
2015-07-15 13:39:07 +00:00
var batch = new Sql.Batch();
batch.addParam('method', this.$('method'));
batch.addParam('date', this.$('date'));
batch.addParam('agency', this.$('agency'));
batch.addParam('address', this.$('address'));
2015-07-15 13:39:07 +00:00
this.conn.execQuery(query,
this.onBasketConfigured.bind(this), batch);
},
2015-07-10 12:30:08 +00:00
onBasketConfigured: function(resultSet) {
this.disableButtons(false);
2015-12-10 13:48:43 +00:00
if (!resultSet.fetchResult())
2015-07-15 13:39:07 +00:00
return;
if (this.$('order-form').numRows > 0)
Htk.Toast.showMessage(_('OrderUpdated'));
2015-07-15 13:39:07 +00:00
else
Htk.Toast.showMessage(_('OrderStarted'));
this.hash.set({form: 'ecomerce/catalog'});
},
2015-07-10 12:30:08 +00:00
onCancelClick: function() {
2015-07-15 13:39:07 +00:00
if (this.$('order-form').numRows > 0)
window.history.back();
2015-07-15 13:39:07 +00:00
else
this.hash.set({form: 'ecomerce/orders'});
},
agencySteps: ['method', 'date', 'address', 'agency', 'confirm-delivery'],
pickupSteps: ['method', 'date', 'address', 'pickup', 'confirm-pickup'],
isDelivery: function() {
return this.$('rg-method').value != 'PICKUP';
},
onMethodChange: function() {
this.$('assistant').stepsIndex = this.isDelivery() ?
this.agencySteps : this.pickupSteps;
this.onFieldChange();
},
methodValidate: function() {
if (!this.$('rg-method').isSelected())
throw new Error(_('Please select an option'));
},
dateShow: function() {
Vn.Node.setText(this.$('date-question'), this.isDelivery() ?
_('OrderDateDeliveryQuestion'):
_('OrderDatePickupQuestion'));
this.$('calendar').goToSelectedMonth();
},
dateValidate: function() {
if (!this.$('calendar').value)
throw new Error(_('Please select a date'));
},
addressShow: function() {
Vn.Node.setText(this.$('address-question'), this.isDelivery() ?
_('AddressQuestion'):
_('AddressQuestionPickup'));
},
addressValidate: function() {
if (this.$('address-form').row == -1)
throw new Error(_('Please select an address'));
},
agencyShow: function() {
this.$('agencies').refresh();
},
agencyValidate: function() {
if (this.$('agency-combo').row == -1 && this.isDelivery())
throw new Error(_('Please select an agency'));
},
pickupShow: function() {
this.$('warehouses').refresh();
},
pickupValidate: function() {
if (this.$('warehouse-combo').row == -1)
throw new Error(_('Please select a store'));
},
onFieldChange: function() {
2015-07-10 12:30:08 +00:00
if (!this.autoStepLocked)
this.$('assistant').moveNext();
},
goNextStep: function() {
this.$('assistant').moveNext();
},
2015-07-23 15:58:48 +00:00
addressRenderer: function(builder, form) {
builder.$('address').addEventListener('click',
this.onAddressClick.bind(this, form.get('id')));
},
onAddressClick: function(addressId) {
2015-07-23 15:58:48 +00:00
this.$('address').value = addressId;
this.goNextStep();
},
onAddressChange: function() {
2015-07-23 15:58:48 +00:00
if (this.selectedNode)
Vn.Node.removeClass(this.selectedNode, 'selected');
2015-07-23 15:58:48 +00:00
var row = this.$('addresses').search('id', this.$('address').value);
2015-07-23 15:58:48 +00:00
if (row != -1) {
var builder = this.$('repeater').getBuilder(row);
2015-07-23 15:58:48 +00:00
this.selectedNode = builder.$('address');
Vn.Node.addClass(this.selectedNode, 'selected');
2015-07-23 15:58:48 +00:00
}
this.$('address-form').row = row;
},
2015-07-15 13:39:07 +00:00
onAgenciesReady: function(model) {
2018-09-14 13:13:28 +00:00
if (!model.ready) return;
if (model.numRows > 0) {
var agency;
var defaults = [
this.$('order-form').get('agencyModeFk'),
this.$('defaults').get('agencyModeFk'),
this.$('defaults').get('defaultAgencyFk')
];
for (var i = 0; i < defaults.length; i++) {
agency = defaults[i];
if (model.search('id', agency) !== -1)
break;
}
this.autoStepLocked = true;
this.$('agency').value = agency;
this.autoStepLocked = false;
} else
Htk.Toast.showError(_('NoAgeciesAvailableForDate'));
},
2015-08-17 18:02:14 +00:00
onWarehousesReady: function(model) {
2015-08-17 18:02:14 +00:00
if (model.ready && model.numRows == 0)
Htk.Toast.showError(_('NoWarehousesAvailableForDate'));
},
2015-08-17 18:02:14 +00:00
calendarRestrict: function(date) {
return date.getTime() >= this.today.getTime();
2015-07-15 13:39:07 +00:00
}
2015-02-01 03:21:54 +00:00
});