celerp 2.2.0__tar.gz → 2.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {celerp-2.2.0 → celerp-2.3.0}/PKG-INFO +1 -1
- {celerp-2.2.0 → celerp-2.3.0}/celerp/events/schemas.py +24 -2
- {celerp-2.2.0 → celerp-2.3.0}/celerp/events/types.py +2 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/main.py +16 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/loader.py +58 -2
- {celerp-2.2.0 → celerp-2.3.0}/celerp/output/pdf.py +1 -1
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/doctor.py +12 -26
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/auto_je.py +536 -128
- celerp-2.3.0/celerp/services/cogs_backfill.py +251 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/holdings.py +73 -10
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/line_measures.py +11 -2
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/list_behavior.py +13 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/pick.py +32 -1
- {celerp-2.2.0 → celerp-2.3.0}/celerp.egg-info/PKG-INFO +1 -1
- {celerp-2.2.0 → celerp-2.3.0}/celerp.egg-info/SOURCES.txt +5 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp.egg-info/scm_file_list.json +20 -0
- celerp-2.3.0/celerp.egg-info/scm_version.json +8 -0
- {celerp-2.2.0 → celerp-2.3.0}/conftest.py +11 -14
- celerp-2.3.0/conftest_support.py +44 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/celerp_accounting/routes.py +19 -2
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-admin/celerp_admin/routes.py +12 -26
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-dashboard/celerp_dashboard/routes.py +1 -1
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/routes.py +457 -87
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/sequences.py +2 -1
- celerp-2.3.0/default_modules/celerp-docs/tests/test_consolidate_lots.py +47 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_fulfill_no_split.py +11 -12
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_inventory_account_reconciliation.py +13 -6
- celerp-2.3.0/default_modules/celerp-docs/tests/test_writeoffs.py +409 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/__init__.py +2 -1
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/celerp_inventory/projections.py +24 -1
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/celerp_inventory/routes.py +90 -18
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/celerp_manufacturing/projection_handler.py +9 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/celerp_manufacturing/routes.py +105 -55
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_build_api.py +12 -5
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_manufacture_from_doc.py +21 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_manufacturing.py +19 -8
- celerp-2.3.0/default_modules/celerp-manufacturing/tests/test_run_records.py +427 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_to_make_allocation.py +5 -3
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/first_party.lock.json +6 -6
- {celerp-2.2.0 → celerp-2.3.0}/ui/api_client.py +24 -1
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/shell.py +14 -24
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/table.py +65 -9
- celerp-2.3.0/ui/i18n.py +175 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/ar.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/de.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/en.json +6 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/es.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/fr.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/id.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/it.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/ja.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/pt.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/th.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/locales/vi.json +4 -5
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/documents.py +290 -39
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/inventory.py +144 -38
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/manufacturing.py +22 -1
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/reconciliation.py +145 -153
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/search.py +1 -1
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings.py +0 -42
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/setup.py +4 -4
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/app.css +15 -1
- celerp-2.2.0/celerp.egg-info/scm_version.json +0 -8
- celerp-2.2.0/ui/i18n.py +0 -77
- {celerp-2.2.0 → celerp-2.3.0}/CLA.md +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/CONTRIBUTING.md +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/LICENSING.md +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/MANIFEST.in +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/NOTICE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/README.md +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/alembic.ini +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/__main__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/batch.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/cleanup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/commands.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/conversations.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/files.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/intent.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/llm.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/memory.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/models.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/page_count.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/quota.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/service.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/ai/tools.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/alembic.ini +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/alembic_config.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/cli.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/compat.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/compute/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/compute/aggregations.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/compute/valuation.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/config.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/base.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/daily_scheduler.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/http.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/images.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/quickbooks.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/registry.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/relay_token.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/shopify.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/sync_runner.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/upsert.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/util.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/webhooks.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/woocommerce.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/connectors/xero.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/constants.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/db.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/embedded_pg.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/events/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/events/engine.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/gateway/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/gateway/client.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/gateway/state.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/importers/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/importers/importer.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/importers/schema.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/middleware.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/README.md +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/_auto_stamp.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/_data_reconcile.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/_json_compat.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/env.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/script.py.mako +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/a0b1c2d3e4f5_seed_landed_cost_clearing_accounts.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/a1b2c3d4e5f6_add_doc_share_tokens.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/b1c2d3e4f5a6_add_supporter_badges.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/b2c3d4e5f6a7_add_import_batches.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/b3c4d5e6f7a8_expand_role_permissions_to_role_grants.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/c1d2e3f4a5b6_add_marketplace.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/c2d3e4f5a6b7_add_is_sync_to_shopify.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/c4d5e6f7a8b9_account_cash_flow_category.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/d0e1f2a3b4c5_add_share_token_expiry.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/d2e3f4a5b6c7_add_password_reset_token.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/d5e6f7a8b9c0_rename_fx_rounding_to_fx_difference.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/e3f4a5b6c7d8_add_company_is_active.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/e4f5a6b7c8d9_backfill_connector_idempotency_key.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/e7c9a1b3d5f2_work_center_default_columns.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/f1a2b3c4d5e6_move_accounts_marketplace_to_modules.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/f6a7b8c9d0e1_seed_fx_rounding_account.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/f8a9b0c1d2e3_work_center_default_backfill.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/fd5de461e14e_initial_schema.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/g1h2i3j4k5l6_add_consignment_flag.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/h2i3j4k5l6m7_add_bank_accounts_and_reconciliation.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/j4k5l6m7n8o9_labels_db_persistence.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/k5l6m7n8o9p0_add_reconciliation_v2.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/l6m7n8o9p0q1_add_sync_runs_table.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/m7n8o9p0q1r2_add_connector_configs_and_outbound_queue.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/n8o9p0q1r2s3_backfill_payment_date.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/o9p0q1r2s3t4_backfill_item_price_fields.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/p1q2r3s4t5u6_add_session_registry_and_user_auth_state.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/q2r3s4t5u6v7_add_system_runtime_state.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/r3s4t5u6v7w8_add_projections_company_entity_type_index.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/s4t5u6v7w8x9_drop_user_company_id_role.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/t5u6v7w8x9y0_seed_inventory_sub_accounts.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/u6v7w8x9y0z1_backfill_item_prices_from_attributes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/v7w8x9y0z1a2_backfill_purchase_unit_defaults.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/w8x9y0z1a2b3_backfill_category_unit_defaults.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/x7y8z9a0b1c2_add_projection_created_at.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/y8z9a0b1c2d3_per_company_ledger_idempotency.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/migrations/versions/z9a0b1c2d3e4_work_centers.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/accounting.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/ai.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/auth.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/base.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/company.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/connector_config.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/import_batch.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/ledger.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/marketplace.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/notification.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/projections.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/share.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/supporter.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/models/sync_run.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/api.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/audit.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/demotion.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/importer.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/license.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/meta.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/migrations_runner.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/references.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/registry.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/modules/slots.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/notifications/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/notifications/service.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/notifications/sse.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/output/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/output/branding.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/output/doc_print.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/output/share_render.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/projections/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/projections/engine.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/projections/handlers/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/projections/handlers/marketplace.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/projections/handlers/scanning.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/projections/handlers/shopify.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/projections/handlers/system.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/auth.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/companies.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/debug.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/events.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/health.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/ledger.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/notifications.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/stars.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/routers/system.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/schemas/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/activity_redaction.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/attachments.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/auth.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/backup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/backup_export.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/backup_import.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/backup_repo.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/backup_scheduler.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/backup_state.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/cost_visibility.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/demo.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/dev_release_guard.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/email.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/field_schema.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/fulfill.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/je_keys.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/landed_cost.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/money.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/payments.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/permissions.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/pricing.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/relay_share.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/reorder.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/runtime_state.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/session_tracker.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/shipping.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/star_cta.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/status_doc_backfill.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/supporter_badge.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/system_health.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/services/units.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/session_gate.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp/tax_regimes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp.egg-info/dependency_links.txt +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp.egg-info/entry_points.txt +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp.egg-info/requires.txt +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/celerp.egg-info/top_level.txt +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/celerp_accounting/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/celerp_accounting/api_setup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/celerp_accounting/csv_parser.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/celerp_accounting/matcher.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/celerp_accounting/models.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/celerp_accounting/projections.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/celerp_accounting/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/balance-sheet.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/cash-flow.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/extended-journal-csv.csv +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/extended-journal-print.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/extended-journal.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/general-ledger.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/journal-csv.csv +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/journal-print.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/journal.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/ledger.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/pnl.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/statement.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/report_goldens/trial-balance.html +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_accounting_banking.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_accounting_banking_routers.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_accounting_gaps.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_accounting_import_idempotency.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_cash_flow.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_financial_reports_ui.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_journal_gl_soa.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_journal_gl_soa_ui.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_reconciliation_v2.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_reports_end_to_end.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-accounting/tests/test_route_permissions.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-admin/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-admin/celerp_admin/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-admin/celerp_admin/setup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/celerp_ai/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/celerp_ai/routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/celerp_ai/setup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/celerp_ai/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/conftest.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_batch.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_cleanup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_conversations.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_coverage_gaps.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_intent.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_llm.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_memory.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_models.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_page_count.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_quota.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_router.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_routes_coverage.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_service.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-ai/tests/test_tools.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-backup/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-backup/celerp_backup/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-backup/celerp_backup/routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-backup/celerp_backup/setup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/celerp_connectors/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/celerp_connectors/models.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/celerp_connectors/routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/conftest.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_compliance.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_connector_correctness.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_connectors.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_credentials_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_images.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_outbound.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_quickbooks.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_rate_limiting.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_shopify.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_wiring.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_woocommerce.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_woocommerce_webhooks.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-connectors/tests/test_xero.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-contacts/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-contacts/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-contacts/celerp_contacts/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-contacts/celerp_contacts/migrations.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-contacts/celerp_contacts/projections.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-contacts/celerp_contacts/routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-contacts/celerp_contacts/services.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-contacts/celerp_contacts/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-dashboard/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-dashboard/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-dashboard/celerp_dashboard/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-dashboard/celerp_dashboard/setup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/api_setup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/doc_constants.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/doc_email.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/doc_projections.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/doc_service.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/models_share.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/routes_payments.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/routes_share.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/taxes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/celerp_docs/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/conftest.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_audits.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_freight_je.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_freight_lines.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_fulfillment_activity.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_inbound_je_lifecycle.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_landed_receive.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_line_delete_persist.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_line_identifier.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_payment_void_activity.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_receive_sku_batch.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_send_visibility.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_service_lines.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-docs/tests/test_void_guards.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/celerp_inventory/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/celerp_inventory/models_import_batch.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/celerp_inventory/routes_attachments.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/celerp_inventory/routes_scanning.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/celerp_inventory/services.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/celerp_inventory/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/tests/test_item_recipe_projection.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/tests/test_item_workflow_projection.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-inventory/tests/test_landed_cost_projection.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/celerp_labels/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/celerp_labels/models.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/celerp_labels/presets.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/celerp_labels/routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/celerp_labels/service.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/celerp_labels/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/requirements.txt +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/tests/test_labels.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-labels/tests/test_labels_module.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/celerp_manufacturing/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/celerp_manufacturing/costing.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/celerp_manufacturing/expansion.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/celerp_manufacturing/labor.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/celerp_manufacturing/migrations.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/celerp_manufacturing/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/requirements.txt +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_auto_complete_on_finalize.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_bom_removed.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_item_recipe_api.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_item_workflow_api.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_labor_providers.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_manufacturing_import_idempotency.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_manufacturing_module.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_mfg_events.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_phase2_manufacturing_validations.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_production_order.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_recipe_costing.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_recipe_expansion.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_recost_api.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_where_used.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_work_centers_and_settings.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-manufacturing/tests/test_workflow_time.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-reports/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-reports/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-reports/celerp_reports/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-reports/celerp_reports/api_setup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-reports/celerp_reports/routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-reports/celerp_reports/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-reports/tests/test_reports_full.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-reports/tests/test_reports_unit.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-subscriptions/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-subscriptions/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-subscriptions/celerp_subscriptions/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-subscriptions/celerp_subscriptions/routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-subscriptions/celerp_subscriptions/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-subscriptions/tests/test_subscriptions.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-subscriptions/tests/test_subscriptions_ui.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/LICENSE +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/accessory_fashion.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/activewear.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/art_photography.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/audio_equipment.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/bag_handbag.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/banknote.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/beauty_tool.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/bed_bedroom.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/beer.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/beverage_nonalc.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/body_part_auto.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/book.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/bottoms.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/brake_suspension.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/bullion_coin.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/camera.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/colored_stone.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/comic.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/commercial_space.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/component_part.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/confectionery.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/consulting_service.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/decorative_art.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/diamond.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/drawing.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/dress_jumpsuit.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/electrical_auto.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/electrical_component.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/emerald.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/engine_part.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/fastener.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/fertilizer_chemical.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/film_video.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/fine_writing_instrument.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/fluid_lubricant.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/footwear.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/fragrance.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/fresh_food.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/fresh_produce.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/frozen_food.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/gaming_console.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/gold_bullion.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/grain_cereal.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/haircare.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/hand_tool.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/ingredient_bulk.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/interior_part.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/jewelry.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/kitchen_dining.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/laptop.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/lighting.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/livestock_feed.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/makeup.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/measuring_instrument.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/medal_token.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/mineral_specimen.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/mobile_phone.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/music_cd.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/music_vinyl.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/nail.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/numismatic_coin.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/outdoor_furniture.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/outerwear.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/packaged_food.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/painting.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/parking_bay.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/pearl.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/personal_care.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/pipe_plumbing.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/platinum_bullion.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/power_tool.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/print_edition.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/residential_unit.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/rough_gemstone.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/ruby.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/saas_plan.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/safety_ppe.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/sapphire.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/sculpture.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/seating.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/seeds.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/silver_bullion.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/skincare.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/soft_furnishing.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/software_addon.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/software_license.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/spirit.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/storage_furniture.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/swimwear.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/table_desk.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/tablet.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/tire_wheel.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/tops.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/trading_card.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/tv_display.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/video_game.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/watch.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/watch_strap.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/categories/wine.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/agricultural.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/artwork.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/automotive.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/blank.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/books_media.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/coins_precious_metals.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/consulting.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/cosmetics.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/electronics.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/fashion.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/food_beverage.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/furniture.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/gemstones.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/hardware.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/property_rental.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/saas.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/watches.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/presets/wine_spirits.json +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/celerp_verticals/ui_routes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/tests/test_verticals.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/default_modules/celerp-verticals/tests/test_verticals_routers.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/legal/OFFICIAL-COMPONENTS.md +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/legal/TRADEMARK.md +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/packaging/winget/Celerp.Celerp.installer.yaml +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/packaging/winget/Celerp.Celerp.locale.en-US.yaml +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/packaging/winget/Celerp.Celerp.yaml +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/packaging/winget/README.md +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/pyproject.toml +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/setup.cfg +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/test_helpers.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/app.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/activity.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/attrs.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/backup.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/cloud_gate.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/currency.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/files.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/journal.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/notes.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/phone.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/components/report_kit.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/config.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/marketplace_catalog.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/__init__.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/account.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/accounting.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/accounting_import.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/auth.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/contacts.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/csv_import.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/dashboard.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/docs_import.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/events.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/financial_reports.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/lists_import.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/modules_page.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/notifications.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/reports.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_accounting.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_cloud.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_connectors.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_contacts.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_general.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_import.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_inventory.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_manufacturing.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_payments.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_purchasing.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/settings_sales.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/stars.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/subscriptions.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/routes/subscriptions_import.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/security.py +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/htmx.min.js +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/icon.png +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/logo.png +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/vendor/intl-tel-input/img/flags.webp +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/vendor/intl-tel-input/img/flags@2x.webp +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/vendor/intl-tel-input/intlTelInput.min.css +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/vendor/intl-tel-input/intlTelInput.min.js +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/vendor/intl-tel-input/intlTelInputWithUtils.min.js +0 -0
- {celerp-2.2.0 → celerp-2.3.0}/ui/static/vendor/intl-tel-input/utils.js +0 -0
|
@@ -117,6 +117,18 @@ class ItemExpired(BaseModel):
|
|
|
117
117
|
reason: str | None = None
|
|
118
118
|
|
|
119
119
|
|
|
120
|
+
class ItemWrittenOff(BaseModel):
|
|
121
|
+
# A unit of stock leaving the company for a non-sale reason (spoilage, samples,
|
|
122
|
+
# drawings). reason/account live single-sourced on the write-off list; the item row
|
|
123
|
+
# only records that it is off the books and points back to that list via source_list_id.
|
|
124
|
+
account: str
|
|
125
|
+
qty: float
|
|
126
|
+
unit_cost: float
|
|
127
|
+
cost_total: float
|
|
128
|
+
reason: str | None = None
|
|
129
|
+
source_list_id: str | None = None
|
|
130
|
+
|
|
131
|
+
|
|
120
132
|
class ItemSplit(BaseModel):
|
|
121
133
|
# Aggregate marker on the MOTHER. The projection consumes child_ids/child_skus;
|
|
122
134
|
# children_detail drives the per-child history rows (one row per child).
|
|
@@ -193,6 +205,14 @@ class ItemProduced(BaseModel):
|
|
|
193
205
|
quantity_produced: float
|
|
194
206
|
|
|
195
207
|
|
|
208
|
+
class ItemCostAdjusted(BaseModel):
|
|
209
|
+
# Restate a lot's goods cost after the fact. Manufacturing re-costs a produced lot to the run's
|
|
210
|
+
# actual input cost once completion knows the true received quantity. cost_total is the new
|
|
211
|
+
# absolute cost_base; landed contributions rescale from it.
|
|
212
|
+
cost_total: float
|
|
213
|
+
manufacturing_order_id: str | None = None # the run that re-costed the lot (audit trail)
|
|
214
|
+
|
|
215
|
+
|
|
196
216
|
# --- Manufacturing recipe (materials + labor + overhead) attached to an item ---
|
|
197
217
|
# The recipe is the single source of truth for how a manufactured item is built.
|
|
198
218
|
# Interpretation (cost roll-up, expansion) lives in celerp-manufacturing; the schema
|
|
@@ -710,8 +730,8 @@ class MfgOrderIssued(BaseModel):
|
|
|
710
730
|
|
|
711
731
|
|
|
712
732
|
class MfgOrderReceived(BaseModel):
|
|
713
|
-
# Finished goods received from a run. quantity
|
|
714
|
-
# lot_item_id is
|
|
733
|
+
# Finished goods received from a run. quantity is received as a discrete lot under the product;
|
|
734
|
+
# lot_item_id is that lot's id.
|
|
715
735
|
quantity: float
|
|
716
736
|
lot_item_id: str | None = None
|
|
717
737
|
received_by: str | None = None
|
|
@@ -1045,6 +1065,7 @@ EVENT_SCHEMA_MAP: dict[str, type[BaseModel]] = {
|
|
|
1045
1065
|
"item.fulfilled": ItemFulfilled,
|
|
1046
1066
|
"item.fulfillment_reversed": ItemFulfillmentReversed,
|
|
1047
1067
|
"item.expired": ItemExpired,
|
|
1068
|
+
"item.written_off": ItemWrittenOff,
|
|
1048
1069
|
"item.split": ItemSplit,
|
|
1049
1070
|
"item.split_from": ItemSplitFrom,
|
|
1050
1071
|
"item.transform": ItemTransform,
|
|
@@ -1054,6 +1075,7 @@ EVENT_SCHEMA_MAP: dict[str, type[BaseModel]] = {
|
|
|
1054
1075
|
"item.patched": ItemPatched,
|
|
1055
1076
|
"item.consumed": ItemConsumed,
|
|
1056
1077
|
"item.produced": ItemProduced,
|
|
1078
|
+
"item.cost_adjusted": ItemCostAdjusted,
|
|
1057
1079
|
"item.recipe.set": ItemRecipeSet,
|
|
1058
1080
|
"item.workflow.set": ItemWorkflowSet,
|
|
1059
1081
|
"item.reserved": ItemReserved,
|
|
@@ -15,6 +15,7 @@ class EventType(StrEnum):
|
|
|
15
15
|
ITEM_TRANSFERRED = "item.transferred"
|
|
16
16
|
ITEM_QUANTITY_ADJUSTED = "item.quantity.adjusted"
|
|
17
17
|
ITEM_EXPIRED = "item.expired"
|
|
18
|
+
ITEM_WRITTEN_OFF = "item.written_off"
|
|
18
19
|
ITEM_SPLIT = "item.split"
|
|
19
20
|
ITEM_SPLIT_FROM = "item.split_from"
|
|
20
21
|
ITEM_TRANSFORM = "item.transform"
|
|
@@ -22,6 +23,7 @@ class EventType(StrEnum):
|
|
|
22
23
|
ITEM_MERGED = "item.merged"
|
|
23
24
|
ITEM_CONSUMED = "item.consumed"
|
|
24
25
|
ITEM_PRODUCED = "item.produced"
|
|
26
|
+
ITEM_COST_ADJUSTED = "item.cost_adjusted"
|
|
25
27
|
ITEM_RECIPE_SET = "item.recipe.set"
|
|
26
28
|
ITEM_WORKFLOW_SET = "item.workflow.set"
|
|
27
29
|
ITEM_RESERVED = "item.reserved"
|
|
@@ -281,6 +281,22 @@ async def lifespan(_app: FastAPI):
|
|
|
281
281
|
"may show their status without a document link until a later boot"
|
|
282
282
|
)
|
|
283
283
|
|
|
284
|
+
# One-time backfill: post the missing COGS JE for invoices finalized before
|
|
285
|
+
# COGS moved into the finalize JE and never fulfilled since. Marker-gated
|
|
286
|
+
# (runs once; retries stragglers while any doc is locked or errored);
|
|
287
|
+
# non-fatal like the backfill above.
|
|
288
|
+
try:
|
|
289
|
+
from celerp.db import SessionLocal as _CogsSession
|
|
290
|
+
from celerp.services.cogs_backfill import run_cogs_backfill
|
|
291
|
+
async with _CogsSession() as _cogs_sess:
|
|
292
|
+
await run_cogs_backfill(_cogs_sess)
|
|
293
|
+
await _cogs_sess.commit()
|
|
294
|
+
except Exception:
|
|
295
|
+
logging.getLogger(__name__).exception(
|
|
296
|
+
"COGS backfill failed (non-fatal); affected invoices keep their "
|
|
297
|
+
"missing COGS until a later boot retries"
|
|
298
|
+
)
|
|
299
|
+
|
|
284
300
|
# Bring up the relay tunnel per the lazy free-tier lifecycle (3.1). A token-holder
|
|
285
301
|
# is past first activation and never re-enters it. Paid instances (public_url set)
|
|
286
302
|
# keep the tunnel always-on; a free instance opens it at boot only when it already
|
|
@@ -549,6 +549,12 @@ def load_all(module_dir: str | Path, enabled: set[str]) -> list[dict]:
|
|
|
549
549
|
"""
|
|
550
550
|
_loaded.clear()
|
|
551
551
|
_load_errors.clear()
|
|
552
|
+
# Module-contributed i18n catalogs are rebuilt from scratch on every pass,
|
|
553
|
+
# exactly like _loaded above, so a re-scan (a module toggled off, or a
|
|
554
|
+
# catalog changed) never leaves a stale or orphaned catalog behind. Lazy
|
|
555
|
+
# import keeps ui.i18n the lowest leaf (it must not import this module).
|
|
556
|
+
from ui.i18n import clear_registry
|
|
557
|
+
clear_registry()
|
|
552
558
|
|
|
553
559
|
# Support comma-separated module directories
|
|
554
560
|
raw = str(module_dir)
|
|
@@ -581,8 +587,12 @@ def load_all(module_dir: str | Path, enabled: set[str]) -> list[dict]:
|
|
|
581
587
|
sys.path.insert(0, p_str)
|
|
582
588
|
candidate_paths.append(p)
|
|
583
589
|
|
|
584
|
-
# Sort by dependency order (skip reasons land in _load_errors)
|
|
585
|
-
|
|
590
|
+
# Sort by dependency order (skip reasons land in _load_errors). Discovery is
|
|
591
|
+
# name-sorted first so load order - and therefore every first-registered-wins
|
|
592
|
+
# tie-break (slots and module i18n catalogs alike) - is deterministic, not
|
|
593
|
+
# dependent on the filesystem's iterdir() order.
|
|
594
|
+
ordered = _topo_sort(
|
|
595
|
+
sorted(candidate_paths, key=lambda p: p.name), enabled, errors=_load_errors)
|
|
586
596
|
|
|
587
597
|
# Relay credentials for the premium-license gate, resolved lazily and ONCE
|
|
588
598
|
# per load pass: the JWT is the same for every module, and there must be no
|
|
@@ -827,6 +837,52 @@ def _load_one(pkg_path: Path, pkg_name: str, *, trusted: bool = False) -> dict |
|
|
|
827
837
|
for item in contribution:
|
|
828
838
|
register_slot(slot_name, {**item, "_module": pkg_name})
|
|
829
839
|
|
|
840
|
+
# Register module-contributed UI translation catalogs (the `locales`
|
|
841
|
+
# manifest key, mirroring `slots` above). Each entry maps a language code to
|
|
842
|
+
# {"file": <path>, "rtl": <bool>}. Pushed into ui.i18n through a lazy import
|
|
843
|
+
# so the i18n leaf never imports the module subsystem. A malformed or
|
|
844
|
+
# unreadable entry is logged and skipped; the module and its other locales
|
|
845
|
+
# still load.
|
|
846
|
+
locales = manifest.get("locales") or {}
|
|
847
|
+
if not isinstance(locales, dict):
|
|
848
|
+
log.error(
|
|
849
|
+
"Module %r 'locales' skipped: must be a dict, got %s",
|
|
850
|
+
pkg_name, type(locales).__name__,
|
|
851
|
+
)
|
|
852
|
+
locales = {}
|
|
853
|
+
for lang, entry in locales.items():
|
|
854
|
+
if not isinstance(lang, str) or not lang.strip():
|
|
855
|
+
log.error(
|
|
856
|
+
"Module %r locale skipped: language code must be a non-empty string (got %r)",
|
|
857
|
+
pkg_name, lang,
|
|
858
|
+
)
|
|
859
|
+
continue
|
|
860
|
+
if (not isinstance(entry, dict)
|
|
861
|
+
or not isinstance(entry.get("file"), str) or not entry["file"].strip()):
|
|
862
|
+
log.error(
|
|
863
|
+
"Module %r locale %r skipped: entry must be a dict with a non-empty string 'file'",
|
|
864
|
+
pkg_name, lang,
|
|
865
|
+
)
|
|
866
|
+
continue
|
|
867
|
+
rtl = entry.get("rtl", False)
|
|
868
|
+
if not isinstance(rtl, bool):
|
|
869
|
+
log.error(
|
|
870
|
+
"Module %r locale %r: 'rtl' must be a bool, got %s - treating as false",
|
|
871
|
+
pkg_name, lang, type(rtl).__name__,
|
|
872
|
+
)
|
|
873
|
+
rtl = False
|
|
874
|
+
cat_path = pkg_path / entry["file"]
|
|
875
|
+
try:
|
|
876
|
+
catalog = json.loads(cat_path.read_text(encoding="utf-8"))
|
|
877
|
+
except (OSError, ValueError) as exc:
|
|
878
|
+
log.error(
|
|
879
|
+
"Module %r locale %r skipped: cannot read %s (%s: %s)",
|
|
880
|
+
pkg_name, lang, entry["file"], type(exc).__name__, exc,
|
|
881
|
+
)
|
|
882
|
+
continue
|
|
883
|
+
from ui.i18n import register_catalog
|
|
884
|
+
register_catalog(lang, catalog, rtl=rtl)
|
|
885
|
+
|
|
830
886
|
log.info(
|
|
831
887
|
"Module %r loaded (v%s, slots: %s)",
|
|
832
888
|
manifest["name"],
|
|
@@ -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
|
|
352
|
+
for t in li_taxes
|
|
353
353
|
)
|
|
354
354
|
else:
|
|
355
355
|
tax_str = f"{float(li.get('tax_rate') or 0):.1f}%"
|
|
@@ -426,33 +426,19 @@ async def _check_legacy_item_prices(
|
|
|
426
426
|
async def _emit_finalize_je(
|
|
427
427
|
session: AsyncSession, company_id, user_id, doc_id: str, state: dict,
|
|
428
428
|
) -> None:
|
|
429
|
-
|
|
430
|
-
subtotal = float(state.get("subtotal", total) or total)
|
|
431
|
-
tax = float(state.get("tax", 0) or 0)
|
|
432
|
-
ts = state.get("issue_date") or state.get("created_at") or state.get("finalized_at")
|
|
433
|
-
|
|
434
|
-
je_id = f"je:auto:{doc_id}:fin"
|
|
435
|
-
entries = [
|
|
436
|
-
{"account": "1120", "debit": total, "credit": 0.0},
|
|
437
|
-
{"account": "4100", "debit": 0.0, "credit": subtotal},
|
|
438
|
-
]
|
|
439
|
-
if tax > 0:
|
|
440
|
-
entries.append({"account": "2120", "debit": 0.0, "credit": tax})
|
|
429
|
+
"""Delegate to auto_je.create_for_doc_finalized for DRY compliance.
|
|
441
430
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
)
|
|
450
|
-
await
|
|
451
|
-
session, company_id=company_id,
|
|
452
|
-
|
|
453
|
-
data={}, actor_id=user_id, location_id=None, source="auto_je",
|
|
454
|
-
idempotency_key=je_idempotency_key(doc_id, "invoice.finalized", "p"),
|
|
455
|
-
metadata_={"trigger": "doc.finalized", "doc_id": doc_id},
|
|
431
|
+
A repaired invoice gets the same JE a live finalize posts - revenue, tax,
|
|
432
|
+
and the COGS pair - in the company's base currency.
|
|
433
|
+
"""
|
|
434
|
+
from celerp.models.company import Company
|
|
435
|
+
from celerp.services import auto_je as _auto_je
|
|
436
|
+
|
|
437
|
+
company = await session.get(Company, company_id)
|
|
438
|
+
base_currency = (company.settings.get("currency", "USD") if company else "USD")
|
|
439
|
+
await _auto_je.create_for_doc_finalized(
|
|
440
|
+
session, company_id=company_id, user_id=user_id, doc_id=doc_id,
|
|
441
|
+
doc=state, base_currency=base_currency,
|
|
456
442
|
)
|
|
457
443
|
|
|
458
444
|
|