SoftwareServant - Sample System Specification 1 of 27

SoftwareServant – Sample System Specification

Introduction:

This sample system is based on a mobile sales sytem that uses Windows Mobile devices to take sales orders. It is a functional subset that has been modified to use a standard PC and some internet functions instead of Windows Mobile devices but retains the same basic design. The original system will also be available as a supplementary lesson for developing mobile systems.

In its original form, Windows Mobile devices are used to give field staff a fast, convenient means of taking error-free orders at the customer site. Completed orders can be printed onsite and/or immediately transmitted back to the office ready for invoicing and updating of customer, inventory and accounting records.

The system provides immediate access to customer financials, stock availability and all product and pricing options. It caters for backordering, standing orders and automated emailing of order confirmations. Comprehensive sales history allows field staff to ask questions like:

- what did this customer buy last time?

- when did they last buy this product?

- how many did they order?

- how much did they pay?

Each field representative only needs to work with the customer and product information that is relevant to him or her. Field staff can send orders and have their data automatically updated from back office systems wherever they have access to a telephone service (fixed or mobile). Management can monitor sales activity as its happening from anywhere and at anytime via the internet.

The system eliminates error-prone data entry from hand-written orders. Order processing for field staff is faster and more accurate. They no longer need to battle with paperwork to price, extend and total orders. They can resolve stock availability and customer credit issues on-site prior to placement of orders. Orders can be transmitted immediately from the customer's site to the office for earlier shipment to the customer and faster invoicing and payment.

The elimination of transcription, pricing and extension errors together with on-site resolution of stock availability and customer credit issues can release a large amount of resource from the back office function and the sales team.

Host: PcClient

Start.Form

|SSample
{Sample Client/Serverorder taking system. This }
{system uses a shared database on a web server}
{for training purposes only. Training exercise data}
{will be updated in memory only; the database will}
{not be updated. }
[ Take Order ]
[ Order Analysis ]
[ About CellSell ]
[ Finish ]
||

[Take Order]>Customers.FormSelect a customer to start the order

[Order Analysis]OrderAnalysis.FormGo to Order Analysis form

[About CellSell]>About.Form

[Finish]>EndEnd of sample application

End of Start.Form

Customers.Form{NoEdit}

|Select Customer
!---Code---!!------Name------! Address: X------Address1------X
X------Address2------X
X------Suburb------X
X----State------X X-PCode-X
Contact: X------X
Phone: X------X
Fax: X------X
Email: X------X
Sales YTD: X------X
Sales LYTD: X------X
Balance: X------X
Credit Limit: X------X
Terms: X------X
!End!
Notes: #------#
#------#
[Find] X------Find------X [ New ] [Detail] [Orders] [Back] ||

List each Customer by CodeSequence is customer code

Code : Customer.Code

Name : Customer.Name

Address1 : Customer.Address1

Address2 : Customer.Address2

Suburb : Customer.Suburb

State : Customer.State

PCode : Customer.PostCode

Contact : Customer.Contact

Phone : Customer.Phone

Fax : Customer.Fax

Email : Customer.Email

Sales YTD : Customer.SalesYTD

Sales LYTD : Customer.SalesLYYTD

Balance : Customer.Balance

Credit Limit : Customer.Limit

Terms : Customer.Terms

Notes : Customer.Notes

[New]>Create CustomerCreate a new customer record

-Id = NewId

>NewCustomer.FormEnter details for a new customer

-overlayKeep this form and overlay the new form

[Detail] >Customer.Form

[Orders]>Orders.Form

[Back] ReturnReturn to the prior form

End of Customers.Form

NewCustomer.Form

|NewCustomer
Code: X------X
Name: X------X
Address1:X------X
Address2:X------X
Suburb: X------X
State: X------X
PostCode:X------X
Phone: X------X
Fax: X------X
Email: X------X
Contact: X------X
Notes: #------#
#------#
#------#
#------#
[ Ok ] [Cancel] ||

Code: Customer.Code

Name : Customer.Name

Address1 : Customer.Address1

Address2 : Customer.Address2

Suburb : Customer.Suburb

State : Customer.State

PostCode : Customer.PostCode

Phone : Customer.Phone

Fax : Customer.Fax

Email : Customer.Email

Contact : Customer.Contact

Notes : Customer.Notes

[ Ok ]>Return

[Cancel]>Delete CustomerCancel creation of new customer

>Return

End of NewCustomer.Form

Customer.Form

