Challenge Overview
Project Overview
Our partner is developing a state-of-the-art tablet based sales and order processing tool. Their sales team will be managing client visits, tasks, calendars, notifications, and order processing all through this tool. The platform is the Apple iPad. Want to learn Swift? Great - why not get paid for it, we need your help! There will be a long series of challenges over the coming weeks leading to the final product, so get involved now!
Setup
In order to obtain the code source to modify for this challenge, you will need to be added to the UNI-Mobile github repository. Make a request for access in the forums.
This contest will not require you to do any direct work with the Salesforce Mobile SDK, but it is a required element of the overall application. As such you will need to be able to login to Salesforce the first time you run the application in order to access the other components of the application. The credentials are as follows:
-
Username
-
Password
-
newuser@123
-
Again, you will not be required to utilize the Salesforce Mobile SDK for any of the customization you are doing in this challenge. But the application leverages it, so logging in is essential.
This contest will require you to hook into the AccountViewController’s Fit Session checklist item button. To get to the Account screen, you will need to log into Salesforce with the provided credentials. This will take you to the Homepage, which has a Calendar. There should be a Meeting (EventsTableViewCell) in that calendar. When you tap on that it will expand, and tapping the Person Icon will take you to the Account Screen.
Contest Requirements
For this contest you will be implementing the Wearer Execute section of the application. In the actual usage scenario, this will be navigated to from the Fit Session Set Up screen, but as that is a work in progress, please implement it from the AccountViewController as described above. When the “Fit Session” button is pressed display this window as a ModalViewController.
This screen is composed of 4 primary components - The Header, The Footer, The Sidebar, and the Primary Content Area. These will be described below.
Please also modify the structure of the Data Model such that all objects used in this section can be persisted offline with CoreData.
If this View is accessed from the same account after being dismissed, it should retrieve all offline stored data to display to the user once more.
Detailed Requirements
The Header
This header is composed of three areas.
-
The Title, which should display “FIT SESSION” followed by the name of the Account this is associated with italicized below.
-
The Wearer Search Filter
-
As this is typed into, hide wearers from the sidebar whose First AND Last name do not match the search string the user inputs.
-
The keyboard for this text box should not have an active Search button, as all comparisons will be done locally.
-
-
The “+ New Note” button
-
This button should display an additional Modal over top of it, that can be closed. At a later point this will display the New Note form from the Account screen.
-
The Footer
Just a button that says “Save & Exit”. When tapped, close the modal window.
The Sidebar
This is a scrollable and modifiable section of the screen. It should have the following behaviors
-
“+ New Department”
-
Display a Modal Window over this that can be closed.
-
Create a new Department with a random name and a random set of Products and insert it to the Fit Session’s collection of Departments.
-
-
Department Section
-
Header
-
Displays Name and an Edit Button
-
When Edit Button is tapped display a Modal Window over this one that can be closed. Modify the name of this department for when the user returns.
-
-
+ New Wearer
-
When Tapped, create a new instance of the Wearer Create/Edit Area and display it.
-
Highlight this cell as White Text on Red Background.
-
-
Wearer Cells
-
Should display First and Last Name of Wearers. Truncate with a ‘. . .’ if it would cause an overflow.
-
If Wearer is confirmed, display a checkbox in this cell.
-
When tapped highlight as white text on red background.
-
Display the Wearer Edit Area with all fields and Order Items properly populated with the existing data.
-
-
Default Content Area
When no wearer is selected by the user, the default screen should be displayed. This view is just a set of styled text instructing the user on how to make use of this interface. No interactions take place with this content area.
Wearer Create/Edit Area
This area is used for creating and editing the information for a Wearer. This section is composed of an AccordionViewController with 2 sections - Wearer Information and Order Information.
-
Wearer Information
-
Render using form components.
-
Fields (Where not present on the Wearer Model, add the field)
-
First Name
-
Last Name
-
Nametag
-
Employee#
-
Locker Bank
-
Locker #
-
Hired (Month + Year)
-
Position/Title
-
Email
-
Department
-
In Create: Pre-populate with the Department under which “+New Wearer” was tapped.
-
Possible Values: All Departments that are available to have Wearers under.
-
-
Gender (Radio Toggle)
-
Male
-
Female
-
-
Notes
-
-
Cancel
-
Close this content area and display the default content area without saving any changed fields.
-
-
Save
-
If New Wearer - Add new Wearer object with all values to the selected Department’s “wearers” array
-
If Editing Wearer - Modify the existing reference.
-
If Department changed, remove wearer from previous department, and add to the new Department’s wearers array.
-
-
Display the Default Content Area
-
De-activate the active Sidebar Cell.
-
-
-
Order Information
-
Wearer Confirmed
-
Corresponds to the confirmed field on the Wearer object.
-
-
Order Item Table View
-
Pre-populate with Order Items for each Product in the Department’s products field.
-
Order Item Table View Cell
-
Product Image
-
Display from imageLocalPath on Product object.
-
-
CI
-
Default to value of “defaultQuantity” field on Product
-
When tapped, display a continuous number roller from 0 - 10000, so the user can select the amount they would like.
-
-
Size
-
Label should be “Size” on productType “Shirt”
-
When tapped, display a roller that presents all OrderItemShirtSize values as an option.
-
Label should be “Waist” on productType “Pants”
-
When tapped, display a roller that presents numbers between 0 and 50 as options.
-
-
Show Embs
-
Display on all Products.
-
When Tapped, expand cell to display all Product embellishments as selectable options.
-
Change color to the Dark Blue, and change text to “Hide Embs”
-
-
When Option Selected, add Embellishment to Order Item’s “selectedEmbellishments”
-
When Option Deselected, remove from selectedEmbellishments
-
+ Emblem Placeholder
-
Display a Note Field and the keyboard for typing into it.
-
When user hits the return key create a new PlaceholderEmbellishment type that inherits from Embellishment, that only has a text field. Add this to the selectedEmbellishments.
-
When not editing provide an X button that the user can use to remove the PlaceholderEmbellishment from the selectedEmbelishments.
-
-
-
Cells should be able to be swiped to the left to display a delete button.
-
If Delete Button is pressed, remove that Order Item from the Wearer.
-
-
-
Select a Product to Add
-
When tapped display a roller.
-
Display all products in the Opportunity’s elligibleProducts.
-
When Selected, create a new Order Item with this Product and append it to the Order Item Table View above
-
-
As the first option of this list, have “Product Placeholder” as an option.
-
When selected, create a PlaceholderOrderItem (new type that inherits from Order Item) with 3 fields - Name, Quantity, and Notes.
-
-
As new objects are added, this entire window should scroll and adjust positioning of this selecter as well as the cancel and save buttons.
-
-
Cancel
-
Close this content area and display the default content area without saving any changed fields.
-
-
Save
-
If New Wearer - Add new Wearer object with all values to the selected Department’s “wearers” array
-
If Editing Wearer - Modify the referenced object with all changed values.
-
De-activate the active Sidebar Cell.
-
Display the Default Content Area.
-
-
-
General Guidelines
The Data Model objects referenced in this challenge should all be created in the Model subproject within the UNI Repository. If you have any questions, please ask in the forums, we will help you determine if additional objects not pre-built may be necessary.
“?” icons will trigger tooltips (style defined previously) with two sentences of lorem ipsum (to be edited later).
For this challenge if you would like to pull in third party form generation frameworks, that is allowable in order to satisfy any requirements asking for ease of configuration or reusability. If you do incorporate 3rd party frameworks for the construction of these forms, please ensure that these frameworks are Open Source software, and are available with an MIT or similar distribution License. Code submissions that use 3rd party frameworks will be judged based on the ease of use and extensibility of those frameworks.
Environment Setup
GIT: The project will use a code repository at Github, please see additional details and participant responsibilities under Submission Guidelines.
Xcode: All code development should be done in Xcode 6.1 and tested in the simulator.
Framework: Code should be developed with the Cocoa Touch framework using Swift and must compile against iOS SDK 8.0 with a deployment target of iOS 7.0.
Get Started
- Request access to the project in the challenge forums
- Fork this project: git@github.com:cloudspokes/UNI-mobile.git
- Checkout this branch: https://github.com/cloudspokes/UNI-mobile/tree/fit-session-execute-ui
- Write and submit your code as a zip file
Final Submission Guidelines
Submission Guidelines
Submission Guidelines
- Cocoa Touch framework Xcode 6.1 project with well commented code
- Code must compile against iOS SDK 8.0 with a deployment target of iOS 7.0
- Upload all source projects as a zip
- After submission phase has completed, make a pull request targeting this branch
- Provide documentation of any special configuration required to run your code.
GIT Guidelines and Requirements
All code for this project will be maintained at Github. Challenge participants will have to request read-only access to the repository during the challenge and are expected to fork and do their coding on the challenge branch. Once contest submission closes, the project owner will update the code in the challenge branch to reflect the current state of development. The winner of the challenge will then be required to update their fork to the current state of the development repository and will be responsible for handling merge conflicts when updating their fork. They will then create a pull request.