1 /*jshint bitwise:true, indent:2, curly:true, eqeqeq:true, immed:true,
2 latedef:true, newcap:true, noarg:true, regexp:true, undef:true,
3 trailing:true, white:true, strict:false*/
4 /*global XT:true, XM:true, XV:true, _:true, enyo:true */
9 Expected to a have a parameter widget that contains an order and
12 @name XV.TransactionListContainer
13 @extends XV.SearchContainer
15 var transactionListContainer = /** @lends XV.TransactionListContainer# */ {
16 name: "XV.TransactionListContainer",
17 kind: "XV.SearchPanels",
24 transactionDate: null,
33 onListItemMenuTap: "showListItemMenu",
34 onParameterChange: "requery",
35 onProcessingChanged: "processingChanged",
36 onSelectionChanged: "selectionChanged"
40 {name: "parameterPanel", kind: "FittableRows", classes: "left",
42 {kind: "onyx.Toolbar", classes: "onyx-menu-toolbar", components: [
43 {kind: "font.TextIcon", name: "backButton",
44 content: "_back".loc(), ontap: "close", icon: "chevron-left"},
45 {kind: "onyx.MenuDecorator", onSelect: "actionSelected", components: [
46 {kind: "font.TextIcon", icon: "cog",
47 content: "_actions".loc(), name: "actionButton"},
48 {kind: "onyx.Menu", name: "actionMenu"}
51 {classes: "xv-header", content: "_search".loc()},
52 {kind: "XV.ScrollableGroupbox", name: "parameterScroller", classes: "xv-search-container", fit: true}
54 {name: "listPanel", kind: "FittableRows", components: [
55 // the onyx-menu-toolbar class keeps the popups from being hidden
56 {kind: "onyx.MoreToolbar", name: "contentToolbar",
57 classes: "onyx-menu-toolbar", movedClass: "xv-toolbar-moved", components: [
58 {name: "rightLabel", content: "_search".loc(), classes: "xv-toolbar-label"},
59 {name: "spacer", classes: "spacer", fit: true},
60 {kind: "font.TextIcon", name: "printButton", showing: false,
61 content: "_print".loc(), ontap: "print", icon: "print"},
62 {kind: "font.TextIcon", name: "refreshButton",
63 content: "_refresh".loc(), onclick: "requery", icon: "rotate-right"},
64 {kind: "font.TextIcon", name: "postButton",
65 disabled: true, icon: "save", classes: "save",
66 content: "_post".loc(), ontap: "post"},
67 {name: "listItemMenu", kind: "onyx.Menu", floating: true,
68 onSelect: "listActionSelected", maxHeight: 500}
70 {name: "messageHeader", content: "", classes: ""},
71 {name: "header", classes: "xv-header", showing: false},
72 {name: "contentHeader"},
73 {name: "contentPanels", kind: "Panels", margin: 0, fit: true,
74 draggable: false, panelCount: 0, classes: "scroll-ios xv-content-panel"},
75 {kind: "onyx.Popup", name: "spinnerPopup", centered: true,
76 modal: true, floating: true, scrim: true,
77 onHide: "popupHidden", components: [
78 {kind: "onyx.Spinner"},
79 {name: "spinnerMessage", content: "_processing".loc() + "..."}
83 actionSelected: function (inSender, inEvent) {
84 var action = inEvent.originator.action,
85 method = action.method || action.name;
86 this[method](inSender, inEvent);
89 var callback = this.getCallback();
92 if (callback) { callback(); }
94 buildMenu: function () {
95 if (!this.getActions()) {
98 var actionMenu = this.$.actionMenu,
99 actions = this.getActions().slice(0),
103 actionMenu.destroyClientControls();
105 // then add whatever actions are applicable
106 _.each(actions, function (action) {
107 var name = action.name,
108 prerequisite = action.prerequisite,
109 isDisabled = prerequisite ? !that[prerequisite]() : false;
110 actionMenu.createComponent({
113 content: action.label || ("_" + name).loc(),
120 this.$.actionButton.setShowing(actions.length);
122 create: function () {
123 this.inherited(arguments);
124 var disabled = !XT.session.privileges.get("AlterTransactionDates"),
126 this.setList({list: this.getList()});
127 parameterWidget = this.$.parameterWidget;
128 parameterWidget.$.transactionDate.$.input.setDisabled(disabled);
129 if (!this.getActions()) {
133 this.$.contentToolbar.resized();
135 fetch: function (options) {
136 if (!this.init) { return; }
137 options = options ? _.clone(options) : {};
138 var list = this.$.list,
142 if (!list) { return; }
143 query = list.getQuery() || {};
144 parameterWidget = this.$.parameterWidget;
145 parameters = parameterWidget && parameterWidget.getParameters ?
146 parameterWidget.getParameters() : [];
147 options.showMore = _.isBoolean(options.showMore) ?
148 options.showMore : false;
151 if (parameters.length) {
152 query.parameters = parameters;
154 delete query.parameters;
156 list.setQuery(query);
160 Capture order changed and transaction date changed events.
161 Depends on a very specific implementation of parameter widget
162 that includes `order` and `transactionDate` parameters.
164 parameterChanged: function (inSender, inEvent) {
165 var originator = inEvent ? inEvent.originator : false,
166 name = originator ? originator.name : false,
171 if (name === "transactionDate") {
172 value = originator.$.input.getValue();
173 value = XT.date.applyTimezoneOffset(value, true);
174 value = XT.date.toMidnight(value);
175 this.setTransactionDate(value);
178 } else if (name === "order") {
179 value = originator.getParameter().value;
180 this.setModel(value);
182 } else if (name === "shipment") {
187 success: function () {
188 that.selectionChanged();
193 popupHidden: function (inSender, inEvent) {
194 if (!this._popupDone) {
195 inEvent.originator.show();
198 processingChanged: function (inSender, inEvent) {
199 if (inEvent.isProcessing) {
207 Overload: Piggy back on existing handler for `onParameterChanged event`
208 by forwarding this requery to `parameterChanged`.
210 requery: function (inSender, inEvent) {
211 this.parameterChanged(inSender, inEvent);
215 Whenever a user makes a selection, rebuild the menu
216 and set the transaction date on the selected models
217 to match what has been selected here.
219 selectionChanged: function () {
220 this.transactionDateChanged();
224 @param {Object} Options
225 @param {String} [options.list] Class name
227 setList: function (options) {
231 component = this.createComponent({
233 container: this.$.contentPanels,
237 this.$.rightLabel.setContent(component.label);
239 this.createComponent({
240 name: "parameterWidget",
241 classes: "xv-parameter",
242 showSaveFilter: false,
244 defaultParameters: null,
245 container: this.$.parameterScroller,
246 kind: component.getParameterWidget(),
247 memoizeEnabled: false,
255 spinnerHide: function () {
256 this._popupDone = true;
257 this.$.spinnerPopup.hide();
259 spinnerShow: function () {
260 this._popupDone = false;
261 this.$.spinnerPopup.show();
263 transactionDateChanged: function () {
264 var transDate = this.getTransactionDate(),
265 collection = this.$.list.getValue(),
268 // Update the transaction dates on all models to match
269 // What has been selected
270 for (i = 0; i < collection.length; i++) {
271 collection.at(i).transactionDate = transDate;
276 enyo.mixin(transactionListContainer, XV.ListMenuManagerMixin);
277 enyo.kind(transactionListContainer);