|Customer Details
Code: X------X Credit Limit: X------X
Name: X------X Balance: X------X
Address1:X------X
Address2:X------X Sales YTD: X------X
Suburb: X------X Sales LYTD: X------X
State: X------X
PostCode:X------X
Phone: X------X Terms: X------X-
Fax: X------X
Email: X------X
Contact: X------X
Notes: #------#
#------#
#------#
[Save] [ Back ] ||

Code: Customer.Code{NoEdit}Edit all fields except code

Name : Customer.Name

Address1 : Customer.Address1

Address2 : Customer.Address2

Suburb : Customer.Suburb

State : Customer.State

PostCode : Customer.PostCode

Phone : Customer.Phone

Fax : Customer.Fax

Email : Customer.Email

Contact : Customer.Contact

Notes : Customer.Notes

Credit Limit : Customer.Limit

Balance : Customer.Balance

Sales YTD : Customer.SalesYTD

Sales LYTD : Customer.SalesLYYTD

Terms : Customer.Terms

[Save]Warn-Heading = 'Update Customer'

-Message = 'Changed customer details will be written to the database'

>Return

[Back]>Return

End of Customer.Form

Orders.Form{NoEdit}

Displays all orders for this customer

|Orders
X---Code---X X------Name------X
!------Order------!!----CustOrdNo----!!---OrderDate---!!----Delivery----!!--TotalValue--!!--Closed--!
!End!
[Details] [New Order] [Back] ||

Code : Customer.Code

Name : Customer.Name

List each Order for this Customer

Order:Order.Id

CustOrdNo : Customer.CustOrdNo

OrderDate: Order.OrdDate

Delivery:Order.DelDate

TotalValue : Order.Total

Closed : Order.Closed

[Details] >OrderSummary.FormFor the selected order

[New Order]>Customer.OrderCount + 1 Increment order count for this customer

Create a new Order:

- Id = Customer.Code & Customer.OrderCount

- OrdDate = Today

- CustId = Customer.Id

- CustCode = Customer.Code

- CustName = Customer.Name

- CustAddr1 = Customer.Address1

- CustAddr2 = Customer.Address2

- Suburb = Customer.Suburb

- State = Customer.State

- PostCode = Customer.PostCode

- Nett = 0

- Total = 0

- DelAddr1 = Customer.DelAddress1

- DelAddr2 = Customer.DelAddress2

- DelAddr3 = Customer.DelAddress3

- DelAddr4 = Customer.DelAddress4

- Closed = False

- Contact = Customer.Contact

- Phone = Customer.Phone

- DelDate = Today + 7 days

Products.FormGo to selection of products.

[Back] Return to Customers.Form

End of Orders.Form

Products.Form{NoEdit}

|Products
Ord: X------X X------CustomerName-----X
!-----Code------!!------ProductName------!!-----Price-----!!--StockAvail--!!--ThisOrder--!
!End!
[Find]X------Find------X
[OrderSummary] [New Line] [Back] ||

Ord : Order.Id

CustomerName : Order.CustName

List each Product by Code List all products in code sequence

Code : Product.Code

ProductName : Product.Name

Price : Product.Price

StockAvail : Product.AvailableDisplays stock available.

ThisOrder : Product.ThisOrdQtyDisplays quantity already ordered on this order

[OrderSummary] >OrderSummary.Form

[NewLine] >Create a new OrderLine:

- OrderId = Order.Id

- ProdId = Product.Id

- CustId = Order.CustId

- ProdCode = Product.Code

- ProdName = Product.Name

- PackSize = Product.Pack

- Quantity = 0

- Price = CalculatedPrice(1)Calulate the price for one unit

- Discount = CustomerDiscount + Product.Discount

- Amount = 0

- DiscAmt = 0

- GST = 0

- Total = 0

- SIS = 0

- Closed = False

>OldQty = 0

>OldAmount = 0

>OldTotal = 0

>OrderItem.FormGo to form to complete order for selected item

-overlay

[Back] Return

End of Products.Form

OrderItem.Form{NoEdit if Order.Closed = True}

|Order Item
Order: X------X
Customer: X------X
Product: X--Code-X
X------Name------X
#------Description------#
#------#
Pack Size: X------X
Avail: X------X X--From--X To: X---To---X
Quantity: X------X
Discount: X------X [Auto Price]
Price: X------X
Amount: X------X [Calculate]
StkInStore: X------X
[Ok] [History] [Delete] [Back] ||

Order : Order.Id

Customer : Order.CustName

Code : OrderLine.ProdCode

Name : OrderLine.ProdName

Description : Product.Description_

for this OrderLine

Pack Size : OrderLine.PackSize

Avail : Product.Available

From: Product.FromDate(d)

To : Product.ToDate(d)

Discount: OrderLine.Discount{Edit}

