Newer
Older
* @module package/quiqqer/coupons/bin/backend/controls/Manager
define('package/quiqqer/coupons/bin/backend/controls/Manager', [
'qui/controls/desktop/Panel',
'qui/controls/loader/Loader',
'qui/controls/windows/Popup',
'qui/controls/windows/Confirm',
'qui/controls/buttons/Button',
'qui/controls/buttons/Separator',
'controls/grid/Grid',
'qui/utils/Form',
'package/quiqqer/coupons/bin/backend/CouponCodes',
'text!package/quiqqer/coupons/bin/backend/controls/Manager.html',
'text!package/quiqqer/coupons/bin/backend/controls/Manager.Create.html',
'text!package/quiqqer/coupons/bin/backend/controls/Manager.Usages.html',
'css!package/quiqqer/coupons/bin/backend/controls/Manager.css'
], function (QUI, QUIPanel, QUILoader, QUIPopup, QUIConfirm, QUIButton, QUISeparator,
Grid, QUIFormUtils, CouponCodes, QUILocale, Mustache, template, templateCreate,
templateUsages) {
Type: 'package/quiqqer/coupons/bin/backend/controls/Manager',
Binds: [
'$onCreate',
'$onResize',
'$listRefresh',
'$onRefresh',
'$load',
'$setGridData',
'$toggleActiveStatus',
'$managePackages',
'$delete',
'$editBundle',
'refresh',
'$openUserPanel',
'$sendMail'
],
options: {
title: QUILocale.get(lg, 'controls.manager.title')
},
initialize: function (options) {
this.parent(options);
this.Loader = new QUILoader();
this.$User = null;
this.$Grid = null;
});
},
/**
* Event: onCreate
*/
$onCreate: function () {
name: 'create',
text: QUILocale.get(lg, 'controls.manager.tbl.btn.create'),
name: 'edit',
text: QUILocale.get(lg, 'controls.manager.tbl.btn.edit'),
self.$showDetails(Object.clone(self.$Grid.getSelectedData()[0]));
name: 'delete',
text: QUILocale.get(lg, 'controls.manager.tbl.btn.delete'),
onClick: this.$delete
}
});
this.$load();
},
/**
* Refresh data
*/
refresh: function () {
if (this.$Grid) {
this.$Grid.refresh();
}
},
/**
* event: onResize
*/
$onResize: function () {
if (this.$GridParent && this.$Grid) {
const size = this.$GridParent.getSize();
this.$Grid.setHeight(size.y);
this.$Grid.resize();
}
},
/**
* Load Grid
*/
$load: function () {
header: QUILocale.get('quiqqer/system', 'id'),
header: QUILocale.get(lg, 'controls.manager.tbl.header.code'),
header: QUILocale.get(lg, 'controls.manager.tbl.header.title'),
header: QUILocale.get(lg, 'controls.manager.tbl.header.status'),
header: QUILocale.get(lg, 'controls.manager.tbl.header.validUntilDate'),
header: QUILocale.get(lg, 'controls.manager.tbl.header.reusable'),
header: QUILocale.get(lg, 'controls.manager.tbl.header.createDate'),
pagination: true,
serverSort: true,
selectable: true,
multipleSelection: true
});
this.$Grid.addEvents({
onDblClick: function () {
self.$showDetails(Object.clone(self.$Grid.getSelectedData()[0]));
onClick: function (event) {
const selected = self.$Grid.getSelectedData();
if (selected.length === 1) {
self.getButtons('edit').enable();
} else {
self.getButtons('edit').disable();
}
if (!event.cell.hasClass('clickable')) {
return;
}
});
this.resize();
this.$Grid.refresh();
},
/**
* Event: onRefresh
*/
$onRefresh: function () {
if (this.$Grid) {
this.$Grid.refresh();
}
},
/**
* Refresh bundle list
*
* @param {Object} Grid
*/
$listRefresh: function (Grid) {
if (!this.$Grid) {
return;
}
const GridParams = {
sortOn: Grid.getAttribute('sortOn'),
sortBy: Grid.getAttribute('sortBy'),
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
};
switch (GridParams.sortOn) {
case 'status':
GridParams.sortOn = 'useDate';
break;
case 'user':
GridParams.sortOn = 'userId';
break;
}
this.Loader.show();
CouponCodes.getList(GridParams).then(function (ResultData) {
self.Loader.hide();
self.$setGridData(ResultData);
});
},
/**
* Set license data to grid
*
* @param {Object} GridData
*/
$setGridData: function (GridData) {
const textUnlimited = QUILocale.get(lg, 'controls.manager.tbl.validUntil.unlimited');
for (let i = 0, len = GridData.data.length; i < len; i++) {
const Row = GridData.data[i];
if (!Row.isValid) {
StatusElm.set('html', QUILocale.get(lg, 'controls.manager.tbl.status.invalid', {
usageCount: usageCount
}));
StatusElm.addClass('quiqqer-coupons-manager-tbl-status-invalid');
StatusElm.set('html', QUILocale.get(lg, 'controls.manager.tbl.status.valid', {
usageCount: usageCount
StatusElm.addClass('quiqqer-coupons-manager-tbl-status-used');
}
Row.status = StatusElm;
if (!Row.validUntilDate) {
Row.validUntilDateText = textUnlimited;
} else {
Row.validUntilDateText = Row.validUntilDate;
Row.maxUsageLabel = QUILocale.get(lg, 'controls.manager.tbl.maxUsageLabel.' + Row.maxUsages);
* Create new CouponCode or edit an existing one
* @param {Object} [CouponData] - If omitted create new CouponCode
CouponCodes.edit(CouponData.id, QUIFormUtils.getFormData(Form)).then((couponCodeId) => {
if (!couponCodeId) {
Popup.Loader.hide();
return;
}
Popup.close();
});
return;
}
CouponCodes.create(QUIFormUtils.getFormData(Form)).then((couponCodeId) => {
require([
'package/quiqqer/translator/bin/classes/Translator'
], (Translator) => {
new Translator().publish(lg).then(() => {
this.refresh();
Popup.close();
}).then(() => {
this.refresh();
Popup.close();
});
});
}).catch(() => {
Popup.Loader.hide();
});
};
Popup.Loader.show();
require([
'package/quiqqer/discount/bin/controls/Discounts',
'utils/Panels'
], function (DiscountsManagerPanel, PanelUtils) {
const Panel = new DiscountsManagerPanel();
PanelUtils.openPanelInTasks(Panel).then((PanelOpened) => {
PanelOpened.editChild(parseInt(DiscountSelect.getValue()));
Popup.close();
});
const lgPrefix = 'controls.manager.create.template.';
const Popup = new QUIPopup({
icon: 'fa fa-plus',
title: CouponData ?
QUILocale.get(lg, 'controls.manager.details.popup.title_edit', {code: CouponData.code}) :
QUILocale.get(lg, 'controls.manager.details.popup.title_new'),
maxHeight: 1000,
maxWidth: 1000,
events: {
Form.addEvent('submit', function (event) {
event.stop();
FuncSubmit();
});
const Code = Content.getElement('input[name="code"]');
Code.addEvent('keyup', function () {
if (Code.value !== '') {
Amount.disabled = true;
} else {
Amount.disabled = false;
}
});
if (CouponData) {
CouponData.discountIds = CouponData.discountIds.join(',');
QUIFormUtils.setDataToForm(CouponData, Form);
text: QUILocale.get(lg, 'controls.manager.details.popup.btn.open_discount'),
title: QUILocale.get(lg, 'controls.manager.details.popup.btn.open_discount'),
events: {
float: 'right'
}
}).inject(
Content.getElement('.quiqqer-coupons-manager-create-advanced-discount-buttons')
);
QUI.parse(Content).then(() => {
Win.Loader.hide();
if (!CouponData) {
return;
}
DiscountSelect = QUI.Controls.getById(
Content.getElement('input[name="discountIds"]').get('data-quiid')
);
DiscountSelect.addEvents({
EditDiscountBtn.enable();
},
onRemoveItem: () => {
EditDiscountBtn.disable();
content: Mustache.render(templateCreate, {
labelTitle: QUILocale.get(lg, lgPrefix + 'labelTitle'),
labelCode: QUILocale.get(lg, lgPrefix + 'labelCode'),
labelUsers: QUILocale.get(lg, lgPrefix + 'labelUsers'),
labelGroups: QUILocale.get(lg, lgPrefix + 'labelGroups'),
labelDate: QUILocale.get(lg, lgPrefix + 'labelDate'),
labelAmount: QUILocale.get(lg, lgPrefix + 'labelAmount'),
labelReusable: QUILocale.get(lg, lgPrefix + 'labelReusable'),
labelReusableOncePerUser: QUILocale.get(lg, lgPrefix + 'labelReusableOncePerUser'),
labelReusableOnce: QUILocale.get(lg, lgPrefix + 'labelReusableOnce'),
labelReusableUnlimited: QUILocale.get(lg, lgPrefix + 'labelReusableUnlimited'),
labelDiscount: QUILocale.get(lg, lgPrefix + 'labelDiscount'),
headerBasics: QUILocale.get(lg, lgPrefix + 'headerBasics'),
headerDiscount: QUILocale.get(lg, lgPrefix + 'headerDiscount'),
headerRestrictions: QUILocale.get(lg, lgPrefix + 'headerRestrictions'),
descCode: QUILocale.get(lg, lgPrefix + 'descCode'),
descTitle: QUILocale.get(lg, lgPrefix + 'descTitle'),
labelDiscountAmount: QUILocale.get(lg, lgPrefix + 'labelDiscountAmount'),
labelDiscountType: QUILocale.get(lg, lgPrefix + 'labelDiscountType'),
labelDiscountTypeFlat: QUILocale.get(lg, lgPrefix + 'labelDiscountTypeFlat'),
labelDiscountTypePercentage: QUILocale.get(lg, lgPrefix + 'labelDiscountTypePercentage'),
isCreate: !CouponData
})
});
Popup.open();
Popup.addButton(new QUIButton({
QUILocale.get(lg, 'controls.manager.details.popup.btn.confirm_text_edit') :
QUILocale.get(lg, 'controls.manager.details.popup.btn.confirm_text_new'),
QUILocale.get(lg, 'controls.manager.details.popup.btn.confirm_edit') :
QUILocale.get(lg, 'controls.manager.details.popup.btn.confirm_new'),
QUILocale.get(lg, 'controls.manager.details.popup.btn.confirm_edit') :
QUILocale.get(lg, 'controls.manager.details.popup.btn.confirm_new'),
onClick: FuncSubmit
}
}));
},
/**
* Remove all selected licenses
*/
$delete: function () {
const self = this;
const deleteData = [];
const deleteIds = [];
const rows = this.$Grid.getSelectedData();
for (const i = 0, len = rows.length; i < len; i++) {
deleteData.push(
rows[i].title + ' (ID: #' + rows[i].id + ')'
);
deleteIds.push(rows[i].id);
}
// open popup
'maxHeight': 300,
'autoclose': false,
'information': QUILocale.get(
lg,
'controls.manager.delete.popup.info', {
codes: deleteData.join('<br/>')
}
),
'title': QUILocale.get(lg, 'controls.manager.delete.popup.title'),
'texticon': 'fa fa-trash',
text: QUILocale.get(lg, 'controls.manager.delete.popup.title'),
'icon': 'fa fa-trash',
onSubmit: function () {
Popup.Loader.show();
CouponCodes.delete(deleteIds).then(function (success) {
if (!success) {
Popup.Loader.hide();
return;
}
Popup.close();
self.refresh();
});
}
}
});
Popup.open();
},
/**
* Open user panel
*
$showUsages: function (RowData) {
new QUIConfirm({
maxHeight: 550,
autoclose: false,
title: QUILocale.get(lg, 'controls.Manager.usages.title', {code: RowData.code}),
ok_button: {
text: QUILocale.get(lg, 'controls.Manager.usages.btn_ok'),
onSubmit: function (Popup) {
Popup.close();
},
onOpen: function (Popup) {
const lgPrefix = 'controls.Manager.usages.template.';
headerUser: QUILocale.get(lg, lgPrefix + 'headerUser'),
headerDate: QUILocale.get(lg, lgPrefix + 'headerDate'),
headerOrderPrefixedId: QUILocale.get(lg, lgPrefix + 'headerOrderPrefixedId')
const Content = Popup.getContent();
const TableBody = Content.getElement('tbody');
for (const i = 0, len = RowData.usages.length; i < len; i++) {
const usage = RowData.usages[i];
'<td>' + usage.userId + ' (' + usage.userName + ')</td>'
new Element('td', {
html: usage.orderPrefixedId ? usage.orderPrefixedId : '-'
}).inject(Row);