forked from verdnatura/hedera-web
224 lines
5.1 KiB
JavaScript
224 lines
5.1 KiB
JavaScript
|
|
Hedera.Checkout = new Class({
|
|
Extends: Hedera.Form,
|
|
|
|
activate: function() {
|
|
this.autoStepLocked = true;
|
|
this.$('assistant').stepsIndex = this.agencySteps;
|
|
|
|
this.today = new Date();
|
|
this.today.setHours(0, 0, 0, 0);
|
|
},
|
|
|
|
onValuesReady: function() {
|
|
var orderForm = this.$('order-form');
|
|
var defaultsForm = this.$('defaults');
|
|
|
|
if (!(orderForm.ready && defaultsForm.ready))
|
|
return;
|
|
|
|
var date;
|
|
|
|
if (orderForm.numRows > 0) {
|
|
var i = orderForm;
|
|
date = i.get('sent');
|
|
} else
|
|
var i = defaultsForm;
|
|
|
|
if (!date || date.getTime() < (new Date()).getTime()) {
|
|
date = new Date();
|
|
date.setHours(0, 0, 0, 0);
|
|
|
|
var addDays = 0;
|
|
|
|
switch(date.getDay()) {
|
|
case 6: // Saturday
|
|
addDays += 2;
|
|
break;
|
|
case 0: // Sunday
|
|
addDays++;
|
|
break;
|
|
}
|
|
|
|
if (i.get('deliveryMethod') != 'PICKUP')
|
|
addDays++;
|
|
|
|
date.setDate(date.getDate() + addDays);
|
|
}
|
|
|
|
this.$('date').value = date;
|
|
this.$('method').value = i.get('deliveryMethod');
|
|
this.$('agency').value = i.get('agencyModeFk');
|
|
this.$('address').value = i.get('addressFk');
|
|
|
|
this.autoStepLocked = false;
|
|
},
|
|
|
|
disableButtons: function(disable) {
|
|
this.$('assistant-bar').disabled = disable;
|
|
},
|
|
|
|
onConfirmClick: function() {
|
|
this.disableButtons(true);
|
|
|
|
var query = 'CALL myBasket_configure(#date, #method, #agency, #address)';
|
|
|
|
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'));
|
|
|
|
this.conn.execQuery(query,
|
|
this.onBasketConfigured.bind(this), batch);
|
|
},
|
|
|
|
onBasketConfigured: function(resultSet) {
|
|
this.disableButtons(false);
|
|
|
|
if (!resultSet.fetchResult())
|
|
return;
|
|
|
|
if (this.$('order-form').numRows > 0)
|
|
Htk.Toast.showMessage(_('OrderUpdated'));
|
|
else
|
|
Htk.Toast.showMessage(_('OrderStarted'));
|
|
|
|
this.hash.set({form: 'ecomerce/catalog'});
|
|
},
|
|
|
|
onCancelClick: function() {
|
|
if (this.$('order-form').numRows > 0)
|
|
window.history.back();
|
|
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() {
|
|
if (!this.autoStepLocked)
|
|
this.$('assistant').moveNext();
|
|
},
|
|
|
|
goNextStep: function() {
|
|
this.$('assistant').moveNext();
|
|
},
|
|
|
|
addressRenderer: function(builder, form) {
|
|
builder.$('address').addEventListener('click',
|
|
this.onAddressClick.bind(this, form.get('id')));
|
|
},
|
|
|
|
onAddressClick: function(addressId) {
|
|
this.$('address').value = addressId;
|
|
this.goNextStep();
|
|
},
|
|
|
|
onAddressChange: function() {
|
|
if (this.selectedNode)
|
|
Vn.Node.removeClass(this.selectedNode, 'selected');
|
|
|
|
var row = this.$('addresses').search('id', this.$('address').value);
|
|
|
|
if (row != -1) {
|
|
var builder = this.$('repeater').getBuilder(row);
|
|
|
|
this.selectedNode = builder.$('address');
|
|
Vn.Node.addClass(this.selectedNode, 'selected');
|
|
}
|
|
|
|
this.$('address-form').row = row;
|
|
},
|
|
|
|
onAgenciesReady: function(model) {
|
|
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'));
|
|
},
|
|
|
|
onWarehousesReady: function(model) {
|
|
if (model.ready && model.numRows == 0)
|
|
Htk.Toast.showError(_('NoWarehousesAvailableForDate'));
|
|
},
|
|
|
|
calendarRestrict: function(date) {
|
|
return date.getTime() >= this.today.getTime();
|
|
}
|
|
});
|