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",
37 onUpdateHeader: "updateHeader"
41 {name: "parameterPanel", kind: "FittableRows", classes: "left",
43 {kind: "onyx.Toolbar", classes: "onyx-menu-toolbar", components: [
44 {kind: "font.TextIcon", name: "backButton",
45 content: "_back".loc(), ontap: "close", icon: "chevron-left"},
46 {kind: "onyx.MenuDecorator", onSelect: "actionSelected", components: [
47 {kind: "font.TextIcon", icon: "cog",
48 content: "_actions".loc(), name: "actionButton"},
49 {kind: "onyx.Menu", name: "actionMenu"}
52 {classes: "xv-header", name: "transactionListHeader", content: "_search".loc()},
53 {kind: "XV.ScrollableGroupbox", name: "parameterScroller", classes: "xv-search-container", fit: true}
55 {name: "listPanel", kind: "FittableRows", components: [
56 // the onyx-menu-toolbar class keeps the popups from being hidden
57 {kind: "onyx.MoreToolbar", name: "contentToolbar",
58 classes: "onyx-menu-toolbar", movedClass: "xv-toolbar-moved", components: [
59 {name: "rightLabel", content: "_search".loc(), classes: "xv-toolbar-label"},
60 {name: "spacer", classes: "spacer", fit: true},
61 {kind: "font.TextIcon", name: "printButton", showing: false,
62 content: "_print".loc(), ontap: "print", icon: "print"},
63 {kind: "font.TextIcon", name: "refreshButton",
64 content: "_refresh".loc(), onclick: "requery", icon: "rotate-right"},
65 {kind: "font.TextIcon", name: "postButton",
66 disabled: true, icon: "save", classes: "save",
67 content: "_post".loc(), ontap: "post"},
68 {name: "listItemMenu", kind: "onyx.Menu", floating: true,
69 onSelect: "listActionSelected", maxHeight: 500}
71 {name: "messageHeader", content: "", classes: ""},
72 {name: "header", classes: "xv-header", showing: false},
73 {name: "contentHeader"},
74 {name: "contentPanels", kind: "Panels", margin: 0, fit: true,
75 draggable: false, panelCount: 0, classes: "scroll-ios xv-content-panel"},
76 {kind: "onyx.Popup", name: "spinnerPopup", centered: true,
77 modal: true, floating: true, scrim: true,
78 onHide: "popupHidden", components: [
79 {kind: "onyx.Spinner"},
80 {name: "spinnerMessage", content: "_processing".loc() + "..."}
84 actionSelected: function (inSender, inEvent) {
85 var action = inEvent.originator.action,
86 method = action.method || action.name;
87 this[method](inSender, inEvent);
90 var callback = this.getCallback();
93 if (callback) { callback(); }
95 buildMenu: function () {
96 if (!this.getActions()) {
99 var actionMenu = this.$.actionMenu,
100 actions = this.getActions().slice(0),
104 actionMenu.destroyClientControls();
106 // then add whatever actions are applicable
107 _.each(actions, function (action) {
108 var name = action.name,
109 prerequisite = action.prerequisite,
110 isDisabled = prerequisite ? !that[prerequisite]() : false;
111 actionMenu.createComponent({
114 content: action.label || ("_" + name).loc(),
121 this.$.actionButton.setShowing(actions.length);
123 create: function () {
124 this.inherited(arguments);
125 var disabled = !XT.session.privileges.get("AlterTransactionDates"),
127 this.setList({list: this.getList()});
128 parameterWidget = this.$.parameterWidget;
129 parameterWidget.$.transactionDate.$.input.setDisabled(disabled);
130 if (!this.getActions()) {
134 this.$.contentToolbar.resized();
136 fetch: function (options) {
137 if (!this.init) { return; }
138 options = options ? _.clone(options) : {};
139 var list = this.$.list,
143 if (!list) { return; }
144 query = list.getQuery() || {};
145 parameterWidget = this.$.parameterWidget;
146 parameters = parameterWidget && parameterWidget.getParameters ?
147 parameterWidget.getParameters() : [];
148 options.showMore = _.isBoolean(options.showMore) ?
149 options.showMore : false;
152 if (parameters.length) {
153 query.parameters = parameters;
155 delete query.parameters;
157 list.setQuery(query);
161 Capture order changed and transaction date changed events.
162 Depends on a very specific implementation of parameter widget
163 that includes `order` and `transactionDate` parameters.
165 parameterChanged: function (inSender, inEvent) {
166 var originator = inEvent ? inEvent.originator : false,
167 name = originator ? originator.name : false,
172 if (name === "transactionDate") {
173 value = originator.$.input.getValue();
174 value = XT.date.applyTimezoneOffset(value, true);
175 value = XT.date.toMidnight(value);
176 this.setTransactionDate(value);
179 } else if (name === "order") {
180 value = originator.getParameter().value;
181 this.setModel(value);
183 } else if (name === "shipment") {
188 success: function () {
189 that.selectionChanged();
194 popupHidden: function (inSender, inEvent) {
195 if (!this._popupDone) {
196 inEvent.originator.show();
199 processingChanged: function (inSender, inEvent) {
200 if (inEvent.isProcessing) {
208 Overload: Piggy back on existing handler for `onParameterChanged event`
209 by forwarding this requery to `parameterChanged`.
211 requery: function (inSender, inEvent) {
212 this.parameterChanged(inSender, inEvent);
216 Whenever a user makes a selection, rebuild the menu
217 and set the transaction date on the selected models
218 to match what has been selected here.
220 selectionChanged: function () {
221 this.transactionDateChanged();
225 @param {Object} Options
226 @param {String} [options.list] Class name
228 setList: function (options) {
232 component = this.createComponent({
234 container: this.$.contentPanels,
238 this.$.rightLabel.setContent(component.label);
240 this.createComponent({
241 name: "parameterWidget",
242 classes: "xv-parameter",
243 showSaveFilter: false,
245 defaultParameters: null,
246 container: this.$.parameterScroller,
247 kind: component.getParameterWidget(),
248 memoizeEnabled: false,
256 spinnerHide: function () {
257 this._popupDone = true;
258 this.$.spinnerPopup.hide();
260 spinnerShow: function () {
261 this._popupDone = false;
262 this.$.spinnerPopup.show();
264 transactionDateChanged: function () {
265 var transDate = this.getTransactionDate(),
266 collection = this.$.list.getValue(),
269 // Update the transaction dates on all models to match
270 // What has been selected
271 for (i = 0; i < collection.length; i++) {
272 collection.at(i).transactionDate = transDate;
275 updateHeader: function (inSender, inEvent) {
276 if (inEvent.noItemFound) {
277 this.$.transactionListHeader.setContent("_noItemFound".loc() + ": " + inEvent.data);
279 } else if (this.$.transactionListHeader.getContent() !== "_search".loc()) {
280 this.$.transactionListHeader.setContent("");
285 enyo.mixin(transactionListContainer, XV.ListMenuManagerMixin);
286 enyo.kind(transactionListContainer);