180 lines
8.7 KiB
HTML
180 lines
8.7 KiB
HTML
{% 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">
|
|
{% 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>
|
|
</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}}</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>
|
|
{% for key_param in stock.component.get_key_parameters_as_text %}
|
|
{{key_param}}
|
|
{% endfor %}
|
|
</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/new-substorage-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 %}
|
|
|
|
new AutocompleteText('{{add_storage_form.responsible.id_for_label}}', '{{add_storage_form.responsible.id_for_label}}-ac-dropdown',
|
|
function(search, autocomplete_obj) {
|
|
api_search_user(search, function(results) {
|
|
var usernames = new Array();
|
|
console.log(results);
|
|
for (var i = 0; i < results.results.length; i++) {
|
|
usernames.push(results.results[i].username);
|
|
}
|
|
console.log(usernames);
|
|
autocomplete_obj.show_results(usernames);
|
|
}, function(){});
|
|
});
|
|
</script>
|
|
{% endblock custom_scripts %}
|
|
|