celerp 2.1.1__tar.gz → 2.2.1__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 (619) hide show
  1. {celerp-2.1.1 → celerp-2.2.1}/PKG-INFO +12 -9
  2. {celerp-2.1.1 → celerp-2.2.1}/README.md +11 -8
  3. {celerp-2.1.1 → celerp-2.2.1}/celerp/config.py +5 -0
  4. {celerp-2.1.1 → celerp-2.2.1}/celerp/events/schemas.py +2 -0
  5. {celerp-2.1.1 → celerp-2.2.1}/celerp/main.py +41 -1
  6. {celerp-2.1.1 → celerp-2.2.1}/celerp/output/pdf.py +1 -1
  7. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/companies.py +2 -4
  8. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/events.py +1 -1
  9. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/health.py +0 -10
  10. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/stars.py +2 -2
  11. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/auto_je.py +3 -2
  12. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/cost_visibility.py +18 -5
  13. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/field_schema.py +23 -1
  14. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/permissions.py +1 -0
  15. {celerp-2.1.1 → celerp-2.2.1}/celerp.egg-info/PKG-INFO +12 -9
  16. {celerp-2.1.1 → celerp-2.2.1}/celerp.egg-info/SOURCES.txt +1 -0
  17. {celerp-2.1.1 → celerp-2.2.1}/celerp.egg-info/scm_file_list.json +28 -0
  18. celerp-2.2.1/celerp.egg-info/scm_version.json +8 -0
  19. {celerp-2.1.1 → celerp-2.2.1}/conftest.py +37 -9
  20. celerp-2.2.1/conftest_support.py +44 -0
  21. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_accounting_gaps.py +2 -2
  22. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-dashboard/celerp_dashboard/routes.py +1 -1
  23. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/doc_constants.py +7 -0
  24. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/routes.py +396 -85
  25. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_audits.py +1 -1
  26. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_freight_je.py +1 -1
  27. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_freight_lines.py +2 -2
  28. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_fulfill_no_split.py +1 -1
  29. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_fulfillment_activity.py +4 -4
  30. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_inbound_je_lifecycle.py +3 -3
  31. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_inventory_account_reconciliation.py +2 -2
  32. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_landed_receive.py +1 -1
  33. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_line_delete_persist.py +1 -1
  34. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_line_identifier.py +1 -1
  35. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_payment_void_activity.py +1 -1
  36. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_receive_sku_batch.py +1 -1
  37. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_service_lines.py +3 -3
  38. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_void_guards.py +1 -1
  39. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/celerp_inventory/routes.py +469 -41
  40. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/tests/test_labels.py +2 -2
  41. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/celerp_manufacturing/routes.py +19 -5
  42. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_auto_complete_on_finalize.py +1 -1
  43. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_bom_removed.py +2 -2
  44. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_build_api.py +45 -1
  45. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_item_workflow_api.py +1 -1
  46. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_manufacture_from_doc.py +1 -1
  47. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_manufacturing.py +2 -1
  48. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_manufacturing_module.py +8 -8
  49. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_phase2_manufacturing_validations.py +2 -2
  50. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_production_order.py +2 -2
  51. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_to_make_allocation.py +1 -1
  52. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_work_centers_and_settings.py +4 -4
  53. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-subscriptions/celerp_subscriptions/routes.py +13 -0
  54. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-subscriptions/tests/test_subscriptions.py +20 -0
  55. celerp-2.2.1/default_modules/first_party.lock.json +16 -0
  56. {celerp-2.1.1 → celerp-2.2.1}/test_helpers.py +1 -1
  57. {celerp-2.1.1 → celerp-2.2.1}/ui/api_client.py +42 -3
  58. {celerp-2.1.1 → celerp-2.2.1}/ui/components/activity.py +1 -1
  59. {celerp-2.1.1 → celerp-2.2.1}/ui/components/shell.py +77 -9
  60. {celerp-2.1.1 → celerp-2.2.1}/ui/components/table.py +37 -6
  61. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/ar.json +0 -1
  62. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/de.json +0 -1
  63. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/en.json +1 -1
  64. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/es.json +0 -1
  65. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/fr.json +0 -1
  66. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/id.json +0 -1
  67. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/it.json +0 -1
  68. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/ja.json +0 -1
  69. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/pt.json +0 -1
  70. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/th.json +0 -1
  71. {celerp-2.1.1 → celerp-2.2.1}/ui/locales/vi.json +0 -1
  72. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/contacts.py +2 -1
  73. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/documents.py +500 -145
  74. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/inventory.py +217 -23
  75. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/manufacturing.py +4 -2
  76. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/reconciliation.py +2 -2
  77. celerp-2.2.1/ui/routes/search.py +152 -0
  78. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings.py +0 -24
  79. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_general.py +0 -7
  80. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/setup.py +4 -4
  81. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/subscriptions.py +2 -1
  82. {celerp-2.1.1 → celerp-2.2.1}/ui/static/app.css +51 -7
  83. celerp-2.1.1/celerp.egg-info/scm_version.json +0 -8
  84. celerp-2.1.1/default_modules/first_party.lock.json +0 -16
  85. celerp-2.1.1/ui/routes/search.py +0 -72
  86. {celerp-2.1.1 → celerp-2.2.1}/CLA.md +0 -0
  87. {celerp-2.1.1 → celerp-2.2.1}/CONTRIBUTING.md +0 -0
  88. {celerp-2.1.1 → celerp-2.2.1}/LICENSE +0 -0
  89. {celerp-2.1.1 → celerp-2.2.1}/LICENSING.md +0 -0
  90. {celerp-2.1.1 → celerp-2.2.1}/MANIFEST.in +0 -0
  91. {celerp-2.1.1 → celerp-2.2.1}/NOTICE +0 -0
  92. {celerp-2.1.1 → celerp-2.2.1}/alembic.ini +0 -0
  93. {celerp-2.1.1 → celerp-2.2.1}/celerp/__init__.py +0 -0
  94. {celerp-2.1.1 → celerp-2.2.1}/celerp/__main__.py +0 -0
  95. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/__init__.py +0 -0
  96. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/batch.py +0 -0
  97. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/cleanup.py +0 -0
  98. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/commands.py +0 -0
  99. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/conversations.py +0 -0
  100. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/files.py +0 -0
  101. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/intent.py +0 -0
  102. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/llm.py +0 -0
  103. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/memory.py +0 -0
  104. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/models.py +0 -0
  105. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/page_count.py +0 -0
  106. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/quota.py +0 -0
  107. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/service.py +0 -0
  108. {celerp-2.1.1 → celerp-2.2.1}/celerp/ai/tools.py +0 -0
  109. {celerp-2.1.1 → celerp-2.2.1}/celerp/alembic.ini +0 -0
  110. {celerp-2.1.1 → celerp-2.2.1}/celerp/alembic_config.py +0 -0
  111. {celerp-2.1.1 → celerp-2.2.1}/celerp/cli.py +0 -0
  112. {celerp-2.1.1 → celerp-2.2.1}/celerp/compat.py +0 -0
  113. {celerp-2.1.1 → celerp-2.2.1}/celerp/compute/__init__.py +0 -0
  114. {celerp-2.1.1 → celerp-2.2.1}/celerp/compute/aggregations.py +0 -0
  115. {celerp-2.1.1 → celerp-2.2.1}/celerp/compute/valuation.py +0 -0
  116. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/__init__.py +0 -0
  117. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/base.py +0 -0
  118. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/daily_scheduler.py +0 -0
  119. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/http.py +0 -0
  120. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/images.py +0 -0
  121. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/quickbooks.py +0 -0
  122. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/registry.py +0 -0
  123. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/relay_token.py +0 -0
  124. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/shopify.py +0 -0
  125. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/sync_runner.py +0 -0
  126. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/upsert.py +0 -0
  127. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/util.py +0 -0
  128. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/webhooks.py +0 -0
  129. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/woocommerce.py +0 -0
  130. {celerp-2.1.1 → celerp-2.2.1}/celerp/connectors/xero.py +0 -0
  131. {celerp-2.1.1 → celerp-2.2.1}/celerp/constants.py +0 -0
  132. {celerp-2.1.1 → celerp-2.2.1}/celerp/db.py +0 -0
  133. {celerp-2.1.1 → celerp-2.2.1}/celerp/embedded_pg.py +0 -0
  134. {celerp-2.1.1 → celerp-2.2.1}/celerp/events/__init__.py +0 -0
  135. {celerp-2.1.1 → celerp-2.2.1}/celerp/events/engine.py +0 -0
  136. {celerp-2.1.1 → celerp-2.2.1}/celerp/events/types.py +0 -0
  137. {celerp-2.1.1 → celerp-2.2.1}/celerp/gateway/__init__.py +0 -0
  138. {celerp-2.1.1 → celerp-2.2.1}/celerp/gateway/client.py +0 -0
  139. {celerp-2.1.1 → celerp-2.2.1}/celerp/gateway/state.py +0 -0
  140. {celerp-2.1.1 → celerp-2.2.1}/celerp/importers/__init__.py +0 -0
  141. {celerp-2.1.1 → celerp-2.2.1}/celerp/importers/importer.py +0 -0
  142. {celerp-2.1.1 → celerp-2.2.1}/celerp/importers/schema.py +0 -0
  143. {celerp-2.1.1 → celerp-2.2.1}/celerp/middleware.py +0 -0
  144. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/README.md +0 -0
  145. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/_auto_stamp.py +0 -0
  146. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/_data_reconcile.py +0 -0
  147. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/_json_compat.py +0 -0
  148. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/env.py +0 -0
  149. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/script.py.mako +0 -0
  150. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/a0b1c2d3e4f5_seed_landed_cost_clearing_accounts.py +0 -0
  151. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/a1b2c3d4e5f6_add_doc_share_tokens.py +0 -0
  152. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/b1c2d3e4f5a6_add_supporter_badges.py +0 -0
  153. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/b2c3d4e5f6a7_add_import_batches.py +0 -0
  154. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/b3c4d5e6f7a8_expand_role_permissions_to_role_grants.py +0 -0
  155. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/c1d2e3f4a5b6_add_marketplace.py +0 -0
  156. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/c2d3e4f5a6b7_add_is_sync_to_shopify.py +0 -0
  157. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/c4d5e6f7a8b9_account_cash_flow_category.py +0 -0
  158. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/d0e1f2a3b4c5_add_share_token_expiry.py +0 -0
  159. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/d2e3f4a5b6c7_add_password_reset_token.py +0 -0
  160. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/d5e6f7a8b9c0_rename_fx_rounding_to_fx_difference.py +0 -0
  161. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/e3f4a5b6c7d8_add_company_is_active.py +0 -0
  162. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/e4f5a6b7c8d9_backfill_connector_idempotency_key.py +0 -0
  163. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/e7c9a1b3d5f2_work_center_default_columns.py +0 -0
  164. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/f1a2b3c4d5e6_move_accounts_marketplace_to_modules.py +0 -0
  165. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/f6a7b8c9d0e1_seed_fx_rounding_account.py +0 -0
  166. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/f8a9b0c1d2e3_work_center_default_backfill.py +0 -0
  167. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/fd5de461e14e_initial_schema.py +0 -0
  168. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/g1h2i3j4k5l6_add_consignment_flag.py +0 -0
  169. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/h2i3j4k5l6m7_add_bank_accounts_and_reconciliation.py +0 -0
  170. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/j4k5l6m7n8o9_labels_db_persistence.py +0 -0
  171. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/k5l6m7n8o9p0_add_reconciliation_v2.py +0 -0
  172. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/l6m7n8o9p0q1_add_sync_runs_table.py +0 -0
  173. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/m7n8o9p0q1r2_add_connector_configs_and_outbound_queue.py +0 -0
  174. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/n8o9p0q1r2s3_backfill_payment_date.py +0 -0
  175. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/o9p0q1r2s3t4_backfill_item_price_fields.py +0 -0
  176. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/p1q2r3s4t5u6_add_session_registry_and_user_auth_state.py +0 -0
  177. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/q2r3s4t5u6v7_add_system_runtime_state.py +0 -0
  178. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/r3s4t5u6v7w8_add_projections_company_entity_type_index.py +0 -0
  179. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/s4t5u6v7w8x9_drop_user_company_id_role.py +0 -0
  180. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/t5u6v7w8x9y0_seed_inventory_sub_accounts.py +0 -0
  181. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/u6v7w8x9y0z1_backfill_item_prices_from_attributes.py +0 -0
  182. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/v7w8x9y0z1a2_backfill_purchase_unit_defaults.py +0 -0
  183. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/w8x9y0z1a2b3_backfill_category_unit_defaults.py +0 -0
  184. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/x7y8z9a0b1c2_add_projection_created_at.py +0 -0
  185. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/y8z9a0b1c2d3_per_company_ledger_idempotency.py +0 -0
  186. {celerp-2.1.1 → celerp-2.2.1}/celerp/migrations/versions/z9a0b1c2d3e4_work_centers.py +0 -0
  187. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/__init__.py +0 -0
  188. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/accounting.py +0 -0
  189. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/ai.py +0 -0
  190. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/auth.py +0 -0
  191. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/base.py +0 -0
  192. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/company.py +0 -0
  193. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/connector_config.py +0 -0
  194. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/import_batch.py +0 -0
  195. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/ledger.py +0 -0
  196. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/marketplace.py +0 -0
  197. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/notification.py +0 -0
  198. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/projections.py +0 -0
  199. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/share.py +0 -0
  200. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/supporter.py +0 -0
  201. {celerp-2.1.1 → celerp-2.2.1}/celerp/models/sync_run.py +0 -0
  202. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/__init__.py +0 -0
  203. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/api.py +0 -0
  204. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/audit.py +0 -0
  205. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/demotion.py +0 -0
  206. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/importer.py +0 -0
  207. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/license.py +0 -0
  208. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/loader.py +0 -0
  209. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/meta.py +0 -0
  210. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/migrations_runner.py +0 -0
  211. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/references.py +0 -0
  212. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/registry.py +0 -0
  213. {celerp-2.1.1 → celerp-2.2.1}/celerp/modules/slots.py +0 -0
  214. {celerp-2.1.1 → celerp-2.2.1}/celerp/notifications/__init__.py +0 -0
  215. {celerp-2.1.1 → celerp-2.2.1}/celerp/notifications/service.py +0 -0
  216. {celerp-2.1.1 → celerp-2.2.1}/celerp/notifications/sse.py +0 -0
  217. {celerp-2.1.1 → celerp-2.2.1}/celerp/output/__init__.py +0 -0
  218. {celerp-2.1.1 → celerp-2.2.1}/celerp/output/branding.py +0 -0
  219. {celerp-2.1.1 → celerp-2.2.1}/celerp/output/doc_print.py +0 -0
  220. {celerp-2.1.1 → celerp-2.2.1}/celerp/output/share_render.py +0 -0
  221. {celerp-2.1.1 → celerp-2.2.1}/celerp/projections/__init__.py +0 -0
  222. {celerp-2.1.1 → celerp-2.2.1}/celerp/projections/engine.py +0 -0
  223. {celerp-2.1.1 → celerp-2.2.1}/celerp/projections/handlers/__init__.py +0 -0
  224. {celerp-2.1.1 → celerp-2.2.1}/celerp/projections/handlers/marketplace.py +0 -0
  225. {celerp-2.1.1 → celerp-2.2.1}/celerp/projections/handlers/scanning.py +0 -0
  226. {celerp-2.1.1 → celerp-2.2.1}/celerp/projections/handlers/shopify.py +0 -0
  227. {celerp-2.1.1 → celerp-2.2.1}/celerp/projections/handlers/system.py +0 -0
  228. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/__init__.py +0 -0
  229. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/auth.py +0 -0
  230. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/debug.py +0 -0
  231. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/doctor.py +0 -0
  232. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/ledger.py +0 -0
  233. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/notifications.py +0 -0
  234. {celerp-2.1.1 → celerp-2.2.1}/celerp/routers/system.py +0 -0
  235. {celerp-2.1.1 → celerp-2.2.1}/celerp/schemas/__init__.py +0 -0
  236. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/__init__.py +0 -0
  237. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/activity_redaction.py +0 -0
  238. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/attachments.py +0 -0
  239. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/auth.py +0 -0
  240. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/backup.py +0 -0
  241. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/backup_export.py +0 -0
  242. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/backup_import.py +0 -0
  243. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/backup_repo.py +0 -0
  244. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/backup_scheduler.py +0 -0
  245. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/backup_state.py +0 -0
  246. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/demo.py +0 -0
  247. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/dev_release_guard.py +0 -0
  248. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/email.py +0 -0
  249. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/fulfill.py +0 -0
  250. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/holdings.py +0 -0
  251. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/je_keys.py +0 -0
  252. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/landed_cost.py +0 -0
  253. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/line_measures.py +0 -0
  254. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/list_behavior.py +0 -0
  255. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/money.py +0 -0
  256. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/payments.py +0 -0
  257. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/pick.py +0 -0
  258. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/pricing.py +0 -0
  259. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/relay_share.py +0 -0
  260. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/reorder.py +0 -0
  261. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/runtime_state.py +0 -0
  262. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/session_tracker.py +0 -0
  263. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/shipping.py +0 -0
  264. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/star_cta.py +0 -0
  265. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/status_doc_backfill.py +0 -0
  266. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/supporter_badge.py +0 -0
  267. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/system_health.py +0 -0
  268. {celerp-2.1.1 → celerp-2.2.1}/celerp/services/units.py +0 -0
  269. {celerp-2.1.1 → celerp-2.2.1}/celerp/session_gate.py +0 -0
  270. {celerp-2.1.1 → celerp-2.2.1}/celerp/tax_regimes.py +0 -0
  271. {celerp-2.1.1 → celerp-2.2.1}/celerp.egg-info/dependency_links.txt +0 -0
  272. {celerp-2.1.1 → celerp-2.2.1}/celerp.egg-info/entry_points.txt +0 -0
  273. {celerp-2.1.1 → celerp-2.2.1}/celerp.egg-info/requires.txt +0 -0
  274. {celerp-2.1.1 → celerp-2.2.1}/celerp.egg-info/top_level.txt +0 -0
  275. {celerp-2.1.1 → celerp-2.2.1}/default_modules/__init__.py +0 -0
  276. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/LICENSE +0 -0
  277. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/__init__.py +0 -0
  278. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/celerp_accounting/__init__.py +0 -0
  279. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/celerp_accounting/api_setup.py +0 -0
  280. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/celerp_accounting/csv_parser.py +0 -0
  281. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/celerp_accounting/matcher.py +0 -0
  282. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/celerp_accounting/models.py +0 -0
  283. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/celerp_accounting/projections.py +0 -0
  284. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/celerp_accounting/routes.py +0 -0
  285. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/celerp_accounting/ui_routes.py +0 -0
  286. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/balance-sheet.html +0 -0
  287. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/cash-flow.html +0 -0
  288. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/extended-journal-csv.csv +0 -0
  289. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/extended-journal-print.html +0 -0
  290. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/extended-journal.html +0 -0
  291. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/general-ledger.html +0 -0
  292. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/journal-csv.csv +0 -0
  293. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/journal-print.html +0 -0
  294. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/journal.html +0 -0
  295. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/ledger.html +0 -0
  296. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/pnl.html +0 -0
  297. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/statement.html +0 -0
  298. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/report_goldens/trial-balance.html +0 -0
  299. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_accounting_banking.py +0 -0
  300. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_accounting_banking_routers.py +0 -0
  301. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_accounting_import_idempotency.py +0 -0
  302. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_cash_flow.py +0 -0
  303. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_financial_reports_ui.py +0 -0
  304. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_journal_gl_soa.py +0 -0
  305. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_journal_gl_soa_ui.py +0 -0
  306. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_reconciliation_v2.py +0 -0
  307. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_reports_end_to_end.py +0 -0
  308. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-accounting/tests/test_route_permissions.py +0 -0
  309. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-admin/__init__.py +0 -0
  310. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-admin/celerp_admin/__init__.py +0 -0
  311. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-admin/celerp_admin/routes.py +0 -0
  312. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-admin/celerp_admin/setup.py +0 -0
  313. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/__init__.py +0 -0
  314. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/celerp_ai/__init__.py +0 -0
  315. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/celerp_ai/routes.py +0 -0
  316. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/celerp_ai/setup.py +0 -0
  317. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/celerp_ai/ui_routes.py +0 -0
  318. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/conftest.py +0 -0
  319. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_batch.py +0 -0
  320. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_cleanup.py +0 -0
  321. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_conversations.py +0 -0
  322. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_coverage_gaps.py +0 -0
  323. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_intent.py +0 -0
  324. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_llm.py +0 -0
  325. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_memory.py +0 -0
  326. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_models.py +0 -0
  327. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_page_count.py +0 -0
  328. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_quota.py +0 -0
  329. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_router.py +0 -0
  330. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_routes_coverage.py +0 -0
  331. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_service.py +0 -0
  332. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-ai/tests/test_tools.py +0 -0
  333. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-backup/__init__.py +0 -0
  334. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-backup/celerp_backup/__init__.py +0 -0
  335. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-backup/celerp_backup/routes.py +0 -0
  336. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-backup/celerp_backup/setup.py +0 -0
  337. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/__init__.py +0 -0
  338. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/celerp_connectors/__init__.py +0 -0
  339. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/celerp_connectors/models.py +0 -0
  340. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/celerp_connectors/routes.py +0 -0
  341. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/__init__.py +0 -0
  342. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/conftest.py +0 -0
  343. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_compliance.py +0 -0
  344. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_connector_correctness.py +0 -0
  345. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_connectors.py +0 -0
  346. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_credentials_routes.py +0 -0
  347. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_images.py +0 -0
  348. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_outbound.py +0 -0
  349. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_quickbooks.py +0 -0
  350. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_rate_limiting.py +0 -0
  351. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_shopify.py +0 -0
  352. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_wiring.py +0 -0
  353. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_woocommerce.py +0 -0
  354. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_woocommerce_webhooks.py +0 -0
  355. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-connectors/tests/test_xero.py +0 -0
  356. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-contacts/LICENSE +0 -0
  357. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-contacts/__init__.py +0 -0
  358. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-contacts/celerp_contacts/__init__.py +0 -0
  359. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-contacts/celerp_contacts/migrations.py +0 -0
  360. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-contacts/celerp_contacts/projections.py +0 -0
  361. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-contacts/celerp_contacts/routes.py +0 -0
  362. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-contacts/celerp_contacts/services.py +0 -0
  363. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-contacts/celerp_contacts/ui_routes.py +0 -0
  364. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-dashboard/LICENSE +0 -0
  365. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-dashboard/__init__.py +0 -0
  366. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-dashboard/celerp_dashboard/__init__.py +0 -0
  367. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-dashboard/celerp_dashboard/setup.py +0 -0
  368. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/LICENSE +0 -0
  369. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/__init__.py +0 -0
  370. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/__init__.py +0 -0
  371. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/api_setup.py +0 -0
  372. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/doc_email.py +0 -0
  373. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/doc_projections.py +0 -0
  374. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/doc_service.py +0 -0
  375. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/models_share.py +0 -0
  376. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/routes_payments.py +0 -0
  377. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/routes_share.py +0 -0
  378. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/sequences.py +0 -0
  379. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/taxes.py +0 -0
  380. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/celerp_docs/ui_routes.py +0 -0
  381. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/conftest.py +0 -0
  382. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-docs/tests/test_send_visibility.py +0 -0
  383. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/LICENSE +0 -0
  384. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/__init__.py +0 -0
  385. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/celerp_inventory/__init__.py +0 -0
  386. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/celerp_inventory/models_import_batch.py +0 -0
  387. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/celerp_inventory/projections.py +0 -0
  388. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/celerp_inventory/routes_attachments.py +0 -0
  389. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/celerp_inventory/routes_scanning.py +0 -0
  390. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/celerp_inventory/services.py +0 -0
  391. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/celerp_inventory/ui_routes.py +0 -0
  392. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/tests/test_item_recipe_projection.py +0 -0
  393. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/tests/test_item_workflow_projection.py +0 -0
  394. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-inventory/tests/test_landed_cost_projection.py +0 -0
  395. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/LICENSE +0 -0
  396. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/__init__.py +0 -0
  397. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/celerp_labels/__init__.py +0 -0
  398. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/celerp_labels/models.py +0 -0
  399. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/celerp_labels/presets.py +0 -0
  400. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/celerp_labels/routes.py +0 -0
  401. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/celerp_labels/service.py +0 -0
  402. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/celerp_labels/ui_routes.py +0 -0
  403. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/requirements.txt +0 -0
  404. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-labels/tests/test_labels_module.py +0 -0
  405. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/LICENSE +0 -0
  406. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/__init__.py +0 -0
  407. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/celerp_manufacturing/__init__.py +0 -0
  408. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/celerp_manufacturing/costing.py +0 -0
  409. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/celerp_manufacturing/expansion.py +0 -0
  410. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/celerp_manufacturing/labor.py +0 -0
  411. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/celerp_manufacturing/migrations.py +0 -0
  412. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/celerp_manufacturing/projection_handler.py +0 -0
  413. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/celerp_manufacturing/ui_routes.py +0 -0
  414. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/requirements.txt +0 -0
  415. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_item_recipe_api.py +0 -0
  416. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_labor_providers.py +0 -0
  417. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_manufacturing_import_idempotency.py +0 -0
  418. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_mfg_events.py +0 -0
  419. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_recipe_costing.py +0 -0
  420. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_recipe_expansion.py +0 -0
  421. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_recost_api.py +0 -0
  422. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_where_used.py +0 -0
  423. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-manufacturing/tests/test_workflow_time.py +0 -0
  424. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-reports/LICENSE +0 -0
  425. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-reports/__init__.py +0 -0
  426. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-reports/celerp_reports/__init__.py +0 -0
  427. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-reports/celerp_reports/api_setup.py +0 -0
  428. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-reports/celerp_reports/routes.py +0 -0
  429. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-reports/celerp_reports/ui_routes.py +0 -0
  430. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-reports/tests/test_reports_full.py +0 -0
  431. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-reports/tests/test_reports_unit.py +0 -0
  432. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-subscriptions/LICENSE +0 -0
  433. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-subscriptions/__init__.py +0 -0
  434. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-subscriptions/celerp_subscriptions/__init__.py +0 -0
  435. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-subscriptions/celerp_subscriptions/ui_routes.py +0 -0
  436. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-subscriptions/tests/test_subscriptions_ui.py +0 -0
  437. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/LICENSE +0 -0
  438. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/__init__.py +0 -0
  439. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/__init__.py +0 -0
  440. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/accessory_fashion.json +0 -0
  441. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/activewear.json +0 -0
  442. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/art_photography.json +0 -0
  443. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/audio_equipment.json +0 -0
  444. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/bag_handbag.json +0 -0
  445. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/banknote.json +0 -0
  446. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/beauty_tool.json +0 -0
  447. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/bed_bedroom.json +0 -0
  448. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/beer.json +0 -0
  449. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/beverage_nonalc.json +0 -0
  450. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/body_part_auto.json +0 -0
  451. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/book.json +0 -0
  452. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/bottoms.json +0 -0
  453. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/brake_suspension.json +0 -0
  454. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/bullion_coin.json +0 -0
  455. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/camera.json +0 -0
  456. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/colored_stone.json +0 -0
  457. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/comic.json +0 -0
  458. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/commercial_space.json +0 -0
  459. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/component_part.json +0 -0
  460. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/confectionery.json +0 -0
  461. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/consulting_service.json +0 -0
  462. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/decorative_art.json +0 -0
  463. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/diamond.json +0 -0
  464. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/drawing.json +0 -0
  465. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/dress_jumpsuit.json +0 -0
  466. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/electrical_auto.json +0 -0
  467. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/electrical_component.json +0 -0
  468. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/emerald.json +0 -0
  469. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/engine_part.json +0 -0
  470. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/fastener.json +0 -0
  471. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/fertilizer_chemical.json +0 -0
  472. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/film_video.json +0 -0
  473. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/fine_writing_instrument.json +0 -0
  474. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/fluid_lubricant.json +0 -0
  475. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/footwear.json +0 -0
  476. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/fragrance.json +0 -0
  477. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/fresh_food.json +0 -0
  478. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/fresh_produce.json +0 -0
  479. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/frozen_food.json +0 -0
  480. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/gaming_console.json +0 -0
  481. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/gold_bullion.json +0 -0
  482. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/grain_cereal.json +0 -0
  483. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/haircare.json +0 -0
  484. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/hand_tool.json +0 -0
  485. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/ingredient_bulk.json +0 -0
  486. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/interior_part.json +0 -0
  487. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/jewelry.json +0 -0
  488. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/kitchen_dining.json +0 -0
  489. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/laptop.json +0 -0
  490. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/lighting.json +0 -0
  491. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/livestock_feed.json +0 -0
  492. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/makeup.json +0 -0
  493. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/measuring_instrument.json +0 -0
  494. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/medal_token.json +0 -0
  495. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/mineral_specimen.json +0 -0
  496. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/mobile_phone.json +0 -0
  497. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/music_cd.json +0 -0
  498. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/music_vinyl.json +0 -0
  499. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/nail.json +0 -0
  500. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/numismatic_coin.json +0 -0
  501. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/outdoor_furniture.json +0 -0
  502. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/outerwear.json +0 -0
  503. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/packaged_food.json +0 -0
  504. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/painting.json +0 -0
  505. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/parking_bay.json +0 -0
  506. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/pearl.json +0 -0
  507. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/personal_care.json +0 -0
  508. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/pipe_plumbing.json +0 -0
  509. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/platinum_bullion.json +0 -0
  510. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/power_tool.json +0 -0
  511. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/print_edition.json +0 -0
  512. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/residential_unit.json +0 -0
  513. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/rough_gemstone.json +0 -0
  514. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/ruby.json +0 -0
  515. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/saas_plan.json +0 -0
  516. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/safety_ppe.json +0 -0
  517. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/sapphire.json +0 -0
  518. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/sculpture.json +0 -0
  519. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/seating.json +0 -0
  520. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/seeds.json +0 -0
  521. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/silver_bullion.json +0 -0
  522. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/skincare.json +0 -0
  523. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/soft_furnishing.json +0 -0
  524. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/software_addon.json +0 -0
  525. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/software_license.json +0 -0
  526. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/spirit.json +0 -0
  527. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/storage_furniture.json +0 -0
  528. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/swimwear.json +0 -0
  529. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/table_desk.json +0 -0
  530. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/tablet.json +0 -0
  531. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/tire_wheel.json +0 -0
  532. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/tops.json +0 -0
  533. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/trading_card.json +0 -0
  534. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/tv_display.json +0 -0
  535. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/video_game.json +0 -0
  536. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/watch.json +0 -0
  537. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/watch_strap.json +0 -0
  538. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/categories/wine.json +0 -0
  539. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/agricultural.json +0 -0
  540. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/artwork.json +0 -0
  541. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/automotive.json +0 -0
  542. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/blank.json +0 -0
  543. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/books_media.json +0 -0
  544. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/coins_precious_metals.json +0 -0
  545. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/consulting.json +0 -0
  546. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/cosmetics.json +0 -0
  547. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/electronics.json +0 -0
  548. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/fashion.json +0 -0
  549. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/food_beverage.json +0 -0
  550. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/furniture.json +0 -0
  551. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/gemstones.json +0 -0
  552. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/hardware.json +0 -0
  553. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/property_rental.json +0 -0
  554. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/saas.json +0 -0
  555. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/watches.json +0 -0
  556. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/presets/wine_spirits.json +0 -0
  557. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/routes.py +0 -0
  558. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/celerp_verticals/ui_routes.py +0 -0
  559. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/tests/test_verticals.py +0 -0
  560. {celerp-2.1.1 → celerp-2.2.1}/default_modules/celerp-verticals/tests/test_verticals_routers.py +0 -0
  561. {celerp-2.1.1 → celerp-2.2.1}/legal/OFFICIAL-COMPONENTS.md +0 -0
  562. {celerp-2.1.1 → celerp-2.2.1}/legal/TRADEMARK.md +0 -0
  563. {celerp-2.1.1 → celerp-2.2.1}/packaging/winget/Celerp.Celerp.installer.yaml +0 -0
  564. {celerp-2.1.1 → celerp-2.2.1}/packaging/winget/Celerp.Celerp.locale.en-US.yaml +0 -0
  565. {celerp-2.1.1 → celerp-2.2.1}/packaging/winget/Celerp.Celerp.yaml +0 -0
  566. {celerp-2.1.1 → celerp-2.2.1}/packaging/winget/README.md +0 -0
  567. {celerp-2.1.1 → celerp-2.2.1}/pyproject.toml +0 -0
  568. {celerp-2.1.1 → celerp-2.2.1}/setup.cfg +0 -0
  569. {celerp-2.1.1 → celerp-2.2.1}/ui/__init__.py +0 -0
  570. {celerp-2.1.1 → celerp-2.2.1}/ui/app.py +0 -0
  571. {celerp-2.1.1 → celerp-2.2.1}/ui/components/__init__.py +0 -0
  572. {celerp-2.1.1 → celerp-2.2.1}/ui/components/attrs.py +0 -0
  573. {celerp-2.1.1 → celerp-2.2.1}/ui/components/backup.py +0 -0
  574. {celerp-2.1.1 → celerp-2.2.1}/ui/components/cloud_gate.py +0 -0
  575. {celerp-2.1.1 → celerp-2.2.1}/ui/components/currency.py +0 -0
  576. {celerp-2.1.1 → celerp-2.2.1}/ui/components/files.py +0 -0
  577. {celerp-2.1.1 → celerp-2.2.1}/ui/components/journal.py +0 -0
  578. {celerp-2.1.1 → celerp-2.2.1}/ui/components/notes.py +0 -0
  579. {celerp-2.1.1 → celerp-2.2.1}/ui/components/phone.py +0 -0
  580. {celerp-2.1.1 → celerp-2.2.1}/ui/components/report_kit.py +0 -0
  581. {celerp-2.1.1 → celerp-2.2.1}/ui/config.py +0 -0
  582. {celerp-2.1.1 → celerp-2.2.1}/ui/i18n.py +0 -0
  583. {celerp-2.1.1 → celerp-2.2.1}/ui/marketplace_catalog.py +0 -0
  584. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/__init__.py +0 -0
  585. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/account.py +0 -0
  586. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/accounting.py +0 -0
  587. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/accounting_import.py +0 -0
  588. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/auth.py +0 -0
  589. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/csv_import.py +0 -0
  590. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/dashboard.py +0 -0
  591. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/docs_import.py +0 -0
  592. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/events.py +0 -0
  593. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/financial_reports.py +0 -0
  594. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/lists_import.py +0 -0
  595. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/modules_page.py +0 -0
  596. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/notifications.py +0 -0
  597. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/reports.py +0 -0
  598. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_accounting.py +0 -0
  599. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_cloud.py +0 -0
  600. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_connectors.py +0 -0
  601. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_contacts.py +0 -0
  602. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_import.py +0 -0
  603. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_inventory.py +0 -0
  604. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_manufacturing.py +0 -0
  605. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_payments.py +0 -0
  606. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_purchasing.py +0 -0
  607. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/settings_sales.py +0 -0
  608. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/stars.py +0 -0
  609. {celerp-2.1.1 → celerp-2.2.1}/ui/routes/subscriptions_import.py +0 -0
  610. {celerp-2.1.1 → celerp-2.2.1}/ui/security.py +0 -0
  611. {celerp-2.1.1 → celerp-2.2.1}/ui/static/htmx.min.js +0 -0
  612. {celerp-2.1.1 → celerp-2.2.1}/ui/static/icon.png +0 -0
  613. {celerp-2.1.1 → celerp-2.2.1}/ui/static/logo.png +0 -0
  614. {celerp-2.1.1 → celerp-2.2.1}/ui/static/vendor/intl-tel-input/img/flags.webp +0 -0
  615. {celerp-2.1.1 → celerp-2.2.1}/ui/static/vendor/intl-tel-input/img/flags@2x.webp +0 -0
  616. {celerp-2.1.1 → celerp-2.2.1}/ui/static/vendor/intl-tel-input/intlTelInput.min.css +0 -0
  617. {celerp-2.1.1 → celerp-2.2.1}/ui/static/vendor/intl-tel-input/intlTelInput.min.js +0 -0
  618. {celerp-2.1.1 → celerp-2.2.1}/ui/static/vendor/intl-tel-input/intlTelInputWithUtils.min.js +0 -0
  619. {celerp-2.1.1 → celerp-2.2.1}/ui/static/vendor/intl-tel-input/utils.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: celerp
