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
|NewCustomerCode: 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 DetailsCode: 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
|OrdersX---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}
|ProductsOrd: 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 ItemOrder: 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}
|HistoryCust: 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}
|HistoryDetailCustomer: 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}
|OrderSummaryOrderNumber: 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.
|OrderHeaderOrd: 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 CellsellCellSell 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
|NewCustomerCode* 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 DetailsCode* 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