CloudSpokes

Technologies

Overview

Develop an interactive map representing global sales from Salesforce using Google Maps. See mockup in the Assets section.

Challenge Requirements

Create a Visualforce page that displays sales data on a Google map. Initially display the map for the entire United States. The user will then be able to enter a Country (required), State/Province and City to narrow the addresses that are displayed on the map.
 
Users will be able to filter the results displayed by:
 
1. Project size: a slider from 0 - 250+
2. Year: a beginning and end year
3. Type: any combination of the three types
 
There could be multiple sales at the same physical address but the search should return a resultset of distinct addresses that are plotted on the map. When the user clicks on a pin it will populate the right pane with all of the sales for that location. Selecting an individual sales from the right pane will open that record in a new window displaying.
 
For a list of countries to display in the picklist, install the AddressTools package from the AppExchange.
 
For demo purposes, only show sample data for US, Germany and Japan. If you need to geocode records in Salesforce, you can either do so manually or use the results of our SimpleGeo Geolocation Toolkit.
 
The query for sales data is dependent upon the country being searched. The US uses a “Sales Order” custom object while Germany and Japan use the Opportunity object. We want to make the search dynamic so if more countries are added it will be easy to configure where the data comes from. Add a “Search_Opportunities__c” (boolean) field to the country object in from the AddressTools package. When the user selects a search country, check the value of “Search_Opportunities__c” to determine what object to search. You might want to consider implementing some sort of common wrapper object to populate that holds Sales Order or Opportunity data. Here are the fields that you will need:
 
Opportunity
Size field = Size__c  : Number(18,2)
Year  = CloseDate  : standard field
Type = Type ( picklist )  : standard field
Address : BillingAddress fields on related Account (standard fields)
 
Sales Order (new custom object)
Size = Size__c  : Number(18,2)
Year  = Delivery_Date__c  : Date type
Type = Type__c   : Picklist field
Country__c : Text field ( size 255 ) 
State__c : Text field ( size 255 ) 
City__c : Text field  ( size 255 ) 
ZipCode__c : Text field  ( size 15 )
Street__c : Text field ( size 255 ) 
 
 
Must have adequate test coverage (90%+).

Submission Details

Upload all your source code as a zip (you can simply zip up your Eclipse project for convenience) and provide any documentation and/or instructions that are needed. Please be clear and concise with any setup instructions.
 
An SWF video of your application using Jing or Youtube is required. A unmanaged package would also be appreciated but not required.

Your submission will be judged by a panel of peers based upon this criteria.



Discussion

sgurumurthy

Few points: 1. SimpleGeo Geolocation supports only US addresses. Is it okay if we use the Google Geolocation instead? 2. AddressTools is a paid app with 14 days fee trial. For demo purpose can the countries be hardcoded? 3. The custom object Sales Order definition provided does not have AccountName field for display in the sale list. We should add this. 4. What should happen on selection of an individual sale? - The sentence specifying this is incomplete. Please clarify.

sgurumurthy, Dec. 25, 2011 at 01:08 PM   Reply
 
Jeffdonthemic

Shashi, spoke with the challenge owner. 1. Sure.. no problem. 2. Yes 3. Yes, please add this as it is on the Sales Order object 4. Here's the sentence referred to: "Selecting an individual sales from the right pane will open that record in a new window displaying." Let me know if you have any more questions. Thanks!

Jeffdonthemic, Dec. 27, 2011 at 02:04 PM
 
ChrisBland

I'm getting an Access Denied error trying to load the mockup screenshot. For google Maps, is there an API token that we should use or should we spin up a free one for use with this? Should we store the token in a custom setting or how will the end user load their API token?

ChrisBland, Dec. 27, 2011 at 04:27 PM   Reply
 
Jeffdonthemic

Chris, try it again now. I reset the permissions.

Jeffdonthemic, Dec. 27, 2011 at 04:36 PM
 
avidev9

@jeff what are the information that are required to be displayed in the right pane? and also on the detail window?

avidev9, Dec. 29, 2011 at 04:39 PM   Reply
 
Jeffdonthemic

No specified but I think the mockup shows the name, year, size and type. That should be good.

Jeffdonthemic, Dec. 29, 2011 at 08:28 PM
 
avidev9

@jeff what will happen if user doesn't select any of the Type check boxes?

avidev9, Dec. 30, 2011 at 07:13 PM   Reply
 
Jeffdonthemic

Let's assume that they will be required to select at least one. Just put that assumption in your documentation. Thanks!

Jeffdonthemic, Dec. 30, 2011 at 07:21 PM
 
avidev9

@jeff The mockup shows the Country field as text field and the description says that it should be picklist. Can we assume it to be picklist as with values 'US','Germany','Japan'?

avidev9, Jan. 05, 2012 at 03:24 PM   Reply
 
Jeffdonthemic

Yes! I would say that is safe to assume.

Jeffdonthemic, Jan. 05, 2012 at 03:48 PM
 
Kenji776

Address tools has lists for states, could/should that be made into a dependent picklist based on the country selected?

Kenji776, Jan. 06, 2012 at 04:29 AM   Reply
 
Jeffdonthemic

I don't see why not. Just make sure you mention that in your docs. Thanks!!

Jeffdonthemic, Jan. 06, 2012 at 12:33 PM
 
Kenji776

I'm assuming since the type__c is a picklist on the back end, but a checkbox on the front end, you want it made into an OR select statement? Find any opp/salesOrder where the type is in the list of checked ones right?

Kenji776, Jan. 07, 2012 at 03:53 AM   Reply
 
Kenji776

Also, since this package may require address tools, it may be hard to make a package out of it. I don't' think you can include another package as part of your own, especially when it's a for pay app. Anyone know if it's cool to just include the object definitions? Otherwise this looks like it will be a pretty light weight app, a package may not be required. Thoughts?

Kenji776, Jan. 07, 2012 at 04:21 AM   Reply
 

The discussion board is closed for this challenge.