{% extends 'base.html' %} {% load qr_code %} {% load static %} {% load crispy_forms_tags %} {% block content %} <div class="container"> <nav aria-label="breadcrumb" class="fs-4"> <ol class="breadcrumb"> <li class="breadcrumb-item"></li> {% for crumb in breadcrumbs %} <li class="breadcrumb-item"><a href="{% url 'parts-stocks-detail' uuid=crumb.id %}">{{crumb.name}}</a></li> {% endfor %} <li class="breadcrumb-item active" aria-current="page">{{object.name}}</li> </ol> </nav> <div class="row"> <div class="col-md-3"> <div class="row"> {% qr_from_text object.get_qr_code size="m" image_format="svg" %} </div> <div class="row"> <h4>{{storage.name}}{% if storage.verbose_name %}<small> ({{storage.verbose_name}})</small>{% endif %}</h4> </div> <div class="row"> {% if object.parent_storage %} <h1>Sub-Storages <a class="btn btn-secondary" href="{% url 'parts-stocks-detail' uuid=object.parent_storage.id %}">Parent Storage</a> {% else %} <h1>Sub-Storages <a class="btn btn-secondary" href="{% url 'parts-stocks'%}">Stock Overview</a> {% endif %} <button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#delete-storage-modal">Delete</button> <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#add-sub-modal"><i class="bi bi-plus-circle"></i></button> <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#change-modal"><i class="bi bi-pen-fill"></i></button> </h1> <div class="list-group"> {% for storage in storages %} <a href="{% url 'parts-stocks-detail' uuid=storage.id %}" class="text-decoration-none"> <li class="list-group-item list-group-item-action justify-content-between align-items-center d-flex"> <div> <h5>{{storage.name}}{% if storage.verbose_name %}<small> ({{storage.verbose_name}})</small>{% endif %}</h5> Responsible: {{ storage.responsible }} </div> <span class="badge bg-primary rounded-pill">{{storage.get_total_stock_amount}}</span> </li> </a> {% endfor %} </div> {% include 'paginator.html' with paginator=storages get_param='storage_page' aria_label='Storage Page Navigation' %} </div> </div> <div class="col"> <h1>Stocked Components</h1> <form method="get"> <div class="input-group mb-3"> <input class="form-control" name="search" type="search" placeholder="Search..." {% if stock_search %}value="{{stock_search}}"{% endif %}> <button type="submit" class="btn btn-primary"> <i class="bi bi-search"></i> </button> <button class="btn btn-success" type="button" data-bs-toggle="modal" data-bs-target="#add-stock-modal"> <i class="bi bi-plus-circle"></i> Add Stock </button> </div> </form> <div class="list-group mb-3"> {% for stock in stocks %} <li class="list-group-item list-group-item-action d-flex align-items-center"> <div class="flex-shrink-0"> {% if stock.component.get_resolved_image %} <img src="{{stock.component.get_resolved_image}}" style="max-width:64px;max-height:64px;" alt="{{ low.component.name }}" class="mr-3"> {% else %} {% load static %} <img src="{% static 'css/icons/card-image.svg' %}" style="width:64px;max-height:64px;" alt="{{ low.component.name }}" class="mr-3"> {% endif %} </div> <div class="flex-grow-1 ms-3"> <h6 class="mt-0 text-primary"><a href="{% url 'parts-components-detail' uuid=stock.component.id %}" class="text-decoration-none">{{ stock.component.name }}</a></h6> {% if stock.component.package %} Package: {{stock.component.package}}<br> {% endif %} {% if stock.component.manufacturer %} Manufacturer: {{stock.component.manufacturer}} {% endif %} {% if stock.lot %} <span class="text-secondary"><br>Lot: {{stock.lot}}</span> {% endif %} </div> <div class="ms-3"> Amount: {{stock.amount}} {% if stock.watermark >= 0 %} <br>Watermark: {{stock.watermark}} {% else %} <span class="text-secondary"><br>No Watermark</span> {% endif %} </div> <div class="ms-3"> <button type="button" class="btn btn-secondary" data-bs-toggle="modal" data-bs-target="#change-stock-modal-{{stock.id}}">Change</button> </div> <div> <form method="post"> {% csrf_token %} <input type="hidden" name="stock_uuid" value="{{stock.id}}"> <input type="submit" class="btn btn-danger m-1" name="submit-delete-stock" value="X"> </form> </div> </li> {% endfor %} </div> {% include 'paginator.html' with paginator=stocks get_param='stock_page' aria_label='Stock Page Navigation' %} </div> </div> {% for stock in stocks %} {% include 'parts/modals/update-stock-modal.html' with stock=stock form=change_stock_form %} {% endfor %} <!-- Modal for adding a substorage--> {% with add_storage_form as form %} {% include 'parts/modals/add-substorage-modal.html' %} {% endwith %} <!-- Modal to change current storag--> {% with change_storage_form as form %} {% include 'parts/modals/change-storage-modal.html' %} {% endwith %} <!-- Modal for deleting this storage --> {% with delete_storage_errors as err_msgs %} {% include 'parts/modals/delete-storage-modal.html' %} {% endwith %} <!-- Modal for adding stock to this storage --> {% with add_stock_form as form %} {% include 'parts/modals/add-stock-modal.html' %} {% endwith %} </div> {% endblock content %} {% block custom_scripts %} <script type="text/javascript" src="{% static 'js/add-stock-modal.js' %}"></script> <script type="text/javascript"> {% if add_storage_form.errors %} var addSubStorageModal = document.querySelector('#add-sub-modal'); var c_modal = bootstrap.Modal.getOrCreateInstance(addSubStorageModal); c_modal.show(); {% endif %} {% if delete_storage_errors %} var deleteStorageModal = document.querySelector('#delete-storage-modal'); var d_modal = bootstrap.Modal.getOrCreateInstance(deleteStorageModal); d_modal.show(); {% endif %} {% if add_stock_form.errors %} var uuid = "{{add_stock_form.component_uuid.value}}"; if (uuid && uuid != '' && uuid != 'None') { api_get_component_from_id(uuid, function(component){ var add_stock_modal_div = document.querySelector('#add-stock-modal'); var add_stock_modal = bootstrap.Modal.getOrCreateInstance(add_stock_modal_div); fill_add_stock_modal_component(component); add_stock_modal.show(); console.log(component) }, function(){ var add_stock_modal_div = document.querySelector('#add-stock-modal'); var add_stock_modal = bootstrap.Modal.getOrCreateInstance(add_stock_modal_div); add_stock_modal.show(); }); } else { var add_stock_modal_div = document.querySelector('#add-stock-modal'); var add_stock_modal = bootstrap.Modal.getOrCreateInstance(add_stock_modal_div); add_stock_modal.show(); } {% endif %} </script> {% endblock custom_scripts %}