--- /dev/null
+dojo.require("openils.PermaCrud");
+dojo.require("dojo.data.ItemFileReadStore");
+
+if (typeof(localeStrings) == "undefined") {
+ dojo.requireLocalization("openils.acq", "acq");
+ var localeStrings = dojo.i18n.getLocalization("openils.acq", "acq");
+}
+
+function TagManager(displayNode) {
+ var self = this;
+ this.tagCache = {};
+ this.displayNode = displayNode;
+
+ this.pcrud = new openils.PermaCrud();
+
+// selected (by checkbox) id's from an autogrid of objects:
+// return grid.getSelectedItems().map(function(o) { return o.id[0]; });
+
+ this.displayFund = function(fund) {
+ if (!fund) {
+ this.displayNode.innerHTML = localeStrings.FUND_NOT_YET_LOADED;
+ return;
+ }
+
+ dojo.empty(this.displayNode);
+ fund.tags().forEach(
+ function(o) {
+ dojo.place(self.renderTagMapping(o), self.displayNode, "last");
+ }
+ );
+ };
+
+ this.renderTagMapping = function(mapping) {
+ var span = dojo.create(
+ "span", {
+ "id": "oils-acq-fund-tag-mapping-" + mapping.id(),
+ "className": "oils-acq-fund-tag",
+ "innerHTML": mapping.tag().name()
+ }
+ );
+ dojo.create(
+ "a", {
+ "href": "javascript:void(0);",
+ "innerHTML": "X",
+ "onclick": function() { self.deleteMapping(mapping); },
+ },
+ span, "last"
+ );
+ return span;
+ };
+
+ this.deleteMapping = function(mapping) {
+ if (confirm(localeStrings.CONFIRM_DELETE_MAPPING)) {
+ this.pcrud.eliminate(
+ mapping, {
+ "oncomplete": function(r) {
+ dojo.destroy(
+ "oils-acq-fund-tag-mapping-" + mapping.id()
+ );
+ fund.tags(
+ fund.tags().filter(
+ function(o) { return o.id() != mapping.id(); }
+ )
+ );
+ },
+ "onerror": function() {
+ /* XXX does onerror not actually work? */
+ alert(localeStrings.COULD_NOT_DELETE_MAPPING);
+ }
+ }
+ );
+ }
+ };
+
+ this.addMapping = function(fund, tag) {
+ var mapping = new acqftm();
+ mapping.fund(fund.id());
+ mapping.tag(tag.id());
+
+ this.pcrud.create(
+ mapping, {
+ "onerror": function(r) {
+ /* XXX does onerror not actually work? */
+ alert(localeStrings.COULD_NOT_CREATE_MAPPING);
+ },
+ "oncomplete": function(r, list) {
+ mapping = list[0]; /* get the new mapping's ID this way */
+ mapping.tag(tag); /* re-"flesh" */
+ fund.tags().push(mapping); /* save local reference */
+ dojo.place(
+ self.renderTagMapping(mapping),
+ self.displayNode, "last"
+ );
+ }
+ }
+ );
+ };
+
+ this.prepareTagSelector = function(selector) {
+ this.pcrud.search(
+ "acqft", {
+ "owner": fieldmapper.aou.orgNodeTrail(
+ fieldmapper.aou.findOrgUnit(openils.User.user.ws_ou()),
+ true /* asId */
+ )
+ }, {
+ "async": true,
+ "oncomplete": function(r) {
+ if ((r = openils.Util.readResponse(r))) {
+ selector.store = new dojo.data.ItemFileReadStore(
+ {"data": acqft.toStoreData(r)}
+ );
+ selector.startup();
+ }
+ }
+ }
+ );
+ };
+}