Challenge Overview

Topcoder is helping a client develop an internal crowdsourcing solution -- CrowdExchange.  Publishers in this community will create Stories and Activities in the system which represent software development tasks which need to be completed.  Members, the software developers, will log into the system, search to find activities they are interested in, and register to complete the tasks.  After registering, a Member will submit zip files containing their submissions and the Publishers will review and score the work completed.  In some ways, this community will work very much like Topcoder itself. 

In previous challenges, we've laid a lot of the groundwork for this application.  We've developed Apex-based services for creating and maintaining Stories and Activities.  We've also developed workflow code to manage the lifecycle of a task as it moves to completion.  And last, but certainly not least, our topcoder design and prototype community has produced a very appealing design and web site for this application.  Now, we're going to put all the pieces together and a create a Salesforce.com Community Site by taking the given designs and implementing the functionality captured in the html pages.  You will be using Javascript, Visualforce and Apex to tie the current prototype to the Force.com platform.

In this challenge you are responsible for implementing the following html pages in Visualforce/Apex:

1. member-stories.html 
2. member-story-details.html
3. publisher-stories.html
4. publisher-story-details.html
5. publisher-create-story-step1.html
6. publisher-create-story-step2.html
7. publisher-create-story-step3.html
8. publisher-add-activity.html
9. publisher-activity-details-assign-register.html
10. publisher-activity-details-competition-review.html


Notes:

Members and Publishers are going to be identified by a field on the User Object:  Crowd_Exchange_User_Type__c.  The values here will be: None, Member, or Publisher.  There will be Permission Sets associated with each of the user types.

Our milestones and Activity Statuses have been updated since these html prototypes where prepared.   We now have the following milestones:

Publish Date -- date that activity is made public and is visible to members and other publishers on the site.
Start Date -- date that activity is available for registration
Registration Date -- due date for member registration
Assignment Date -- due date for publisher to assign a registered member to activity
Submission Date -- due date for assigned member to submit code 
Review Date -- due date for publisher to review submission
Acceptance Date -- date the publisher accepts submission
End Date -- date the activity is either completed or canceled.

The milestones are displayed as the "Timeline" on our Activity detail and creation screens. A script is attached to insert the milestones into the milestone table -- milestones.txt.  In addition to a few new milestones, there is some logic in how the milestones are displayed in the system.  Not all the milestones will be shown/displayed on every page.  We don't want users to be overwhelmed by entering dates for the milestones that are basically system determined.  There is a flag on the milestone table -- Display_In_Initial_Setup__c -- which will determine if a particular milestone is visible.  There are also default time durations with each milestone so we can publish default dates in the system and estimate when the activity workflow will complete.  This should save users some keystrokes when updating dates in the system.  A flow diagram is attached which outlines the workflow of the system in graphical form.

All pages - You should implement the header and footer of each page as common components that can be included in all the pages listed below but the links to the Dashboard, Help, Search, Notifications, and Profile as well as the footer links can be dead links for now since those pages haven't been created yet.

member-stories/publisher-stories
1. These two pages can be implemented as one page in Visualforce.  All members and all publishers in the system can see all the stories/activities in the system that are not in draft status.  
2.  The text/field "Stage" should be relabelled "Phase".  This maps to the Activity__c.Status__c field.  
3.  Please implement filtering functionality on the page.

member-activity-details-assigned.html
1.  Do not implement the "Submit" button which will allow members to submit code to the application.  We'll implement this in subsequent challenges.  
2.  We need to add an entry to the "Importance" key which shows the weight of each requirement with an associated color image.  We actually are going to have 4 importance weightings - Critical, High, Normal, and Low.
3.  You should implement the Activity Details, Registrants, and Chatter tabs of the Activity detail pages.  The submission tab will be implemented in a subsequent challenge.
4.  Members should be able to register for a challenge.  The creates an entry in the Registration__c table.

publisher-add-activity.html
1. Only milestones which have Display_In_Initial_Setup__c should be shown in the timeline. 
2. The text label "TimeLine" should be updated to "Timeline".  
3. The "Code Types" text should be updated to "Skills Requested".  Entries in the Skill Requested tags should result in records being inserted into the ActivitySkills table.  We have created a method to do this in the ActivityService class/interface.  
4. The "Add Activity via Copy" can be a dead link for now.  You do not need to implement this.

publisher-create-story-step2.html 
1. Only milestones which have Display_In_Initial_Setup__c should be shown in the timeline on this page. 
2. The text label "TimeLine" should be updated to "Timeline".  
3. The "Code Types" text should be updated to "Skills Requested".  Entries in the Skill Requested tags should result in records being inserted into the ActivitySkills table.  We have created a method to do this in the ActivityService class/interface.  
4. Dates should be defaulted in the Timeline date field using dates derived by taking the current date and adding the days based on the value in the Milestones.Default_Time_Period__c field for the particular milestone.

publisher-story-details.html
1. "Edit Activity" link should be disabled for publishers after the Submission Date deadline.  "Complete Activity" text should be changed to "Accept Submission".  
2. The "Accept Submission" link should be disabled until after all reviews are complete.  There is an Activity Status, "Review Complete", which corresponds to this state.  Clicking "Accept Submission" should change the status of the activity to "Complete" effectively closing an activity.   
3. On this page, all Activity Milestones should be shown regardless of the Milestone.Display_In_Initial_Setup__c flag.  
4. The label  "Time Line" should be updated to "Timeline".  
5. Do not implement the "Submissions" tab of publisher-story-details.html.  We'll implement that in a later challenge.  
6. We need to add an entry to the "Importance" key which shows the weight of each requirement.  We actually are going to have 4 importance weightings - Critical, High, Normal, and Low.
7. You should implement the Activity Details, Registrants, Recommended Members and Chatter tabs of the Activity detail pages.
8.  Recommended Members should provide a list of members based on matching the skills of the Activity with the skills of our Members.  This is a simple text search on Skill names between the ActivitySkills and UserSkills.
9.  Publishers should be able to see registrants and performing assignment by selecting one of the registered members for an activity.

 

 


 



Final Submission Guidelines

  • Your submission should be based on the data model and previously written code provided in the attached managed package link:  https://login.salesforce.com/packaging/installPackage.apexp?p0=04t1a000000VISe.  Further changes to the data model are allowed/expected as not every update in the UI may have been captured in the data model.  However, forum posts are strongly encouraged to discuss pros and cons of various schema configurations.  Please document your schema changes in the written documentation requested below.

  • You may submit your code either as an unmanaged package link or as metadata files for deployment by the Force.com Deployment tool.   Please include all necessary libraries and dependencies to build and run your code.  

  • Please submit written documentation for your submission.  Changes to the data model should be highlighted.

  • Please validate that all your tests run without errors.  You might need to include code which manages data dependencies with your tests.
     
  • There are several attachments to this challenge.  The protoype html code is included in the prototype.zip file along with text files to execute anonymous Apex to create milestones and some skills.  In addition, there is a workflow diagram which outlines the process flow for Activities. 

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30050736