• Replace every hardcoded English string across all 35 SPA page files
    with useT() calls backed by message keys in messages.ts. Both en-US
    and zh-CN translations are provided for every key (~200 new keys).
    
    Pages updated: DashboardPage, LoginPage, FormDesignerPage,
    ListViewDesignerPage, MetadataAdminPage, SalesOrderDetailPage,
    PurchaseOrderDetailPage, WorkOrderDetailPage, ShopFloorPage,
    UserTasksPage, TaskDetailPage, UserDetailPage, all Create* pages,
    all Edit* pages, and all list pages (Items, Partners, Locations,
    Balances, Movements, SalesOrders, PurchaseOrders, WorkOrders,
    Users, Roles, Accounts, JournalEntries, UoMs, AdjustStock).
    zichun authored
     
    Browse Code »
  • First step of pbc-finance GL growth: the chart of accounts.
    
    Backend:
      - Account entity (code, name, accountType: ASSET/LIABILITY/EQUITY/
        REVENUE/EXPENSE, description, active)
      - AccountJpaRepository + AccountService (list, findById, findByCode,
        create with duplicate-code guard)
      - AccountController at /api/v1/finance/accounts (GET list, GET by id,
        POST create). Permission-gated: finance.account.read, .create.
      - Liquibase 003-finance-accounts.xml: table + unique code index +
        6 seeded accounts (1000 Cash, 1100 AR, 1200 Inventory, 2100 AP,
        4100 Sales Revenue, 5100 COGS)
      - finance.yml updated: Account entity + 2 permissions + menu entry
    
    SPA:
      - AccountsPage with sortable list + inline create form
      - finance.listAccounts + finance.createAccount in typed API client
      - Sidebar: "Chart of Accounts" above "Journal Entries" in Finance
      - Route /accounts wired in App.tsx + SpaController + SecurityConfig
    
    This is the foundation for the next step (JournalEntryLine child
    entity with per-account debit/credit legs + balanced-entry
    validation). The seeded chart covers the 6 accounts the existing
    event subscribers will reference once the double-entry lines land.
    zichun authored
     
    Browse Code »