zlwu and Cursor
42ec16b0cf
docs: add implementation plan for duty staff role filter.
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 18:18:02 +08:00
zlwu and Cursor
2942d176bd
docs: add duty staff role filter design for schedule selection.
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 18:15:58 +08:00
zlwu and Cursor
dea4159636
chore: update graphify after reimburse occur_date changes
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 16:06:22 +08:00
zlwu and Cursor
43d53cb9dd
feat(bx-mobile): display occur date on reimburse detail views
...
Always show the field and use an em dash when the date is empty.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 16:03:53 +08:00
zlwu and Cursor
49e4e604ca
feat(bx-mobile): add optional occur date on reimburse apply form
...
Mirror web-admin detail lines with a clearable YYYY-MM-DD input.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 16:03:17 +08:00
zlwu and Cursor
42f2d2b80e
feat(web-admin): show occur date on reimburse detail readonly tables
...
Keep the column always visible with an em dash when empty.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 16:00:54 +08:00
zlwu and Cursor
8f032488a4
feat(web-admin): add optional occur date on reimburse apply details
...
Allow picking YYYY-MM-DD per detail line and show it in the view dialog.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 16:00:01 +08:00
zlwu and Cursor
5b7a9f2f8f
feat(bx): persist and return reimburse detail occurDate
...
Wire optional occur_date through create/update detail payloads and
API responses.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 15:58:36 +08:00
zlwu and Cursor
3b8a0eb7d8
feat(bx): add parse_optional_date for nullable occur dates
...
Empty values map to None so optional detail dates do not default to today.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 15:57:15 +08:00
zlwu and Cursor
0b402b18ed
feat(bx): add occur_date column on reimburse detail
...
Store optional expense occurrence date (DATE, nullable) for each
reimburse line item.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 15:53:53 +08:00
zlwu and Cursor
f73fb572d1
docs: add implementation plan for reimburse detail occur date
...
Break the approved design into backend, web-admin, and bx-mobile
tasks with concrete steps and verification.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 15:48:02 +08:00
zlwu and Cursor
071281150d
docs: add design for optional reimburse detail occur date
...
Capture the agreed plan to add nullable occur_date (YYYY-MM-DD) on
bx_reimburse_detail across backend, web-admin, and bx-mobile.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-17 15:45:27 +08:00
zlwu
8558d9439e
提交
2026-08-17 15:25:28 +08:00
zlwu
6b2147aa46
提交
2026-08-17 09:22:31 +08:00
zlwu and Cursor
42ad896456
fix(crm): sync quote list stats row widths to table headers
...
Keep the interactive summary cells aligned when columns resize.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 16:02:38 +08:00
zlwu and Cursor
072790989f
feat(crm): add interactive column stats row on quote list
...
Let users pick sum/avg/max/min per column on the current page,
with localStorage persistence for the quote management list.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 16:00:54 +08:00
zlwu and Cursor
6ce7554557
feat(crm): add quote list column stats helpers
...
Pure aggregation, display formatting, and localStorage helpers
for the quote list configurable summary row.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 15:51:48 +08:00
zlwu and Cursor
be55f23c21
docs: add quote list column stats implementation plan
...
Break the approved design into TDD-friendly tasks for the
quote management list interactive summary row.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 15:49:16 +08:00
zlwu and Cursor
a84f4fe903
docs: add quote list column stats design
...
Capture agreed UX and current-page aggregation rules for the
quote management list before implementation.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 15:48:05 +08:00
zlwu and Cursor
144e50f42d
refactor(crm): use shared settlement clause in contract print views
...
Wire ContractDetailDialog and detail page to settlementClause helpers so new settlement methods resolve fifth-clause text correctly.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 15:05:56 +08:00
zlwu and Cursor
477719c9a7
feat(crm): add frontend settlement clause helpers
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 15:03:44 +08:00
zlwu and Cursor
e1eeca0001
feat(crm): use settlement clause helper in save_template
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 15:03:05 +08:00
zlwu and Cursor
a73ee89f44
feat(crm): add settlement clause default text helper
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 15:01:47 +08:00
zlwu and Cursor
38a9f6f724
feat(crm): add settlement method dict options migration
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-16 14:59:57 +08:00
zlwu
34e5fcf0be
提交
2026-08-16 14:58:19 +08:00
zlwu and Cursor
4c23ff9f61
fix(duty): show duty schedule on portal home launcher
...
Register /duty frontend route module, add portal top-module order, and fix sys_menu as L1 directory with schedule leaf plus role grants.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-15 16:04:33 +08:00
zlwu and Cursor
a1321c145c
chore(duty): sync knowledge graph after duty schedule feature
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-14 17:15:22 +08:00
zlwu and Cursor
ba17a83df5
fix(duty): drop unused import in duty admin API
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-14 17:14:59 +08:00
zlwu and Cursor
35e09fa09b
feat(duty): add web-admin calendar page and public H5 grab UI
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-14 17:14:05 +08:00
zlwu and Cursor
36fc7f286c
feat(duty): register admin and public duty APIs with encrypt exclude
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-14 17:12:40 +08:00
zlwu and Cursor
49cad98c84
feat(duty): add schemas and duty_schedule service with capacity tests
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-14 17:12:13 +08:00
zlwu and Cursor
f5ad2d7217
feat(duty): add SQLAlchemy models for duty schedule
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-14 17:10:36 +08:00
zlwu and Cursor
2502db7a02
fix(duty): add unique keys for duty_day date and slot shift_type
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-14 17:08:22 +08:00
zlwu and Cursor
931fd24671
chore(duty): add duty_day/slot/assignment tables and menu SQL
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-14 17:06:25 +08:00
zlwu
3f21007c18
提交
2026-08-12 21:40:55 +08:00
zlwu and Cursor
d00f5f6da3
docs(bx): mark negative invoice balance design as implemented pending QA
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-12 21:01:56 +08:00
zlwu and Cursor
5f290a8ef1
docs(bx): document that reimburse submit may leave invoice balance negative
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-12 21:01:30 +08:00
zlwu and Cursor
5983d31ab2
fix(bx-mobile): allow reimburse submit with insufficient invoice balance
...
Align soft tip and submit flow with web-admin; no longer block on wallet balance.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-12 21:00:31 +08:00
zlwu and Cursor
b53c1c4851
fix(web-admin): allow reimburse submit with insufficient invoice balance
...
Replace blocking tip with a soft warning and remove client-side submit guards.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-12 20:59:13 +08:00
zlwu and Cursor
99e4d4c69a
fix(bx): allow reimburse submit when invoice wallet balance is insufficient
...
Drop the hard balance check in debit_reimburse so occupancy can exceed uploaded invoices; balance may go negative until later top-ups.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-12 20:57:54 +08:00
zlwu and Cursor
4f75bc40b9
docs: add plan for allowing negative invoice balance on reimburse submit
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-12 20:56:43 +08:00
zlwu and Cursor
12e8cdaaf9
docs: allow negative invoice wallet balance on reimburse submit
...
Record the approved design to drop the hard balance gate while keeping full debit_reimburse occupancy.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-12 20:55:47 +08:00
zlwu
5fcdb03da1
提交
2026-08-11 07:54:28 +08:00
zlwu
a5210a6a9e
提交
2026-08-09 21:07:28 +08:00
zlwu and Cursor
b45ce2c32c
style(bx-mobile): polish reimburse invoice attachment picker layout
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-09 19:47:39 +08:00
zlwu and Cursor
0e8cefe89f
feat(bx-mobile): show attachment grid picker on reimburse apply
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-09 19:46:31 +08:00
zlwu and Cursor
9f92012e43
refactor(bx-mobile): use attachment-level invoice picks in reimburse apply logic
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-09 19:44:37 +08:00
zlwu
38383b35d9
提交
2026-08-09 19:42:32 +08:00
zlwu and Cursor
47ef575524
docs: add plan for bx-mobile reimburse invoice attachment picker
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-09 19:42:03 +08:00
zlwu and Cursor
2f87223236
docs: add bx-mobile reimburse invoice attachment picker design
...
Align mobile invoice selection with web-admin at attachment granularity;
include interactive HTML demo for the 3-column picker UX.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-09 19:38:40 +08:00