ed4898bf90
fix: use absolute /supplychain/ paths in ensure dspy DataViewer URLs
...
Relative ../ paths inside PopupWindow DataViewer resolve without
module prefix. Use absolute /supplychain/ paths instead.
2026-07-10 13:51:06 +08:00
916b501c67
feat: add admin + reset admin password toolbar for sub_distributors
...
- api/add_sub_distributor_admin.dspy: create org+user+reseller.admin role, show password
- api/reset_sub_distributor_admin_pwd.dspy: reset admin password, show new password
- sub_distributors_list: add toolbar buttons with popup binds
2026-07-10 12:15:31 +08:00
749047814f
fix: use DataViewer instead of UrlWidget (UrlWidget ignores w/h; DataViewer works)
2026-07-10 11:30:05 +08:00
e0dc9963b7
feat: sub_distributors_create now creates organization + supply relation
2026-07-10 11:16:30 +08:00
0c718cf461
fix: fix column name + ensure dspy now returns CRUD page after create
...
- sub_resellers column is sub_reseller_name (not sub_dist_name)
- After ensure, return UrlWidget loading CRUD list filtered by id
- Popup size increased for CRUD page viewing
2026-07-10 11:11:21 +08:00
3a36dc2400
feat: one-click ensure contract/agreement from supplier/distributor list
...
- api/ensure_distribution_agreement.dspy: check/create distribution_agreement for sub_reseller
- api/ensure_supply_contract.dspy: check/create supply_contract for supplier
- sub_distributors_list: toolbar '分销协议' now calls ensure endpoint (was PopupWindow)
- suppliers_list: add toolbar '供销协议' calling ensure endpoint
2026-07-10 10:37:17 +08:00
da5fd85984
fix: add_sub_distributors calls create_sub_reseller for org+account creation
2026-07-09 16:29:11 +08:00
7c0acb5245
fix: UiFile-based upload with drag-drop support, download/delete toolbar
2026-07-03 17:57:48 +08:00
07d5173d75
feat: add download and delete actions to contract attachment list
2026-07-03 17:45:57 +08:00
3017ac295b
fix: bricks.app.getWidgetById → bricks.getWidgetById (app is not the root for widget lookup)
2026-07-03 17:42:03 +08:00
b375ba5155
chore: remove vim swap file
2026-07-03 17:05:35 +08:00
a914380a9b
feat: ContractAttachMgr — supplychain 自有附件管理器
...
ContractAttachMgr 继承 FileMgr, fiid 从 params_kw 透传
contract_upload.dspy: 自有上传端点
contract_attach.ui: 改用 supplychain 自己的上传 dspy
2026-07-03 17:05:24 +08:00
64e240872f
fix: show_error → console.error (bricks 无此方法)
2026-07-03 16:54:26 +08:00
b4d66933a6
fix: get_files() -> this.value (UiFile 正确取值方式)
2026-07-03 16:51:51 +08:00
3497d946ce
fix: Jinja2 转义 — upload_url 用 {% set %} 预计算
...
entire_url("/filemgr/...") 中的 " 导致 Jinja2 解析报错
改用 {% set upload_url = entire_url('/filemgr/upload_file.dspy') %}
2026-07-03 16:48:24 +08:00
a63b6ce427
fix: 附件上传改用 UiFile changed + fetch FormData
...
UiFile changed 事件 → script fetch POST multipart → 成功后 render Tabular
无需点击上传按钮,选择文件即自动上传
2026-07-03 16:46:14 +08:00
1f06a23fa3
fix: 附件上传改用 Form submit_url (multipart) + UiFile multiple
...
Form submit_url 直接POST到 filemgr, 支持multipart文件上传
UiFile multiple: true 浏览器原生支持拖拽
去掉无用的按钮+toolbar
2026-07-03 16:37:26 +08:00
3df4e237fc
feat: 合同附件支持拖拽上传
...
drop_zone: 虚线边框拖放区域, 点击选择文件
Form: 隐藏字段 folderid+fiid + file input
Script: dragover/drop 事件处理, 拖入文件自动上传
2026-07-03 16:23:21 +08:00
e44c84d14c
fix: created_by should be user_id not userorgid
2026-07-03 16:10:02 +08:00
724a912bc9
fix: remove duplicate supplier_id in new_data_url; JSON config is the correct fix, not dspy workaround
2026-07-03 16:09:30 +08:00
698f0f6e29
fix: unwrap list values from bricks code lookups (supplier_id was ['x','x']) before sor.C
2026-07-03 16:00:39 +08:00
fa81da2bbf
fix: return plain dict (ahserver handles serialization), match CRUD pattern exactly
2026-07-03 15:54:19 +08:00
4a0b9db82a
fix: follow CRUD add_llm pattern exactly — ns.copy(), sor.C, no param cleaning
2026-07-03 15:41:58 +08:00
6b6489af02
fix: back to sor.C with simple param cleaning
2026-07-03 15:40:11 +08:00
37c39a053f
fix: sor.I takes 1 arg (data), not 2
2026-07-03 15:33:42 +08:00
fa5a1a3a8e
feat: 供应合同和分销协议支持附件上传下载
...
contract_attach.ui: 附件管理页面(Tabular文件列表 + 上传按钮)
contract_attach_list.dspy: 查询合同附件列表
init.py: ensure_contract_folder() 自动创建附件目录
supply_contracts_list + distribution_agreements_list: 新增'合同附件'toolbar
实现: filemgr folder(contract_id=id, fiid=type)自动管理
2026-07-03 15:32:41 +08:00
1d99375578
fix: use whitelist approach - only pass known table columns to sor.I
2026-07-03 15:29:08 +08:00
959d021537
fix: clean _text suffix fields, use sor.I instead of sor.C, json.dumps return
2026-07-03 15:11:26 +08:00
da64e09090
fix: supply_contracts_create remove json.dumps
2026-07-03 15:10:01 +08:00
32070a53b1
fix: supplychain_accounting update/delete return widgettype format
2026-07-03 15:08:21 +08:00
63a1bedeba
fix: clean non-table params before sor.C; return json.dumps instead of dict
2026-07-03 15:04:34 +08:00
f325ad0c93
fix: CRUD endpoint return format - remove json.dumps
2026-07-03 15:01:08 +08:00
813882ff71
fix: supply_contracts_create generates contract_code automatically
2026-07-03 14:30:35 +08:00
e766111aa1
fix: batch fix dspy violations — remove imports/print/ServerEnv, use return json.dumps, proper widgettype format
2026-07-03 13:57:26 +08:00
e79627c55f
fix: sor.U()参数错误 - id放data字典内而非单独传第3参数
2026-07-02 18:53:04 +08:00
0bdb019e29
fix: 供应商创建同步org+开账,去json.dumps
2026-07-01 16:01:24 +08:00
c4039d2b30
fix: 修复供应链模块全部CRUD配置问题
...
- suppliers_list: 添加orgid的code配置(dataurl+valueField/textField),加入editexclouded
- supplier_resource_price_list: 修正data_filter格式(fields→AND),补充alters全部code字段
- product_supplier_mapping_list: 添加editexclouded,补充product_id的code配置
- platform_supply_products_list: 添加editexclouded,补充relation_id/source_product_id的code配置
- platform_supply_relations_list: 添加editexclouded,补充supplier_org_id/buyer_org_id的code配置
- sales_ledger_list: 添加editexclouded,补充6个FK字段的code配置
- sub_resellers_list: 添加editexclouded
- supplychain_accounting_list: 添加data_filter+filter_labels,补充7个code字段的alters配置
- 新增get_search_sub_distributor_id.dspy和get_search_supply_relation_id.dspy
- load_path.py注册新路径
2026-06-25 16:07:23 +08:00
Hermes Agent
ba4c123c09
fix: supplier_resource_price CRUD JSON合规格式 + CRUD dspy + load_path
...
- supplier_resource_price_list.json重写为规范格式(tblname+params)
- 3个新CRUD dspy(create/update/delete)
- load_path.py LOGINED+OPERATOR注册完整路径
2026-06-21 11:40:44 +08:00
Hermes Agent
2ff2ca7685
feat: 供应商表增加机构ID、内外部标识、结算周期/日、付款方式字段
...
- models/suppliers.json: 新增 orgid, is_external, settlement_cycle, settlement_day, payment_type
- 外部供应商创建时自动在sage库开设机构
- 内部供应商通过机构名称搜索选择机构ID
- suppliers_create.dspy: 处理is_external逻辑
- get_search_orgid.dspy: 机构名称搜索API
- load_path.py: 注册新API路由
2026-06-17 18:59:51 +08:00
Hermes Agent
2dd2953757
fix: rewrite all create dspy files to use pre-loaded functions
...
- Removed all imports (json, ServerEnv, datetime, getID)
- Replaced datetime.now().strftime with timestampstr()
- Added id=getID(), created_at=timestampstr(), updated_at=timestampstr()
- Added resellerid from user org context
- Used DBPools().sqlorContext pattern
- Pass data dict directly to sor.C() without field filtering
- Fixed: suppliers, sub_distributors, sub_resellers, distribution_agreements,
distribution_agreement_items, supply_contracts, supply_contract_items,
platform_supply_products, platform_supply_relations, product_supplier_mapping,
sales_ledger, supplychain_accounting
2026-06-17 17:49:48 +08:00
Hermes Agent
047ec1800a
feat: 完善分销商管理CRUD — sub_distributors/distribution_agreements/distribution_agreement_items
...
- 增强3个CRUD JSON配置:过滤器、子表关联、下拉选择alters
- 修复9个API dspy文件:移除违规import,改用init.py函数直接调用
- 新增2个搜索API:get_search_sub_reseller_id、get_search_agreement_id
- 自动生成分销商编号(SD-YYYYMMDD-NNNN)和协议编号(DA-YYYYMMDD-NNNN)
- 级联删除:删除分销商时级联删除协议及明细,删除协议时级联删除明细
- 更新load_path.py注册新API路径
2026-06-17 15:18:27 +08:00
Hermes Agent
bfc50f2364
feat: 补充供销协议和协议产品明细折扣CRUD管理
...
- 新增 json/supply_contracts_list.json CRUD定义(供销协议管理)
- 新增 json/supply_contract_items_list.json CRUD定义(协议产品明细折扣)
- 修复 json/suppliers_list.json JSON语法错误(缺少逗号)
- 修复6个API dspy文件违规(移除import/print,改用return)
- 新增4个搜索API(供应商/合同/产品分类/产品下拉数据)
- 新增 supplychain/__init__.py 导出所有公共函数
- 重新生成CRUD UI文件并修正editable URL指向自定义API
- 更新load_path.py注册新路径
- 添加.gitignore排除自动生成文件
2026-06-17 15:03:46 +08:00
8766afa8c0
fix(supplychain): 规范修复 + P0函数注册 + 文档完善
...
- 修复12个.dspy文件: 移除import/print, 改用return
- init.py: 添加9个P0 CRUD函数 + 单复数兼容注册
- load_path.py: 补充15个CRUD子目录路径
- README.md: 添加P0表说明 + 业务API + 部署清单
- global_menu.ui: 已有supplychain入口(验证通过)
2026-06-05 22:34:09 +08:00
dff8b0de2a
feat(supplychain): P0 平台内供应链 - 供销关系/产品映射/跨组织引入
...
新增3张核心表:
- platform_supply_relations: 平台内org-to-org供销关系(分销/代理/直供)
- platform_supply_products: 供销产品明细(供货价/折扣/佣金)
- product_supplier_mapping: 统一产品供应映射(内部+外部)
新增3个业务API:
- query_platform_suppliers: 查询平台可用供应方机构
- query_platform_products: 查询供应方产品目录
- import_supplier_product: 引入供应方产品到需求方
更新: init/data.json(6组appcodes), load_path.py(RBAC权限), menu.ui(分组菜单)
2026-06-05 22:11:33 +08:00
ed9c96d719
Initial commit: supplychain module - supplier, sub-reseller, contract, agreement, and sales ledger management
2026-05-26 14:21:31 +08:00
092d74133e
fix: 添加product引用, 创建scripts/load_path.py, 修复.dspy代码生成逻辑
...
- models/*.json: 在supply_contract_items, distribution_agreement_items,
supplychain_accounting的codes段添加products/product_types引用
- scripts/load_path.py: 模块RBAC权限管理脚本, 包含any/logined/operator/sale四类权限
- supplychain/init.py: 重命名get_module_dbname为_get_dbname避免覆盖全局函数
- wwwroot/api/*_create.dspy: 修复自动编号生成逻辑(移除死代码条件判断)
2026-05-25 15:37:06 +08:00
da32159ad9
feat: 供应商和分销商管理模块 (supplychain)
...
- 7个数据库表: suppliers, supply_contracts, supply_contract_items,
sub_distributors, distribution_agreements, distribution_agreement_items,
supplychain_accounting
- CRUD JSON配置 (7个列表 + editable段)
- API端点: create/update/delete (21个) + calculate_accounting + query_discount (2个)
- 前端页面: index.ui + 5个功能页 + menu.ui
- 记账计算: 自动查找有效合同/协议折扣,计算进货金额、分销金额、利润
- 折扣查找优先级: 精确产品 > 产品分类 > 默认折扣
- productid/prodtypeid引用product模块(即将开发)
2026-05-25 15:37:06 +08:00