diff --git a/ImplementationMasterContactList/ImplementationMasterContactList_ContactPopUp_gs b/ImplementationMasterContactList/ImplementationMasterContactList_ContactPopUp_gs
new file mode 100644
index 0000000..bfb7475
--- /dev/null
+++ b/ImplementationMasterContactList/ImplementationMasterContactList_ContactPopUp_gs
@@ -0,0 +1,139 @@
+function onOpen() {
+ const ui = SpreadsheetApp.getUi();
+ ui.createMenu('Contact Tools')
+ .addItem('Show Consolidated Contact Info (Exit Views and Filters Before Selecting)', 'showContactInfo')
+ .addItem("Create targeted email list", "openDialog")
+ .addToUi();
+}
+
+function showContactInfo() {
+ const ui = SpreadsheetApp.getUi();
+ const range = SpreadsheetApp.getActiveSpreadsheet().getActiveRange();
+
+ // Ensure exactly one cell is selected in column C
+ if (range.getNumColumns() === 1 && range.getNumRows() === 1 && range.getColumn() === 3) { // Column C is index 2
+ const contactName = range.getCell(1, 1).getValue(); // Get value from column C
+
+ const contactInfo = getContactInfo(contactName);
+ const htmlOutput = HtmlService.createHtmlOutput(`
+
+
+ Contact Information for ${contactName}
+ ${contactInfo}
+
+ `)
+ .setWidth(800)
+ .setHeight(700);
+
+ ui.showModalDialog(htmlOutput, `Contact Information for ${contactName}`);
+ } else {
+ ui.alert('Please select a single cell in column C.');
+ }
+}
+
+function getContactInfo(contactName) {
+ const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('All_Contacts'); // Replace with your actual sheet name
+ if (!sheet) {
+ SpreadsheetApp.getUi().alert('The sheet named "All_Contacts" was not found. Please check the sheet name.');
+ return 'Sheet not found.';
+ }
+ const data = sheet.getDataRange().getValues();
+ const headers = data[1]; // Headers are in the second row (index 1)
+ const result = {};
+ const roleYearMap = new Map(); // To keep track of roles with combined years
+
+ // Initialize a result object for the specific columns we are interested in
+ const columnsToInclude = [0, 1, 5, 6, 7, 8, 12]; // Removed 'Assessment Solution' column and retained other necessary columns
+
+ columnsToInclude.forEach(index => {
+ result[headers[index]] = new Map(); // Use a Map to maintain the original value and its lowercased version
+ });
+
+ // Iterate through the rows, starting from the third row to skip headers
+ for (let i = 2; i < data.length; i++) { // Data starts from row 3 (index 2)
+ if (data[i][2] === contactName) { // Column C is index 2
+ for (const index of columnsToInclude) {
+ const header = headers[index];
+ let value = data[i][index];
+ if (value !== undefined && value !== null) {
+ // Ensure value is a string for trimming and comparison
+ value = String(value).trim();
+ const normalizedValue = value.toLowerCase(); // Normalize for comparison
+ if (!result[header].has(normalizedValue)) { // Check if the lowercased value is already stored
+ result[header].set(normalizedValue, value); // Store both the lowercased key and original value
+ }
+ }
+ }
+ // Collect roles separately and combine roles with multiple years
+ const role = data[i][3]; // Column D is index 3
+ const year = data[i][10]; // Column K is index 10
+ const assessmentSolution = data[i][1]; // Column B is index 1
+ if (role && year && assessmentSolution) {
+ const roleKey = `${role} in ${assessmentSolution}`;
+ if (!roleYearMap.has(roleKey)) {
+ roleYearMap.set(roleKey, new Set());
+ }
+ roleYearMap.get(roleKey).add(year);
+ }
+ }
+ }
+
+ // Format the roles into strings with combined years
+ let roles = [];
+ roleYearMap.forEach((years, roleKey) => {
+ const combinedYears = Array.from(years).sort().join(' and ');
+ roles.push(`- ${roleKey} in ${combinedYears}
`);
+ });
+
+ // Format the result object into a string for display with extra spacing
+ let formattedResult = '';
+
+ // Adding roles section if available with banding for visibility
+ if (roles.length > 0) {
+ formattedResult += `Roles:
`;
+ formattedResult += roles.join('') + '
';
+ }
+
+ // Adding other contact information
+ for (const [key, values] of Object.entries(result)) {
+ if (values.size > 0 && key !== 'Assessment Solution') { // Skip 'Assessment Solution' key
+ const uniqueValues = Array.from(values.values()); // Retrieve the original values from the Map
+ formattedResult += `${key}: ${uniqueValues.join(', ')}
`;
+ }
+ }
+
+ return formattedResult || 'No contact found.';
+}