Implementation of the right Code ussage
This commit is contained in:
+18
-2
@@ -5698,6 +5698,7 @@ def get_items():
|
||||
'ParentItemId': 1,
|
||||
'Code_4': 1,
|
||||
'Verfuegbar': 1,
|
||||
'User': 1,
|
||||
'Name': 1,
|
||||
}
|
||||
# Full mode: complete child data with all details
|
||||
@@ -5706,6 +5707,7 @@ def get_items():
|
||||
'ParentItemId': 1,
|
||||
'Code_4': 1,
|
||||
'Verfuegbar': 1,
|
||||
'User': 1,
|
||||
'Name': 1,
|
||||
'Images': 1,
|
||||
'ThumbnailInfo': 1,
|
||||
@@ -5733,13 +5735,26 @@ def get_items():
|
||||
grouped_units = [itm] + grouped_children
|
||||
available_units = []
|
||||
grouped_all_codes = []
|
||||
grouped_unit_states = []
|
||||
for unit in grouped_units:
|
||||
unit_id = str(unit['_id']) if not isinstance(unit['_id'], str) else unit['_id']
|
||||
unit_code = unit.get('Code_4')
|
||||
if unit_code is not None and str(unit_code).strip() != '':
|
||||
grouped_all_codes.append(str(unit_code).strip())
|
||||
normalized_code = str(unit_code).strip()
|
||||
grouped_all_codes.append(normalized_code)
|
||||
else:
|
||||
normalized_code = ''
|
||||
|
||||
grouped_unit_states.append({
|
||||
'id': unit_id,
|
||||
'code': normalized_code,
|
||||
'available': bool(unit.get('Verfuegbar', True)),
|
||||
'borrowed_by_current_user': bool(
|
||||
username and str(unit.get('User') or '') == str(username)
|
||||
),
|
||||
})
|
||||
|
||||
if unit.get('Verfuegbar', True):
|
||||
unit_id = str(unit['_id']) if not isinstance(unit['_id'], str) else unit['_id']
|
||||
code = unit.get('Code_4') or '-'
|
||||
available_units.append({
|
||||
'id': unit_id,
|
||||
@@ -5752,6 +5767,7 @@ def get_items():
|
||||
itm['AvailableGroupedCount'] = len(available_units)
|
||||
itm['GroupedAvailableUnits'] = available_units
|
||||
itm['GroupedAllCodes'] = grouped_all_codes
|
||||
itm['GroupedUnitStates'] = grouped_unit_states
|
||||
if grouped_count > 1:
|
||||
itm['Verfuegbar'] = len(available_units) > 0
|
||||
if available_only and not itm.get('Verfuegbar', False):
|
||||
|
||||
@@ -3285,6 +3285,7 @@ document.addEventListener('DOMContentLoaded', ()=>{
|
||||
card.dataset.code = (item.Code_4 !== undefined && item.Code_4 !== null) ?
|
||||
String(item.Code_4).trim() : '';
|
||||
card.dataset.groupCodes = JSON.stringify(Array.isArray(item.GroupedAllCodes) ? item.GroupedAllCodes : []);
|
||||
card.dataset.groupedUnits = JSON.stringify(Array.isArray(item.GroupedUnitStates) ? item.GroupedUnitStates : []);
|
||||
|
||||
// Add filter values to their respective sets
|
||||
filter1Array.forEach(value => {
|
||||
@@ -3415,7 +3416,7 @@ document.addEventListener('DOMContentLoaded', ()=>{
|
||||
</div>
|
||||
{% if current_permissions.actions.get('can_borrow', False) %}
|
||||
${isAvailableForBorrow && !item.BlockedNow ?
|
||||
`<form method="POST" action="{{ url_for('ausleihen', id='') }}${item._id}">
|
||||
`<form method="POST" action="{{ url_for('ausleihen', id='') }}${item._id}" data-grouped-borrow-form>
|
||||
${isGroupedItem ? `
|
||||
<div class="grouped-borrow-controls" style="display:flex; gap:8px; flex-wrap:wrap; margin-bottom:8px; align-items:center;">
|
||||
<label style="font-size:0.85rem; margin:0;">Anzahl:</label>
|
||||
@@ -3445,6 +3446,7 @@ document.addEventListener('DOMContentLoaded', ()=>{
|
||||
:
|
||||
`<button class="ausleihen disabled-button" disabled>${item.BlockedNow ? 'Reserviert' : 'Ausgeliehen'}</button>`
|
||||
}
|
||||
${isGroupedItem ? '<div class="grouped-searched-action" data-grouped-searched-action style="display:none;"></div>' : ''}
|
||||
{% endif %}
|
||||
{% if current_permissions.actions.get('can_delete', False) %}
|
||||
<form method="POST" action="{{ url_for('delete_item', id='') }}${item._id}" style="display:inline;" onsubmit="return confirm('Sind Sie sicher, dass Sie dieses Objekt löschen möchten?')">
|
||||
@@ -3686,6 +3688,55 @@ document.addEventListener('DOMContentLoaded', ()=>{
|
||||
}, 500);
|
||||
}
|
||||
|
||||
function syncSearchedGroupedAction(card, searchTerm, exactCodeMatch) {
|
||||
const searchedAction = card.querySelector('[data-grouped-searched-action]');
|
||||
if (!searchedAction) return;
|
||||
|
||||
const borrowForm = card.querySelector('[data-grouped-borrow-form]');
|
||||
searchedAction.style.display = 'none';
|
||||
searchedAction.innerHTML = '';
|
||||
|
||||
if (!exactCodeMatch || !searchTerm) {
|
||||
if (borrowForm) borrowForm.style.display = '';
|
||||
return;
|
||||
}
|
||||
|
||||
let groupedUnits = [];
|
||||
try {
|
||||
groupedUnits = JSON.parse(card.dataset.groupedUnits || '[]');
|
||||
} catch {
|
||||
groupedUnits = [];
|
||||
}
|
||||
|
||||
const matchedUnit = groupedUnits.find(unit =>
|
||||
String(unit.code || '').trim().toLowerCase() === searchTerm
|
||||
);
|
||||
if (!matchedUnit) return;
|
||||
|
||||
if (matchedUnit.available) {
|
||||
if (borrowForm) borrowForm.style.display = '';
|
||||
const specificSelect = borrowForm?.querySelector('[name="specific_item_id"]');
|
||||
if (specificSelect) {
|
||||
specificSelect.value = matchedUnit.id;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (borrowForm) borrowForm.style.display = 'none';
|
||||
searchedAction.style.display = 'block';
|
||||
if (matchedUnit.borrowed_by_current_user) {
|
||||
searchedAction.innerHTML = `
|
||||
<form method="POST" action="/zurueckgeben/${encodeURIComponent(matchedUnit.id)}">
|
||||
<button class="ausleihen" type="submit">Zurückgeben (${escapeHtml(matchedUnit.code || 'Code')})</button>
|
||||
</form>`;
|
||||
} else {
|
||||
searchedAction.innerHTML = `
|
||||
<button class="ausleihen disabled-button" type="button" disabled>
|
||||
${escapeHtml(matchedUnit.code || 'Code')} ausgeliehen
|
||||
</button>`;
|
||||
}
|
||||
}
|
||||
|
||||
function applyFilters(isDirectSearch = false) {
|
||||
const itemsContainer = document.querySelector('#items-container');
|
||||
const items = itemsContainer.querySelectorAll('.item-card');
|
||||
@@ -3732,6 +3783,7 @@ document.addEventListener('DOMContentLoaded', ()=>{
|
||||
if (passesAllFilters && matchesCodeSearch && matchesDesc && (!favoritesOnly || isFavoriteCard)) {
|
||||
item.style.display = 'block';
|
||||
visibleCount++;
|
||||
syncSearchedGroupedAction(item, searchTerm, exactCodeMatch);
|
||||
|
||||
if (exactCodeMatch) {
|
||||
item.classList.add('highlight-item', 'exact-code-match');
|
||||
@@ -3756,6 +3808,7 @@ document.addEventListener('DOMContentLoaded', ()=>{
|
||||
}
|
||||
} else {
|
||||
item.style.display = 'none';
|
||||
syncSearchedGroupedAction(item, '', false);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user