cli-dolibarr 3.2.0__tar.gz → 3.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/PKG-INFO +1 -1
  2. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/README.md +3 -4
  3. cli_dolibarr-3.3.0/cli_dolibarr/dolibarr/__init__.py +1 -0
  4. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/schema.py +6 -35
  5. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/core/schema_manager.py +1 -8
  6. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/schema.json +287 -1
  7. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr.egg-info/PKG-INFO +1 -1
  8. cli_dolibarr-3.2.0/cli_dolibarr/dolibarr/__init__.py +0 -1
  9. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/LICENSE +0 -0
  10. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/README.md +0 -0
  11. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/__init__.py +0 -0
  12. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/_template.py +0 -0
  13. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/accountancy.py +0 -0
  14. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/agendaevents.py +0 -0
  15. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/apibridge.py +0 -0
  16. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/bankaccounts.py +0 -0
  17. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/boms.py +0 -0
  18. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/categories.py +0 -0
  19. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/config.py +0 -0
  20. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/contacts.py +0 -0
  21. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/contracts.py +0 -0
  22. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/delivery.py +0 -0
  23. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/documents.py +0 -0
  24. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/donations.py +0 -0
  25. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/expensereports.py +0 -0
  26. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/interventions.py +0 -0
  27. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/invoices.py +0 -0
  28. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/knowledge.py +0 -0
  29. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/login.py +0 -0
  30. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/member_types.py +0 -0
  31. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/members.py +0 -0
  32. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/mobilehub.py +0 -0
  33. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/mobilehubapi.py +0 -0
  34. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/mos.py +0 -0
  35. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/multicurrencies.py +0 -0
  36. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/orderprocessor.py +0 -0
  37. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/orders.py +0 -0
  38. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/partnerships.py +0 -0
  39. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/pdfa.py +0 -0
  40. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/products.py +0 -0
  41. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/projects.py +0 -0
  42. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/proposals.py +0 -0
  43. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/quickprint.py +0 -0
  44. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/receptions.py +0 -0
  45. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/recruitments.py +0 -0
  46. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/salaries.py +0 -0
  47. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/setup.py +0 -0
  48. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/shipments.py +0 -0
  49. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/status.py +0 -0
  50. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/stock.py +0 -0
  51. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/stockmodule.py +0 -0
  52. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/stockmovements.py +0 -0
  53. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/subscriptions.py +0 -0
  54. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/supplier_invoices.py +0 -0
  55. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/supplier_orders.py +0 -0
  56. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/supplier_proposals.py +0 -0
  57. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/supplierinvoices.py +0 -0
  58. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/supplierorders.py +0 -0
  59. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/supplierproposals.py +0 -0
  60. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/system.py +0 -0
  61. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/tasks.py +0 -0
  62. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/thirdparties.py +0 -0
  63. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/tickets.py +0 -0
  64. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/users.py +0 -0
  65. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/warehouses.py +0 -0
  66. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/webhook.py +0 -0
  67. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/workstations.py +0 -0
  68. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/commands/zapier.py +0 -0
  69. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/core/__init__.py +0 -0
  70. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/core/client.py +0 -0
  71. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/core/config.py +0 -0
  72. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/core/output.py +0 -0
  73. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/core/schema_agents.py +0 -0
  74. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/core/schema_generator.py +0 -0
  75. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/core/session_client.py +0 -0
  76. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/dolibarr_cli.py +0 -0
  77. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/extrafields_cache.json +0 -0
  78. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/hermes_plugin/__init__.py +0 -0
  79. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/models_supplement.json +0 -0
  80. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/tests/__init__.py +0 -0
  81. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/tests/test_core.py +0 -0
  82. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/tests/test_enrich.py +0 -0
  83. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/tests/test_full_e2e.py +0 -0
  84. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/tests/test_tools.py +0 -0
  85. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/tools/__init__.py +0 -0
  86. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/tools/executor.py +0 -0
  87. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/tools/tools_schema.py +0 -0
  88. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr/dolibarr/utils/__init__.py +0 -0
  89. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr.egg-info/SOURCES.txt +0 -0
  90. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr.egg-info/dependency_links.txt +0 -0
  91. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr.egg-info/entry_points.txt +0 -0
  92. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr.egg-info/requires.txt +0 -0
  93. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/cli_dolibarr.egg-info/top_level.txt +0 -0
  94. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/pyproject.toml +0 -0
  95. {cli_dolibarr-3.2.0 → cli_dolibarr-3.3.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cli-dolibarr
3
- Version: 3.2.0
3
+ Version: 3.3.0
4
4
  Summary: CLI tool for Dolibarr ERP/CRM REST API management
5
5
  Author: CLI Anything
6
6
  License-Expression: MIT
@@ -128,9 +128,9 @@ dolibarr> exit
128
128
 
129
129
  | 命令 | 说明 |
130
130
  |------|------|
131
- | `schema refresh --admin-api-key KEY` | 一键刷新:sync → extrafields → enrich → auto-infer |
131
+ | `schema refresh` | 一键刷新:sync → extrafields → enrich → auto-infer |
132
132
  | `schema sync` | 从 Dolibarr swagger 端点拉取最新 API 定义 |
133
- | `schema extrafields --admin-api-key KEY` | 拉取自定义字段定义并注入 schema(需管理员 key) |
133
+ | `schema extrafields` | 拉取自定义字段定义并注入 schema |
134
134
  | `schema enrich` | 用 models_supplement.json 补全 model 字段定义(sync 后必须执行) |
135
135
  | `schema diff` | 对比覆盖情况,显示哪些端点尚无 CLI 命令 |
136
136
  | `schema generate --all` | 自动生成缺失的 CLI 命令文件 |
@@ -231,9 +231,8 @@ python -m vllm.entrypoints.openai.api_server \
231
231
  | 变量 | 说明 |
232
232
  |------|------|
233
233
  | `DOLIBARR_URL` | API 完整地址,例如 `https://your-dolibarr.example.com/api/index.php` |
234
- | `DOLIBARR_API_KEY` | Dolibarr 用户设置中的 API Key |
234
+ | `DOLIBARR_API_KEY` | Dolibarr API Key |
235
235
  | `DOLIBARR_VERIFY_SSL` | 设为 `1` 或 `true` 启用 SSL 证书验证 |
236
- | `DOLIBARR_ADMIN_API_KEY` | 管理员 API Key,用于拉取自定义字段定义 |
237
236
  | `OPENAI_API_KEY` | OpenAI 兼容 API Key,用于 auto-infer 生成精确中文描述(可选) |
238
237
  | `OPENAI_BASE_URL` | OpenAI 兼容 API 地址(默认 `https://api.openai.com/v1`,可选) |
239
238
  | `OPENAI_MODEL` | 使用的模型名称(默认 `gpt-4o-mini`,可选) |
@@ -0,0 +1 @@
1
+ __version__ = "3.3.0"
@@ -297,32 +297,15 @@ def export(ctx, fmt, output_file):
297
297
  sys.exit(1)
298
298
 
299
299
 
300
- def _resolve_admin_key(ctx, admin_api_key):
301
- """Resolve admin API key: CLI option > env var > default client key."""
302
- if admin_api_key:
303
- return admin_api_key
304
- env_key = os.environ.get('DOLIBARR_ADMIN_API_KEY')
305
- if env_key:
306
- return env_key
307
- return None
308
-
309
-
310
300
  @schema.command()
311
- @click.option('--admin-api-key', default=None,
312
- help='Admin API key (overrides config). Falls back to DOLIBARR_ADMIN_API_KEY env var.')
313
301
  @click.pass_context
314
- def extrafields(ctx, admin_api_key):
302
+ def extrafields(ctx):
315
303
  """Fetch extrafield definitions from Dolibarr and inject into schema.
316
304
 
317
- Calls the /setup/extrafields API endpoint (requires admin API key) and
318
- adds array_options properties to the corresponding models in schema.json.
319
-
320
- Admin key resolution: --admin-api-key > DOLIBARR_ADMIN_API_KEY env > default key.
305
+ Calls the /setup/extrafields API endpoint and adds array_options
306
+ properties to the corresponding models in schema.json.
321
307
  """
322
308
  client = _get_client(ctx)
323
- resolved_key = _resolve_admin_key(ctx, admin_api_key)
324
- if resolved_key:
325
- client.session.headers['DOLAPIKEY'] = resolved_key
326
309
  try:
327
310
  manager = SchemaManager()
328
311
  click.echo("Fetching extrafield definitions...")
@@ -344,22 +327,10 @@ def extrafields(ctx, admin_api_key):
344
327
 
345
328
 
346
329
  @schema.command()
347
- @click.option('--admin-api-key', default=None,
348
- help='Admin API key. Falls back to DOLIBARR_ADMIN_API_KEY env var.')
349
330
  @click.pass_context
350
- def refresh(ctx, admin_api_key):
351
- """Full schema refresh: sync + extrafields + enrich + auto-infer.
352
-
353
- One-command pipeline that:
354
- 1. Syncs API schema from Dolibarr swagger
355
- 2. Fetches extrafield definitions (admin key via --admin-api-key or DOLIBARR_ADMIN_API_KEY)
356
- 3. Enriches models with supplement definitions
357
- 4. Auto-infers remaining bad models
358
- """
331
+ def refresh(ctx):
332
+ """Full schema refresh: sync + extrafields + enrich + auto-infer."""
359
333
  client = _get_client(ctx)
360
- resolved_key = _resolve_admin_key(ctx, admin_api_key)
361
- if resolved_key:
362
- client.session.headers['DOLAPIKEY'] = resolved_key
363
334
  try:
364
335
  manager = SchemaManager()
365
336
  click.echo("Refreshing schema...")
@@ -380,7 +351,7 @@ def refresh(ctx, admin_api_key):
380
351
  click.echo(f" {ef_stats['injected_fields']} fields injected "
381
352
  f"into {ef_stats['injected_models']} models")
382
353
  except RuntimeError:
383
- click.echo(" Skipped (requires admin API key)")
354
+ click.echo(" Skipped (permission denied)")
384
355
 
385
356
  click.echo(" [3/4] Enriching models...")
386
357
  enrich_stats = manager.enrich()
@@ -461,14 +461,7 @@ class SchemaManager:
461
461
  return stats
462
462
 
463
463
  def refresh(self, client) -> Dict[str, Any]:
464
- """Full schema refresh: sync + extrafields + enrich.
465
-
466
- One-command pipeline that:
467
- 1. Syncs API schema from Dolibarr swagger
468
- 2. Fetches extrafield definitions (best-effort, skips if no admin key)
469
- 3. Enriches models with supplement definitions
470
- 4. Auto-infers remaining bad models (best-effort)
471
- """
464
+ """Full schema refresh: sync + extrafields + enrich + auto-infer."""
472
465
  swagger = self.fetch_swagger(client)
473
466
  schema = self.normalize(swagger)
474
467
  self.save(schema)
@@ -1,5 +1,5 @@
1
1
  {
2
- "synced_at": "2026-05-23T07:13:02Z",
2
+ "synced_at": "2026-05-23T12:42:43Z",
3
3
  "source": "swagger",
4
4
  "dolibarr_version": "1",
5
5
  "endpoints": [
@@ -2984,6 +2984,244 @@
2984
2984
  "request_body": null,
2985
2985
  "response_schema": "string"
2986
2986
  },
2987
+ {
2988
+ "path": "/productplus/hscode-specs",
2989
+ "method": "GET",
2990
+ "summary": "获取HS编码规格列表 🔐",
2991
+ "group": "productplus",
2992
+ "parameters": [
2993
+ {
2994
+ "name": "sortfield",
2995
+ "in": "query",
2996
+ "type": "string",
2997
+ "required": false
2998
+ },
2999
+ {
3000
+ "name": "sortorder",
3001
+ "in": "query",
3002
+ "type": "string",
3003
+ "required": false
3004
+ },
3005
+ {
3006
+ "name": "limit",
3007
+ "in": "query",
3008
+ "type": "integer",
3009
+ "required": false
3010
+ },
3011
+ {
3012
+ "name": "page",
3013
+ "in": "query",
3014
+ "type": "integer",
3015
+ "required": false
3016
+ }
3017
+ ],
3018
+ "request_body": null,
3019
+ "response_schema": "array"
3020
+ },
3021
+ {
3022
+ "path": "/productplus/hscode-specs",
3023
+ "method": "POST",
3024
+ "summary": "创建HS编码规格 🔐",
3025
+ "group": "productplus",
3026
+ "parameters": [],
3027
+ "request_body": "productplusCreateHscodeSpecModel",
3028
+ "response_schema": "array"
3029
+ },
3030
+ {
3031
+ "path": "/productplus/hscode-specs/{id}",
3032
+ "method": "GET",
3033
+ "summary": "按ID获取HS编码规格 🔐",
3034
+ "group": "productplus",
3035
+ "parameters": [
3036
+ {
3037
+ "name": "id",
3038
+ "in": "path",
3039
+ "type": "integer",
3040
+ "required": true
3041
+ }
3042
+ ],
3043
+ "request_body": null,
3044
+ "response_schema": "string"
3045
+ },
3046
+ {
3047
+ "path": "/productplus/hscode-specs/{id}",
3048
+ "method": "PUT",
3049
+ "summary": "更新HS编码规格 🔐",
3050
+ "group": "productplus",
3051
+ "parameters": [
3052
+ {
3053
+ "name": "id",
3054
+ "in": "path",
3055
+ "type": "integer",
3056
+ "required": true
3057
+ }
3058
+ ],
3059
+ "request_body": "productplusUpdateHscodeSpecModel",
3060
+ "response_schema": "array"
3061
+ },
3062
+ {
3063
+ "path": "/productplus/hscode-specs/{id}",
3064
+ "method": "DELETE",
3065
+ "summary": "删除HS编码规格 🔐",
3066
+ "group": "productplus",
3067
+ "parameters": [
3068
+ {
3069
+ "name": "id",
3070
+ "in": "path",
3071
+ "type": "integer",
3072
+ "required": true
3073
+ }
3074
+ ],
3075
+ "request_body": null,
3076
+ "response_schema": "array"
3077
+ },
3078
+ {
3079
+ "path": "/productplus/hscode-specs/by-code/{hscode}",
3080
+ "method": "GET",
3081
+ "summary": "按编码获取HS编码规格 🔐",
3082
+ "group": "productplus",
3083
+ "parameters": [
3084
+ {
3085
+ "name": "hscode",
3086
+ "in": "path",
3087
+ "type": "string",
3088
+ "required": true
3089
+ }
3090
+ ],
3091
+ "request_body": null,
3092
+ "response_schema": "string"
3093
+ },
3094
+ {
3095
+ "path": "/productplus/currency-prices",
3096
+ "method": "GET",
3097
+ "summary": "获取多货币定价列表 🔐",
3098
+ "group": "productplus",
3099
+ "parameters": [
3100
+ {
3101
+ "name": "fk_product",
3102
+ "in": "query",
3103
+ "type": "integer",
3104
+ "required": false
3105
+ },
3106
+ {
3107
+ "name": "currency_code",
3108
+ "in": "query",
3109
+ "type": "string",
3110
+ "required": false
3111
+ },
3112
+ {
3113
+ "name": "fk_soc",
3114
+ "in": "query",
3115
+ "type": "integer",
3116
+ "required": false
3117
+ },
3118
+ {
3119
+ "name": "limit",
3120
+ "in": "query",
3121
+ "type": "integer",
3122
+ "required": false
3123
+ },
3124
+ {
3125
+ "name": "page",
3126
+ "in": "query",
3127
+ "type": "integer",
3128
+ "required": false
3129
+ }
3130
+ ],
3131
+ "request_body": null,
3132
+ "response_schema": "array"
3133
+ },
3134
+ {
3135
+ "path": "/productplus/currency-prices",
3136
+ "method": "POST",
3137
+ "summary": "创建多货币定价 (Upsert逻辑) 🔐",
3138
+ "group": "productplus",
3139
+ "parameters": [],
3140
+ "request_body": "productplusCreateCurrencyPriceModel",
3141
+ "response_schema": "array"
3142
+ },
3143
+ {
3144
+ "path": "/productplus/currency-prices/{id}",
3145
+ "method": "GET",
3146
+ "summary": "按ID获取多货币定价 🔐",
3147
+ "group": "productplus",
3148
+ "parameters": [
3149
+ {
3150
+ "name": "id",
3151
+ "in": "path",
3152
+ "type": "integer",
3153
+ "required": true
3154
+ }
3155
+ ],
3156
+ "request_body": null,
3157
+ "response_schema": "string"
3158
+ },
3159
+ {
3160
+ "path": "/productplus/currency-prices/{id}",
3161
+ "method": "PUT",
3162
+ "summary": "按ID更新多货币定价 🔐",
3163
+ "group": "productplus",
3164
+ "parameters": [
3165
+ {
3166
+ "name": "id",
3167
+ "in": "path",
3168
+ "type": "integer",
3169
+ "required": true
3170
+ }
3171
+ ],
3172
+ "request_body": "productplusUpdateCurrencyPriceModel",
3173
+ "response_schema": "array"
3174
+ },
3175
+ {
3176
+ "path": "/productplus/currency-prices/{id}",
3177
+ "method": "DELETE",
3178
+ "summary": "删除多货币定价 🔐",
3179
+ "group": "productplus",
3180
+ "parameters": [
3181
+ {
3182
+ "name": "id",
3183
+ "in": "path",
3184
+ "type": "integer",
3185
+ "required": true
3186
+ }
3187
+ ],
3188
+ "request_body": null,
3189
+ "response_schema": "array"
3190
+ },
3191
+ {
3192
+ "path": "/productplus/price-lookup",
3193
+ "method": "GET",
3194
+ "summary": "价格查询 - 阶梯价格 + 客户优先级 🔐",
3195
+ "group": "productplus",
3196
+ "parameters": [
3197
+ {
3198
+ "name": "id",
3199
+ "in": "query",
3200
+ "type": "integer",
3201
+ "required": false
3202
+ },
3203
+ {
3204
+ "name": "currency",
3205
+ "in": "query",
3206
+ "type": "string",
3207
+ "required": false
3208
+ },
3209
+ {
3210
+ "name": "qty",
3211
+ "in": "query",
3212
+ "type": "integer",
3213
+ "required": false
3214
+ },
3215
+ {
3216
+ "name": "socid",
3217
+ "in": "query",
3218
+ "type": "integer",
3219
+ "required": false
3220
+ }
3221
+ ],
3222
+ "request_body": null,
3223
+ "response_schema": "array"
3224
+ },
2987
3225
  {
2988
3226
  "path": "/products/{id}",
2989
3227
  "method": "GET",
@@ -11250,6 +11488,54 @@
11250
11488
  }
11251
11489
  }
11252
11490
  },