Price : OrderLine.Price{Edit}

Amount : OrderLine.Amount(000000.00)

StkInStore:OrderLine.SIS{Edit}

Quantity : OrderLine.Quantity{Edit}

>Warn if Quantity > Product.Available

- Heading = 'Quantity Warning'

- Message = 'Stock Available = 'Product.Available

Warn the user if the ordered quantity will exceed the stock available

[Auto Price] Price = CalculatedPrice(Quantity)

>Discount = CustomerDiscount + Product.Discount

[Calculate] Amount = (Quantity * Price) - (Quantity * Price * Discount / 100)

[Ok]>Error if Order.Closed = TrueError message if order is closed

-Heading = 'Error'

-Message = 'Order is closed!'

>UpdateOrder.Process

OrderSummary.Form

[History] >ProductHistory.Form for this Customer (Id = OrderLine.CustId)

-overlay

[Delete] >Error if Order.Closed = True

-Heading = 'Error'

-Message = 'Order is Closed!'

>Warn-Heading = 'Warning'

-Message = 'This order line will be deleted'

>Order.Total = Order.Total - OrderLine.Total

>Delete this OrderLine

>OrderSummary.Form

[Back] >Return to OrderSummary.Form

End of OrderItem.Form

ProductHistory.Form{NoEdit}

|History
Cust: X------X
X-Code-X X------Name------X
!---Order----!!----Qty----!!----Price----!!-----Disc----!
!End!
[Detail] [Back] ||

Cust : Customer.Name

Code : Product.Code

Name : Product.Name

Order :OrderLine.OrderId

Qty :OrderLine.Quantity

Price : OrderLine.Price

Disc:OrderLine.Discount

List each OrderLine for this Customer and Product Order history for the requested customer

and product

[Detail] HistoryDetail.Form

-overlay

[Back] Return to OrderItem.Form

End of ProductHistory.Form

HistoryDetail.Form{NoEdit}

|HistoryDetail
Customer: X--Code--X
X------CustName------X
Order No: X------X
Order Date:X------X
Product: X------X
X------ProdName------X
Quantity: X------X
Price: X------X
Discount: X------X Disc: X------X
Amount: X------X
GST: X------X Total: X------X
[Back] ||

Code :Order.CustCode for this OrderLine

CustName :Order.CustName

Order No :Order.CustOrdNo

Order Date :Order.OrdDate

Product :OrderLine.ProdCode

ProdName :OrderLine.ProdName

Quantity :OrderLine.Quantity

Price :OrderLine.Price

Discount :OrderLine.DiscAmt

Disc :OrderLine.Discount

Amount :OrderLine.Amount

GST :OrderLine.GST

Total:OrderLine.Total

[Back] >ReturnReturn to prior form

End of HistoryDetail.Form

OrderSummary.Form{NoEdit}

|OrderSummary
OrderNumber: X------X
CustomerCode: X------X
CustomerName: X------X [more]
OrderValue: X------X
!--ProdCode--!!------ProdName------!!--PackSize--!!-----Qty-----!!------Value-----!
!End!
[Delete Order] [Review Line] [New Line] [Finish Order] [Print] [Orders] [Back] ||

OrderNumber:Order.Id

CustomerCode : Order.CustCode

CustomerName : Order.CustName

OrderValue : Order.Total

List each OrderLine for this Order

ProdCode : OrderLine.ProdCode

ProdName : OrderLine.ProdName

PackSize : OrderLine.PackSize

Qty : OrderLine.Quantity

Value : OrderLine.Total(heading = "MyTotal")

[more] >OrderHeader.FormDisplay more order header details

-overlay

[Review Line]>OldQty = OrderLine.Quantity

>OldAmount = OrderLine.Amount

>OldTotal = OrderLine.Total

>OrderItem.FormReview or alter order line

-overlay

[NewLine]>Error if Order.Closed = True

- Heading = 'ERROR'

- Message = 'Order is Closed'

>Return to Products.Form Select more products for this order

[Delete Order] >Error if Order.Closed = True

- Heading = 'ERROR'

- Message = 'Order is Closed'

>Warn - Heading = 'WARNING'

- Message = 'This Order will be deleted'

>Delete each OrderLine

>Delete this Order

>Return to Start.Form

[Finish Order] >Error if Order.Closed = True

- Heading = 'ERROR'

- Message = 'Order is Closed'

>Error if this Order has no OrderLine

- Heading = 'ERROR'

- Message = 'This order has no order lines!'

Order.Closed = True

>OrderLine.Closed = True for each OrderLine

Return to Start.FormFinish this order and return to Start screen

[Print] >Setup Printer

