Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| automation:agenda_item_request [2025/01/22 02:57] – Jeff Johnson | automation:agenda_item_request [2025/01/22 03:02] (current) – Jeff Johnson | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| This automation sends an email out to each board member to request any agenda items they want to discuss at the next meeting. | This automation sends an email out to each board member to request any agenda items they want to discuss at the next meeting. | ||
| ===== Trigger ===== | ===== Trigger ===== | ||
| - | * Table: <color green> | + | * TriggerRecord: <color green> |
| * Field: | * Field: | ||
| * Is Exactly <color darkmagenta> | * Is Exactly <color darkmagenta> | ||
| =====Flow===== | =====Flow===== | ||
| - | >For each <color green> | + | >For each <color green> |
| >> Create Record <color green> | >> Create Record <color green> | ||
| >>Run Script | >>Run Script | ||
| + | >>>< | ||
| + | |||
| + | let Email_table = base.getTable(" | ||
| + | let inputConfig = input.config(); | ||
| + | |||
| + | let Email_Rec_ID = inputConfig[' | ||
| + | let Member_Rec_ID = inputConfig[' | ||
| + | let Board_Meeting_Rec_ID = inputConfig[' | ||
| + | let Agenda_Form = inputConfig[' | ||
| + | let Member_Name = inputConfig[' | ||
| + | let Member_Full_Name = inputConfig[' | ||
| + | let Body_Template_Long = inputConfig[' | ||
| + | let Body_Template = Body_Template_Long.join(' | ||
| + | let Meeting_Date = inputConfig[' | ||
| + | let Meeting_Title = inputConfig[' | ||
| + | let Agenda_Deadline = inputConfig[' | ||
| + | let Email_Body_Field = " | ||
| + | let Email_Status_field = " | ||
| + | let displayText = " | ||
| + | let currentDate = new Date(); | ||
| + | let Overdue_HTML = `<span style=" | ||
| + | let email=null; | ||
| + | |||
| + | let BoardMembersTable = base.getTable(" | ||
| + | let memberRecord = await BoardMembersTable.selectRecordAsync(Member_Rec_ID); | ||
| + | if (memberRecord) { | ||
| + | email = memberRecord.getCellValue(" | ||
| + | Member_Name = memberRecord.getCellValue(" | ||
| + | Member_Full_Name = memberRecord.getCellValue(" | ||
| + | console.log(`Email: | ||
| + | console.log(`Nickname0: | ||
| + | console.log(`Full Name: ${Member_Full_Name}`); | ||
| + | } | ||
| + | else { | ||
| + | console.log(" | ||
| + | } | ||
| + | let MembersTable = base.getTable(" | ||
| + | let officersView = MembersTable.getView(" | ||
| + | |||
| + | // Query the records from the " | ||
| + | let query = await officersView.selectRecordsAsync({ | ||
| + | fields: [" | ||
| + | |||
| + | // Initialize a variable to hold the secretary' | ||
| + | let secretaryEmail = null; | ||
| + | let secretaryName = null; | ||
| + | |||
| + | for (let record of query.records) { | ||
| + | let roles = record.getCellValue(" | ||
| + | |||
| + | if (roles && roles.includes(" | ||
| + | // Get the value of the " | ||
| + | secretaryEmail = record.getCellValue(" | ||
| + | secretaryName = record.getCellValue(" | ||
| + | console.log(`secretaryEmail: | ||
| + | console.log(`secretaryName: | ||
| + | break; // Stop searching once we've found the record | ||
| + | } | ||
| + | } | ||
| + | console.log(`Meeting_Date: | ||
| + | |||
| + | Body_Template = Body_Template.replace(" | ||
| + | Body_Template = Body_Template.replace(" | ||
| + | Body_Template = Body_Template.replace(" | ||
| + | Body_Template = Body_Template.replace(" | ||
| + | Body_Template = Body_Template.replace(" | ||
| + | Body_Template = Body_Template.replace(/ | ||
| + | Body_Template = Body_Template.replace(" | ||
| + | |||
| + | // Get a reference to the " | ||
| + | let ItemsTable = base.getTable(" | ||
| + | let ItemsView = ItemsTable.getView(" | ||
| + | |||
| + | let Itemquery = await ItemsView.selectRecordsAsync({ | ||
| + | fields: [ " | ||
| + | |||
| + | // Initialize a variable to hold the secretary' | ||
| + | let ItemName = null; | ||
| + | let ItemTitle = null; | ||
| + | let ItemPresenter = null; | ||
| + | let ItemEditForm = null; | ||
| + | let ItemCount=0; | ||
| + | let Agenda_Label = null | ||
| + | let Agenda_List = "< | ||
| + | |||
| + | for (let Itemrecord of Itemquery.records) { | ||
| + | let Meeting = Itemrecord.getCellValue(" | ||
| + | console.log(Meeting + " : " + Meeting_Title) | ||
| + | ItemCount++; | ||
| + | |||
| + | if (Meeting && Meeting==Meeting_Title) { | ||
| + | console.log(Agenda_Label); | ||
| + | |||
| + | ItemTitle = Itemrecord.getCellValue(" | ||
| + | ItemPresenter = Itemrecord.getCellValue(" | ||
| + | ItemEditForm = Itemrecord.getCellValue(" | ||
| + | Agenda_List = Agenda_List + `< | ||
| + | } | ||
| + | |||
| + | } | ||
| + | Agenda_List = Agenda_List + "</ | ||
| + | Body_Template = Body_Template.replace(" | ||
| + | |||
| + | // Get Task list | ||
| + | let WorkListTable = base.getTable(" | ||
| + | let BoardMeetingTasksView = WorkListTable.getView(" | ||
| + | |||
| + | let WorkListquery = await BoardMeetingTasksView.selectRecordsAsync({ | ||
| + | |||
| + | let Work_List = "< | ||
| + | |||
| + | for (let WorkListrecord of WorkListquery.records) { | ||
| + | let Assignees = WorkListrecord.getCellValue(" | ||
| + | | ||
| + | if (Assignees) { | ||
| + | for (let assignee of Assignees) { | ||
| + | console.log(assignee.name + "," | ||
| + | | ||
| + | if (assignee.name == Member_Full_Name) { | ||
| + | let TaskTitle = WorkListrecord.getCellValue(" | ||
| + | let WorkListForm = WorkListrecord.getCellValue(" | ||
| + | let Due_Date = WorkListrecord.getCellValue(" | ||
| + | let dueDateObj = new Date(Due_Date); | ||
| + | let Overdue_CD = ""; | ||
| + | if (dueDateObj < currentDate) { | ||
| + | Overdue_CD = Overdue_HTML; | ||
| + | } | ||
| + | Work_List = Work_List + `< | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | Work_List | ||
| + | Body_Template = Body_Template.replace(" | ||
| + | |||
| + | |||
| + | let newstatus=" | ||
| + | |||
| + | console.log(Body_Template); | ||
| + | |||
| + | await Email_table.updateRecordAsync(Email_Rec_ID, | ||
| + | [Email_Body_Field]: | ||
| + | [Email_Status_field]: | ||
| + | }); | ||
| + | |||
| + | await unselectOption(Board_Meeting_Rec_ID, | ||
| + | |||
| + | |||
| + | async function unselectOption(recordId, | ||
| + | // Get the table and record | ||
| + | let table = base.getTable(tableName); | ||
| + | |||
| + | // Get the record' | ||
| + | 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]: | ||
| + | }); | ||
| + | |||
| + | console.log(`Unselected option ' | ||
| + | } | ||
| + | |||
| + | </ | ||