11491
+ "productplusCreateHscodeSpecModel": {
11492
+ "properties": {
11493
+ "dummy": {
11494
+ "type": "integer",
11495
+ "description": "Restler POST参数占位"
11496
+ },
11497
+ "request_data": {
11498
+ "type": "array",
11499
+ "description": "请求体JSON"
11500
+ }
11501
+ }
11502
+ },
11503
+ "productplusUpdateHscodeSpecModel": {
11504
+ "properties": {
11505
+ "dummy": {
11506
+ "type": "integer",
11507
+ "description": "Restler PUT参数占位"
11508
+ },
11509
+ "request_data": {
11510
+ "type": "array",
11511
+ "description": "请求体JSON"
11512
+ }
11513
+ }
11514
+ },
11515
+ "productplusCreateCurrencyPriceModel": {
11516
+ "properties": {
11517
+ "dummy": {
11518
+ "type": "integer",
11519
+ "description": "Restler POST参数占位"
11520
+ },
11521
+ "request_data": {
11522
+ "type": "array",
11523
+ "description": "请求体JSON"
11524
+ }
11525
+ }
11526
+ },
11527
+ "productplusUpdateCurrencyPriceModel": {
11528
+ "properties": {
11529
+ "dummy": {
11530
+ "type": "integer",
11531
+ "description": "Restler PUT参数占位"
11532
+ },
11533
+ "request_data": {
11534
+ "type": "array",
11535
+ "description": "请求体JSON"
11536
+ }
11537
+ }
11538
+ },
11253
11539
  "updateProductsModel": {
11254
11540
  "properties": {
11255
11541
  "label": {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cli-dolibarr
3
- Version: 3.2.0
3
+ Version: 3.3.0
4
4
  Summary: CLI tool for Dolibarr ERP/CRM REST API management
5
5
  Author: CLI Anything
6
6
  License-Expression: MIT
@@ -1 +0,0 @@
1
- __version__ = "3.2.0"
File without changes
File without changes