Print'SampleOrder'

[Orders] >Return to Orders.Form

[Back] Return to previous form

End of OrderSummary.Form

OrderHeader.Form{NoEdit if Order.Closed = True}

Displays order header details and total value. The Customer Order No and contact details for this order can be changed. Closed orders can be reviewed but can’t be changed.

|OrderHeader
Ord: X------X Date: X------X
X------CustomerName------X
X------Address1------X
X------Address2------X
X------Suburb------X
X--State--X X-PostCode-X
Customer Order: X------X
Contact: X------X
Phone: X------X
Order Total: X------X
Delivery: X------X[d] Closed: [x]
[OK] ||

Ord : Order.Id

Date : Order.OrdDate

CustomerName : Order.CustName

Address1 : Order.CustAddr1

Address2 : Order.CustAddr2

Suburb : Order.Suburb

State : Order.State

PostCode : Order.PostCode

Customer Order : Order.CustOrdNo{Edit}

Contact : Order.Contact{Edit}

Phone : Order.Phone{Edit}

Order Total : Order.Total

Closed : Order.Closed{Edit}

Delivery : Order.DelDate{Edit}

[OK]Return to OrderSummary.Form

End of OrderHeader.Form

OrderAnalysis.Form

|Sales Order analysis

{This will be the subject of a separate reports and charts training exercise.}

[Back] ||

[Back]>Return

End of OrderAnalysis.Form

About.Form

|About Cellsell
CellSell Order Taking System:
Copyright © CellSell Pty Ltd2009:
Sample Release 1-0:
[Back] ||

[Back] >Return to Start.Form

End of About.Form

UpdateOrder.Process

This is called from theOrderItem.Form when the [Ok} button is clicked. It updates the current order information in local memory. This is not updating the database, see SSamplex (UpdateDatabase.Process) for more information on database updating.

OrderLine:

-Amount = (Quantity * Price) - (Quantity * Price * Discount/100)

-DiscAmt = Quantity * Price * Discount/100

-GST = Amount * 0.1

-Total = Amount + GST

>Order:

-Nett - OldAmount + OrderLine.Amount

-Total - OldTotal + OrderLine.Total

>Product:

-Available - OldQty + Quantity

-ThisOrdQty = Quantity

End of UpdateOrder.Process

SampleOrder.Document

See SampleOrder document

{CustomerName} : Order.CustName

{Address1} : Order.CustAddr1

{Address2} : Order.CustAddr2

{Suburb} : Order.Suburb

{State} : Order.State

{Pcode} : Order.PostCode

{654321} : Order.CustCode

{Abc45678} : Order.Id

{1/11/2009} : Order.OrdDate(d)

{12345} : OrderLine.ProdCode*

{Product Details} : OrderLine.ProdName

{Size} : OrderLine.PackSize

