-
verfasst von Patrick Müller46aac44a
Manager.js 16,47 KiB
/**
* Manage Invite Codes
*
* @module package/quiqqer/coupons/bin/controls/Manager
* @author www.pcsg.de (Patrick Müller)
*/
define('package/quiqqer/coupons/bin/controls/Manager', [
'qui/QUI',
'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/CouponCodes',
'Locale',
'Mustache',
'text!package/quiqqer/coupons/bin/controls/Manager.html',
'text!package/quiqqer/coupons/bin/controls/Manager.Create.html',
'text!package/quiqqer/coupons/bin/controls/Manager.Usages.html',
'css!package/quiqqer/coupons/bin/controls/Manager.css'
], function (QUI, QUIPanel, QUILoader, QUIPopup, QUIConfirm, QUIButton, QUISeparator,
Grid, QUIFormUtils, CouponCodes, QUILocale, Mustache, template, templateCreate,
templateUsages) {
"use strict";
var lg = 'quiqqer/coupons';
return new Class({
Extends: QUIPanel,
Type : 'package/quiqqer/coupons/bin/controls/Manager',
Binds: [
'$onCreate',
'$onResize',
'$listRefresh',
'$onRefresh',
'$load',
'$setGridData',
'$create',
'$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;
this.$GridParent = null;
this.$Panel = null;
this.addEvents({
onCreate : this.$onCreate,
onRefresh: this.$onRefresh,
onResize : this.$onResize
});
},
/**
* Event: onCreate
*/
$onCreate: function () {
var self = this;
this.Loader.inject(this.$Elm);
this.addButton({
name : 'create',
text : QUILocale.get(lg, 'controls.manager.tbl.btn.create'),
textimage: 'fa fa-plus',
events : {
onClick: function () {
self.$create();
}
}
});
this.addButton({
name : 'quickcreate',
text : QUILocale.get(lg, 'controls.manager.tbl.btn.quickcreate'),
textimage: 'fa fa-plus',
events : {
onClick: function () {
self.$create(true);
}
}
});
this.addButton(new QUISeparator());
this.addButton({
name : 'delete',
text : QUILocale.get(lg, 'controls.manager.tbl.btn.delete'),
textimage: 'fa fa-trash',
events : {
onClick: this.$delete
}
});
this.$load();
},
/**
* Refresh data
*/
refresh: function () {
if (this.$Grid) {
this.$Grid.refresh();
}
},
/**
* event: onResize
*/
$onResize: function () {
if (this.$GridParent && this.$Grid) {
var size = this.$GridParent.getSize();
this.$Grid.setHeight(size.y);
this.$Grid.resize();
}
},
/**
* Load Grid
*/
$load: function () {
var self = this;
this.setContent(Mustache.render(template));
var Content = this.getContent();
this.$GridParent = Content.getElement(
'.quiqqer-coupons-manager-table'
);
this.$Grid = new Grid(this.$GridParent, {
columnModel : [{
header : QUILocale.get('quiqqer/system', 'id'),
dataIndex: 'id',
dataType : 'number',
width : 50
}, {
header : QUILocale.get(lg, 'controls.manager.tbl.header.code'),
dataIndex: 'code',
dataType : 'string',
width : 150
}, {
header : QUILocale.get(lg, 'controls.manager.tbl.header.title'),
dataIndex: 'title',
dataType : 'string',
width : 200
}, {
header : QUILocale.get(lg, 'controls.manager.tbl.header.status'),
dataIndex: 'status',
dataType : 'node',
width : 200,
className: 'clickable'
}, {
header : QUILocale.get(lg, 'controls.manager.tbl.header.validUntilDate'),
dataIndex: 'validUntilDate',
dataType : 'string',
width : 150
}, {
header : QUILocale.get(lg, 'controls.manager.tbl.header.reusable'),
dataIndex: 'reusable',
dataType : 'node',
width : 150
}, {
header : QUILocale.get(lg, 'controls.manager.tbl.header.createDate'),
dataIndex: 'createDate',
dataType : 'string',
width : 150
}],
pagination : true,
serverSort : true,
selectable : true,
multipleSelection: true
});
this.$Grid.addEvents({
onDblClick: function () {
// @todo
//self.$managePackages(
// self.$Grid.getSelectedData()[0].id
//);
},
onClick : function (event) {
var selected = self.$Grid.getSelectedData();
self.getButtons('delete').enable();
if (!event.cell.hasClass('clickable')) {
return;
}
var Row = selected[0];
self.$showUsages(Row);
},
onRefresh : this.$listRefresh
});
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;
}
var self = this;
self.getButtons('delete').disable();
var GridParams = {
sortOn : Grid.getAttribute('sortOn'),
sortBy : Grid.getAttribute('sortBy'),
perPage: Grid.getAttribute('perPage'),
page : Grid.getAttribute('page')
};
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) {
var textUnlimited = QUILocale.get(lg, 'controls.manager.tbl.validUntil.unlimited');
for (var i = 0, len = GridData.data.length; i < len; i++) {
var Row = GridData.data[i];
var StatusElm = new Element('span', {
'class': 'quiqqer-coupons-manager-tbl-status'
});
var usageCount = Row.usages.length;
if (!Row.isValid) {
StatusElm.set('html', QUILocale.get(lg, 'controls.manager.tbl.status.invalid', {
usageCount: usageCount
}));
StatusElm.addClass('quiqqer-coupons-manager-tbl-status-invalid');
} else {
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.validUntilDate = textUnlimited;
}
if (!Row.title) {
Row.title = '-';
}
var ReusableElm = new Element('span', {
'class': 'fa'
});
if (!Row.isReusable) {
ReusableElm.addClass('fa-close');
} else {
ReusableElm.addClass('fa-check');
}
Row.reusable = ReusableElm;
}
this.$Grid.setData(GridData);
},
/**
* Create new InviteCode
*
* @param {Boolean} [quickCreate]
*/
$create: function (quickCreate) {
var self = this;
quickCreate = quickCreate || false;
if (quickCreate) {
CouponCodes.create({}).then(function (inviteCodeId) {
if (!inviteCodeId) {
return;
}
self.refresh();
});
return;
}
var FuncSubmit = function () {
var Content = Popup.getContent();
var Form = Content.getElement('form');
Popup.Loader.show();
CouponCodes.create(QUIFormUtils.getFormData(Form)).then(function (inviteCodeId) {
if (!inviteCodeId) {
Popup.Loader.hide();
return;
}
self.refresh();
Popup.close();
});
};
// open popup
var lgPrefix = 'controls.manager.create.template.';
var Popup = new QUIPopup({
icon : 'fa fa-plus',
title : QUILocale.get(
lg, 'controls.manager.create.popup.title'
),
maxHeight : 800,
maxWidth : 450,
events : {
onOpen: function () {
var Content = Popup.getContent();
var Form = Content.getElement('form');
Form.addEvent('submit', function (event) {
event.stop();
FuncSubmit();
});
Content.getElement('input[name="title"]').focus();
Popup.Loader.show();
QUI.parse(Content).then(function () {
Popup.Loader.hide();
});
}
},
closeButton: true,
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')
})
});
Popup.open();
Popup.addButton(new QUIButton({
text : QUILocale.get(lg, 'controls.manager.create.popup.btn.confirm_text'),
alt : QUILocale.get(lg, 'controls.manager.create.popup.btn.confirm'),
title : QUILocale.get(lg, 'controls.manager.create.popup.btn.confirm'),
events: {
onClick: FuncSubmit
}
}));
},
/**
* Remove all selected licenses
*/
$delete: function () {
var self = this;
var deleteData = [];
var deleteIds = [];
var rows = this.$Grid.getSelectedData();
for (var i = 0, len = rows.length; i < len; i++) {
deleteData.push(
rows[i].title + ' (ID: #' + rows[i].id + ')'
);
deleteIds.push(rows[i].id);
}
// open popup
var Popup = new QUIConfirm({
'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',
cancel_button: {
text : false,
textimage: 'icon-remove fa fa-remove'
},
ok_button : {
text : false,
textimage: 'icon-ok fa fa-check'
},
events : {
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
*
* @param {Object} RowData
*/
$showUsages: function (RowData) {
new QUIConfirm({
maxHeight: 550,
maxWidth : 400,
autoclose: false,
title: QUILocale.get(lg, 'controls.Manager.usages.title', {code: RowData.code}),
icon : 'fa fa-user',
cancel_button: false,
ok_button : {
text : false,
textimage: 'icon-ok fa fa-check'
},
events : {
onOpen: function (Popup) {
var lgPrefix = 'controls.Manager.usages.template.';
Popup.setContent(Mustache.render(templateUsages, {
headerUser: QUILocale.get(lg, lgPrefix + 'headerUser'),
headerDate: QUILocale.get(lg, lgPrefix + 'headerDate')
}));
var Content = Popup.getContent();
var TableBody = Content.getElement('tbody');
console.log(TableBody);
for (var i = 0, len = RowData.usages.length; i < len; i++) {
var usage = RowData.usages[i];
new Element('tr', {
html: '<td>' + usage.date + '</td>' +
'<td>' + usage.userId + ' (' + usage.userName + ')</td>'
}).inject(TableBody);
}
}
}
}).open();
}
});
});