Job Specification - Data Import
Job Specification - Data Import
By
Introduction
BASC Group, Inc. is comprised of mostly tech savvy, geeks and programmers. We are well versed in multiple
languages, platforms, hardware and technologies. Our unique ability, cultivated from decades of experience,
allows us to freakishly forecast future standards and behaviors so that we can develop software applications
that will be needed five years from now.
iTrainStation is one of those products which began development in 2006. It is an advanced online learning
platform that was built to transform itself based on each individual user who logs in. By embracing a mindset
of toggles, or switches, we are able to offer an infinite array of features and functionality simply based on the
value of a variable. Default values are established, then inherited downward as each sub user logs into the
portal. This allows us to tweak values to alter the user experience all the way down to the individual user. By
design, we wish to maintain this granular control as we continue to enhance the product while developing
new features and functionality.
In an effort to communicate as effectively as possible, this job specification is exhaustive. We’ve made a
gallant effort to provide you with as much information as possible throughout this document about the project
and iTrainStation as possible. It contains thought flows, snippets, wire frames, variable tables, data tables,
definitions, screen shots and more. It may appear overwhelming at first glance, but we are sure that you will
find the layout to be a great guide for the project itself as well as a valuable resource of information about
files and the data you will be working with.
And although we spend an exhaustive amount of time planning, sketching, rehearsing with flowcharts and
wireframes, we at times create gaping holes in thought. We apologize in advance if you should you find
yourself staring down into one of these gaping holes. As developers ourselves, we understand the
frustration this can cause a development team. We ask that you simply bring your findings to our attention
and allow us the opportunity to address it while the work is in progress, rather than at the conclusion of the
project.
We understand this may affect timelines, milestones and the time you’ve allotted to complete the project.
Without hesitation, we are fully aware that these changes to schedules and timelines come at a cost and are
well prepared to compensate any developer for any inconvenience these oversights may cause.
We hope you find your experience working with us to be enjoyable and rewarding. We look forward to
developing an ongoing working relationship. Communication will be essential for both parties to achieve that
goal. Therefore, please feel free to contact us at any time, for any reason, so that we can offer any assistance
you may need to complete the project with excellence.
Sincerely,
Sirirat Sriprom
President
- 2 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Table of Contents
Introduction 2
Table of Contents 3
Project Summary 6
Project Overview 6
In Scope 6
Out of Scope 6
Contacts 7
Design Standards 7
Navigation Standards 7
Header 7
Launch Pad 7
Action Bar 7
BreadCrumb Bar 8
Dialog Box 8
- 3 -
FINAL DOCUMENT - FOR RELEASE - 20190712
- 4 -
FINAL DOCUMENT - FOR RELEASE - 20190712
- 5 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Project Summary
Project Overview
-- Data Import of Simple Text, Considered Address Book Data
-- Perform Operations Based On New Data, Update Data, DeActivate Data
-- User Functionality To Map Data From Import File To iTrainStation Database
-- Allow User To ReUse File Locations, Mappings, Options Selected By Using Templates
-- Error Check and Format Data Before Writing To Database
-- User Functionality To Select Options To Be Stored With Import Data
-- Time Zone Selection
-- Date and Time Format Selections
-- Set Password, Groups, ReportsTo
-- Design UI/IX Screens Using Wireframes As A Guide
-- Designed UI/IX Screens Must Show Continuity With Existing Site
-- Import Must Be Able To Process Import File of 1M Records
-- Import Functionality Will Have Ability To Abort
-- Import Functionality Will Have Ability To Rollback
-- Summary Report of Import Results eMailed To User and iTrainStation Support
The current Import functionality is written in Eclipse. It will be the choice of the current developer to decide if
they would prefer to adopt this base of code or to decide if they would prefer to rebuild the functionality from
scratch. BASC Group will need to be informed of the decision, and the reason the developer made that
choice.
Should the developer choose to utilize the existing code, the project will need to be converted into a
Maven-based project. All dependencies including the BASCLib Java library, and any other items which are
currently linked in the WEB-INF/lib folder must be added as Maven dependencies in its POM. The project
should be developed within built the Jenkins build environment, and fully working on the production test
environment.
In Scope
We consider minor deviations from the scope of work to be considered as in-scope. Such examples are
items that require minimal time to consider, address and develop. As examples, failure to denote color, point
sizes, fonts, layout contingencies to be minor. These are considered simple adjustments and common during
development phases. Usually, these items consume less than one (1) half-hour of time to fix. Multiple items
that tally up to be over one (1) hour will be bundled together and considered as out-of-scope work.
Out of Scope
We consider major deviations from the scope of work to be considered as out-of-scope. Such examples are
more than a 50% rearrangement of a page layout, additional functionality beyond the scope of work,
additional database schemas, etc. They would be considered as items that would influence timelines and
would cause considerable delays.
- 6 -
FINAL DOCUMENT - FOR RELEASE - 20190712
When an out-of-scope situation arises, both BASC Group and the chosen developer would discuss and agree
on the best way to move forward in order to complete the original project. Out-of-scope work can be
accomplished by starting another project that is accomplished in parallel to the original project. The new
project would then be contracted out with a new and different set of milestones and compensation.
Contacts
All communication is to remain within the Upwork portal.
Justin Bridges - Project Manager
Waldyr Oliveira - Milestones Manager
Beau Hitt - Technical Development Manager
Design Standards
iTrainStation is currently between design standards. This presents an opportunity to a developer who has
the skill to offer design changes and improvements. The developer will need to submit a request to the
Project Manager and offer the suggested changes, including the languages to be used in the redesign.
While during the design changes, please refer to itrainstation.com to become familiar with the existing UI/UX
and design your pages to integrate well within the “improved” parts of the site wherein this project document
lacks direction.
Navigation Standards
Header
The header is stand alone functionality that is called from within the pages (via JSP Include file) designed by
the chosen developer. If changes are needed to be made to the header, they are to be brought to the
attention of the Development Manager for approval before design and/or implementation.
Launch Pad
The Launch Pad is stand alone functionality. Launch Pad behavior is contingent upon several factors related
to the user profile and/or company settings. If changes are needed to be made to the Launch Pad, they are
to be brought to the attention of the Development Manager for approval before design and/or
implementation.
Action Bar
The Action Bar is stand alone functionality that is called from within the pages designed by the chosen
developer. If changes are needed to be made to the Action Bar, they are to be brought to the attention of
the Development Manager for approval before design and/or implementation.
-- Action Bar Background Color: UI.getCustomColor(“ACTIONBACK”, <companyID>)
-- Action Bar Text Color: UI.getCustomColor(“ACTIONTEXT”, <companyID>)
- 7 -
FINAL DOCUMENT - FOR RELEASE - 20190712
BreadCrumb Bar
BreadCrumb Bar functionality may exist on pages and will be outlined within this document. When
implemented by the developer, it is required to follow the standard design established by BASC Group. The
behavior of the action bar is considered as a standardization. The variable data utilized in the design by the
developer is to be pulled from the data table.
-- Breadcrumb Trail Active Background Color: UI.getCustomColor(“BCRUMBACTIVE”, <companyID>)
-- Breadcrumb Trail InActive Background Color: UI.getCustomColor(“BCRUMBINACTIVE”, <companyID>)
-- Breadcrumb Trail Text Color: UI.getCustomColor(“BCRUMBTEXT”, <companyID>)
-- Breadcrumb Trail Completed Checkmark: UI.getCustomColor(“BCRUMBCOMP”, <companyID>)
-- Breadcrumb Trail InComplete Checkmark: UI.getCustomColor(“BCRUMBINCOMP”, <companyID>)
-- Active Item/Section Is Colored Using Completed Color Variable
-- Completed Item/Section Receives Green Check
-- InCompleted Item/Section Is Colored Using Incomplete Color Variable AND Grey Check
-- Upon Completion of Item/Section, Green Check Mark Appears And Allows For Advance
-- Ability to Go Back To A Completed Item/Section is Allowed
-- User Can Not Jump Ahead Without Completing Current Item/Section
Dialog Box
When prompting a user for an action or input, this box is used. The box is to be placed in the center of the
screen, contain padding on the inside of the box and always have the red X in the upper right hand corner
functioning as a cancel action.
-- Use for Dialog Box Background: UI.getCustomColor(“PAGEBACK”, <companyID>)
-- Use for Dialog Box Text: UI.getCustomColor(“PAGETEXT”, <companyID>)
-- Use for Dialog Box Borders: UI.getCustomColor(“TBLBORDER”, <companyID>)
- 8 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- First Name
-- Last Name
-- Company Name
-- City
-- State Force As Two (2) Letter Abbreviation
-- Country Code Force As Three (3) Letter Abbreviation Per API
-- Phone Number Stored As 10 Digit Numeric
-- Phone Number Displayed As (xxx) xxx-xxxx
-- Zip Code
Number Format
-- Stored In Database As Ten Format (xxxxxxxxxx)
-- Default Displayed As x,xx,xxx,xxx.xx
-- No Leading Zeros On Numeric Values
Currency Format
-- Stored In Database As Ten Plus Two Format (xxxxxxxxxx.xx)
-- Default Displayed As $ x,xxx,xxx.xx
-- No Leading Zeros On Numeric Values
Date and Time Formats
-- Stored In Database As: YYYY-MM-DD HH:MM:SS T-- Default Displayed As: MM/DD/YYYY xx:xx AM/PM (TZ)
-- 12-hour or 24-hour time display is determined by a user's MILITARYTIME toggle (if true, display 24-hour)
-- Leading Zeros Displayed On Military Time Formats
Table Formats
-- Header Row Height - 24pt
-- All Other Row Heights - 18pt
-- Column Center Border - 3pt
-- Center Divide Between Tables - 96pt
-- Use for Header Background Color:UI.getCustomColor(“TBLHEADER”, <companyID>)
-- Use for Header Text: UI.getCustomColor(“TBLHEADTEXT”, <companyID>)
-- Use for Table Borders: UI.getCustomColor(“TBLBORDER”, <companyID>)
-- Use Alternating Row Background 1: UI.getCustomColor(“TBLROWBG1”, <companyID>)
-- Use Alternating Row Background 2: UI.getCustomColor(“TBLROWBG2”, <companyID>)
-- Use All Row Text: UI.getCustomColor(“TBLROWTEXT”, <companyID>)
Button Class
-- Navigation / Forward / Back / Next / Previous / ChooseFile; Blue
Gradient Start: UI.getCustomBtnColor(“BTNCLR2START”,<companyID>);
Gradient End: UI.getCustomColor(“BTNCOLOR2END”,<companyID>);
-- Cancel / Delete / Undo; Red
Gradient Start: UI.getCustomBtnColor(“BTNCLR3START”,<companyID>);
Gradient End: UI.getCustomColor(“BTNCOLOR3END”,<companyID>);
-- Save / Submit; Green
Gradient Start: UI.getCustomBtnColor(“BTNCLR1START”,<companyID>);
- 9 -
FINAL DOCUMENT - FOR RELEASE - 20190712
- 10 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Data Tables
Schema: User Table
These are user mappable fields for incoming data during import.
Friendly Label Variable Name Stored Format Displayed Format
- 11 -
FINAL DOCUMENT - FOR RELEASE - 20190712
- 12 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Template Description: This table stores the available Fields that can be mapped in the User Import process
Field List:
ID (int) - Row ID, from the template_import table, of the main template
NAME (String) - Name of the Field to be mapped. (Example: First Name, Phone, Email)
DBFIELD (String) - Name of the field, in the user table, this field is mapped to (Example: FIRSTNAME, PHONE,
USER_NAME)
REQUIRED (boolean) - Is this a required field? If True, the User Import Tool should require this field
Data Fetching
Obtain User and Company Data
The User ID is passed to the User Import Servlet. The User ID is then used to get and/or set default values
and/or variables used to establish the colors, layout, skinning, etc. Please refer to the Java Library Methods
section of this document for the link to the library documentation website.
A BASC Developer will be happy to guide you to the appropriate methods to use, if they are not already
listed in the project specification.
- 13 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Java Library Methods
JavaDoc documentation will be provided for all available iTrainStation/BASCGroup methods contained within
our internal iTrainStation Java Library.
NOTE: When possible, use the provided Java Library for any/all functions. Any new functionality written for
this project should be created as methods to be included into the existing iTrainStation Java Library. A BASC
Group developer will include any/all new methods into the Library, when necessary, so they are available for
the project.
This documentation can be viewed at:
https://www.itrainstation.com/uXM8Y1i0L3/com/bascgroup/basclib/package-summary.html
Any external frameworks (e.g. Spring Boot) must be approved before development begins. Deployment
instructions for the project (Maven, Java) are to be provided upon final project delivery.
Source Code Commits
All source code must be continuously committed to Git and pushed to our remote repository:
git@bitbucket.org:bascdevelopment/userimport.git.
Builds should be triggered and deployed to iTrainStation development environments upon committing the
code to source control.
After project conversion, all components of the project must properly build, link, and perform as intended in a
testing and production environment.
The project can and should be deploying via our Jenkins Build server at https://build.itrainstation.com.
- 14 -
FINAL DOCUMENT - FOR RELEASE - 20190712
will be shown in the Screenshots section of this document, and provided as a reference to see the big
picture.
Although we have attempted to be as descriptive and as detailed as possible in providing guidance to the
developer during the development of this project, we are fully aware of our lack of ability in design. Please
feel free to exercise any expertise, advice, suggestions you would have that would ultimately improve upon
what we have suggested in this project specification.
Template Selection
-- System Templates Names Always Start With a Dot, and Always Appear At Top of List
-- Template List Default Sort Is On “Last Used” Column
-- Each Column is Sortable By Clicking on the Up/Down Carats For Each Column
-- Trash Can Invokes Delete Functions For That Particular Template
-- Deleted Templates Only Impact Current User, Shared Templates Remain In Tact
-- System Templates Can Not Be Replaced, Deleted or Shared
-- The system will assume that templates are the most commonly used function when importing data
-- Selection box filters based on text being typed into Template Name
-- While Predictive Search is Invoked, All Radio Dials Are Off For All Choices
- 15 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- Selection of Template Reveals Share and Go Buttons
Template Selected, Go Button Invoked
-- Ask User If Using The Same Filename/File Location Which is Stored In Template
-- If User Selects YES;
-- Check For File Not Found; If File Found; Perform Error Checks On File; Display File Metrics and Show
Import Button
- 16 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- Check For File Not Found; If Error, Display Message
-- If User Chooses To Browse, Open File Navigation and Treat As New Data File
-- If User Chooses To Cancel, Return User Back To Beginning of Template Selection
-- If User Selects NO; Open Up Explorer, Locate File
-- Filter Files CSV, XLS, XLSX
-- Force Explorer To Start In Downloads Folder
-- If User ESC’s File Navigation, Return Back To Template Selection Screen
-- If Returning With File; Perform Error Checks; Display File Metrics; Remove Share Button; Activate Import
Button; Utilize Mappings From File
- 17 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- Import Button Invoked Will Bring User To File Mapping Section
Incontext: Data File, Template Management
- 18 -
FINAL DOCUMENT - FOR RELEASE - 20190712
New Button Invoked
-- Open Up Explorer, Locate File
-- Force Explorer To Start In Downloads Folder
-- If User ESC’s File Navigation, Return Back To Template Selection Screen
-- If Returning With File; Perform Error Checks; Display File Metrics; Remove Share Button; Activate Import
Button
Error Check Records / File Metrics
-- Scan File For Number of Records
-- Confirm Import File Has At Least Three (3) Columns of Data
-- Utilize eMail Specifications From https://tinyurl.com/y46gb67n
-- Determine Field That Contains eMail Addresses; Scan for Null, Missing @ or dot
-- Confirm eMail Addresses Have “@” and “.com”, or “.net” or “.gov” or “.net”
-- If eMail is Invalid; Mark Records As Bad
-- Determine Field That Contains Last Name; Scan for Null; If Null, Mark As Bad
-- Determine Field That Contains First Name; Scan for Null; If Null, Mark As Bad
-- Determine Field That Contains Phone Numbers; Strip/Convert to Numeric String
-- If Phone is Invalid (Len < 10) or (Len > 11); Mark As Warning
-- Perform Analysis On Records, Fields To Locate FieldName With Highest Likelihood of Last Name and/or
FIrst Name. Header row maintain common label, scan for those common header
-- Search for “FName”, “First”, “FirstName”, “Name” in Header Row For First Name
-- Search for “LName”, “Last”, “LastName”, “Name” in Header Row For Last Name
-- First and Last Name Search String for AI Should Be Maintained In A Table For Easy AI Updates
-- When Import Button Is Invoked; Jump To Mapping Section
- 19 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Delete Template
-- User Invokes Delete By Clicking the Trash Can Icon
-- Template Is Removed From Users Profile, List, Etc
-- Template Remove DOES NOT Impact Anyone Who Received A Copy of Template
-- Template Remove Impacts Current User ONLY
-- Ask For Confirmation of Deleting of Template
-- Template Selection Box is Replaced By Display of Remove Dialogue Box
Template Selected, Share Button Invoked
-- When Template Is Selected, Slow Fade of NEW Button, Fade In Share Button - Make Obvious
-- Replace Template Box With User Search Box
-- User Search, Predictive Search Functionality
-- Only Search Other Admin / Trainer Level Users Within Company
-- Free Form Search By For First Name, Last Name or eMail Address
-- As Results Are Being FIltered and Display, Display Full Name, eMail and Department and Title
-- When User Selected; Display Confirmation Screen of Sharing Template
-- After User Invokes Share Button; Return To Template Selection Screen
-- Recipient of Template Is Notified Via eMail and Message Center
- 20 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Import InContext Views
- 21 -
FINAL DOCUMENT - FOR RELEASE - 20190712
- 22 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Import File Data Display
-- Read Header From Import FIle
-- Fields To Display Setting Is Stored In Table
-- If Number of Fields Is Greater Than Display Settings, Use Vertical Scroll Bars
-- If Data is Greater Than Field Width, DO NOT EXPAND display
-- Display Labels On Import Screen In Order of Header File
-- If the XLS/XLSX files have multiple workbooks, Provide an option to select which one
iTrainStation Results Data Display
-- Upon First Visit, New Template/Import, Right Side of Screen is All Selects, No Mapping Yet
-- Users Uses Dropdown Arrow To Invoke List of iTrainStation Fields
-- Dropdown List Must Remain Smaller Than Mapping Window To Avoid Disappearing Mapping Screen
- 23 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- If Field is Mapped, Item Disappears From List To Prevent Mapping Data to Same Field Twice
-- Display Live Data From Record On Screen To Correspond With Data On Left Side
-- Once First Field Is Mapped, Activate Skip/Edit/Previous/Next Buttons
- 24 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Previous Record, Next Record, Skip Record, Edit Record
-- If First Record is Displayed, Remove PREVIOUS RECORD Button
-- If Last Record is Displayed, Remove NEXT RECORD Button
-- Previous Button Left Justified To Results Block
-- Next Button Right Justified To Results Block
-- When User Invoked PREVIOUS RECORD, Display Data of Previous Record
-- When User Invoked NEXT RECORD, Display Data of Next Record
-- If User Invokes SKIP RECORD, Mark The Import Record to Skip During Import, Update Display
-- If User UnChecks SKIP RECORD, Clear Toggle to Skip During Import, Update Display
-- If User Invokes Editing Of Field, Allow User to Edit Data In Context of Display, and Retain New Data
-- If User Invoked Filters, Display Only Records With Appropriate Data Per Filter
iTrainStation Data Review and Editing
Bad Records are determined in the very beginning when an import file is first connected (Section 1). Records
that are missing a proper email address, first name or last name are considered as bad. During review of the
data, the user should have the ability to edit bad records to make them usable. Review the section, “ Section
3 - Options/Import Data” for more information on what would cause a record to be considered bad.
-- Required Fields For iTrainStation Are: First Name, Last Name, eMail/Login ID; Missing Data = Bad Record
-- Required Text Label On Right Side is Static As Well As Red Down Arrow
-- Highlight Bad Data Field(s) With Red Border
-- Display Bad Field Name Next To Warning Symbol
-- Allow User To Updated Field/Record By Clicking On Field
-- Allow User To Toggle Skip Record
- 25 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- Once Updated With New Data, Verify Data Entered Is Valid
-- If Updated Data Is Bad, Continue to Tag Record As Bad
-- If Updated Data Is Valid, Update File Metrics
-- Once All Three Required Fields Are Mapped, Remove “▼ = Required Fields” Label From Header
>> Good Records
-- Header Changes Color/Text Based On Record Metric
-- Header/Banner Color, Good Record: UI.getCustomColor(“HEADERGOOD”, <companyID>)
-- Text Color: UI.getCustomColor(“HEADERTEXT”, <companyID>)
-- Include “Skip Record” Box On Right Side
>> Skipped Records
-- Header/Banner Color, Good Record: UI.getCustomColor(“HEADERSKIP”, <companyID>)
-- Text Color: UI.getCustomColor(“HEADERTEXT”, <companyID>)
-- Include “Skip Record” Box On Right Side With Toggle On
-- Text Color of “Skip Record” Box On Right Side With Toggle On = #cc0000
- 26 -
FINAL DOCUMENT - FOR RELEASE - 20190712
>> Editing Behavior of Records
-- Editing of Data Occurs on iTrainStation Results Side of Data Display
-- If Updated Data Is Bad, Continue to Tag Record As Bad
-- If Updated Data Is Valid, Update File Metrics
Mapping Incontext Views
- 27 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Section 3: Options
Selecting options prior to importing the data allows the user to set certain variables, toggles and settings to
be applied to every user account being imported. When importing, all fields should be formatted to BASC
Group standards before saving to database. See standards for more information about field formatting.
Breadcrumb Bar
-- Import and Mapping Section of Breadcrumb Bar Should Be Highlighted While In Progress
-- Checkbox of Import and Mapping = Completed
-- Checkbox of Options = InCompleted Until Import Button Invoked
-- Summary Sections of Breadcrumb Bar and Check mark Should Be Greyed Out During Use of This Section
Import Data
-- Default Option To: New
-- Compare Records From Import File Against Records In iTrainStation
-- eMail/Login ID Is a Key Unique Field For Comparison
-- Compare eMail/Login ID Against iTrainStation Data
-- LoginID Database Table Info: users.USER_NAME (properly formatted email addresses only)
-- Account Types: Admin, Trainer, Student, Quiz Only
-- Maintain Metrics of Number of Records, New, Updated, Skipped, and Aborted
-- Display Metrics of Matched eMail/Login IDs
-- If Field is Mapped During Section 2, That Value Overrides Any Values Set in Section 3
-- If Field is Not Mapped or Field Is Null During Section 2, Than Set Values Established in Section 3
-- Write All Activity To Log File; Include Following Data Pieces:
-- User Importing, Date, Time
-- File Location, Full File Name
- 28 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- Compare Records From Import File Against Records In iTrainStation
-- eMail/Login ID is a Key Unique Field For Comparison
-- Default Option To: Update With New Data
>> Skip User - Review Later
-- If eMail/Login ID Match Existing Data; Flag Account, Write To Separate File Names, Skip Record
-- Filename: “iTrainStation Skipped Records - yyyymmdd - hhmmss.csv”
-- Make sure header record is in csv file, allows end user to edit the file and reattempt import
-- Maintain Metrics of Number of Records, Updated, Skipped, and Aborted
-- Maintain Ability To Display/Output Updated, Skipped Records
>> Update With New Data
-- If Account Belongs To Expired Account or House Account (Ex: Key Risk, Wumbus)
-- Update Matched User in iTrainStation Database With New Company
-- Update Any Additional Fields With New Data
-- Allow For Sending of Welcome eMail If Toggled On
-- If Account Belongs To Active Account (Ex: Travelers)
-- Display Import Error Message: User Exists, Active Account
-- Add To Metrics As Import Error
- 29 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- If eMail/Login ID Match Existing Data; Compare Mapped Fields Against iTrain Fields, Update iTrain if
Different
-- Maintain Metrics of Number of Records, Updated, Skipped, and Aborted
-- Maintain Ability To Display/Output Updated, Skipped Records
>> Prompt Import
-- If eMail/Login ID Match Existing Data
-- Display Record; Allow Edit, Skip or Abort Option
eMail Address Validity
eMail Validity is functionality to allow iTrainStation to know if the eMail/Login ID data being imported is to be
used for sending email. Only valid AND verified email addresses will be sent an email.
-- Default Option To: eMails Are Valid Addresses
-- Default Variable EMAILVALID = Yes
-- If During Mapping, the Variable EMAILVALID is mapped, this option defaults to “eMails Addresses Defined
Per Mapping”. User is unable to change this setting, and the other two options should be grayed out.
-- Valid Email Database Table Info: users.VALIDEMAIL (Has the email address been tagged as valid? yes/no)
-- Verified Email Database Table Info: users.VERIFIED (Has the email address been verified? yes/no)
-- If EMAILVALID is set to “no”, VERIFIED should be set to “yes”. Otherwise, VERIFIED should be set to “no”
Set Password
-- Default Option To: Temporary System Issued Password
-- If During Mapping, the Variable XXXXXX is mapped, this option defaults to “Password Defined Per
Mapping”. User is unable to change this setting, and the other two options should be grayed out
-- If the Password Field is Mapped, set the user’s PWTYPE to “custom”
-- Password Database Table Info: users.USER_PASS (MD5 Encrypted)
- 30 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Time and Date
>> Time Zone Settings
-- Default Time Zone Option To: Timezone of User Doing Import - Method: Users.getUserValue(“TZ”,<userID>)
-- If Time Zone Of User is Null; User’s IP Address - Method: Utils.getIPAddress(<HttpServletRequest object>)
-- Obtain TZ from IP; Write TZ to Users Account - Method: Users.setUserValue(“TZ”,<userID>)
-- Time Zone: timezones.NAME should be used for the option Display Name. timezones.ID should be used for
the option Value. This should update the user’s TZ value.
>> Time Display Settings
-- Default Time Display Option To: 12 Hour
-- If TimeDisplay Is Mapped, Grey Out The Box
-- Time Display: Has Two options: “12 Hour Display” or “24 Hour Display”.
-- If “12 Hour Selected, Set MILITARYTIME Variable To “False”
- 31 -
FINAL DOCUMENT - FOR RELEASE - 20190712
>> Date Display Settings
-- Default Date Display Option To: mm/dd/yyyy
-- If DateDisplay Is Mapped, Grey Out The Box
-- Date Display: date_display.VALUE should be used for the option Display Name. date_display.ID should be
used for the option Value. This should update the user’s DATE_DISPLAY setting.
-- Users.getUserValue() and Users.setUserValue() can be used to read and write these user values.
Assign to Groups
-- Default Option To: None
-- Option Only Appears For (ADMIN OR TRAINER) of Platform Plus Subscription
-- Option Only Appears For ADMIN of PPV Subscription
Reports To
-- Default Option To: Myself
-- If During Mapping, the Variable REPORTSTO is mapped, this option defaults to “Reports To Defined Per
Mapping”. User is unable to change this setting, and the other two options should be grayed out.
-- Set To is Predictive Search Within Company of Users
-- Can Only Be Set To One REPORT TO Person
- 32 -
FINAL DOCUMENT - FOR RELEASE - 20190712
-- Reports To Database Table Info: users.MASTERLOGIN (ID value of “Reports To” user)
Account Type / User Access Level
To determine what User Access value options should be available during the import, call the following
method: Users.createUserAccess(<userID>).
-- Method returns value 0-2
-- If Return value = 0; Only show “Quiz Accounts” option. “Quiz Accounts” is the default option; Other Options
Are Grey’d Out
-- If Return value = 1; Show “Quiz Accounts” and “Student” options. “Student” is the default option; Trainer
Option Is Grey’d Out
-- If Return value = 2; Show “Quiz Accounts”, “Student”, and “Trainer” options. “Trainer” is the default option
-- To get the current user’s User Level use the following method: Users.getUserValue(“USERLEVEL”,<userID>)
Option Display Name Option Value
Student 9
Quiz Account 9
Import Button
-- Verify All Options Are Selected; Grey Out Import Button Until All Options Are Selected
-- Verify Input Fields Have Valid Data; Grey Out Import Button Until All Input Fields Are Valid
-- Password Valid When > 1 Alpha Numeric Character; Case Sensitive
-- Group Assignment Valid When > 1 Alpha Numeric Character
-- Reports To Valid When = eMail Address Within Company of Admin or Trainer
- 33 -
FINAL DOCUMENT - FOR RELEASE - 20190712
First Import Confirmation
-- Display Import Metrics
-- Verify Import Intention
Second Import Confirmation
-- Verify Import Intention Again
Import Progress
-- Display Record Being Read
-- Display “Success!” Once Record Saved To iTrainStation
-- Loop Through Import File; Displaying Progress Bar
-- Every Record Imported MUST have an Import ID
-- Every New Record Generates A New RecordID/UserID
-- ImportID Defined At Start of Import Process, After 2nd Confirmation of Import
-- ImportID = CompanyID-yyyymmdd-hhmmss
-- Once Import Is Complete, Automatically Move to Summary Screen
- 34 -
FINAL DOCUMENT - FOR RELEASE - 20190712
>> Abort Process
-- Should Abort Be Invoked;
-- Confirm Decision To Abort
-- If “Yes, Abort”; Erase All Import Records With ImportID
-- Updated Records Roll Back To Previous State
-- User Sent Back to Mapping
-- If “Resume Import”; Resume Import
Mapping Incontext Views
- 35 -
FINAL DOCUMENT - FOR RELEASE - 20190712
- 36 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Export Import Results
>> Export of Summary Results To TXT File
-- FileName = “iTrainStation Import Results - yyyymmdd-hhmmss - Summary.txt”
-- Time Format For File Name Is 24 Hour
-- Include ImportID
-- Include Person of Import
-- Include Full Path, Including Drive Letter of File Location of Import
-- Include FileName of Import
-- Include Date of FileName
-- Include BrowserID/Environment Variables
>> Export of Detailed Results To CSV File
-- FileName = “iTrainStation Import Results - yyyymmdd-hhmmss - Detailed.csv”
-- Time Format For File Name Is 24 Hour
-- Export Results Saved To CSV Are iTrainStation Data Elements
-- Row 1 of CSV Is Header Row, Contains iTrainStation Variable Names
-- Row 2 of CSV Is Header Row, Contains ImportFile Variable Names
-- Rows 1 and 2 Is The Mapping of Fields
-- Column 1 of CSV Is EndResult of Record; NEW, UPDATED, SKIPPED or DELETED
-- On New, All Fields Should Be Shown
-- On Skipped, No Client ID Shown, User Not Added To iTrain, All Fields Displayed To Help Support
Analyzation
-- On Updated, Existing Client ID Shows, Display Only The Field(s) That Were Updated
- 37 -
FINAL DOCUMENT - FOR RELEASE - 20190712
>> Send eMail of Results
-- eMail Results to Client For Support Documentation
-- eMail Results to “Import.Support@iTrainStation.com” For Support Documentation
-- Bundle Both Files As Attachments To One eMail
-- Subject: “<ClientID> - <Company> - Import Results - yyyymmdd-hhmmss”
-- Body of eMail Includes Import File Name
-- Include ImportID
-- Include Person of Import
-- Include Full Path, Including Drive Letter of File Location of Import
-- Include FileName of Import
-- Include Date of FileName
-- Include BrowserID/Environment Variables
-- Body of eMail Also Includes Section For FIle Metrics
-- xx Records In File
-- xx Records Used During Import
-- xx New Users Added
-- xx Users Updated
-- xx Records Were Skipped
Display of Records And Record Import Results
-- Scrolling Window Displaying Import Detailed Summary of Each Record
-- Window Size Shows xx Records of Data, Use Scroll Bars
-- FullName$ = FirstName$ + “ “ + LastName$
-- eMail/LoginID = Primary eMail Address
- 38 -
FINAL DOCUMENT - FOR RELEASE - 20190712
- 39 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Save Template
-- Template Saves Are Server Side
-- User Can Save Template By Typing Name In Box and Hit Save; Name Entered Is Friendly Label
-- Template Is Saved As “User” Type, Shared Templates Saved As “Shared” Type
-- After Save, Display “Template Saved” Box For 4 Seconds; Fade Out, Slide Schedule Training Box Up
-- User Can Skip Saving of Template and Invoke Schedule Training Button
>> Template Data Storage
-- Includes Unique ID
-- Template Type; User, System, Shared
-- Includes Creator
-- Includes Create Date
-- Includes Last Used Date
-- Includes User Provided Friendly Label
-- Includes File Location
-- Includes File Name
-- Includes Mapped Fields
-- Include Options Selected
System Templates
-- Google Contacts
-- Yahoo Contacts
-- Outlook Contacts
-- Apple Contacts
-- iTrainStation Template
- 40 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Error Checking
Devices
Final product should be tested to work the following devices running the current version of the applicable
Operating System. Tests are to confirm that the intended design and/or functionality is consistent from
device to device. If bootstrap is utilized in, documented fields are to be confirmed to work within and upon
each device as intended.
❏ iPhone / iPad ❏ Windows Desktop
❏ Android Phone / Tablets ❏ Windows Laptop
❏ MacBook ❏ Windows Surface Pro
Browsers
Final Product should be tested to work on the current version of the following browsers. Tests are to confirm
that the intended design and/or functionality is consistent from browser to browser.
❏ Internet Explorer 11 For Windows 7 ❏ Google Chrome
❏ Internet Explorer 11 For Windows 10 ❏ Mozilla Firefox
❏ Microsoft Edge ❏ Safari
Non Supported Devices
The final product may function on these devices but does not have to be developed specifically for them.
❏ Smart TVs ❏ Chromecast
❏ Video Game Systems ❏ Apple TV
❏ Roku
Strings / Data Elements
Final Product should be tested to handle various data elements to confirm that the intended design and/or
functionality is processing and/or formatting data properly.
❏ Leading Spaces Trimmed ❏ Format Dollars ($x,xxx.xx)
❏ Trailing Spaces Trimmed ❏ Format of Dates
❏ Auto Cap First Letter ❏ Format of Time
❏ Special Characters ❏ Format of Phone Numbers
❏ Empty Data Fields ❏ Format of eMail Addresses
❏ Rounding of Numbers ❏ Check eMail for @
❏ Decimals ❏ Check eMail for .com, .net, .etc
- 41 -
FINAL DOCUMENT - FOR RELEASE - 20190712
- 42 -
FINAL DOCUMENT - FOR RELEASE - 20190712
Milestone 1 - Successfully Demonstrate Functionality of The Importing and Related Functions
DEVELOPER SETS MILESTONE DATES
-- 10% Payout; Completed By: Tuesday, January 1, 1900 @ 12:00 AM (PDT)
-- Import of File
-- File Filtering During File Selection
-- Mapping of Data Fields
-- Options Being Set
-- Data Cleaned and Formatted Per Specification
-- Data Written To Database
-- Notifications / eMails Sent To Users
-- Abort Function / Rollback
-- Bug Free
Milestone 2 - Successfully Demonstrate Functionality of The Templates and Related Functions
DEVELOPER SETS MILESTONE DATES
-- 10% Payout; Completed By: Tuesday, January 1, 1900 @ 12:00 AM (PDT)
-- Template Data Saved
-- Template Data Loaded
-- Template Performance By Owner of Template
-- Template Performance of Recipient
-- Template Deleted by Owner
-- Template Deleted by Recipient
-- Bug Free
Milestone 3 - UI/UX Design Changes, Limit of 3 Sets of Requests
DEVELOPER SETS MILESTONE DATES
-- 20% Payout; Completed By: Tuesday, January 1, 1900 @ 12:00 AM (PDT)
-- Change Request In Layout, Design
-- Change Request In Formatting of Data
-- Change Request In Application of Options Being Set
Milestone 4 - Final Testing, Bug Fixes and Final Requests, Limit of 3 Sets of Requests
DEVELOPER SETS MILESTONE DATES
-- 10% Payout; Completed By: Tuesday, January 1, 1900 @ 12:00 AM (PDT)
-- Fix Bugs in Logic and/or Design
Project Complete - Code Turnover
DEVELOPER SETS MILESTONE DATES
-- 50% Payout; Completed By: Tuesday, January 1, 1900 @ 12:00 AM (PDT)
-- Turn Over Source Code
-- Integrate Code Into Production Server
-- Resolve Errors; Confirm Integration
- 43 -
FINAL DOCUMENT - FOR RELEASE - 20190712