{99999} : OrderLine.Quantity(###0)

{1234.00} : OrderLine.Price(####0.00)

{123456.00} : OrderLine.Amount(###,##0.00)

{234567.00} : Order.Total($###,##0.00)

First Page = 'SampleOrder1'See SampleOrder1

Continuation = 'SampleOrder2'See SampleOrder2

Last Page = 'SampleOrder3'See SampleOrder3

Printer = 'HP OfficeJet W40'

End of SampleOrder.Document

Calculations:

Returns a result and can include actions (..)

May take the form CalculationName: or CalculationName(Parameter): or CalculationName(Param1, Param2, Param3….)

When calculations are used in the specification, they must include all parameters in brackets in the correct order.

CalculatedPrice(Quantity):

Returns the appropriate price based on quantity ordered.

Product.Price

Product.Price1 if Quantity >19

Product.Price2 if Quantity > 99

End of CalculatedPrice

CustomerDiscount:

Returns the Discount %age appropriate to the type of Customer.

10 if Customer.Type = 1

20 if Customer.Type = 2

30 if Customer.Type = 3

End of CustomerDiscount

End of Calculations

Lexicon:

Substitutes specification statements for phrases that are more easily understood by the stakeholders. Examples of Lexicon use in specification:

List each Order for this Customer

Code : Order.CustCode for this OrderLine

>Order.Category for this OrderLine = Product.Category

Order for this Customer : Order.CustId = Customer.Id

OrderLine for this Order : OrderLine.OrderId = Order.Id

Order for this OrderLine : Order.Id = OrderLine.OrderId

Order has no OrderLine : Order.Id = OrderLine.OrderId

OrderLine for this Customer and Product : OrderLine.CustId = Customer.Id and_

OrderLine.ProdCode = Product.Code

Product for this OrderLine : Product.Code = OrderLine.ProdCode

End of Lexicon

Data Storage and Access:

In this section, you need to specify each table that will be referenced in the specification but you do not need to specify the columns for each table. The table content will be automatically picked up from the database. You can specify the format of a numeric data field (eg. 00000.00) in the specification but It is generally better to format money fields etc. in the database (typically as numeric or decimal data types with 2 decimal places).

DBMS:

Name: Cellsell

Type: SqlServer

Connection: < Source=sqlsvr2.apexhost.net.au;User_

ID=sservant_NewUser;Password=welcome12;Initial Catalog=sservant_CellsellSQL;

Customer Table

Database Table = Cust

Select Command: SELECT*FROM Cust

Product Table

Database Table : Prod

Select Command: SELECT * FROM Prod

Order Table

Database Table : Ord

Select Command: SELECT * FROM Ord

OrderLine Table

Database Table : Line

Select Command: SELECT * FROM Line

End of Host

Host: Browser

Start.Form

|SSample
{This system uses a shared database on a hosted web server for training purposes only.}
{Training exercise data will be updated in memory only; the database will not be updated.}
{This browser sample enables review and maintenance of customer information only. }
#------#
# # [ Customer Information ]
# #
# #
# MyPicture # [ About Cellsell ]
# #
# #
# # [ Finish ]
#------#
||

MyPicture : File('Images\Sunset.jpg')

[Customer Information] >Customers.FormReview a list of customers

[About Cellsell]>About.Form

[Finish]>End

End of Start.Form

Customers.Form{NoEdit}

|Select Customer
!---Code---!!------Name------!
Address: X------Address1------X
X------Address2------X
X------Suburb------X
X----State------X X-PCode-X
Contact: X------X
Phone: X------X
Fax: X------X
Email: X------X
Sales YTD: X------X
Sales LYTD:X------X
Balance: X------X
Credit Limit: X------X
Terms: X------X
!End!
Notes: #------#
#------#
[ New ] [Detail] [Back] ||

List each Customer by CodeSequence is customer code

Code : Customer.Code

Name : Customer.Name

Address1 : Customer.Address1

Address2 : Customer.Address2

Suburb : Customer.Suburb

State : Customer.State

PCode : Customer.PostCode

Contact : Customer.Contact

Phone : Customer.Phone

Fax : Customer.Fax

Email : Customer.Email

Sales YTD : Customer.SalesYTD

Sales LYTD : Customer.SalesLYYTD

Balance : Customer.Balance

Credit Limit : Customer.Limit

Terms : Customer.Terms

Notes : Customer.Notes

[New]>Create Customer

-Id = NewId

>NewCustomer.FormEnter details for a new customer

[Detail] >Customer.FormDisplay selected customer details

[Back]>Start.Form

End of Customers.Form

NewCustomer.Form

|NewCustomer
Code* X------X
Name* X------X
Address1:X------X
Address2:X------X
Suburb: X------X
State: X------X
PostCode: X------X
Phone* X------X
Fax: X------X
Email: X------X
Contact: X------X
Notes: #------#
#------#
#------#
#------#
[ Ok ] [Cancel] ||

Code : Customer.Code

Name : Customer.Name

Address1 : Customer.Address1

Address2 : Customer.Address2

Suburb : Customer.Suburb

State : Customer.State

PostCode : Customer.PostCode

Phone : Customer.Phone

Fax : Customer.Fax

Email : Customer.Email

Contact : Customer.Contact

Notes : Customer.Notes

[ Ok ]>Customers.Form

[Cancel]>Delete Customer

>Customers.Form

End of NewCustomer.Form

Customer.Form

|Customer Details
Code* X------X Credit Limit: X------X
Name* X------X Balance: X------X
Address1*X------X
Address2:X------X Sales YTD: X------X
Suburb* X------X Sales LYTD: X------X
State: X------X
PostCode* X------X
Phone: X------X Terms: X------X
Fax: X------X
Email: X------X
Contact: X------X
Notes: #------#
#------#
#------#
{* - required items} [Save] [Back] ||

Code : Customer.Code{NoEdit}Edit all fields except code

Name : Customer.Name

Address1 : Customer.Address1

Address2 : Customer.Address2

Suburb : Customer.Suburb

State : Customer.State

PostCode : Customer.PostCode

Phone : Customer.Phone

Fax : Customer.Fax

Email : Customer.Email

Contact : Customer.Contact

Notes : Customer.Notes

Credit Limit : Customer.Limit

Balance : Customer.Balance

Sales YTD : Customer.SalesYTD

Sales LYTD : Customer.SalesLYYTD

Terms : Customer.Terms

[Save]>Customers.Form