Key Information

Register
Submit
The challenge is finished.

Challenge Overview

We launched  Challenge to bug fix for Pipeline VF page and this is series 2 challenge based on previous code.We are facing issues with our current design which is using custom setting(Pipeline Setting) to control the datatable behaviour . We have decided to scale it to the next level and for that we are going to use 2 objects instead of custom setting** . Details are as below:

 

*Pipeline VF Page

 


 

**Pipeline Settings Custom setting [to be removed]


 

 

*** Pipeline User Access Custom Setting [to be removed]

 

 

****Example Header and Pipeline fields  Records

 


 

1)Pipeline_Header__c    (unique)

   

   i)  Name          text →(A) This will be the picklist value on the screen labeled “Field Group Name” and will be unique.so create a validation rule for that.Notice that in old design we are storing group name in comma separated way[MA Pipeline, Incomplete, Renewal] but we want to get rid of this ( 2) .So each picklist value will be a unique header reacord.Eg: ‘MA Pipeline’.(1)

  ii)Type__c     picklist(Sales,PT,Pilates)   →(B)  This field is to identify if the logged in user has access to the header record based on comparison with Pipeline_Access__c field in user object.  A user has access only to the pipeline header records that match his Pipeline_Access__c value.  Users should see all header picklist values if “All” is selected in their Pipeline_Access__c field.  They should see no values, if there is no value selected.

[Note: Make sure you will remove all usage of Pipeline User access (4) Custom setting from code as that will be no longer required when we will add comparison between Header Type and User Pipeline_Access__c  field value.]

   iii)Object_Name__c   picklist(Opportunity,Voucher_Pipeline__c) →(C)  this is the api name of the object from which records will be fetched. Eg: Opportunity.  This is what you should use in the FROM part of your query.

   iv)Club_Field_Name__c            text(128)  →(D)  This will be the api name of a field that represents a lookup to the “Club__c” object.  If this field is empty, ignore it.  If it is populated, add a where clause to compare the field provided with the Home Club of the logged in user (SELECT Home_Club__c FROM Contact where User__c = :LoggedInUserId)

   v)Filter__c   Text(255) →(E)    This will be added as is to the where clause.  You can assume that the user will enter something syntactically correct.  If they do not, expect the Pipeline page to handle the error gracefully indicating there was a problem with the query. Eg:  stage = ‘met’ and Probability > 50%



 

2)Pipeline_Field__c  

 

*Pipeline field record will be created under each header to hold column properties for each header.See Highlighted( 3 ). Each custom setting record name will be pipeline field name.All properties of that field will be stored in this record.

i)Name    Text → (F) Column label name.

ii)Field_Name__c    text(128) → (G)  Field api name  .eg: AccountId

iii) Column_Width__c   Number(18, 0)  → (H)   Each column in table should take width from this field value. Eg:20

iv)Column_Order__c     Number(18, 0)   →  (I) order of horizontal column .Eg: 1

v)Field_Sort_Order__c  Number(2, 0)  → (J) This is the default sort order.  if empty, ignore it but if a value, then sort by fields in the numerical order.

vi) Is_Display__c   Checkbox → (K) To activate/deactivate a column.if checked then only field will be displayed.

vii)Is_Descending__c   Checkbox →  (L) To determine default sort order of any field.will be ASC by default.if checked then DESC.

viii) Pipeline_Header__c     Master-Detail(Pipeline Header)  → each header can have multiple column so pipeline field record will be created for that.  



 

How to Start?

 

1) Download Source File and Deploy Pipeline(VF page), it’s Controller PipelineController , dependent objects and resources.Make sure you are not deploying all objects and resources at a time to avoid unexpected error.you should deploy only dependent objects and resources.

2) Deploy 2 objects → i)Pipeline_Header__c  ii)Pipeline_Field__c

3) Use CSV  file to load data in pipeline settings custom setting. Copy records from custom setting and create header and Field Record so that it looks same after your enhancement.

4)Create a Header Record with Name ‘MA Pipeline’ as per screenshot. Load field records under it from FieldCSV . make sure you modify the header Id in csv file before load as per your org record.Try adding more header and fields record in same way.

 

Requirement Specification

 

 1)You are expected to deploy given source zip  file in a fresh Developer Org to start work.

 2)After successful deployment remove usage of custom settings(Pipeline User Access   and  pipeline settings) and use 2 given objects(Pipeline_Header__c  and Pipeline_Field__c) in code .Make sure all functionality works after this enhancement.

 3) Once you remove all usage of Custom settings(Pipeline User Access   and  pipeline settings) make sure you delete them before creating your final package.we are no longer using those custom settings.

 4) Table columns squish when there are less number of columns (6 or 7).Some time on page load(first time) columns squish . fix these UI issues.

 5)Rendering table panel on change of group piclist  taking longer time(7-8 seconds) and rendering opportunity detail also taking almost 6 seconds time  .scale code to reduce time cost.

 6)Make sure all existing functionality works fine after this enhancement.We are open for good ideas so feel free to ask question in forum if you have any resolution .

 








 



Final Submission Guidelines

1)  Include your source and package.xml.  In addition, we recommend you also provide an unmanaged package to facilitate installation of your solution.Test coverage should be >90% .

2)  Include a video showing your solution in action.  If English is your second language feel free to annotate your video rather than narrate it.   A video walk-through of your code is nice but not required.

3)  Provide detailed documentation of your solution.  Include installation and setup instructions.

4)  Also you may choose to provide the login and password to your dev org.   This is not required but will only help you in the judging if you omit something in your package the and judges have difficulty installing.   If you do this you should also install Ray Dehler’s “Enable All Trusted IP ranges” so we don’t have to ask your for the activation code.

5) Your solution should works in all popular browsers like IE,Chrome,Firefox,Safari etc.

ELIGIBLE EVENTS:

2014 TopCoder(R) Open

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30043596