Example #3: The Quotation Application
Analysis and Design
Our virtual company’s main business is telecommunications cabling. Various customers will phone in with requests for quotes (RFQ) – after taking some details, the Quoters will forward on these details to the Quote Manager. The Quote Manager will accept or decline the requests and allocate resources to them. An Account Manager will arrange to meet with the client to further discuss their requirements and an Engineer will schedule a time to perform a site inspection where the work will be carried out. Once all this has been completed, a final quote with a price will be emailed to the customer.
The manual forms used in this quotation process are shown in Figure 163:
|
|
|
|
|
|
Figure 163.
Step 1: Design User Roles:
The first step is to work out how many different roles are at work here in our process;
The employee that takes the initial details of the RFQ.
The manager who approves RFQs and allocates resources for follow up.
The manager who arranges one or more appointments with the customer to discuss their requirements.
The employee who performs one or more site inspections to determine additional requirements and to ensure the site is safe for work to commence.
So, there are four different roles in this work process.
Step 1: Design User Roles – Summary:
For this example, the need for four distinct user roles has been identified; Quoter, Quote Manager, Account Manager and Engineer.
Step 2: Design Forms:
The next step in the analysis phase is to work out what the screens in our final system will look like. All the relevant information in our process is represented on several manual forms. These will be the model for our automated forms.
Step 2: Design Forms – Summary:
For this example, the need for nine screens has been identified. All the employees in our virtual company will be able to create an RFQ. Only Quote Managers will be able to approve or decline those RFQs. Only Account Managers will be able to arrange customer appointments. Only Engineers will be able to schedule site inspections.
Step 3: Design Workflow:
The final step in our analysis phase is to define the workflow itself.
In this example, the workflow is as follows:
|
Figure 164. |
Step 3: Design Workflow – Summary:
For this example, the workflow is a sequence with a decision gate and two ‘splitters’. These splitters will spawn off new instances of different workflows which are themselves loops – one for appointments and the other for site inspections. In both of these sub-workflows, a decision gate governs whether the sub-workflow ends and returns flow back to the main workflow or whether the sub-workflow iterates through another pass.
This completes the analysis phase for the Quotation system.
Implementation
Step 4: Implement User Types and Users:
For this example, four new user types will be created:
|
Using the ‘User Types’ maintenance screen, create four new user types all with the same levels of access. Figure 165 shows an example for the Quoter user type.
Note: ‘Task List’ and ‘Items List’ will allow in-process workflows to be shown to the user. |
Figure 165. |
|
|
|
|
After creating the four new user types, the user maintenance tree should look something like Figure 166: |
Figure 166. |
|
Create two new users ‘Karen’ and ‘Rod’ and make them both members of the ‘Quoter’ user type: |
Figure 167. |
|
|
|
|
Create a new user ‘Craig’ and make him a member of both the ‘Quote Manager’ and ‘Quoter’ user types: |
Figure 168. |
|
|
|
|
Create two new users ‘John’ and ‘David’ and make them both members of the ‘Account Manager’ and ‘Quoter’ user types: |
Figure 169. |
|
|
|
|
Create two new users ‘George’ and ‘Hamish’ and make them both members of the ‘Engineer’ and ‘Quoter’ user types: |
Figure 170. |
Step 4: Implement User Types and Users – Summary:
At this point, four new user types and seven new users have been defined.
Note:
See the previous examples for a detailed description of adding user types and users.
Step 5: Implement Forms:
|
Select Admin → Forms from the top menu bar: |
Figure 171. |
|
|
|
|
Kontinuum’s form maintenance section will be displayed. Click on the ‘Forms’ node in the tree control in the left-hand pane of the browser. Select ‘Add Folder’ in the context-sensitive menu that appears: |
Figure 172. |
|
The ‘Folders’ maintenance screen will appear in the right-hand pane of the browser. Fill out the required fields and click on the ‘Submit’ button. |
Figure 173. |
A total of nine forms will be created under this folder. The first is a form called ‘Request For Quote’ with the attributes listed in the tables below:
Form Name: Request For Quote
Form Database Name: RequestForQuote
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
RFQ Details |
One |
RFQDetails |
1 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Client Ref. # |
Text Box |
ClientRefNo |
No |
Yes |
1 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Priority |
List Box |
Priority |
No |
No |
1 |
2 |
|
VARCHAR |
6 |
None |
|
|
|
Internal Ref. # |
Label |
InternalRefNo |
Yes |
Yes |
2 |
1 |
|
IDENTITY |
|
None |
|
|
|
Required By |
Input Mask Box Calendar |
RequiredBy |
No |
No |
2 |
2 |
|
DATETIME |
|
Australian Date Format |
|
|
|
Client |
Pre Search List Box |
Client |
No |
No |
3 |
1 |
|
VARCHAR |
40 |
None |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Uneditable |
|
|
|
|
|
|
ClientRefNo |
|
1 |
|
|
Priority |
[High][Medium][Low] |
|
|
|
Client |
[Telstra][Optus] |
|
|
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Customer Details |
One |
CustomerDetails |
2 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Name |
Text Box |
CustName |
No |
No |
1 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Phone |
Text Box |
CustPhone |
No |
No |
1 |
2 |
|
VARCHAR |
14 |
Australian Phone Number |
|
|
|
Address |
Text Box |
CustAddress |
No |
No |
2 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Fax |
Text Box |
CustFax |
No |
No |
2 |
2 |
|
VARCHAR |
14 |
Australian Phone Number |
|
|
|
ABN |
Text Box |
CustABN |
No |
No |
3 |
2 |
|
VARCHAR |
10 |
None |
|
|
|
Suburb |
Text Box |
CustSuburb |
No |
No |
3 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
City |
Text Box |
CustCity |
No |
No |
4 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
|
WebAndFlo2005External.Spacer |
CustSpacer1 |
No |
No |
4 |
2 |
|
|
|
None |
|
|
|
Contact Name |
Text Box |
CustContactName |
No |
No |
5 |
2 |
|
VARCHAR |
40 |
None |
|
|
|
State |
Text Box |
CustState |
No |
No |
5 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Contact Number |
Text Box |
CustContactNumber |
No |
No |
6 |
2 |
|
VARCHAR |
14 |
Australian Phone Number |
|
|
|
Postcode |
Text Box |
CustPostcode |
No |
No |
6 |
1 |
|
VARCHAR |
4 |
None |
|
|
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Site Details |
One |
SiteDetails |
3 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Name |
Text Box |
SiteName |
No |
No |
1 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Phone |
Text Box |
SitePhone |
No |
No |
1 |
2 |
|
VARCHAR |
14 |
Australian Phone Number |
|
|
|
Address |
Text Box |
SiteAddress |
No |
No |
2 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
|
WebAndFlo2005External.Spacer |
SiteSpacer1 |
No |
No |
2 |
2 |
|
|
|
None |
|
|
|
|
WebAndFlo2005External.Spacer |
SiteSpacer1 |
No |
No |
3 |
2 |
|
|
|
None |
|
|
|
Suburb |
Text Box |
SiteSuburb |
No |
No |
3 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
City |
Text Box |
SiteCity |
No |
No |
4 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
|
WebAndFlo2005External.Spacer |
SiteSpacer3 |
No |
No |
4 |
2 |
|
|
|
None |
|
|
|
Contact Name |
Text Box |
SiteContactName |
No |
No |
5 |
2 |
|
VARCHAR |
40 |
None |
|
|
|
State |
Text Box |
SiteState |
No |
No |
5 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Contact Number |
Text Box |
SiteContactNumber |
No |
No |
6 |
2 |
|
VARCHAR |
14 |
Australian Phone Number |
|
|
|
Postcode |
Text Box |
SitePostcode |
No |
No |
6 |
1 |
|
VARCHAR |
4 |
None |
|
|
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Work Details |
One |
SiteDetails |
4 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Description Of Work |
Text Area |
WorkDescription |
No |
No |
1 |
1 |
90 |
VARCHAR |
2000 |
None |
|
|
Note:
See previous examples for a detailed description of adding forms, subforms and questions.
Under the ‘Quotation’ folder, create another form called ‘RFQ Acceptance’ using the attributes listed in the tables below:
Form Name: RFQ Acceptance
Form Database Name: RFQAcceptance
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
RFQ Details |
One |
RFQDetails |
1 |
1 |
RequestForQuote |
|
|
|
Customer Details |
One |
CustomerDetails |
2 |
1 |
RequestForQuote |
|
|
|
Site Details |
One |
SiteDetails |
3 |
1 |
RequestForQuote |
|
|
|
Work Details |
One |
WorkDetails |
4 |
1 |
RequestForQuote |
|
|
|
RFQ Acceptance |
One |
RFQAcceptance |
5 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Accept RFQ? |
Radio Buttons |
AcceptRFQ |
No |
No |
1 |
1 |
|
BIT |
|
None |
|
|
|
Appointment Assigned To |
List Box |
Appointment Assigned To |
No |
No |
2 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Inspection Assigned To |
List Box |
Inspection Assigned To |
No |
No |
3 |
1 |
|
VARCHAR |
40 |
None |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Uneditable |
|
|
|
|
|
|
AcceptRFQ |
[Yes,,1][No,,0] |
1 |
|
|
AppointmentAssignedTo |
sqlset{select user_name from webandflo.dbo.user_type_users where user_type_name = 'Account Manager'} |
1 |
|
|
InspectionAssignedTo |
sqlset{select user_name from webandflo.dbo.user_type_users where user_type_name = 'Engineer'} |
1 |
|
Under the ‘Quotation’ folder, create two more forms called ‘Initiate Appointment’ and ‘Initiate Site Inspection’ using the attributes listed in the tables below:
Form Name: Initiate Appointment
Form Database Name: InitiateAppointment
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Initiation Details |
One |
InitiationDetails |
1 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Client Ref. # |
Text Box |
ClientRefNo |
Yes |
No |
1 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Internal Ref. # |
Text Box |
InternalRefNo |
Yes |
Yes |
2 |
1 |
|
INT |
|
None |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Uneditable |
|
|
|
|
|
|
ClientRefNo |
|
1 |
|
|
InternalRefNo |
|
1 |
|
Form Name: Initiate Site Inspection
Form Database Name: InitiateSiteInspection
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Initiation Details |
One |
InitiationDetails |
1 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Client Ref. # |
Text Box |
ClientRefNo |
Yes |
No |
1 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Internal Ref. # |
Text Box |
InternalRefNo |
Yes |
Yes |
2 |
1 |
|
INT |
|
None |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Uneditable |
|
|
|
|
|
|
ClientRefNo |
|
1 |
|
|
InternalRefNo |
|
1 |
|
Note:
These two forms are simply to provide primary keys to the two sub-workflows that will be described later.
Under the ‘Quotation’ folder, create four more forms using the attributes listed in the tables below. The ‘Schedule Appointment’, ‘Appointment Outcome’, ‘Schedule Site Inspection’ and ‘Inspection Outcome’ complete the forms for the two sub-workflows.
Form Name: Schedule Appointment
Form Database Name: ScheduleAppointment
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Appointment Details |
One |
AppointmentDetails |
1 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Appointment Date |
Input Mask Box Calendar |
AppointmentDate |
No |
No |
1 |
1 |
|
DATETIME |
|
Australian Date Format |
|
|
|
Appointment Time |
Text Box |
AppointmentTime |
No |
No |
2 |
1 |
5 |
VARCHAR |
5 |
None |
|
|
|
Contact Name |
Text Box |
CustContactName |
No |
No |
3 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Contact Number |
Text Box |
CustContactNumber |
No |
No |
4 |
1 |
|
VARCHAR |
12 |
Australian Phone Number |
|
|
|
Meeting Type |
Radio Buttons |
MeetingType |
No |
No |
5 |
1 |
|
BIT |
|
None |
|
|
|
Location |
Text Area |
Location |
No |
No |
6 |
1 |
90 |
VARCHAR |
2000 |
None |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Hidden |
Validation |
|
|
|
|
|
|
|
AppointmentDate |
|
1 |
|
sqlval{select case when ‘@@Form.Me’ < (select RequiredBy from Quotation1v1.dbo.RFQDetails where InternalRefNo = @@Session.InternalRefNo) then 1 else 0 end} |
|
MeetingType |
1 / [Face To Face,,1][Phone,,0] |
1 |
|
|
|
Location |
|
|
if{@@Form.MeetingType,0,1} |
|
Form Name: Appointment Outcome
Form Database Name: AppointmentOutcome
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Initial Requirements |
Multi Row Growing |
InitialRequirements |
1 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Requirement |
List Box |
Requirement |
No |
No |
1 |
1 |
30 |
VARCHAR |
30 |
None |
|
|
|
Requirement Details |
Text Area |
RequirementDetails |
No |
No |
2 |
1 |
80 |
VARCHAR |
2000 |
None |
|
|
|
Price |
Text Box |
Price |
No |
No |
3 |
1 |
|
MONEY |
|
Dollars And Cents |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Uneditable |
|
|
|
|
|
|
Requirement |
[Materials Required][Machinery Required][Accessibility To Site][Ground Surface/Reinstatement][Details of Work Required][Prework Required] |
|
|
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Outcome Details |
One |
OutcomeDetails |
2 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comments |
Text Area |
Requirement |
No |
No |
1 |
1 |
90 |
VARCHAR |
2000 |
None |
|
|
|
Requirement Finalised? |
Radio Buttons |
RequirementFinalised |
No |
No |
2 |
1 |
|
BIT |
|
None |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Uneditable |
|
|
|
|
|
|
RequirementFinalised |
[Yes,,1][No,,0] |
|
|
Form Name: Schedule Site Inspection
Form Database Name: ScheduleSiteInspection
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Inspection Details |
One |
InspectionDetails |
1 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Inspection Date |
Input Mask Box Calendar |
InspectionDate |
No |
No |
1 |
1 |
|
DATETIME |
|
Australian Date Format |
|
|
|
Inspection Time |
Text Box |
InspectionTime |
No |
No |
2 |
1 |
5 |
VARCHAR |
5 |
None |
|
|
|
Contact Name |
Text Box |
SiteContactName |
No |
No |
3 |
1 |
|
VARCHAR |
40 |
None |
|
|
|
Contact Number |
Text Box |
SiteContactNumber |
No |
No |
4 |
1 |
|
VARCHAR |
12 |
Australian Phone Number |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Hidden |
Validation |
|
|
|
|
|
|
|
InspectionDate |
|
1 |
|
sqlval{select case when '@@Form.Me' < (select RequiredBy from Quotation1v1.dbo.RFQDetails where InternalRefNo = @@Session.InternalRefNo) then 1 else 0 end} |
Form Name: Inspection Outcome
Form Database Name: InspectionOutcome
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Manholes |
One |
Manholes |
1 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Does Manhole need pumping? |
Radio Buttons |
ManholePumping |
No |
No |
1 |
1 |
|
BIT |
|
None |
|
|
|
Is manhole safe to work in? |
Radio Buttons |
ManholeSafe |
No |
No |
2 |
1 |
|
BIT |
|
None |
|
|
|
Does open manhole pose any hazards? |
Radio Buttons |
OpenManholeHazard |
No |
No |
3 |
1 |
|
BIT |
|
None |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Uneditable |
|
|
|
|
|
|
ManholePumping |
[Yes,,1][No,,0] |
|
|
|
ManholeSafe |
[Yes,,1][No,,0] |
|
|
|
OpenManholeHazard |
[Yes,,1][No,,0] |
|
|
Subform Details:
|
Subform |
Type |
Subform Name |
Subform Order |
Appear In Column |
Use data from Auxiliary Form |
HideDeleteButton |
Uneditable |
|
|
|
|
|
|
|
|
|
|
Pits |
One |
Pits |
2 |
1 |
|
|
|
Question Details:
|
Question |
Type |
Name |
PK |
Show In Task List |
Question Order |
Appear Column |
Column Width |
Data Type |
Size |
Input Mask |
Pixels from Left |
Pixels from Top |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Are pits suitable for task? |
Radio Buttons |
PitsSuitable |
No |
No |
1 |
1 |
|
BIT |
|
None |
|
|
|
Are pits & lids in good condition? |
Radio Buttons |
PitsAndLidsCondition |
No |
No |
2 |
1 |
|
BIT |
|
None |
|
|
Question Rules:
|
Question Name |
Default Value / Selection |
Required |
Uneditable |
|
|
|
|
|
|
PitsSuitable |
[Yes,,1][No,,0] |
|
|
|
|