====== Agenda Item Request ======
This automation sends an email out to each board member to request any agenda items they want to discuss at the next meeting.
===== Trigger =====
* TriggerRecord: **Board Meeting**
* Field: **Actions on Submit**
* Is Exactly **Request Agenda Items**
=====Flow=====
>For each **Board Meeting Members** where **Name**=TriggerRecord.**Name**
>> Create Record **Email**
>>Run Script
>>>// Specify the table and view where you want to apply the autonumbering
let Email_table = base.getTable("emails");
let inputConfig = input.config();
let Email_Rec_ID = inputConfig['Email_Rec_ID'];
let Member_Rec_ID = inputConfig['Member_Rec_ID'];
let Board_Meeting_Rec_ID = inputConfig['inp_Board_Meeting_Rec_ID'];
let Agenda_Form = inputConfig['Agenda_Form'] + "&submitter=" + Member_Rec_ID;
let Member_Name = inputConfig['inp_Member_Name'];
let Member_Full_Name = inputConfig['inpMember_Full_Name'];
let Body_Template_Long = inputConfig['Email Body'];
let Body_Template = Body_Template_Long.join(' ');
let Meeting_Date = inputConfig['inpMeeting_Date'];
let Meeting_Title = inputConfig['inpMeeting_Title'];
let Agenda_Deadline = inputConfig['Deadline'];
let Email_Body_Field = "Body";
let Email_Status_field = "Status";
let displayText = "Agenda Submittal Form";
let currentDate = new Date();
let Overdue_HTML = `(Overdue)`;
let email=null;
let BoardMembersTable = base.getTable("Board Meeting Members");
let memberRecord = await BoardMembersTable.selectRecordAsync(Member_Rec_ID);
if (memberRecord) {
email = memberRecord.getCellValue("Email");
Member_Name = memberRecord.getCellValue("Nickname");
Member_Full_Name = memberRecord.getCellValue("Full Name");
console.log(`Email: ${email}`);
console.log(`Nickname0: ${Member_Name}`);
console.log(`Full Name: ${Member_Full_Name}`);
}
else {
console.log("memberRecord is null");
}
let MembersTable = base.getTable("Members");
let officersView = MembersTable.getView("Officers");
// Query the records from the "Officers" view
let query = await officersView.selectRecordsAsync({
fields: ["Office", "Email", "Nickname"] });
// Initialize a variable to hold the secretary's email
let secretaryEmail = null;
let secretaryName = null;
for (let record of query.records) {
let roles = record.getCellValue("Office");
if (roles && roles.includes("Secretary")) {
// Get the value of the "Email" field
secretaryEmail = record.getCellValue("Email");
secretaryName = record.getCellValue("Nickname");
console.log(`secretaryEmail: ${secretaryEmail}`);
console.log(`secretaryName: ${secretaryName}`);
break; // Stop searching once we've found the record
}
}
console.log(`Meeting_Date: ${Meeting_Date}`);
Body_Template = Body_Template.replace("[NICKNAME]",Member_Name);
Body_Template = Body_Template.replace("[MEETING TITLE]",Meeting_Title);
Body_Template = Body_Template.replace("[MEETING DATE]",Meeting_Date);
Body_Template = Body_Template.replace("[AGENDA FORM]",Agenda_Form);
Body_Template = Body_Template.replace("[AGENDA DEADLINE]",Agenda_Deadline);
Body_Template = Body_Template.replace(/\[SECRETARY EMAIL\]/g, secretaryEmail);
Body_Template = Body_Template.replace("[SECRETARY NAME]",secretaryName);
// Get a reference to the "Officers" view
let ItemsTable = base.getTable("Board Meeting Agenda Items");
let ItemsView = ItemsTable.getView("Current Items");
let Itemquery = await ItemsView.selectRecordsAsync({
fields: [ "Meeting", "Name", "Title", "Presenter","Edit Form"] });
// Initialize a variable to hold the secretary's email
let ItemName = null;
let ItemTitle = null;
let ItemPresenter = null;
let ItemEditForm = null;
let ItemCount=0;
let Agenda_Label = null
let Agenda_List = "\n";
for (let Itemrecord of Itemquery.records) {
let Meeting = Itemrecord.getCellValue("Meeting")[0].name;
console.log(Meeting + " : " + Meeting_Title)
ItemCount++;
if (Meeting && Meeting==Meeting_Title) {
console.log(Agenda_Label);
ItemTitle = Itemrecord.getCellValue("Title");
ItemPresenter = Itemrecord.getCellValue("Presenter")[0].name;
ItemEditForm = Itemrecord.getCellValue("Edit Form");
Agenda_List = Agenda_List + `- ${ItemTitle} presented by ${ItemPresenter}
`;
}
}
Agenda_List = Agenda_List + "
"
Body_Template = Body_Template.replace("[AGENDA_LIST]",Agenda_List);
// Get Task list
let WorkListTable = base.getTable("Worklist");
let BoardMeetingTasksView = WorkListTable.getView("Board Meeting Tasks");
let WorkListquery = await BoardMeetingTasksView.selectRecordsAsync({ fields: [ "Name","Assignee", "Task Title", "Email","Due Date","Worklist Form"] });
let Work_List = "\n";0
for (let WorkListrecord of WorkListquery.records) {
let Assignees = WorkListrecord.getCellValue("Assignee");
if (Assignees) {
for (let assignee of Assignees) {
console.log(assignee.name + "," + Member_Full_Name);
if (assignee.name == Member_Full_Name) {
let TaskTitle = WorkListrecord.getCellValue("Task Title");
let WorkListForm = WorkListrecord.getCellValue("Worklist Form");
let Due_Date = WorkListrecord.getCellValue("Due Date");
let dueDateObj = new Date(Due_Date);
let Overdue_CD = "";
if (dueDateObj < currentDate) {
Overdue_CD = Overdue_HTML;
}
Work_List = Work_List + `- ${TaskTitle} due by ${Due_Date}${Overdue_CD}
`;
}
}
}
}
Work_List += "
";
Body_Template = Body_Template.replace("[WORK_LIST]",Work_List);
let newstatus="Send";
console.log(Body_Template);
await Email_table.updateRecordAsync(Email_Rec_ID, {
[Email_Body_Field]: Body_Template,
[Email_Status_field]: { name: newstatus }
});
await unselectOption(Board_Meeting_Rec_ID, "Board Meeting", "Actions on Submit", "Request Agenda Items");
async function unselectOption(recordId, tableName, fieldName, optionLabel) {
// Get the table and record
let table = base.getTable(tableName);
// Get the record's multi-select field value
let record = await table.selectRecordAsync(recordId);
let multiSelectField = record.getCellValue(fieldName);
// Filter out the option you want to unselect
let updatedOptions = multiSelectField.filter(option => option.name !== optionLabel);
// Update the multi-select field with the filtered options
await table.updateRecordAsync(recordId, {
[fieldName]: updatedOptions
});
console.log(`Unselected option '${optionLabel}' from the field '${fieldName}'`);
}