The business case is a very simple wholesale order management application.
The application has one backend user interface which is based on the standard Simplicité® user interface. This user interface is only used by internal users to manage reference data (suppliers, products, customers, ...) and to enter and manage customer orders and contacts.
It also has various public frontend user interfaces which allow customers to place their own orders.
Some business rules, including right rules, applies on all business objects some of which depends on the user profile.
The 2 back office business user profiles are administrator and plain user. Administrators manages all reference data, enters and/or validate orders. Plain users are only responsible for entering and finalizing orders.
The data model consist of 5 business objects:
NB: Orders are for 1 customer and 1 product (mono-product orders), a quantity can be set (minimum order quantity is 1)
Thes Administrator profile is a back office profile. He has full access to the order management application: he can manage all data including orders and has also access to users management. He is the only profile to be allowed to validate orders.
The Plain user profile is also a back office profile. He has read only access to reference data. He has write access on orders but is restricted to the orders placed on a product from one of its designated suppliers. He is not allowed to validate pending orders.
The Customer profile is a front office profile. He has only access to dedicated custom user interfaces (web site, mobile app, ...). He is only allowed to place new orders. He can optionally also review the list of all his previous orders.
Orders can be in the following statuses:
Contacts can be in the following statuses:
The screen flow for back office order entry is a 4 step linear screen flow:
Note: this screen flow is only an assisted process doing what can be done using plain business objects user interfaces. This screen flow does not bring any additional business rules.
Supplier can only be created and updated by the administrator profile. A single plain user can be designated as the supplier responsible (this link is taken into account for access rights to orders).
A supplier can only be created and updated by the administrator profile. Changes on either product reference, product name or unit price is historized.
A customer can only be created and updated by the administrator profile.
Orders can be placed either by backend users (administrator or plain user) or by frontend users (customers themselves).
An order is for one customer and one product.
Regardless of the order entry origin, the following business rules applies to orders:
A contact is only entered by back office users and must be attached at least to a customer, and optionally to an order of this customer.
An optional user interface component is provided to provide a back office "single order entry page".
As for the order entry screen flow, this component is optional and does not include any additional business rules if compared to what can be done with plain business object pages.
Various public frontends are available as dedicated modules.
The web site one allows customers to place new orders. The only authentication mechanism for customers is to enter their customer code. This web site is based on the Bootstrap® web framework.
Various pivot tables are defined on the order business object:
An oorder receipt publication is provided for for validated and shipped orders:
The application also provides some custom technical publications and APIs for integration.
This is the application's business model:
DemoSupplier
business object definitionThe supplier business object corresponds to the suppliers of products that can be ordered.
Name | Type | Required | Updatable | Personal | Description |
---|---|---|---|---|---|
demoSupCode |
regexp(50) | yes* | yes | Supplier unique code (e.g. MYSUP ) |
|
demoSupName |
char(100) | yes | yes | Supplier name | |
demoSupDescription |
html(1000000) | yes | Supplier description | ||
demoSupPhone |
phone(20) | yes | Supplier phone number | ||
demoSupFax |
phone(20) | yes | Supplier fax number | ||
demoSupWebsite |
url(100) | yes | Supplier website URL | ||
demoSupEmail |
email(20) | yes | Supplier email address | ||
demoSupLogo |
image | yes | Supplier logo | ||
demoSupUsrId link to User |
id | yes | User responsible of supplier | ||
Ref. demoSupUsrId.usr_login |
regexp(100) | yes | Login | ||
demoSupComments |
notepad(50000) | yes | Comments on supplier |
DemoProduct
business object definitionThe product business object corresponds to the products that can be ordered.
Its reference is unique per supplier.
Name | Type | Required | Updatable | Personal | Description |
---|---|---|---|---|---|
demoPrdSupId link to DemoSupplier |
id | yes* | yes | Product supplier | |
Ref. demoPrdSupId.demoSupCode |
regexp(50) | Supplier unique code (e.g. MYSUP ) |
|||
Ref. demoPrdSupId.demoSupName |
char(100) | Supplier name | |||
Ref. demoPrdSupId.demoSupLogo |
image | Supplier logo | |||
Ref. demoPrdSupId.demoSupUsrId |
id | User responsible of supplier | |||
demoPrdReference |
regexp(10) | yes* | yes | Product reference | |
demoPrdName |
char(100) | yes | yes | Product name | |
demoPrdType |
enum(50) using DEMO_PRD_TYPE list |
yes | yes | Product type | |
demoPrdDescription |
text(1000000) | yes | Product description | ||
demoPrdPicture |
image | yes | Product picture | ||
demoPrdEan13 |
char(13) | yes | EAN13 code | ||
demoPrdEan13Image |
image | EAN13 code image | |||
demoPrdStock |
int(11) | yes | yes | Current stock for product | |
demoPrdUnitPrice |
float(11, 2) | yes | yes | Unit price of product | |
demoPrdAvailable |
boolean | yes | yes | Available product? | |
demoPrdFeatured |
boolean | yes | yes | Featured product? | |
demoPrdDocumentation |
html(1000000) | yes | Product documentation | ||
demoPrdBrochure |
document | yes | Product brochure | ||
demoPrdOnlineDoc |
url(255) | yes | Online product documentation URL | ||
demoPrdComments |
notepad(50000) | yes | Comments on product |
DEMO_PRD_TYPE
LAPTOP
LaptopDESKTOP
DesktopTABLET
TabletSMARTPHONE
SmartphoneOTHER
OtherDEMO_DECSTOCK
: Product stock decrement triggered by the order
state transition to shipped status.DEMO_PRD_EMAIL
: Send product information by emailDEMO_INCSTOCK
: Sample action for product stock increment
(by N
specified in the product business object code).DemoClient
business object definitionThe client business object corresponds to the customer who places order.
His address is geolocalized using GoogleMaps® API.
Name | Type | Required | Updatable | Personal | Description |
---|---|---|---|---|---|
demoCliCode |
regexp(10) | yes* | yes | Customer code | |
demoCliFirstname |
char(100) | yes | yes | yes | Customer first name |
demoCliLastname |
char(100) | yes | yes | yes | Customer last name |
demoCliAddress1 |
char(100) | yes | yes | yes | Customer address (line 1) |
demoCliAddress2 |
char(100) | yes | yes | Customer address (line 2) | |
demoCliZipCode |
char(10) | yes | yes | yes | Customer postal code |
demoCliCity |
char(50) | yes | yes | yes | Customer city |
demoCliCountry |
enum(30) using DEMO_COUNTRY list |
yes | yes | yes | Customer country |
demoCliCoords |
geocoords | yes | yes | Customer geoccordinates | |
demoCliEmail |
email(50) | yes | yes | Customer email address | |
demoCliHomePhone |
phone(20) | yes | yes | Customer home phone number | |
demoCliWorkPhone |
phone(20) | yes | yes | Customer work phone number | |
demoCliMobilePhone |
phone(20) | yes | yes | Customer mobile phone number | |
demoCliFax |
phone(20) | yes | yes | Customer fax number | |
demoCliType |
enum(30) using DEMO_CLI_TYPE list |
yes | yes | Customer type | |
demoCliComments |
html(1000000) | yes | Useful comments on customer | ||
demoCliPlacemapLabel |
char(100) | yes | Customer place map label | ||
demoCliTitre |
char(3) | yes | - |
DEMO_COUNTRY
FR
FranceUK
United KingdomSP
SpainDEMO_CLI_TYPE
T1
Code T1T2
Code T2T3
Code T3DemoOrder
business object definitionThe order business object corresponds to the product orders placed by clients.
An order is for one single product.
Name | Type | Required | Updatable | Personal | Description |
---|---|---|---|---|---|
demoOrdNumber |
int(11) | yes* | Order number (automatically calculated at creation) | ||
demoOrdDate |
date | Order date | |||
demoOrdStatus |
enum(30) using DEMO_ORD_STATUS list |
yes | yes | Order status | |
demoOrdDeliveryDate |
datetime | yes | Order delivery date | ||
demoOrdCliId link to DemoClient |
id | yes* | yes | Order customer | |
Ref. demoOrdCliId.demoCliCode |
regexp(10) | Customer code | |||
Ref. demoOrdCliId.demoCliFirstname |
char(100) | yes | Customer first name | ||
Ref. demoOrdCliId.demoCliLastname |
char(100) | yes | Customer last name | ||
Ref. demoOrdCliId.demoCliEmail |
email(50) | yes | Customer email address | ||
Ref. demoOrdCliId.demoCliAddress1 |
char(100) | yes | Customer address (line 1) | ||
Ref. demoOrdCliId.demoCliAddress2 |
char(100) | yes | Customer address (line 2) | ||
Ref. demoOrdCliId.demoCliZipCode |
char(10) | yes | Customer postal code | ||
Ref. demoOrdCliId.demoCliCity |
char(50) | yes | Customer city | ||
Ref. demoOrdCliId.demoCliCountry |
enum(30) using DEMO_COUNTRY list |
yes | Customer country | ||
demoOrdPrdId link to DemoProduct |
id | yes* | yes | Order product | |
Ref. demoOrdPrdId.demoPrdReference |
regexp(10) | Product reference | |||
Ref. demoOrdPrdId.demoPrdName |
char(100) | Product name | |||
Ref. demoOrdPrdId.demoPrdType |
enum(50) using DEMO_PRD_TYPE list |
Product type | |||
Ref. demoOrdPrdId.demoPrdPicture |
image | Product picture | |||
Ref. demoOrdPrdId.demoPrdSupId |
id | Product supplier | |||
Ref. demoPrdSupId.demoSupCode |
regexp(50) | Supplier unique code (e.g. MYSUP ) |
|||
Ref. demoPrdSupId.demoSupName |
char(100) | Supplier name | |||
Ref. demoPrdSupId.demoSupLogo |
image | Supplier logo | |||
Ref. demoPrdSupId.demoSupUsrId |
id | User responsible of supplier | |||
Ref. demoOrdPrdId.demoPrdStock |
int(11) | Current stock for product | |||
Ref. demoOrdPrdId.demoPrdUnitPrice |
float(11, 2) | Unit price of product | |||
demoOrdUnitPrice |
float(11, 2) | Product unit price for order | |||
demoOrdQuantity |
int(11) | yes | yes | Product quantity ordered | |
demoOrdTotal |
float(11, 2) | Total order amount | |||
demoOrdVAT |
float(11, 2) | VAT for order | |||
demoOrdComments |
notepad(50000) | yes | Comments on order |
DEMO_ORD_STATUS
P
Pending statusH
On holdV
Validated statusD
Shipped statusC
Canceled statusDEMO_COUNTRY
FR
FranceUK
United KingdomSP
SpainDEMO_PRD_TYPE
LAPTOP
LaptopDESKTOP
DesktopTABLET
TabletSMARTPHONE
SmartphoneOTHER
OtherDemoContact
business object definitionThe contact object holds the interactions with the clients.
A contact can be linked or not a an order of the selelcted client
(when linked to an order the demoCtcOrdId
field is set).
Name | Type | Required | Updatable | Personal | Description |
---|---|---|---|---|---|
demoCtcDatetime |
datetime | yes* | Contcat date and time | ||
demoCtcType |
enum(10) using DEMO_CTC_TYPE list |
yes | yes | Contact type | |
demoCtcSubType |
enum(10) using DEMO_CTC_SUBTYPE list |
yes | Contact sub type | ||
demoCtcCanal |
enum(10) using DEMO_CTC_CANAL list |
yes | yes | Canal used for contact | |
demoCtcPriority |
boolean | yes | yes | Contact priority | |
demoCtcStatus |
enum(1) using DEMO_CTC_STATUS list |
yes | yes | Contact status | |
demoCtcCliId link to DemoClient |
id | yes* | yes | Contact customer | |
Ref. demoCtcCliId.demoCliCode |
regexp(10) | Customer code | |||
Ref. demoCtcCliId.demoCliFirstname |
char(100) | yes | Customer first name | ||
Ref. demoCtcCliId.demoCliLastname |
char(100) | yes | Customer last name | ||
Ref. demoCtcCliId.demoCliEmail |
email(50) | yes | Customer email address | ||
Ref. demoCtcCliId.demoCliHomePhone |
phone(20) | yes | Customer home phone number | ||
Ref. demoCtcCliId.demoCliWorkPhone |
phone(20) | yes | Customer work phone number | ||
Ref. demoCtcCliId.demoCliMobilePhone |
phone(20) | yes | Customer mobile phone number | ||
Ref. demoCtcCliId.demoCliFax |
phone(20) | yes | Customer fax number | ||
demoCtcOrdId link to DemoOrder |
id | yes | Contact order | ||
Ref. demoCtcOrdId.demoOrdNumber |
int(11) | Order number (automatically calculated at creation) | |||
Ref. demoCtcOrdId.demoOrdDate |
date | Order date | |||
Ref. demoCtcOrdId.demoOrdStatus |
enum(30) using DEMO_ORD_STATUS list |
Order status | |||
Ref. demoCtcOrdId.demoOrdCliId |
id | Order customer | |||
Ref. demoOrdCliId.demoCliCode |
regexp(10) | Customer code | |||
Ref. demoCtcOrdId.demoOrdPrdId |
id | Order product | |||
Ref. demoOrdPrdId.demoPrdSupId |
id | Product supplier | |||
Ref. demoPrdSupId.demoSupCode |
regexp(50) | Supplier unique code (e.g. MYSUP ) |
|||
Ref. demoPrdSupId.demoSupUsrId |
id | User responsible of supplier | |||
Ref. demoOrdPrdId.demoPrdReference |
regexp(10) | Product reference | |||
Ref. demoOrdPrdId.demoPrdName |
char(100) | Product name | |||
Ref. demoCtcOrdId.demoOrdQuantity |
int(11) | Product quantity ordered | |||
demoCtcFile |
document | yes | Contact attached file | ||
demoCtcPicture |
image | yes | - | ||
demoCtcMessages |
notepad(50000) | yes | yes | Messages |
DEMO_CTC_TYPE
INF
InformationREQ
RequestCMP
ComplaintOTH
OtherDEMO_CTC_SUBTYPE
EMPTY
DEMO_CTC_CANAL
PHONE
Code PHONEEMAIL
Code EMAILCHAT
Code CHATWEB
Code WEBDEMO_CTC_STATUS
O
OpenC
ClosedP
ProcessingDEMO_ORD_STATUS
P
Pending statusH
On holdV
Validated statusD
Shipped statusC
Canceled statusOrders go thru the following state model:
The order entry workflow has the following model:
DemoOrderCreate
business process definitionOrder entry activity workflow
Begin
: Begin activityClientSelect
: Customer selection activitySupplierSelect
: Supplier selection activityProductSelect
: Selected supplier's product selection activityOrderCreate
: Order creation form activityEnd
: End activityThe application's user profiles are: