orderNote: {
async addOrderNote() {
SUL.log("Called addOrderNote from main file");
const ZoteroPane = Zotero.getActiveZoteroPane();
const selectedItems = ZoteroPane.getSelectedItems();
const items = selectedItems.filter(
(item) => item.itemTypeID === Zotero.ItemTypes.getID("book")
);
for (const item of items) {
const tags = item.getTags();
const { ddcs, orderCodes, budgetCode } = SUL.orderNote.extractTags(tags);
const orderNote = SUL.orderNote.constructOrderNote({ ddcs, orderCodes, budgetCode });
item.setField("volume", orderNote);
await item.saveTx();
}
},
extractTags(tags) {
const ddcs = [];
const orderCodes = [];
let budgetCode = "";
tags.forEach((tag) => {
if (tag.tag.startsWith("DDC")) {
const tagText = tag.tag.replace(/[^0-9X]/gi, "");
ddcs.push(tagText);
} else if (tag.tag.startsWith("BC")) {
const orderCodeText = tag.tag.substring(3);
orderCodes.push(orderCodeText);
} else if (tag.tag.startsWith("ETAT")) {
budgetCode = tag.tag.substring(5);
}
});
return { ddcs, orderCodes, budgetCode };
},
constructOrderNote({ ddcs, orderCodes, budgetCode }) {
const orderNote = [budgetCode, ddcs.join(", "), orderCodes.join(", ")].filter(Boolean);
return orderNote.join(" // ");
},
},