91 lines
4.1 KiB
HTML
91 lines
4.1 KiB
HTML
{% import 'macro/accordion.html' as accordion %}
|
|
{% import 'macro/badge.html' as badge %}
|
|
{% import 'macro/card.html' as card %}
|
|
{% import 'macro/form.html' as form %}
|
|
|
|
<div class="card mb-3 flex-fill {% if solo %}card-solo{% endif %}">
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
<h5 class="mb-0">
|
|
<i class="ri-shopping-cart-line"></i>
|
|
{% if item.fields.name %}
|
|
{{ item.fields.name }}
|
|
{% else %}
|
|
Individual Part Lot
|
|
{% endif %}
|
|
</h5>
|
|
{% if not solo %}
|
|
<a href="{{ item.url() }}" class="btn btn-sm btn-primary">
|
|
<i class="ri-eye-line"></i> View
|
|
</a>
|
|
{% else %}
|
|
<a href="{{ url_for('individual_part.list_lots') }}" class="btn btn-sm btn-secondary">
|
|
<i class="ri-arrow-left-line"></i> Back
|
|
</a>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<!-- Part preview grid (2x2 grid of top 4 parts) -->
|
|
<div class="row g-0 border-bottom">
|
|
{% set lot_parts = item.parts() %}
|
|
{% for part in lot_parts[:4] %}
|
|
<div class="col-6">
|
|
<div class="{% if solo %}p-3{% else %}p-1{% endif %}" style="{% if solo %}height: 200px{% else %}height: 100px{% endif %}; background-image: url('{{ part.url_for_image() }}'); background-size: contain; background-repeat: no-repeat; background-position: center;">
|
|
<img src="{{ part.url_for_image() }}" alt="{{ part.fields.name }}" class="d-none" loading="lazy">
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
{% if lot_parts|length > 4 %}
|
|
<div class="col-12 text-center p-1 bg-light">
|
|
<small class="text-muted">+{{ lot_parts|length - 4 }} more parts</small>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<div class="card-body border-bottom-0 {% if not solo %}p-1{% endif %}">
|
|
{# Always show unique parts count and total quantity first for part lots #}
|
|
<span class="badge text-bg-secondary fw-normal mb-1 {% if solo %}fs-6{% endif %}"><i class="ri-shapes-line"></i> {{ item.parts()|length }} unique parts</span>
|
|
{{ badge.quantity(item.total_quantity(), solo=solo, last=false) }}
|
|
{# Render remaining badges in configured order #}
|
|
{{ badge.render_ordered_badges(item, brickset_tags, brickset_owners, brickset_storages, brickset_purchase_locations, solo=solo, last=false, context='detail' if solo else 'grid') }}
|
|
</div>
|
|
|
|
{% if solo %}
|
|
<div class="accordion accordion-flush border-top" id="lot-details">
|
|
{{ accordion.table(item.parts(), 'Parts', 'parts-inventory', 'lot-details', 'part/lot_table.html', icon='shapes-line', hamburger_menu=g.login.is_authenticated())}}
|
|
{% include 'individual_part/management.html' %}
|
|
{% if g.login.is_authenticated() %}
|
|
{{ accordion.header('Danger zone', 'danger-zone', 'lot-details', danger=true, class='text-end') }}
|
|
<a href="{{ url_for('individual_part.delete_lot', lot_id=item.fields.id) }}" class="btn btn-danger" role="button" data-bs-toggle="modal" data-bs-target="#deleteModal">
|
|
<i class="ri-delete-bin-line"></i> Delete entire lot and all parts
|
|
</a>
|
|
{{ accordion.footer() }}
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div class="card-footer"></div>
|
|
</div>
|
|
|
|
{% if solo and g.login.is_authenticated() %}
|
|
<!-- Delete Confirmation Modal -->
|
|
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="deleteModalLabel">Confirm Delete</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
Are you sure you want to delete this entire lot and all {{ item.parts()|length }} parts in it? This action cannot be undone.
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
|
<form method="POST" action="{{ url_for('individual_part.delete_lot', lot_id=item.fields.id) }}">
|
|
<button type="submit" class="btn btn-danger">Delete Lot</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|