Challenge Overview
We have previously launched a contest (http://community.topcoder.com/tc?module=ProjectDetail&pj=30046527) to create a chrome extension to submit the Google Calendar Event data to a webservice. Now we want to make changes to the design.
This Chrome Extension will be used by users to send Google Calendar events and extended details to a third party CRM system via a web service call. It will also capture additional metadata about an event and log it to the Calendar API using extendedProperties (private).
Here is detail of how the extension should be built:
-
Upon clicking on the extension's button in the browser taskbar, display a grid view of the user’s calendar events. Calendar event information should be obtained using a the Google Calendar v3 API’s synchronization capability. Store the calendar details locally in Chrome local storage, and perform only incremental updates to pull changes.
-
Provide the user with options to update the view of his/her calendar to display one day, four days, one week, or agenda.
-
The user should be able to page forward and back in the calendar grid view, and there should be a “Today” button to return to the current date.
-
If a user hovers over an event in the grid view, provide a dialog box allowing the user to submit / resubmit to CRM. This should only appear when the user running the tool is the event organizer. (It should not appear for events where the current user is an invited attendee.)
-
On any event which has been submitted to CRM, display an icon.
-
If the event has not changed since submission, show a checkmark.
-
If the event has changed since submission, show a refresh icon.
-
If the event has never been submitted, no icon should be shown.
Sample UI:
-
CRM additional metadata prompt (during initial submission only):
-
On initial submit of a calendar event to CRM, display a popup asking for three extended attributes. These are:
CRM Category
This should be a picklist with a few options, as set in a config file. The selection should default to the first value in the list (cannot be null / empty).
Priority Service
This should be a picklist with a few options, as set in a config file. The selection should default to the first value in the list (cannot be null / empty).
Main Contact
This is based upon the attendee list of the event, detailed below. -
Main Contact picklist:
There should be a “home domain” variable set within a config file. Only those event attendees with email addresses outside of “home domain” should be listed here.-
If there are zero attendees outside of “home domain”, hide this field.
-
If there is one attendee outside of “home domain”, display this field as read-only with that attendee pre-populated.
-
If there are multiple attendees outside of “home domain”, display an editable picklist.
-
-
Main Contact Example (assumes home domain is set to topcoder.com):
-
Event is owned by mary@topcoder.com, with an attendee of user@topcoder.com. Do not display this picklist.
-
Event is owned by mary@topcoder.com, with attendees of user@topcoder.com and user1@domain1.com. This should display a read-only field with user1@domain1.com pre-populated.
-
Event is owned by mary@topcoder.com, with attendees of user@topcoder.com, user1@domain1.com, and user2@domain2.com. This should dispaly a picklist prompting the user to choose either user1@domain1.com or user2@domain2.com.
-
Submit to CRM:
-
Submit to CRM will POST a JSON message containing Event object (from the Calendar v3 API) and the CRM specific attributes. POST URL will be configured in the config file.
-
The POST will return an activity ID upon successful submission.
-
After successful submit, using the Google Calendar v3 API, save CRM information the event’s extendedProperties.shared object. This should include all three CRM attributes and also the activity ID which is returned from the web service.
Resubmit to CRM:
-
Resubmit will POST a JSON message containing changed information in the Event object. The CRM attributes and activity ID will remain the same.
-
If the user is currently editing the event (based upon current browser URL), wait until the URL changes and then POST the message.
Additional requirements:
-
This Extension may not scrap the DOM of a Google Calendar event in any way. You may use the event ID from the URL parameter and query Google Calendar v3 API for all additional details.
-
Use the Chrome.Identity API to provide OAuth authorization to the Google Calendar v3 API.
Final Submission Guidelines
Submission Deliverable
* Updated Source Code
* Deployment Guide with Detailed Verification Steps