Thành phần Invoice được dùng để thể hiện các hóa đơn bán hàng, sau đây là chi
tiết các thuộc tính của Invoice.
Thành phần Invoice sử dụng 2 thành phần Client và Product (vì nó cần truy cập
vào một số biến của hai thành phần này).
Tập Dep = { Invoice_System} chứa tên thành phần là Invoice_System mà Invoice
phụ thuộc vào.
Rd - Sử dụng 2 tập
(1) Tập INVOICE là một tập biểu thị tất cả các hóa đơn có thể (hiện tại và tương lai).
(2) Tập LINE là một tập biểu thị tất cả các dòng có thể.
Md - Tập hợp các phương thức của thành phần Invoice
{ create_invoice_header(c), new_line(i, p), the_line(i,p), increment(l, q), remove_all_lines(i), remove_invoice_header(i) }
Tập Fd chứa các biến của thành phần là
invoice, customer, percentage, allowed, total, line, origin, article, quantity, unit_cost
Vị từ Inv về các thuộc tính trong hợp đồng
invoice ⊆ INVOICE ∧ customer ∈ invoice → client ∧
percentage ∈ invoice → (0..100) ∧ allowed ∈ invoice → N AT ∧ total ∈ invoice → N AT ∧ ran(total ⊗ allowed) ⊆ leq ∧
line ⊆ LINE ∧ origin ∈ line → invoice ∧ article ∈ line → product ∧ quantity ∈ line → NAT ∧ unit_cost ∈ line → NAT ∧
origin ⊗ article ∈ line ⊳ invoice × product
Tạo một hóa đơn (Invoice)
Chức năng này được thiết kế để tạo một hóa đơn cho một khách hàng hợp lệ (R4).
inv ← create_invoice_header(c) =ˆ
Với tiền điều kiện
c ∈ client ∧ category(c) = dubious ∧ invoice = I NVOICE ∧ 0 < ≤ 300
Thì
Với ∀ j sao cho j ∈ INVOICE − invoice
Thì ta có
invoice := invoice ∪ {j }∥customer(j ) := c ∥ percentage(j ) := discount(category(c))∥
allowed(j ) := allowance(c) ∥ inv := j
Thêm một dòng vào hoán đơn
Chức năng này làm nhiệm vụ thêm 1 dòng vào hóa đơn khi sản đó chưa có trên
hóa đơn.
l ← new_line(i, p) =ˆ
Với tiền điều kiện
i ∈ invoice ∧ p ∈ product ∧ status(p) = available ∧ (i, p) ∉ ran(origin ⊗ article) ∧ line = LI N E
Thì
Với ∀m sao cho m ∈ LI N E − line
Thì ta có
l := m ∥ line := line ∪ {m}∥ origin(m) := i ∥ article(m) := p ∥
quantity(m) := 0 ∥ unit_cost(m) := price(p)
Lấy một dòng
Chức năng này là để lấy 1 dòng của một sản phẩm đã có sẵn mà nó đã xuất hiện tại
một dòng nào đó của hóa đơn.
l ← the_line(i,p) =ˆ
Với tiền điều kiện
i ∈ invoice ∧ p ∈ product ∧
status(p) = available ∧ (i,p) ∈ ran(origin ⊗ article)
42
l := (origin ⊗ article)-1 (i, p)
Tăng thêm trên 1 dòng
Chức năng này thực hiện nhiệm vụ tăng số lượng của sản phẩm trên một dòng, nó
tương ứng với trường hợp sản đã có dòng chứa sản phẩm đó trong hóa đơn. Trong trường hợp này thông tin về số lượng sẽ tăng lên tương ứng.
increment(l, q) =ˆ
Với tiền điều kiện
l ∈ line ∧ q ∈ NAT ∧
status(article(l)) = available ∧ quantity(l) + q ∈ N AT ∧
total(origin(l)) + (q × unit_cost(l) × percentage(origin(l))/100) ≤ allowed(origin(l)))
Thì
quantity(l) := quantity(l) + q ∥
total(origin(l)) := total(origin(l))+
(q × unit_cost(l) × percentage(origin(l))/100)
Xóa tất cả các dòng trên hóa đơn
remove_all_lines(i) =ˆ
Với tiền điều kiện
i ∈ invoice
Thì
line := line - origin-1[{i}] ∥
origin := (origin-1 [{i}] ⊲ origin) ∥
article := (origin-1 [{i}] ⊲ article) ∥
quantity := (origin-1 [{i}] ⊲ quantity) ∥
unit_cost := (origin-1 [{i}] ⊲ unit_cost)
Trong đó với hàm f và tập Sta định nghĩa
dom(S ⊲ f ) =ˆ dom(f ) – S
(S ⊲ f )(x) =ˆ f (x)
Xóa một hóa đơn
Chức năng remove_invoice_header() được dung để xóa phần header của một hoán
đơn.
remove_invoice_header(i) =ˆ
Với tiền điều kiện
i ∈ invoice ∧ i ∉ ran(origin)
Thì
customer := {i} ⊲ customer ∥
percentage := {i}⊲ percentage ∥
allowed := {i}⊲ allowed ∥
total := {i}⊲ total
Hóa đơn có thể bị xóa sau khi xóa tất cả các dòng bằng chức năng
remove_all_lines(), tức là i ∉ ran(origin).