3
- Version: 2.1.1
3
+ Version: 2.2.1
4
4
  Summary: Free, self-hosted ERP for small businesses
5
5
  License: Business Source License 1.1
6
6
 
@@ -185,18 +185,22 @@ Celerp is simple to use, flexible, customizable, and designed to transition your
185
185
  [![Tests](https://github.com/celerp/celerp/actions/workflows/ci.yml/badge.svg)](https://github.com/celerp/celerp/actions)
186
186
  [![License](https://img.shields.io/badge/license-BUSL--1.1-blue)](LICENSE)
187
187
 
188
+ <!-- PRESS_KIT:root-hero start -->
188
189
  ![Celerp manufacturing cost worksheet](docs/press-kit/screenshots/manufacturing-worksheet.png)
190
+ <!-- PRESS_KIT:root-hero end -->
189
191
 
190
192
  ## Screenshots
191
193
 
192
194
  Real double-entry accounting, multi-location inventory, manufacturing, and a built-in REST API - one self-hosted app.
193
195
 
196
+ <!-- PRESS_KIT:root-grid start -->
194
197
  | | |
195
198
  |---|---|
199
+ | ![Dashboard with revenue trend, receivables aging, and inventory mix](docs/press-kit/screenshots/dashboard.png)<br>**Dashboard** - revenue trend, AR aging, inventory mix | ![Multi-location inventory with barcode scanning and valuation](docs/press-kit/screenshots/inventory.png)<br>**Inventory** - multi-location, barcode, valuation |
196
200
  | ![Double-entry trial balance that ties out to zero](docs/press-kit/screenshots/trial-balance.png)<br>**Trial balance** - ties out to zero | ![Balance sheet generated from the event-sourced ledger](docs/press-kit/screenshots/balance-sheet.png)<br>**Balance sheet** - live from the ledger |
197
- | ![General ledger with account drill-down](docs/press-kit/screenshots/general-ledger.png)<br>**General ledger** - full drill-down | ![Multi-location inventory with barcode scanning and valuation](docs/press-kit/screenshots/inventory.png)<br>**Inventory** - multi-location, barcode, valuation |
198
- | ![Production planning by status, priority, and due date](docs/press-kit/screenshots/production-planning.png)<br>**Production planning** - work orders, priorities, due dates | ![Built-in REST API for integrations](docs/press-kit/screenshots/rest-api.png)<br>**REST API** - integrate anything |
199
- | ![Dashboard with revenue trend, receivables aging, and inventory mix](docs/press-kit/screenshots/dashboard.png)<br>**Dashboard** - revenue trend, AR aging, inventory mix | |
201
+ | ![Production planning by status, priority, and due date](docs/press-kit/screenshots/production-planning.png)<br>**Production planning** - work orders, priorities, due dates | ![International shipping document with commercial invoice and customs detail](docs/press-kit/screenshots/international-shipping-document.png)<br>**Shipping documents** - commercial invoice and customs |
202
+ | ![Built-in REST API for integrations](docs/press-kit/screenshots/rest-api.png)<br>**REST API** - integrate anything | ![Customer statement of account showing receivables](docs/press-kit/screenshots/statement-of-account.png)<br>**Statement of account** - customer AR at a glance |
203
+ <!-- PRESS_KIT:root-grid end -->
200
204
 
201
205
  More in the [press kit](docs/press-kit/).
202
206
 
@@ -206,9 +210,9 @@ More in the [press kit](docs/press-kit/).
206
210
 
207
211
  | Platform | Link |
208
212
  |----------|------|
209
- | Windows (.exe) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
210
- | Linux (.AppImage) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
211
- | macOS (.dmg) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
213
+ | Windows (.exe) | [Download](https://celerp.com/download-thanks.html?dl=win) |
214
+ | Linux (.deb) | [Download](https://celerp.com/download-thanks.html?dl=linux) |
215
+ | macOS (.dmg) | [Download](https://celerp.com/download-thanks.html?dl=mac) |
212
216
 
213
217
  **Double-click. No account. No credit card. Your computer securely becomes the server for your office**
214
218
 
@@ -335,8 +339,7 @@ Celerp is open-core:
335
339
  self-hosting permitted, contributions welcome.
336
340
  - **An MIT-licensed module ecosystem** - the default business modules are MIT, so you can
337
341
  fork them, build your own modules, and ship them however you like. See [LICENSING.md](LICENSING.md).
338
- - **A proprietary application + cloud layer** (official UI, document/PDF output, and the cloud/AI
339
- services) that powers the hosted experience.
342
+ - **A source available application** (official UI, document/PDF output and AI & Connect services).
340
343
 
341
344
  See [LICENSING.md](LICENSING.md) for the full map and [TRADEMARK.md](legal/TRADEMARK.md) for use of the Celerp
342
345
  name. One restriction: don't resell Celerp itself as a competing product.
@@ -12,18 +12,22 @@ Celerp is simple to use, flexible, customizable, and designed to transition your
12
12
  [![Tests](https://github.com/celerp/celerp/actions/workflows/ci.yml/badge.svg)](https://github.com/celerp/celerp/actions)
13
13
  [![License](https://img.shields.io/badge/license-BUSL--1.1-blue)](LICENSE)
14
14
 
15
+ <!-- PRESS_KIT:root-hero start -->
15
16
  ![Celerp manufacturing cost worksheet](docs/press-kit/screenshots/manufacturing-worksheet.png)
17
+ <!-- PRESS_KIT:root-hero end -->
16
18
 
17
19
  ## Screenshots
18
20
 
19
21
  Real double-entry accounting, multi-location inventory, manufacturing, and a built-in REST API - one self-hosted app.
20
22
 
23
+ <!-- PRESS_KIT:root-grid start -->
21
24
  | | |
22
25
  |---|---|
26
+ | ![Dashboard with revenue trend, receivables aging, and inventory mix](docs/press-kit/screenshots/dashboard.png)<br>**Dashboard** - revenue trend, AR aging, inventory mix | ![Multi-location inventory with barcode scanning and valuation](docs/press-kit/screenshots/inventory.png)<br>**Inventory** - multi-location, barcode, valuation |
23
27
  | ![Double-entry trial balance that ties out to zero](docs/press-kit/screenshots/trial-balance.png)<br>**Trial balance** - ties out to zero | ![Balance sheet generated from the event-sourced ledger](docs/press-kit/screenshots/balance-sheet.png)<br>**Balance sheet** - live from the ledger |
24
- | ![General ledger with account drill-down](docs/press-kit/screenshots/general-ledger.png)<br>**General ledger** - full drill-down | ![Multi-location inventory with barcode scanning and valuation](docs/press-kit/screenshots/inventory.png)<br>**Inventory** - multi-location, barcode, valuation |
25
- | ![Production planning by status, priority, and due date](docs/press-kit/screenshots/production-planning.png)<br>**Production planning** - work orders, priorities, due dates | ![Built-in REST API for integrations](docs/press-kit/screenshots/rest-api.png)<br>**REST API** - integrate anything |
26
- | ![Dashboard with revenue trend, receivables aging, and inventory mix](docs/press-kit/screenshots/dashboard.png)<br>**Dashboard** - revenue trend, AR aging, inventory mix | |
28
+ | ![Production planning by status, priority, and due date](docs/press-kit/screenshots/production-planning.png)<br>**Production planning** - work orders, priorities, due dates | ![International shipping document with commercial invoice and customs detail](docs/press-kit/screenshots/international-shipping-document.png)<br>**Shipping documents** - commercial invoice and customs |
29
+ | ![Built-in REST API for integrations](docs/press-kit/screenshots/rest-api.png)<br>**REST API** - integrate anything | ![Customer statement of account showing receivables](docs/press-kit/screenshots/statement-of-account.png)<br>**Statement of account** - customer AR at a glance |
30
+ <!-- PRESS_KIT:root-grid end -->
27
31
 
28
32
  More in the [press kit](docs/press-kit/).
29
33
 
@@ -33,9 +37,9 @@ More in the [press kit](docs/press-kit/).
33
37
 
34
38
  | Platform | Link |
35
39
  |----------|------|
36
- | Windows (.exe) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
37
- | Linux (.AppImage) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
38
- | macOS (.dmg) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
40
+ | Windows (.exe) | [Download](https://celerp.com/download-thanks.html?dl=win) |
41
+ | Linux (.deb) | [Download](https://celerp.com/download-thanks.html?dl=linux) |
42
+ | macOS (.dmg) | [Download](https://celerp.com/download-thanks.html?dl=mac) |
39
43
 
40
44
  **Double-click. No account. No credit card. Your computer securely becomes the server for your office**
41
45
 
@@ -162,8 +166,7 @@ Celerp is open-core:
162
166
  self-hosting permitted, contributions welcome.
163
167
  - **An MIT-licensed module ecosystem** - the default business modules are MIT, so you can
164
168
  fork them, build your own modules, and ship them however you like. See [LICENSING.md](LICENSING.md).
165
- - **A proprietary application + cloud layer** (official UI, document/PDF output, and the cloud/AI
166
- services) that powers the hosted experience.
169
+ - **A source available application** (official UI, document/PDF output and AI & Connect services).
167
170
 
168
171
  See [LICENSING.md](LICENSING.md) for the full map and [TRADEMARK.md](legal/TRADEMARK.md) for use of the Celerp
169
172
  name. One restriction: don't resell Celerp itself as a competing product.
@@ -25,6 +25,11 @@ class Settings(BaseSettings):
25
25
  idle_logout_minutes: int = 15
26
26
  # Set to "true" to allow the default JWT secret (CI only).
27
27
  allow_insecure_jwt: str = "false"
28
+ # Serve the OpenAPI schema (/openapi.json) and the grouped API reference.
29
+ # Default off: production does not publish the API shape. Enabled only by the
30
+ # press-kit capture harness (and CI) to render the reference. Never set true
31
+ # in production.
32
+ expose_openapi_schema: bool = False
28
33
  # Logging level for both API and UI processes. Override with LOG_LEVEL env var.
29
34
  # Accepted values: debug, info, warning, error, critical (case-insensitive).
30
35
  log_level: str = "INFO"
@@ -61,6 +61,8 @@ class ItemPricingSet(BaseModel):
61
61
 
62
62
  class ItemStatusSet(BaseModel):
63
63
  new_status: str
64
+ # Set by revert-to-draft only.
65
+ reason: str | None = None
64
66
 
65
67
 
66
68
  class ItemTransferred(BaseModel):
@@ -356,7 +356,47 @@ log = logging.getLogger(__name__)
356
356
  _storage_uri = settings.redis_url or "memory://"
357
357
  limiter = Limiter(key_func=get_remote_address, default_limits=["60/minute"], storage_uri=_storage_uri)
358
358
 
359
- app = FastAPI(title="Celerp", docs_url=None, redoc_url=None, lifespan=lifespan)
359
+ _OPENAPI_TAGS = [
360
+ {"name": "auth", "description": "Sign in, sessions, and access tokens."},
361
+ {"name": "companies", "description": "Companies, members, and roles."},
362
+ {"name": "items", "description": "Inventory items, stock, and valuation."},
363
+ {"name": "docs", "description": "Invoices, purchase orders, quotations, and credit notes."},
364
+ {"name": "lists", "description": "Shipping documents and packing lists."},
365
+ {"name": "accounting", "description": "Chart of accounts and journal entries."},
366
+ {"name": "ledger", "description": "Event-sourced ledger and projections."},
367
+ {"name": "reports", "description": "Financial statements and aging reports."},
368
+ {"name": "manufacturing", "description": "Bills of materials and production orders."},
369
+ {"name": "labels", "description": "Label templates and barcode printing."},
370
+ {"name": "crm", "description": "Contacts, pipeline, and activity."},
371
+ {"name": "subscriptions", "description": "Recurring billing and auto-invoicing."},
372
+ {"name": "connectors", "description": "External integrations."},
373
+ {"name": "payments", "description": "Payment collection."},
374
+ {"name": "backup", "description": "Data export and import."},
375
+ {"name": "notifications", "description": "In-app notifications."},
376
+ {"name": "events", "description": "Server-sent event stream for live updates."},
377
+ {"name": "system", "description": "Health, status, and instance metadata."},
378
+ ]
379
+
380
+ _OPENAPI_DESCRIPTION = "REST API for Celerp, the self-hosted business management platform."
381
+
382
+
383
+ def _openapi_settings() -> dict:
384
+ """FastAPI OpenAPI kwargs for the current settings. Production keeps the schema
385
+ unserved (openapi_url=None); the press-kit capture harness turns
386
+ expose_openapi_schema on to publish it for the API reference shot, and that
387
+ non-default state is logged so it is never silent. Isolated so the exposure
388
+ boundary is unit-testable without reconstructing the whole app."""
389
+ expose = settings.expose_openapi_schema
390
+ if expose:
391
+ log.warning("expose_openapi_schema is on: serving the public OpenAPI schema at /openapi.json")
392
+ return {
393
+ "description": _OPENAPI_DESCRIPTION,
394
+ "openapi_tags": _OPENAPI_TAGS,
395
+ "openapi_url": "/openapi.json" if expose else None,
396
+ }
397
+
398
+
399
+ app = FastAPI(title="Celerp", docs_url=None, redoc_url=None, lifespan=lifespan, **_openapi_settings())
360
400
  app.state.limiter = limiter
361
401
  app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
362
402
  app.add_middleware(DrainMiddleware)
@@ -349,7 +349,7 @@ def generate_document_pdf(doc: dict[str, Any], company: dict[str, Any] | None =
349
349
  if li_taxes:
350
350
  tax_str = " + ".join(
351
351
  f"{t.get('label') or t.get('code') or 'Tax'} {float(t.get('rate', 0)):.1f}%"
352
- for item in li_taxes
352
+ for t in li_taxes
353
353
  )
354
354
  else:
355
355
  tax_str = f"{float(li.get('tax_rate') or 0):.1f}%"
@@ -685,18 +685,16 @@ async def patch_user(
685
685
  # Item schema configuration
686
686
  # ---------------------------------------------------------------------------
687
687
 
688
+ from celerp.services.field_schema import COST_SCHEMA_KEYS # noqa: F401 re-export
688
689
  from celerp.services.field_schema import DEFAULT_ITEM_SCHEMA # noqa: F401 re-export
689
690
  from celerp.services.field_schema import get_effective_field_schema # noqa: F401 re-export
690
691
 
691
692
 
692
- _COST_SCHEMA_KEYS: frozenset[str] = frozenset({"cost_price", "cost_price_total"})
693
-
694
-
695
693
  @router.get("/me/item-schema")
696
694
  async def get_item_schema(company_id=Depends(get_current_company_id), role: str = Depends(get_current_role), settings: dict = Depends(get_current_company_settings), session: AsyncSession = Depends(get_session)) -> list[dict]:
697
695
  schema = await get_effective_field_schema(session, company_id)
698
696
  if not role_has_permission(settings, role, "view_inventory_costs"):
699
- schema = [f for f in schema if f.get("key") not in _COST_SCHEMA_KEYS]
697
+ schema = [f for f in schema if f.get("key") not in COST_SCHEMA_KEYS]
700
698
  return schema
701
699
 
702
700
 
@@ -18,7 +18,7 @@ from celerp.notifications.sse import subscribe, unsubscribe
18
18
 
19
19
  log = logging.getLogger(__name__)
20
20
 
21
- router = APIRouter()
21
+ router = APIRouter(tags=["events"])
22
22
 
23
23
  _TICK = object() # sentinel: asyncio.TimeoutError path
24
24
 
@@ -171,16 +171,6 @@ async def backup_status() -> dict:
171
171
  }
172
172
 
173
173
 
174
- @router.get("/settings/email-status")
175
- async def email_status() -> dict:
176
- """Return whether SMTP and/or gateway are configured for email sending."""
177
- from celerp.config import settings
178
- return {
179
- "smtp_configured": bool(settings.smtp_host),
180
- "gateway_connected": bool(settings.gateway_token),
181
- }
182
-
183
-
184
174
  @router.post("/settings/cloud-disconnect", dependencies=[Depends(get_current_user)])
185
175
  async def cloud_disconnect() -> dict:
186
176
  """Stop the gateway WebSocket client and record a sticky Cloud disconnect.
@@ -31,9 +31,9 @@ async def star_cta(
31
31
  session: AsyncSession = Depends(get_session),
32
32
  ) -> dict:
33
33
  """Return the relay-resolved CTA for ``medium`` (or the neutral link if the relay
34
- is unreachable), plus the install-level dismissed flag. ``{}`` when disabled."""
34
+ is unreachable), plus the install-level dismissed flag. Neutral mode when disabled."""
35
35
  if not settings.star_cta_enabled:
36
- return {}
36
+ return {"mode": "neutral"}
37
37
  cta = await get_star_cta(medium) or neutral_cta(medium)
38
38
  return {**cta, "dismissed": await star_prompt_dismissed(session)}
39
39
 
@@ -837,8 +837,9 @@ async def upsert_opening_inventory_je(
837
837
  )
838
838
  ).scalars().all()
839
839
 
840
- # Inactive statuses: items no longer owned. Must match get_valuation()'s filter.
841
- _INACTIVE = frozenset({"archived", "deleted", "void", "sold", "fulfilled", "merged", "expired"})
840
+ # Inactive statuses: items whose stock is not counted - no longer owned, or
841
+ # (draft) not yet committed. Must match get_valuation()'s filter.
842
+ _INACTIVE = frozenset({"archived", "deleted", "void", "sold", "fulfilled", "merged", "expired", "draft"})
842
843
 
843
844
  catalog_total = _Dec("0")
844
845
  for row in item_rows:
@@ -18,7 +18,8 @@ COST_ITEM_KEYS: frozenset[str] = frozenset({"cost_price", "cost_total"})
18
18
 
19
19
 
20
20
  def apply_field_visibility(
21
- items: list[dict], role: str, field_schema: list[dict], can_see_costs: bool
21
+ items: list[dict], role: str, field_schema: list[dict], can_see_costs: bool,
22
+ can_author_drafts: bool = False,
22
23
  ) -> list[dict]:
23
24
  """Strip fields from item dicts that the caller is not allowed to see.
24
25
 
@@ -30,6 +31,11 @@ def apply_field_visibility(
30
31
  Cost keys are governed only by the permission, so the cost column's own
31
32
  visible_to_roles floor never double-gates them: a granted operator sees cost,
32
33
  an ungranted manager does not.
34
+
35
+ Draft carve-out: cost stripping attaches when an item is committed to
36
+ available, not at creation. When ``can_author_drafts`` (the caller holds
37
+ edit_inventory), a DRAFT item keeps its cost keys so its creator can finish
38
+ authoring it; every non-draft item is stripped as before.
33
39
  """
34
40
  caller_level = ROLE_LEVELS.get(role, 0)
35
41
  restricted = {
@@ -40,8 +46,15 @@ def apply_field_visibility(
40
46
  )
41
47
  }
42
48
  restricted -= COST_ITEM_KEYS
43
- if not can_see_costs:
44
- restricted |= COST_ITEM_KEYS
45
- if not restricted:
49
+ cost_hidden = not can_see_costs
50
+ if not restricted and not cost_hidden:
46
51
  return items
47
- return [{k: v for k, v in item.items() if k not in restricted} for item in items]
52
+ out = []
53
+ for item in items:
54
+ drop = set(restricted)
55
+ if cost_hidden and not (
56
+ can_author_drafts and str(item.get("status") or "").lower() == "draft"
57
+ ):
58
+ drop |= COST_ITEM_KEYS
59
+ out.append({k: v for k, v in item.items() if k not in drop} if drop else item)
60
+ return out
@@ -31,6 +31,11 @@ AMOUNT_ITEM_KEYS: frozenset[str] = frozenset({"quantity", "weight", "pieces", "g
31
31
  # and import - sell_by is a unit string and must never reach that float() path.
32
32
  AMOUNT_EDIT_GATED_KEYS: frozenset[str] = AMOUNT_ITEM_KEYS | {"sell_by"}
33
33
 
34
+ # Schema-field keys for the canonical cost price list, stripped from /me/item-schema
35
+ # for callers without view_inventory_costs. Distinct from cost_visibility.COST_ITEM_KEYS,
36
+ # which names the item-DATA keys (cost_total, not the virtual schema key cost_price_total).
37
+ COST_SCHEMA_KEYS: frozenset[str] = frozenset({"cost_price", "cost_price_total"})
38
+
34
39
  # Default price lists (used when company has none configured)
35
40
  _DEFAULT_PRICE_LISTS: list[dict] = [
36
41
  {"name": "Wholesale"},
@@ -56,7 +61,9 @@ _BASE_FIELDS: list[dict] = [
56
61
  {"key": "pick_method", "label": "Stock Cutting", "type": "select", "editable": True, "required": False, "options": ["default", "fifo", "fefo", "lifo"], "visible_to_roles": [], "position": 4.6, "show_in_table": False, "tooltip_key": "field.tooltip.pick_method"},
57
62
  {"key": "location_name", "label": "Location", "type": "text", "editable": False, "required": False, "options": [], "visible_to_roles": [], "position": 5, "show_in_table": True, "tooltip_key": "field.tooltip.location_name"},
58
63
  # Price columns are injected dynamically at position 6+ by _inject_price_columns()
59
- {"key": "status", "label": "Status", "type": "status", "editable": True, "required": False, "options": ["available", "reserved", "sold"], "visible_to_roles": [], "position": 100, "show_in_table": True},
64
+ # Read-only: status changes only through dedicated actions (Make Available, Revert
65
+ # to Draft), never a free-form dropdown edit - same convention as document status.
66
+ {"key": "status", "label": "Status", "type": "status", "editable": False, "required": False, "options": [], "visible_to_roles": [], "position": 100, "show_in_table": True},
60
67
  {"key": "short_description", "label": "Short Description", "type": "text", "editable": True, "required": False, "options": [], "visible_to_roles": [], "position": 101, "show_in_table": False},
61
68
  {"key": "description", "label": "Description", "type": "text", "editable": True, "required": False, "options": [], "visible_to_roles": [], "position": 102, "show_in_table": False},
62
69
  {"key": "notes", "label": "Notes", "type": "text", "editable": True, "required": False, "options": [], "visible_to_roles": [], "position": 103, "show_in_table": False},
@@ -119,6 +126,14 @@ def _inject_price_columns(base: list[dict], price_lists: list[dict]) -> list[dic
119
126
  return sorted(base + price_cols, key=lambda f: f.get("position", 999))
120
127
 
121
128
 
129
+ def cost_columns(price_lists: list[dict]) -> list[dict]:
130
+ """The cost schema columns (cost_price and its virtual total) generated for the given
131
+ price lists, empty if none is a cost list. Used to re-inject the cost fields that the
132
+ company-scoped /me/item-schema strips, for a draft whose cost is item-visible - the
133
+ single source the schema endpoint would have produced, never a hand-built copy."""
134
+ return [f for f in _inject_price_columns([], price_lists) if f.get("key") in COST_SCHEMA_KEYS]
135
+
136
+
122
137
  # Backward-compatible constant: base fields + default price columns
123
138
  DEFAULT_ITEM_SCHEMA: list[dict] = _inject_price_columns(_BASE_FIELDS, _DEFAULT_PRICE_LISTS)
124
139
 
@@ -161,6 +176,13 @@ async def get_effective_field_schema(
161
176
  for f in base_schema
162
177
  ]
163
178
 
179
+ # Status is never a free-form dropdown, regardless of a stored schema round-trip
180
+ # captured before this became a hard rule.
181
+ base_schema = [
182
+ {**f, "editable": False, "options": []} if f["key"] == "status" else f
183
+ for f in base_schema
184
+ ]
185
+
164
186
  if category:
165
187
  cat_schemas: dict[str, list[dict]] = settings.get("category_schemas") or {}
166
188
  cat_fields: list[dict] = cat_schemas.get(category) or []
@@ -70,6 +70,7 @@ PERMISSIONS: list[Permission] = [
70
70
  Permission("set_sales_doc_prices", "Set sales document prices", "operator", True, "viewer"),
71
71
  Permission("delete_documents", "Delete documents", "manager", True, "viewer"),
72
72
  Permission("adjust_inventory", "Adjust stock & bulk operations", "manager", True, "viewer"),
73
+ Permission("revert_items_to_draft", "Revert items to draft", "manager", True, "viewer"),
73
74
  Permission("import_export_data", "Import / export data", "manager", True, "viewer"),
74
75
  Permission("view_payments", "View payments", "manager", True, "viewer"),
75
76
  Permission("view_financial_reports", "View financial reports", "manager", True, "viewer"),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: celerp
3
- Version: 2.1.1
3
+ Version: 2.2.1
4
4
  Summary: Free, self-hosted ERP for small businesses
5
5
  License: Business Source License 1.1
6
6
 
@@ -185,18 +185,22 @@ Celerp is simple to use, flexible, customizable, and designed to transition your
185
185
  [![Tests](https://github.com/celerp/celerp/actions/workflows/ci.yml/badge.svg)](https://github.com/celerp/celerp/actions)
186
186
  [![License](https://img.shields.io/badge/license-BUSL--1.1-blue)](LICENSE)
187
187
 
188
+ <!-- PRESS_KIT:root-hero start -->
188
189
  ![Celerp manufacturing cost worksheet](docs/press-kit/screenshots/manufacturing-worksheet.png)
190
+ <!-- PRESS_KIT:root-hero end -->
189
191
 
190
192
  ## Screenshots
191
193
 
192
194
  Real double-entry accounting, multi-location inventory, manufacturing, and a built-in REST API - one self-hosted app.
193
195
 
196
+ <!-- PRESS_KIT:root-grid start -->
194
197
  | | |
195
198
  |---|---|
199
+ | ![Dashboard with revenue trend, receivables aging, and inventory mix](docs/press-kit/screenshots/dashboard.png)<br>**Dashboard** - revenue trend, AR aging, inventory mix | ![Multi-location inventory with barcode scanning and valuation](docs/press-kit/screenshots/inventory.png)<br>**Inventory** - multi-location, barcode, valuation |
196
200
  | ![Double-entry trial balance that ties out to zero](docs/press-kit/screenshots/trial-balance.png)<br>**Trial balance** - ties out to zero | ![Balance sheet generated from the event-sourced ledger](docs/press-kit/screenshots/balance-sheet.png)<br>**Balance sheet** - live from the ledger |
197
- | ![General ledger with account drill-down](docs/press-kit/screenshots/general-ledger.png)<br>**General ledger** - full drill-down | ![Multi-location inventory with barcode scanning and valuation](docs/press-kit/screenshots/inventory.png)<br>**Inventory** - multi-location, barcode, valuation |
198
- | ![Production planning by status, priority, and due date](docs/press-kit/screenshots/production-planning.png)<br>**Production planning** - work orders, priorities, due dates | ![Built-in REST API for integrations](docs/press-kit/screenshots/rest-api.png)<br>**REST API** - integrate anything |
199
- | ![Dashboard with revenue trend, receivables aging, and inventory mix](docs/press-kit/screenshots/dashboard.png)<br>**Dashboard** - revenue trend, AR aging, inventory mix | |
201
+ | ![Production planning by status, priority, and due date](docs/press-kit/screenshots/production-planning.png)<br>**Production planning** - work orders, priorities, due dates | ![International shipping document with commercial invoice and customs detail](docs/press-kit/screenshots/international-shipping-document.png)<br>**Shipping documents** - commercial invoice and customs |
202
+ | ![Built-in REST API for integrations](docs/press-kit/screenshots/rest-api.png)<br>**REST API** - integrate anything | ![Customer statement of account showing receivables](docs/press-kit/screenshots/statement-of-account.png)<br>**Statement of account** - customer AR at a glance |
203
+ <!-- PRESS_KIT:root-grid end -->
200
204
 
201
205
  More in the [press kit](docs/press-kit/).
202
206
 
@@ -206,9 +210,9 @@ More in the [press kit](docs/press-kit/).
206
210
 
207
211
  | Platform | Link |
208
212
  |----------|------|
209
- | Windows (.exe) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
210
- | Linux (.AppImage) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
211
- | macOS (.dmg) | [Latest release](https://github.com/celerp/celerp/releases/latest) |
213
+ | Windows (.exe) | [Download](https://celerp.com/download-thanks.html?dl=win) |
214
+ | Linux (.deb) | [Download](https://celerp.com/download-thanks.html?dl=linux) |
215
+ | macOS (.dmg) | [Download](https://celerp.com/download-thanks.html?dl=mac) |
212
216
 
213
217
  **Double-click. No account. No credit card. Your computer securely becomes the server for your office**
214
218
 
@@ -335,8 +339,7 @@ Celerp is open-core:
335
339
  self-hosting permitted, contributions welcome.
336
340
  - **An MIT-licensed module ecosystem** - the default business modules are MIT, so you can
337
341
  fork them, build your own modules, and ship them however you like. See [LICENSING.md](LICENSING.md).
338
- - **A proprietary application + cloud layer** (official UI, document/PDF output, and the cloud/AI
339
- services) that powers the hosted experience.
342
+ - **A source available application** (official UI, document/PDF output and AI & Connect services).
340
343
 
341
344
  See [LICENSING.md](LICENSING.md) for the full map and [TRADEMARK.md](legal/TRADEMARK.md) for use of the Celerp
342
345
  name. One restriction: don't resell Celerp itself as a competing product.
@@ -7,6 +7,7 @@ NOTICE
7
7
  README.md
8
8
  alembic.ini
9
9
  conftest.py
10
+ conftest_support.py
10
11
  pyproject.toml
11
12
  test_helpers.py
12
13
  celerp/__init__.py
@@ -214,6 +214,7 @@
214
214
  "celerp/session_gate.py",
215
215
  "celerp/tax_regimes.py",
216
216
  "conftest.py",
217
+ "conftest_support.py",
217
218
  "core/.github/workflows/ci.yml",
218
219
  "default_modules/__init__.py",
219
220
  "default_modules/celerp-accounting/LICENSE",
@@ -548,12 +549,16 @@
548
549
  "docs/press-kit/screenshots/apparel/dashboard.webp",
549
550
  "docs/press-kit/screenshots/apparel/general-ledger.webp",
550
551
  "docs/press-kit/screenshots/apparel/inventory.webp",
552
+ "docs/press-kit/screenshots/apparel/invoice-pay.webp",
551
553
  "docs/press-kit/screenshots/apparel/invoices.webp",
554
+ "docs/press-kit/screenshots/apparel/label-designer.webp",
552
555
  "docs/press-kit/screenshots/apparel/manufacturing-worksheet.webp",
556
+ "docs/press-kit/screenshots/apparel/modules.webp",
553
557
  "docs/press-kit/screenshots/apparel/permissions.webp",
554
558
  "docs/press-kit/screenshots/apparel/production-planning.webp",
555
559
  "docs/press-kit/screenshots/apparel/rest-api.webp",
556
560
  "docs/press-kit/screenshots/apparel/trial-balance.webp",
561
+ "docs/press-kit/screenshots/apparel/work-centers.webp",
557
562
  "docs/press-kit/screenshots/apparel/worksheet-print.webp",
558
563
  "docs/press-kit/screenshots/balance-sheet.png",
559
564
  "docs/press-kit/screenshots/coffee/README.md",
@@ -561,7 +566,9 @@
561
566
  "docs/press-kit/screenshots/coffee/balance-sheet.webp",
562
567
  "docs/press-kit/screenshots/coffee/chart-of-accounts.webp",
563
568
  "docs/press-kit/screenshots/coffee/dashboard.webp",
569
+ "docs/press-kit/screenshots/coffee/extended-journal.webp",
564
570
  "docs/press-kit/screenshots/coffee/general-ledger.webp",
571
+ "docs/press-kit/screenshots/coffee/international-shipping-document.webp",
565
572
  "docs/press-kit/screenshots/coffee/inventory.webp",
566
573
  "docs/press-kit/screenshots/coffee/invoices.webp",
567
574
  "docs/press-kit/screenshots/coffee/manufacturing-worksheet.webp",
@@ -585,7 +592,9 @@
585
592
  "docs/press-kit/screenshots/cosmetics/trial-balance.webp",
586
593
  "docs/press-kit/screenshots/cosmetics/worksheet-print.webp",
587
594
  "docs/press-kit/screenshots/dashboard.png",
595
+ "docs/press-kit/screenshots/extended-journal.png",
588
596
  "docs/press-kit/screenshots/general-ledger.png",
597
+ "docs/press-kit/screenshots/international-shipping-document.png",
589
598
  "docs/press-kit/screenshots/inventory.png",
590
599
  "docs/press-kit/screenshots/jewelry/README.md",
591
600
  "docs/press-kit/screenshots/jewelry/audit-log.webp",
@@ -596,15 +605,19 @@
596
605
  "docs/press-kit/screenshots/jewelry/inventory.webp",
597
606
  "docs/press-kit/screenshots/jewelry/invoices.webp",
598
607
  "docs/press-kit/screenshots/jewelry/manufacturing-worksheet.webp",
608
+ "docs/press-kit/screenshots/jewelry/memo-holdings.webp",
599
609
  "docs/press-kit/screenshots/jewelry/permissions.webp",
600
610
  "docs/press-kit/screenshots/jewelry/production-planning.webp",
601
611
  "docs/press-kit/screenshots/jewelry/rest-api.webp",
612
+ "docs/press-kit/screenshots/jewelry/statement-of-account.webp",
602
613
  "docs/press-kit/screenshots/jewelry/trial-balance.webp",
603
614
  "docs/press-kit/screenshots/jewelry/worksheet-print.webp",
604
615
  "docs/press-kit/screenshots/manufacturing-worksheet.png",
605
616
  "docs/press-kit/screenshots/production-planning.png",
606
617
  "docs/press-kit/screenshots/rest-api.png",
618
+ "docs/press-kit/screenshots/statement-of-account.png",
607
619
  "docs/press-kit/screenshots/trial-balance.png",
620
+ "docs/press-kit/screenshots/work-centers.png",
608
621
  "electron/.gitignore",
609
622
  "electron/README.md",
610
623
  "electron/after-pack.js",
@@ -697,6 +710,7 @@
697
710
  "pyproject.toml",
698
711
  "scripts/apply_i18n.py",
699
712
  "scripts/bump-version.sh",
713
+ "scripts/check_undefined_names.py",
700
714
  "scripts/download-python.sh",
701
715
  "scripts/extract_i18n.py",
702
716
  "scripts/gen_first_party_lock.py",
@@ -746,6 +760,7 @@
746
760
  "tests/test_browser/test_freight_accounting_ui.py",
747
761
  "tests/test_browser/test_freight_ui.py",
748
762
  "tests/test_browser/test_fulfillment.py",
763
+ "tests/test_browser/test_global_search_tooltip.py",
749
764
  "tests/test_browser/test_i18n_ui.py",
750
765
  "tests/test_browser/test_import_flows.py",
751
766
  "tests/test_browser/test_import_history.py",
@@ -753,9 +768,11 @@
753
768
  "tests/test_browser/test_inventory_filters.py",
754
769
  "tests/test_browser/test_invoice_layout_doc_types.py",
755
770
  "tests/test_browser/test_item_detail_audit.py",
771
+ "tests/test_browser/test_item_draft_status.py",
756
772
  "tests/test_browser/test_label_font_size.py",
757
773
  "tests/test_browser/test_label_print_positions.py",
758
774
  "tests/test_browser/test_line_identifier.py",
775
+ "tests/test_browser/test_list_scan_in_place.py",
759
776
  "tests/test_browser/test_lists_audit.py",
760
777
  "tests/test_browser/test_manual_journal_entry.py",
761
778
  "tests/test_browser/test_manufacturing_hub.py",
@@ -775,6 +792,8 @@
775
792
  "tests/test_browser/test_production_order.py",
776
793
  "tests/test_browser/test_reorder_digest_upsell.py",
777
794
  "tests/test_browser/test_reprice_preserves_lines.py",
795
+ "tests/test_browser/test_reprice_wrong_lot.py",
796
+ "tests/test_browser/test_reserved_conflict_modal.py",
778
797
  "tests/test_browser/test_settings_tabs.py",
779
798
  "tests/test_browser/test_split_ghost_cols.py",
780
799
  "tests/test_browser/test_split_ux.py",
@@ -791,6 +810,7 @@
791
810
  "tests/test_browser/test_worksheet_workflow.py",
792
811
  "tests/test_bulk_upload_limits.py",
793
812
  "tests/test_cell_placeholder.py",
813
+ "tests/test_check_undefined_names.py",
794
814
  "tests/test_clear_fields.py",
795
815
  "tests/test_cli.py",
796
816
  "tests/test_cloud_disconnect_persist.py",
@@ -842,9 +862,12 @@
842
862
  "tests/test_importers.py",
843
863
  "tests/test_imports.py",
844
864
  "tests/test_instance_identity.py",
865
+ "tests/test_inventory_search_grammar.py",
845
866
  "tests/test_inventory_table_helpers.py",
846
867
  "tests/test_inventory_transform.py",
868
+ "tests/test_inventory_valuation_scope.py",
847
869
  "tests/test_invoice_line_total_recalc.py",
870
+ "tests/test_item_draft_status.py",
848
871
  "tests/test_item_history.py",
849
872
  "tests/test_line_measures.py",
850
873
  "tests/test_lists_import_idempotency.py",
@@ -888,11 +911,13 @@
888
911
  "tests/test_modules/test_registry.py",
889
912
  "tests/test_modules/test_slots.py",
890
913
  "tests/test_modules/test_slots_lifecycle.py",
914
+ "tests/test_no_undefined_names.py",
891
915
  "tests/test_notifications/__init__.py",
892
916
  "tests/test_notifications/test_router.py",
893
917
  "tests/test_notifications/test_service.py",
894
918
  "tests/test_notifications/test_sse.py",
895
919
  "tests/test_onboarding_connect_store.py",
920
+ "tests/test_openapi_docs.py",
896
921
  "tests/test_packaging.py",
897
922
  "tests/test_password_reset.py",
898
923
  "tests/test_payments_funnel.py",
@@ -901,6 +926,7 @@
901
926
  "tests/test_perishables.py",
902
927
  "tests/test_permissions.py",
903
928
  "tests/test_pieces_stored_in_attributes.py",
929
+ "tests/test_press_kit.py",
904
930
  "tests/test_pricing.py",
905
931
  "tests/test_proactive_qa.py",
906
932
  "tests/test_prod_hardening.py",
@@ -908,6 +934,7 @@
908
934
  "tests/test_projections/test_status_doc_backfill.py",
909
935
  "tests/test_purchasing_fields.py",
910
936
  "tests/test_python310_floor.py",
937
+ "tests/test_reconciliation_forms.py",
911
938
  "tests/test_regression.py",
912
939
  "tests/test_relay_account_proxy.py",
913
940
  "tests/test_reorder_v2.py",
@@ -1005,6 +1032,7 @@
1005
1032
  "tests/test_verticals_integrity.py",
1006
1033
  "tests/test_visual.py",
1007
1034
  "tests/test_weight_unit_behavior.py",
1035
+ "tests/test_worker_config_isolation.py",
1008
1036
  "tests/test_xss_hygiene.py",
1009
1037
  "ui/__init__.py",
1010
1038
  "ui/api_client.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "2.2.1",
3
+ "distance": 0,
4
+ "node": "g2590c97b63d729423ef35d9ba2abdda76459c902",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-08-18"
8
+ }