From d58958db39d30d342d84c7495e2b9ff6a10ac285 Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Wed, 12 Aug 2026 12:26:10 +0200 Subject: [PATCH] Changes to habe he template name right and the right correction for the library Item and a parameter mismatch --- Web/app.py | 14 +++++------- Web/modules/database/items.py | 40 +++++++++++++++++++++++---------- Web/templates/edit_library.html | 3 +-- 3 files changed, 35 insertions(+), 22 deletions(-) diff --git a/Web/app.py b/Web/app.py index 89a0f82..1abf5c8 100755 --- a/Web/app.py +++ b/Web/app.py @@ -6383,8 +6383,8 @@ def is_library_item(item): @app.route('/item_edit/', methods=['GET', 'POST']) def item_edit(id): """ - Complete endpoint for editing items. Processes Filters 1-3 for ALL items, - and applies Library-specific fields when the item is a Library item. + Endpoint for editing items. Correctly determines library vs inventory status + and renders Filter 1-3 for ALL item types. """ if 'username' not in session: if request.method == 'POST' and request.is_json: @@ -6435,8 +6435,9 @@ def item_edit(id): current_item['IndividualCodes'] = '\n'.join(individual_codes) + # FIXED: Changed 'edit_library.html' to 'item_edit.html' return render_template( - 'edit_library.html', + 'item_edit.html', username=session['username'], item=current_item, show_library_features=show_library_features, @@ -6499,19 +6500,17 @@ def item_edit(id): # Type-specific processing if show_library_features: - # --- LIBRARY ITEM SPECIFICS --- isbn_raw = sanitize_form_value(request.form.get('isbn', '')) item_isbn = normalize_and_validate_isbn(isbn_raw) if isbn_raw else '' item_type = sanitize_form_value(request.form.get('item_type_input', 'Buch')) library_category = sanitize_form_value(request.form.get('library_category', '')) images = current_item.get('Images', []) else: - # --- INVENTORY ITEM SPECIFICS --- item_isbn = current_item.get('ISBN', '') item_type = 'other' library_category = current_item.get('library_category', '') - # Manage images for Inventory Mode + # Manage images for Inventory Items images_to_keep = request.form.getlist('existing_images') original_images = current_item.get('Images', []) images = [img for img in original_images if img in images_to_keep] @@ -6552,7 +6551,7 @@ def item_edit(id): except Exception as e: app.logger.error(f"Image error for item {id}: {e}") - # Auto-add location to predefined locations list if applicable + # Auto-add location if applicable if ort and ort not in it.get_predefined_locations(): it.add_predefined_location(ort) @@ -6586,7 +6585,6 @@ def item_edit(id): return redirect(redirect_target) - @app.route('/update_group', methods=['POST']) def update_group(): diff --git a/Web/modules/database/items.py b/Web/modules/database/items.py index aecf205..b43dca3 100755 --- a/Web/modules/database/items.py +++ b/Web/modules/database/items.py @@ -30,15 +30,22 @@ import Web.modules.inventarsystem.data_protection as dp def is_library_item(item): """ Determines if an item belongs to the library system. - Returns False for 'other', None, or empty ItemType (Inventory item). - Returns True for any specific library type ('Buch', 'CD', 'DVD', etc.). + Prioritizes explicit 'is_library' boolean field from MongoDB if set. """ if not item: return False + + # 1. Check explicit boolean flag from MongoDB first + if 'is_library' in item and item['is_library'] is not None: + return bool(item['is_library']) + + # 2. Fallback to ItemType check item_type = item.get('ItemType', 'other') if not item_type: return False - return str(item_type).strip().lower() != 'other' + + clean_type = str(item_type).strip().lower() + return clean_type not in ['other', 'general', ''] def safe_decrypt_user(encrypted_user): """ @@ -264,7 +271,10 @@ def get_group_item_ids(id): def update_item(id, name, ort, beschreibung, images, verfuegbar, filter1, filter2, filter3, - ansch_jahr, ansch_kost, code_4, reservierbar, isbn=None, item_type='general'): + ansch_jahr, ansch_kost, code_4, reservierbar, isbn="", item_type='other', library_category=""): + """ + Updates an item in MongoDB, keeping series groups synchronized. + """ try: client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT) db = client[cfg.MONGODB_DB] @@ -272,29 +282,35 @@ def update_item(id, name, ort, beschreibung, images, verfuegbar, filter1, filter old_item = items.find_one({'_id': ObjectId(id)}) if not old_item: + client.close() return False series_group_id = old_item.get('SeriesGroupId') + # Recalculate library status based on updated item_type + is_lib = is_library_item({'is_library': old_item.get('is_library'), 'ItemType': item_type}) + shared_update = { 'Name': name, 'Ort': ort, 'Beschreibung': beschreibung, - 'Images': images, - 'Filter': filter1, - 'Filter2': filter2, - 'Filter3': filter3, + 'Images': images if isinstance(images, list) else [], + 'Filter': filter1 if isinstance(filter1, list) else [], + 'Filter2': filter2 if isinstance(filter2, list) else [], + 'Filter3': filter3 if isinstance(filter3, list) else [], 'Anschaffungsjahr': ansch_jahr, 'Anschaffungskosten': ansch_kost, - 'Reservierbar': reservierbar, - 'ISBN': isbn, + 'Reservierbar': bool(reservierbar), + 'ISBN': str(isbn) if isbn else '', 'ItemType': item_type, - 'Verfuegbar': verfuegbar, + 'is_library': is_lib, + 'library_category': library_category, + 'Verfuegbar': bool(verfuegbar), 'LastUpdated': datetime.datetime.now() } specific_update = shared_update.copy() - specific_update['Code_4'] = code_4 + specific_update['Code_4'] = str(code_4) if code_4 else '' items.update_one({'_id': ObjectId(id)}, {'$set': specific_update}) diff --git a/Web/templates/edit_library.html b/Web/templates/edit_library.html index 1f1bb5d..3309716 100644 --- a/Web/templates/edit_library.html +++ b/Web/templates/edit_library.html @@ -271,7 +271,7 @@ Der Basis-Code steht oben. Alle weiteren Gruppenmitglieder werden hier untereinander aufgeführt. - +

Unterrichtsfach (Filter 1):

@@ -360,7 +360,6 @@ let code4LastScanned = ''; let code4LastScannedAt = 0; - // Load filter dropdown options and select current values function loadAndSelectFilterValues(filterNumber) { fetch(`/get_predefined_filter_values/${filterNumber}`) .then(res => res.json())