django-bom 1.239__tar.gz → 1.245__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.
- {django_bom-1.239/django_bom.egg-info → django_bom-1.245}/PKG-INFO +1 -1
- {django_bom-1.239 → django_bom-1.245}/bom/admin.py +15 -11
- {django_bom-1.239 → django_bom-1.245}/bom/forms.py +2 -22
- django_bom-1.245/bom/migrations/0050_alter_organization_options.py +17 -0
- {django_bom-1.239 → django_bom-1.245}/bom/settings.py +2 -6
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/css/style.css +85 -5
- django_bom-1.245/bom/templates/bom/settings.html +465 -0
- django_bom-1.245/bom/templates/bom/subscription_panel.html +16 -0
- {django_bom-1.239 → django_bom-1.245}/bom/views/views.py +2 -3
- {django_bom-1.239 → django_bom-1.245/django_bom.egg-info}/PKG-INFO +1 -1
- {django_bom-1.239 → django_bom-1.245}/django_bom.egg-info/SOURCES.txt +2 -1
- {django_bom-1.239 → django_bom-1.245}/pyproject.toml +1 -1
- django_bom-1.239/bom/templates/bom/_subscription_panel.html +0 -6
- django_bom-1.239/bom/templates/bom/settings.html +0 -399
- {django_bom-1.239 → django_bom-1.245}/LICENSE +0 -0
- {django_bom-1.239 → django_bom-1.245}/MANIFEST.in +0 -0
- {django_bom-1.239 → django_bom-1.245}/README.md +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/__init__.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/apps.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/auth_backends.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/base_classes.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/constants.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/context_processors.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/csv_headers.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/decorators.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/form_fields.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/helpers.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/local_settings.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0001_initial.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0002_auto_20180908_2151.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0003_sellerpart_data_source.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0004_auto_20180911_0011.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0005_auto_20181007_1934.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0006_auto_20181007_1949.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0007_auto_20181009_0256.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0008_auto_20181030_0427.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0009_subpart_reference.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0010_auto_20181202_0733.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0011_auto_20181202_2113.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0012_partchangehistory.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0013_auto_20190222_1631.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0014_auto_20190223_2353.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0015_auto_20190303_1915.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0016_auto_20190405_2308.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0017_auto_20190616_1912.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0018_auto_20190616_2143.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0019_auto_20190624_1246.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0020_auto_20190627_0207.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0021_auto_20190627_0428.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0022_auto_20190811_2140.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0023_auto_20191205_2351.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0024_auto_20191214_1342.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0025_auto_20191221_1907.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0026_auto_20191222_2258.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0027_auto_20191222_2347.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0028_partrevision_displayable_synopsis.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0029_auto_20191231_1630.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0030_auto_20200101_2253.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0031_auto_20200104_1352.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0032_auto_20200126_1806.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0033_auto_20200203_0618.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0034_auto_20200222_0359.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0035_auto_20200303_0111.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0036_auto_20200303_0538.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0037_auto_20200405_1642.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0038_auto_20200422_0504.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0039_auto_20200929_2315.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0040_alter_organization_currency.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0041_organization_subscription_quantity.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0042_auto_20210720_2137.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0043_auto_20211123_0157.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0044_auto_20220831_1241.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0045_sellerpart_link.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0046_alter_sellerpart_unique_together.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0047_sellerpart_seller_part_number.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0048_rename_part_organization_number_class_bom_part_organiz_b333d6_idx_and_more.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/0049_alter_assembly_id_alter_assemblysubparts_id_and_more.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/migrations/__init__.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/models.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/part_bom.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/css/dashboard.css +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/css/jquery.treetable.css +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/css/materialize.min.css +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/css/part-info.css +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/css/tablesorter-theme.materialize.css +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/css/treetable-theme.css +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/doc/sample_part_classes.csv +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/doc/test_bom.csv +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/doc/test_bom_5_intelligent.csv +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/doc/test_full_bom.csv +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/doc/test_new_parts.csv +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/doc/test_new_parts_5_intelligent.csv +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/_ionicons_svg_md-arrow-dropdown.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/_ionicons_svg_md-arrow-dropright.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/favicon.ico +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/1x/btn_google_signin_dark_disabled_web.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/1x/btn_google_signin_dark_focus_web.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/1x/btn_google_signin_dark_normal_web.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/1x/btn_google_signin_dark_pressed_web.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/1x/btn_google_signin_light_disabled_web.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/1x/btn_google_signin_light_focus_web.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/1x/btn_google_signin_light_normal_web.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/1x/btn_google_signin_light_pressed_web.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/2x/btn_google_signin_dark_disabled_web@2x.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/2x/btn_google_signin_dark_focus_web@2x.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/2x/btn_google_signin_dark_normal_web@2x.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/2x/btn_google_signin_dark_pressed_web@2x.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/2x/btn_google_signin_light_disabled_web@2x.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/2x/btn_google_signin_light_focus_web@2x.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/2x/btn_google_signin_light_normal_web@2x.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/2x/btn_google_signin_light_pressed_web@2x.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_dark_disabled_ios.eps +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_dark_disabled_ios.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_dark_focus_ios.eps +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_dark_focus_ios.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_dark_normal_ios.eps +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_dark_normal_ios.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_dark_pressed_ios.eps +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_dark_pressed_ios.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_light_disabled_ios.eps +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_light_disabled_ios.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_light_focus_ios.eps +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_light_focus_ios.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_light_normal_ios.eps +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_light_normal_ios.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_light_pressed_ios.eps +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google/web/vector/btn_google_light_pressed_ios.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/google_drive_logo.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/indabom.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/mouser.png +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/img/octopart_blue.svg +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/js/jquery-3.4.1.min.js +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/js/jquery.ba-floatingscrollbar.min.js +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/js/jquery.treetable.js +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/static/bom/js/materialize.min.js +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/account-delete.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/add-manufacturer-part.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/add-sellerpart.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/base-menu.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/base.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/bom-action-btn.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/bom-action-table.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/bom-base-menu.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/bom-base.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/bom-form-modal.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/bom-form.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/bom-modal-add-users.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/bom-signup.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/components/bom-flat.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/components/bom-indented.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/components/manufacturer-part-list.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/components/seller-part-list.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/create-part.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/dashboard-menu.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/dashboard.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/edit-manufacturer-part.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/edit-part-class.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/edit-part.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/edit-user-meta.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/help.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/manufacturer-info.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/manufacturers.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/nothing-to-see.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/organization-create.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/part-info.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/part-revision-display.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/part-revision-edit.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/part-revision-manage-bom.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/part-revision-new.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/part-revision-release.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/search-help.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/seller-info.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/sellers.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/signup.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/table_of_contents.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/upload-bom.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/upload-parts-help.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/bom/upload-parts.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/templates/registration/login.html +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/tests.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/third_party_apis/__init__.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/third_party_apis/base_api.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/third_party_apis/google_drive.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/third_party_apis/mouser.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/third_party_apis/test_apis.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/urls.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/utils.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/validators.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/views/__init__.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/views/json_views.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/bom/wsgi.py +0 -0
- {django_bom-1.239 → django_bom-1.245}/django_bom.egg-info/dependency_links.txt +0 -0
- {django_bom-1.239 → django_bom-1.245}/django_bom.egg-info/requires.txt +0 -0
- {django_bom-1.239 → django_bom-1.245}/django_bom.egg-info/top_level.txt +0 -0
- {django_bom-1.239 → django_bom-1.245}/setup.cfg +0 -0
|
@@ -16,19 +16,15 @@ from .models import (
|
|
|
16
16
|
UserMeta,
|
|
17
17
|
)
|
|
18
18
|
|
|
19
|
-
|
|
20
19
|
User = get_user_model()
|
|
21
20
|
|
|
22
21
|
class UserMetaInline(admin.TabularInline):
|
|
23
22
|
model = UserMeta
|
|
23
|
+
verbose_name = 'BOM User Meta'
|
|
24
24
|
raw_id_fields = ('organization',)
|
|
25
25
|
can_delete = False
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
class UserAdmin(UserAdmin):
|
|
29
|
-
inlines = (UserMetaInline,)
|
|
30
|
-
|
|
31
|
-
|
|
32
28
|
class OrganizationAdmin(admin.ModelAdmin):
|
|
33
29
|
list_display = ('name',)
|
|
34
30
|
|
|
@@ -142,13 +138,21 @@ class AssemblyAdmin(admin.ModelAdmin):
|
|
|
142
138
|
]
|
|
143
139
|
|
|
144
140
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
141
|
+
current_admin = admin.site._registry.get(User)
|
|
142
|
+
|
|
143
|
+
if current_admin:
|
|
144
|
+
admin_class = current_admin.__class__
|
|
145
|
+
inlines = list(admin_class.inlines or [])
|
|
146
|
+
if UserMetaInline not in inlines:
|
|
147
|
+
inlines.append(UserMetaInline)
|
|
148
|
+
admin_class.inlines = inlines
|
|
149
|
+
else:
|
|
150
|
+
class BomUserAdmin(UserAdmin):
|
|
151
|
+
inlines = [UserMetaInline]
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
admin.site.register(User, BomUserAdmin)
|
|
150
155
|
|
|
151
|
-
admin.site.register(User, UserAdmin)
|
|
152
156
|
admin.site.register(Organization, OrganizationAdmin)
|
|
153
157
|
admin.site.register(Seller, SellerAdmin)
|
|
154
158
|
admin.site.register(SellerPart, SellerPartAdmin)
|
|
@@ -1,41 +1,27 @@
|
|
|
1
1
|
import codecs
|
|
2
2
|
import csv
|
|
3
3
|
import logging
|
|
4
|
-
from typing import Type, TypeVar
|
|
5
4
|
|
|
6
5
|
from django import forms
|
|
7
6
|
from django.contrib.auth.forms import UserCreationForm
|
|
8
7
|
from django.core.exceptions import ValidationError
|
|
9
|
-
from django.core.validators import MaxLengthValidator,
|
|
8
|
+
from django.core.validators import MaxLengthValidator, MinLengthValidator
|
|
10
9
|
from django.db import IntegrityError
|
|
11
10
|
from django.forms.models import model_to_dict
|
|
12
11
|
from django.utils.translation import gettext_lazy as _
|
|
13
|
-
|
|
14
12
|
from djmoney.money import Money
|
|
15
13
|
|
|
16
14
|
from .constants import (
|
|
17
|
-
CONFIGURATION_TYPES,
|
|
18
15
|
CURRENT_UNITS,
|
|
19
16
|
DISTANCE_UNITS,
|
|
20
17
|
FREQUENCY_UNITS,
|
|
21
18
|
INTERFACE_TYPES,
|
|
22
19
|
MEMORY_UNITS,
|
|
23
|
-
NUMBER_CLASS_CODE_LEN_DEFAULT,
|
|
24
|
-
NUMBER_CLASS_CODE_LEN_MAX,
|
|
25
|
-
NUMBER_CLASS_CODE_LEN_MIN,
|
|
26
|
-
NUMBER_ITEM_LEN_DEFAULT,
|
|
27
|
-
NUMBER_ITEM_LEN_MAX,
|
|
28
|
-
NUMBER_ITEM_LEN_MIN,
|
|
29
20
|
NUMBER_SCHEME_INTELLIGENT,
|
|
30
21
|
NUMBER_SCHEME_SEMI_INTELLIGENT,
|
|
31
|
-
NUMBER_VARIATION_LEN_DEFAULT,
|
|
32
|
-
NUMBER_VARIATION_LEN_MAX,
|
|
33
|
-
NUMBER_VARIATION_LEN_MIN,
|
|
34
22
|
PACKAGE_TYPES,
|
|
35
23
|
POWER_UNITS,
|
|
36
24
|
ROLE_TYPE_VIEWER,
|
|
37
|
-
ROLE_TYPES,
|
|
38
|
-
SUBSCRIPTION_TYPES,
|
|
39
25
|
TEMPERATURE_UNITS,
|
|
40
26
|
VALUE_UNITS,
|
|
41
27
|
VOLTAGE_UNITS,
|
|
@@ -43,11 +29,9 @@ from .constants import (
|
|
|
43
29
|
WEIGHT_UNITS,
|
|
44
30
|
)
|
|
45
31
|
from .csv_headers import (
|
|
46
|
-
BOMFlatCSVHeaders,
|
|
47
32
|
BOMIndentedCSVHeaders,
|
|
48
33
|
CSVHeaderError,
|
|
49
34
|
PartClassesCSVHeaders,
|
|
50
|
-
PartsListCSVHeaders,
|
|
51
35
|
)
|
|
52
36
|
from .form_fields import AutocompleteTextInput
|
|
53
37
|
from .models import (
|
|
@@ -66,14 +50,10 @@ from .models import (
|
|
|
66
50
|
UserMeta,
|
|
67
51
|
)
|
|
68
52
|
from .utils import (
|
|
69
|
-
check_references_for_duplicates,
|
|
70
|
-
get_from_dict,
|
|
71
53
|
listify_string,
|
|
72
|
-
prep_for_sorting_nicely,
|
|
73
54
|
stringify_list,
|
|
74
55
|
)
|
|
75
|
-
from .validators import alphanumeric
|
|
76
|
-
|
|
56
|
+
from .validators import alphanumeric
|
|
77
57
|
|
|
78
58
|
logger = logging.getLogger(__name__)
|
|
79
59
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Generated by Django 5.2.8 on 2025-12-16 18:43
|
|
2
|
+
|
|
3
|
+
from django.db import migrations
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('bom', '0049_alter_assembly_id_alter_assemblysubparts_id_and_more'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AlterModelOptions(
|
|
14
|
+
name='organization',
|
|
15
|
+
options={'permissions': (('manage_members', 'Can manage organization members'),)},
|
|
16
|
+
),
|
|
17
|
+
]
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import logging
|
|
2
|
+
import os
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from django.utils.log import DEFAULT_LOGGING
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
# BASE CONFIGURATION & LOCAL SETTINGS
|
|
8
|
-
# --------------------------------------------------------------------------
|
|
5
|
+
from django.utils.log import DEFAULT_LOGGING
|
|
9
6
|
|
|
10
7
|
logger = logging.getLogger(__name__)
|
|
11
8
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
12
9
|
|
|
13
|
-
# Attempt to load local settings (similar pattern to your original, but clean)
|
|
14
10
|
try:
|
|
15
11
|
from .local_settings import *
|
|
16
12
|
except ImportError:
|
|
@@ -8,24 +8,38 @@ main {
|
|
|
8
8
|
min-height: 100vh;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
p {
|
|
12
|
+
font-size: 1.2em;
|
|
13
|
+
font-weight: 300;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
li {
|
|
17
|
+
font-size: 1.2em;
|
|
18
|
+
font-weight: 300;
|
|
19
|
+
}
|
|
20
|
+
|
|
11
21
|
h1 {
|
|
12
|
-
font-size: 3.
|
|
22
|
+
font-size: 3.5rem;
|
|
23
|
+
font-weight: 300;
|
|
13
24
|
}
|
|
14
25
|
|
|
15
26
|
h2 {
|
|
16
|
-
font-size:
|
|
27
|
+
font-size: 3.0rem;
|
|
28
|
+
font-weight: 300;
|
|
17
29
|
}
|
|
18
30
|
|
|
19
31
|
h3 {
|
|
20
|
-
font-size:
|
|
32
|
+
font-size: 1.6rem;
|
|
33
|
+
font-weight: 300;
|
|
21
34
|
}
|
|
22
35
|
|
|
23
36
|
h4 {
|
|
24
|
-
font-size: 1.
|
|
37
|
+
font-size: 1.3rem;
|
|
38
|
+
font-weight: 300;
|
|
25
39
|
}
|
|
26
40
|
|
|
27
41
|
h5 {
|
|
28
|
-
font-size: 1.
|
|
42
|
+
font-size: 1.1rem;
|
|
29
43
|
}
|
|
30
44
|
|
|
31
45
|
.tabs {
|
|
@@ -316,4 +330,70 @@ a.anchor {
|
|
|
316
330
|
.pagination {
|
|
317
331
|
display: none;
|
|
318
332
|
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/* --- Settings & Admin Layout Refinements (flat, Material-inspired) --- */
|
|
336
|
+
/* Scoped to .container-app so marketing pages and legacy views remain unchanged. */
|
|
337
|
+
|
|
338
|
+
/* Section spacing for denser admin/settings layouts */
|
|
339
|
+
.container-app .section {
|
|
340
|
+
padding-top: 16px;
|
|
341
|
+
padding-bottom: 16px;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/* Consistent section headers with optional leading/trailing icons */
|
|
345
|
+
.container-app .section-title {
|
|
346
|
+
display: flex;
|
|
347
|
+
align-items: center;
|
|
348
|
+
gap: 8px;
|
|
349
|
+
margin: 0 0 8px 0;
|
|
350
|
+
letter-spacing: 0.2px;
|
|
351
|
+
font-weight: 500;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.container-app .section-title .material-icons {
|
|
355
|
+
line-height: 1;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.container-app .section-title img {
|
|
359
|
+
height: 1.8rem;
|
|
360
|
+
margin-left: 6px;
|
|
361
|
+
vertical-align: middle;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/* When a service logo/image is used as a leading icon, adjust spacing */
|
|
365
|
+
.container-app .section-title img:first-child {
|
|
366
|
+
margin-left: 0;
|
|
367
|
+
margin-right: 6px;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/* Comfortable dividers between blocks */
|
|
371
|
+
.container-app .divider {
|
|
372
|
+
margin: 16px 0;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/* Slightly smaller paragraph text and tighter rhythm in settings */
|
|
376
|
+
.container-app .section p {
|
|
377
|
+
margin: 0 0 12px 0;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/* Tabs separation from content */
|
|
381
|
+
.container-app .tabs {
|
|
382
|
+
margin-bottom: 12px;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/* Flat collections (used as key-value lists in settings) */
|
|
386
|
+
.container-app .collection.z-depth-0 {
|
|
387
|
+
border: none;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.container-app .collection.z-depth-0 .collection-item {
|
|
391
|
+
border: none;
|
|
392
|
+
padding-left: 0;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/* Button group spacing in aligned action rows */
|
|
396
|
+
.container-app .right-align .btn,
|
|
397
|
+
.container-app .right-align .btn-flat {
|
|
398
|
+
margin-left: 4px;
|
|
319
399
|
}
|