feat(order): 订单支出台账(快递费/吊卡费等杂费)
订单上原本只有「卖给客户多少钱」,而一张单真实花出去的还有寄样品的快递费、 印吊卡的费用、商检报关拖车。不记下来就算不出这单赚没赚 —— 小单子几百块 杂费能把毛利吃掉一截。 · 新表 order_expenses,一张订单挂多笔:类型/金额/币种/日期/收款方/单号/ 已付未付/备注。单独成表而不是往 orders 加列,因为杂费是多笔不定项的, 寄三次样品就是三条快递费,各有单号;塞进 orders 只能存一个合计,事后 对不出「这 800 块是哪来的」。 · 跨币种强制填汇率并存快照。杂费基本是人民币、订单常是美元;不存快照的话 汇率一变历史订单毛利跟着变,账永远对不上。同币种强制按 1,防止前端传个 7.2 把美元支出又乘一遍。 · 新权限点 order.expense,不复用 order.edit。掏钱寄样品的是销售业务员, 而销售业务组只有 order.view —— 挂在 order.edit 上要么他记不了账,要么 为了让他记账得把「改订单金额」一起给他。启动时 syncNewPermissions() 会自动把这个新点补给四个默认组。 · 订单列表加「杂费」列(合计 + 未付)。SUM 外层再 ROUND 一次:不加会漏出 348.15999999999997 这种浮点尾巴直接显示在页面上。 · 金额逐行取两位再相加,保证明细几行加起来等于合计。 Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3e9fd2dc97
commit
f32a2daaef
@@ -161,6 +161,32 @@ function ensureColumns() {
|
||||
sha256 TEXT, bytes BLOB NOT NULL, stored_at TEXT
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_cart_items_sort ON cart_items(sort);
|
||||
|
||||
/* 订单支出(业务员记的杂费:快递费、吊卡费、商检、报关、拖车、打样…)。
|
||||
单独一张表而不是往 orders 加几列 —— 一笔订单的杂费是多笔不定项的,
|
||||
寄三次样品就是三条快递费,各自有单号和日期;塞进 orders 只能存一个合计,
|
||||
事后对不出「这 800 块是哪来的」。
|
||||
rate_to_order 是「记账当时」的汇率快照:快递费是人民币、订单可能是美元,
|
||||
不存快照的话汇率一变,历史订单的毛利会跟着变,账永远对不上。 */
|
||||
CREATE TABLE IF NOT EXISTS order_expenses (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
order_id INTEGER NOT NULL REFERENCES orders(id),
|
||||
category TEXT NOT NULL,
|
||||
amount REAL NOT NULL,
|
||||
currency TEXT NOT NULL DEFAULT 'CNY',
|
||||
rate_to_order REAL NOT NULL DEFAULT 1,
|
||||
spent_at TEXT,
|
||||
payee TEXT,
|
||||
supplier_id INTEGER REFERENCES suppliers(id),
|
||||
voucher_no TEXT,
|
||||
is_paid INTEGER NOT NULL DEFAULT 0,
|
||||
note TEXT,
|
||||
created_by INTEGER REFERENCES users(id),
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_order_expenses_order ON order_expenses(order_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_order_expenses_date ON order_expenses(spent_at);
|
||||
`);
|
||||
|
||||
const columnMigrations = {
|
||||
|
||||
Reference in New Issue
Block a user