It seems that the concept of an Order is missing.
This represents the 1st step in the engagement process - ordering of 1/more Order Items ("Products/Services").
A Order Item might represent a Project, Product, Service, etc.
One/more Invoices might be issued to settle Order Items, or the complete Order.
(The following is based on my use of phpCOIN, a "basic" but functionally very rich free billing solution).
I'm not sure if Ubercart should be used to fulfill this function?
Information Model:
1. Order
Container for the Order.
Order ID (unique counter across all Orders - need similar for Order Item, Invoice Item, Product)
Subject (text)
Comment (memo),
Client_Organisation ID (ref to Client Org)
Client Reference (Text)
Provider_Organisation (ref to Supplier Org)
Submitter_Person (ref to Person - can belong to Client / Supplier / user with Create Order role)
Created (DateTime), Updated (DateTime),
Status (draft, quote, accepted, in progess, on hold, comple, cancelled)
Total Value (calc across all order items with Type <> Discount)
Total TAX1, Total TAX2 (calc across all order items)
Total Amount (calc across all order items; Amount = Value + Tax1 + Tax2)
Total Discount (calc across all order items with Type = Discount)
Total Due (calc across all order items Due = Amount + Discount)
2. Order Item
Line Item in the Order, which is a copy of a specific Product from a Catalog, or a Custom entry.
Order Id (Id of parent Order)
OrderItem ID (unique counter across all OrderItems - need similar for Order, Invoice Item, Product)
Name (text; copied from Product; read-only, unless Custom)
Type (product / service-1off / service-recur / project / free / custom / discount; type taken from product catalog)
Comment (memo)
Provider_Organisation (complex scenario caters for ordering from multiple suppliers - shopping cart)
Created (Date-time), Updated (Date-time)
Recurs (see Product; can edit if Custom)
Quantity (default to product def_unit; can edit)
Unit_Price (taken from product; can edit if: Custom >=0; Discount <0)
Value (calculated as Qty x Unit_Price)
Discount (disabled for Discount type, else 0-Value; can expand later if want to allow ranges, etc.)
Unit_Measure (copied from Product; read-only, unless Custom item)
TAX1, TAX2
Status : new (default), pending
3. Product
A pre-defined type of product/service, which can be copied into an Order as Order Item.
Integrate to Ubercart for this?
Product ID (counter across all Products - need similar for Order Item, Invoice Item)
Name (text)
Type (product / service-1off / recur / project / task / free; type taken from product catalog)
Recurs (day / week/ month / quarter / calendar_year / annual (12 months)
Comment (memo)
Provider_Organization (complex scenario caters for ordering from multiple suppliers - shopping cart)
Create_Date-time, Update_Date-time
Def_Quantity
Unit_Price
TAX1, TAX2
Status (active/suspended/deleted)
Fulfillment flow is then:
a) Order + Order Item(s) =copy Order=> Invoice + Invoice Item(s)
For Order Items Types: Product / Service / Recur
b) Order + Order Item(s) =copy Item=> Project (related to Order Item)
For Order Items Types: Project
c) Order + Order Item(s) =copy Item=> Task (related to Order Item)
For Order Items Types: Task
Use Cases:
a) Invoice Use-Case: Auto/Manual create Invoice from Order:
Create Invoice ,related to Order ID, with Items copied from Order, where Order Item Type: Product / Service / Recur / Free
b) Project Use-Case: Auto/Manual create Project from Order Item:
Create Blank Project,related to Order ID + Order Item in the Order, where Order Item Type: Project
c) Task Use-Case: Auto/Manual create Task from Order Item:
Create Task, related to Order ID + Order Item in the Order, where Order Item Type: Task
Thanks You for all your effort on enhancing STORM for all of us!
Comments
Comment #1
tchurch commentedsubscribe