mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-08-01 08:44:48 +02:00
Renamed projects/ template folder to recommended camel_case style
This commit is contained in:
parent
5696f32a04
commit
e8efe81f79
10 changed files with 8 additions and 8 deletions
22
templates/projects/add_parts.html.twig
Normal file
22
templates/projects/add_parts.html.twig
Normal file
|
@ -0,0 +1,22 @@
|
|||
{% extends "main_card.html.twig" %}
|
||||
|
||||
{% block title %}{% trans %}project.add_parts_to_project{% endtrans %}{% endblock %}
|
||||
|
||||
{% block card_title %}
|
||||
<i class="fa-solid fa-magnifying-glass-plus fa-fw"></i>
|
||||
{% trans %}project.add_parts_to_project{% endtrans %}{% if project %}: <i>{{ project.name }}</i>{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block card_content %}
|
||||
|
||||
{{ form_start(form) }}
|
||||
|
||||
{{ form_row(form.project) }}
|
||||
{% form_theme form.bom_entries with ['Form/collection_types_layout.html.twig'] %}
|
||||
{{ form_widget(form.bom_entries) }}
|
||||
|
||||
{{ form_row(form.submit) }}
|
||||
|
||||
{{ form_end(form) }}
|
||||
|
||||
{% endblock %}
|
85
templates/projects/build/_form.html.twig
Normal file
85
templates/projects/build/_form.html.twig
Normal file
|
@ -0,0 +1,85 @@
|
|||
{% import "helper.twig" as helper %}
|
||||
|
||||
{{ form_start(form) }}
|
||||
|
||||
<table class="table table-sm table-responsive table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="" data-multicheck-name="lots_check" {{ stimulus_controller('pages/checkbox_multicheck') }}>
|
||||
</div>
|
||||
</th>
|
||||
<th>{% trans %}part.table.name{% endtrans %}</th>
|
||||
<th>{% trans %}project.bom.mountnames{% endtrans %}</th>
|
||||
<th class="text-end">{% trans %}project.build.required_qty{% endtrans %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for bom_entry in build_request.bomEntries %}
|
||||
{# 1st row basic infos about the BOM entry #}
|
||||
<tr class="{% if bom_entry.part is null or buildHelper.bOMEntryBuildable(bom_entry, number_of_builds) %}table-primary{% else %}table-danger{% endif %}">
|
||||
<td style="width: 20px;">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="" data-multicheck-name="lots_check" required>
|
||||
{# <label class="form-check-label" for="checkbox_{{ loop.index }}"> #}
|
||||
</div>
|
||||
</td>
|
||||
<td >
|
||||
{% if bom_entry.part %}
|
||||
<b><a target="_blank" href="{{ entity_url(bom_entry.part) }}">{{ bom_entry.part.name }}</a></b> {% if bom_entry.name %}({{ bom_entry.name }}){% endif %}
|
||||
{% else %}
|
||||
<b>{{ bom_entry.name }}</b>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% for tag in bom_entry.mountnames|split(',') %}
|
||||
<span class="badge bg-secondary badge-secondary" >{{ tag | trim }}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<b>{{ build_request.neededAmountForBOMEntry(bom_entry) | format_amount(bom_entry.part.partUnit ?? null) }}</b> {% trans %}project.builds.needed{% endtrans %}
|
||||
(= {{ number_of_builds }} x {{ bom_entry.quantity | format_amount(bom_entry.part.partUnit ?? null) }})
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
{% set lots = build_request.partLotsForBOMEntry(bom_entry) %}
|
||||
{% if lots is not null %}
|
||||
{% for lot in lots %}
|
||||
{# @var lot \App\Entity\Parts\PartLot #}
|
||||
<div class="mb-2 row">
|
||||
<label class="col-form-label col-sm-4" for="category_admin_form_parent">
|
||||
{% if lot.storageLocation %}
|
||||
<small>{{ helper.structural_entity_link(lot.storageLocation) }}</small>
|
||||
{% endif %}
|
||||
{% if lot.name is not empty %}
|
||||
(<small>{{ lot.name }}</small>)
|
||||
{% endif %}
|
||||
</label>
|
||||
<div class="col-sm-6">
|
||||
{{ form_errors(form["lot_"~lot.id]) }}
|
||||
{{ form_widget(form["lot_"~lot.id]) }}
|
||||
</div>
|
||||
<div class="col-sm-2 mt-1 text-end">
|
||||
/ <b>{{ lot.amount | format_amount(lot.part.partUnit) }}</b> {% trans %}project.builds.stocked{% endtrans %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ form_row(form.comment) }}
|
||||
|
||||
{{ form_row(form.addBuildsToBuildsPart) }}
|
||||
{% if form.buildsPartLot is defined %}
|
||||
{{ form_row(form.buildsPartLot) }}
|
||||
{% endif %}
|
||||
|
||||
{{ form_row(form.submit) }}
|
||||
|
||||
{{ form_end(form) }}
|
40
templates/projects/build/build.html.twig
Normal file
40
templates/projects/build/build.html.twig
Normal file
|
@ -0,0 +1,40 @@
|
|||
{% extends "main_card.html.twig" %}
|
||||
|
||||
{% block title %}{% trans %}project.info.builds.label{% endtrans %}: {{ number_of_builds }}x {{ project.name }}{% endblock %}
|
||||
|
||||
{% block card_title %}
|
||||
<i class="fa-solid fa-bolt fa-fw"></i>
|
||||
{% trans %}project.info.builds.label{% endtrans %}: <b>{{ number_of_builds }}x</b> <i>{{ project.name }}</i>
|
||||
{% endblock %}
|
||||
|
||||
{% block card_content %}
|
||||
{% set can_build = buildHelper.projectBuildable(project, number_of_builds) %}
|
||||
{% import "components/projects.macro.html.twig" as project_macros %}
|
||||
|
||||
{% if project.status is not empty and project.status != "in_production" %}
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<i class="fa-solid fa-triangle-exclamation fa-fw"></i> {% trans with {"%project_status%": ('project.status.'~project.status)|trans } %}project.builds.check_project_status{% endtrans %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="alert {% if can_build %}alert-success{% else %}alert-danger{% endif %}" role="alert">
|
||||
{% if not can_build %}
|
||||
<h5><i class="fa-solid fa-circle-exclamation fa-fw"></i> {% trans %}project.builds.build_not_possible{% endtrans %}</h5>
|
||||
<b>{% trans with {"%number_of_builds%": number_of_builds} %}project.builds.following_bom_entries_miss_instock_n{% endtrans %}</b>
|
||||
<ul>
|
||||
{% for bom_entry in buildHelper.nonBuildableProjectBomEntries(project, number_of_builds) %}
|
||||
<li>{{ project_macros.project_bom_entry_with_missing_instock(bom_entry, number_of_builds) }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<h5><i class="fa-solid fa-circle-check fa-fw"></i> {% trans %}project.builds.build_possible{% endtrans %}</h5>
|
||||
<span>{% trans with {"%max_builds%": number_of_builds} %}project.builds.number_of_builds_possible{% endtrans %}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<p class="text-muted">{% trans %}project.build.help{% endtrans %}</p>
|
||||
|
||||
{% include 'projects/build/_form.html.twig' %}
|
||||
|
||||
|
||||
{% endblock %}
|
11
templates/projects/info/_bom.html.twig
Normal file
11
templates/projects/info/_bom.html.twig
Normal file
|
@ -0,0 +1,11 @@
|
|||
{% import "components/datatables.macro.html.twig" as datatables %}
|
||||
|
||||
<div class="mb-2"></div>
|
||||
|
||||
{{ datatables.datatable(datatable, 'elements/datatables/datatables', 'projects') }}
|
||||
|
||||
<a class="btn btn-success" {% if not is_granted('@projects.edit') %}disabled{% endif %}
|
||||
href="{{ path('project_add_parts', {"id": project.id, "_redirect": app.request.requestUri}) }}">
|
||||
<i class="fa-solid fa-square-plus fa-fw"></i>
|
||||
{% trans %}project.info.bom_add_parts{% endtrans %}
|
||||
</a>
|
40
templates/projects/info/_builds.html.twig
Normal file
40
templates/projects/info/_builds.html.twig
Normal file
|
@ -0,0 +1,40 @@
|
|||
{% set can_build = buildHelper.projectBuildable(project) %}
|
||||
|
||||
{% import "components/projects.macro.html.twig" as project_macros %}
|
||||
|
||||
{% if project.status is not empty and project.status != "in_production" %}
|
||||
<div class="alert mt-2 alert-warning" role="alert">
|
||||
<i class="fa-solid fa-triangle-exclamation fa-fw"></i> {% trans with {"%project_status%": ('project.status.'~project.status)|trans } %}project.builds.check_project_status{% endtrans %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="alert mt-2 {% if can_build %}alert-success{% else %}alert-danger{% endif %}" role="alert">
|
||||
{% if not can_build %}
|
||||
<h5><i class="fa-solid fa-circle-exclamation fa-fw"></i> {% trans %}project.builds.build_not_possible{% endtrans %}</h5>
|
||||
<b>{% trans %}project.builds.following_bom_entries_miss_instock{% endtrans %}</b>
|
||||
<ul>
|
||||
{% for bom_entry in buildHelper.nonBuildableProjectBomEntries(project) %}
|
||||
<li>{{ project_macros.project_bom_entry_with_missing_instock(bom_entry) }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<h5><i class="fa-solid fa-circle-check fa-fw"></i> {% trans %}project.builds.build_possible{% endtrans %}</h5>
|
||||
<span>{% trans with {"%max_builds%": buildHelper.maximumBuildableCount(project)} %}project.builds.number_of_builds_possible{% endtrans %}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<form method="get" action="{{ path('project_build', {"id": project.iD }) }}">
|
||||
<div class="row mt-2">
|
||||
<div class="col-4">
|
||||
<div class="input-group mb-3">
|
||||
<input type="number" min="1" class="form-control" placeholder="{% trans %}project.builds.number_of_builds{% endtrans %}" name="n" required>
|
||||
<input type="hidden" name="_redirect" value="{{ app.request.requestUri }}">
|
||||
<button class="btn btn-outline-secondary" type="submit" id="button-addon2">{% trans %}project.build.btn_build{% endtrans %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% if project.buildPart %}
|
||||
<p><b>{% trans %}project.builds.no_stocked_builds{% endtrans %}:</b> <a href="{{ entity_url(project.buildPart) }}">{{ project.buildPart.amountSum }}</a></p>
|
||||
{% endif %}
|
77
templates/projects/info/_info.html.twig
Normal file
77
templates/projects/info/_info.html.twig
Normal file
|
@ -0,0 +1,77 @@
|
|||
{% import "helper.twig" as helper %}
|
||||
|
||||
<div class="row mt-2">
|
||||
<div class="col-md-8">
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-lg-4 col-4 mt-auto mb-auto">
|
||||
{% if project.masterPictureAttachment %}
|
||||
<a href="{{ entity_url(project.masterPictureAttachment, 'file_view') }}" data-turbo="false" target="_blank" rel="noopener">
|
||||
<img class="d-block w-100 img-fluid img-thumbnail bg-light" src="{{ entity_url(project.masterPictureAttachment, 'file_view') }}" alt="">
|
||||
</a>
|
||||
{% else %}
|
||||
<img src="{{ asset('img/part_placeholder.svg') }}" class="img-fluid img-thumbnail bg-light mb-2" alt="Part main image" height="300" width="300">
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-9 col-lg-8 col-7">
|
||||
<h3 class="w-fit" title="{% trans %}name.label{% endtrans %}">{{ project.name }}
|
||||
{# You need edit permission to use the edit button #}
|
||||
{% if is_granted('edit', project) %}
|
||||
<a href="{{ entity_url(project, 'edit') }}"><i class="fas fa-fw fa-sm fa-edit"></i></a>
|
||||
{% endif %}
|
||||
</h3>
|
||||
<h6 class="text-muted w-fit" title="{% trans %}description.label{% endtrans %}"><span>{{ project.description|format_markdown(true) }}</span></h6>
|
||||
{% if project.buildPart %}
|
||||
<h6>{% trans %}project.edit.associated_build_part{% endtrans %}:</h6>
|
||||
<a href="{{ entity_url(project.buildPart) }}">{{ project.buildPart.name }}</a>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-4"> {# Sidebar panel with infos about last creation date, etc. #}
|
||||
<div class="mb-3">
|
||||
<span class="text-muted" title="{% trans %}lastModified{% endtrans %}">
|
||||
<i class="fas fa-history fa-fw"></i> {{ helper.date_user_combination(project, true) }}
|
||||
</span>
|
||||
<br>
|
||||
<span class="text-muted mt-1" title="{% trans %}createdAt{% endtrans %}">
|
||||
<i class="fas fa-calendar-plus fa-fw"></i> {{ helper.date_user_combination(project, false) }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="mt-1">
|
||||
<h6>
|
||||
{{ helper.project_status_to_badge(project.status) }}
|
||||
</h6>
|
||||
</div>
|
||||
<div class="mt-1">
|
||||
<h6>
|
||||
<span class="badge badge-primary bg-primary">
|
||||
<i class="fa-solid fa-list-check fa-fw"></i>
|
||||
{{ project.bomEntries | length }}
|
||||
{% trans %}project.info.bom_entries_count{% endtrans %}
|
||||
</span>
|
||||
</h6>
|
||||
</div>
|
||||
{% if project.children is not empty %}
|
||||
<div class="mt-1">
|
||||
<h6>
|
||||
<span class="badge badge-primary bg-secondary">
|
||||
<i class="fa-solid fa-folder-tree fa-fw"></i>
|
||||
{{ project.children | length }}
|
||||
{% trans %}project.info.sub_projects_count{% endtrans %}
|
||||
</span>
|
||||
</h6>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if project.comment is not empty %}
|
||||
<p>
|
||||
<h5>{% trans %}comment.label{% endtrans %}:</h5>
|
||||
{{ project.comment|format_markdown }}
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
133
templates/projects/info/_info_card.html.twig
Normal file
133
templates/projects/info/_info_card.html.twig
Normal file
|
@ -0,0 +1,133 @@
|
|||
{% import "helper.twig" as helper %}
|
||||
{% import "LabelSystem/dropdown_macro.html.twig" as dropdown %}
|
||||
|
||||
{{ helper.breadcrumb_entity_link(project) }}
|
||||
|
||||
<div class="accordion mb-4" id="listAccordion">
|
||||
<div class="accordion-item">
|
||||
<div class="accordion-header">
|
||||
<button class="accordion-button collapsed py-2" data-bs-toggle="collapse" data-bs-target="#entityInfo" aria-expanded="true">
|
||||
{% if project.masterPictureAttachment is not null and attachment_manager.isFileExisting(project.masterPictureAttachment) %}
|
||||
<img class="hoverpic ms-0 me-1 d-inline" {{ stimulus_controller('elements/hoverpic') }} data-thumbnail="{{ entity_url(project.masterPictureAttachment, 'file_view') }}" src="{{ attachment_thumbnail(project.masterPictureAttachment, 'thumbnail_sm') }}">
|
||||
{% else %}
|
||||
{{ helper.entity_icon(project, "me-1") }}
|
||||
{% endif %}
|
||||
{% trans %}project.label{% endtrans %}: <b>{{ project.name }}</b>
|
||||
</button>
|
||||
</div>
|
||||
<div id="entityInfo" class="accordion-collapse collapse show" data-bs-parent="#listAccordion">
|
||||
<div class="accordion-body">
|
||||
{% if project.description is not empty %}
|
||||
{{ project.description|format_markdown }}
|
||||
{% endif %}
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
|
||||
<a class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true">
|
||||
<i class="fas fa-info-circle fa-fw"></i>
|
||||
{% trans %}entity.info.common.tab{% endtrans %}
|
||||
</a>
|
||||
<a class="nav-link" id="v-pills-statistics-tab" data-bs-toggle="pill" href="#v-pills-statistics" role="tab" aria-controls="v-pills-profile" aria-selected="false">
|
||||
<i class="fas fa-chart-pie fa-fw"></i>
|
||||
{% trans %}entity.info.statistics.tab{% endtrans %}
|
||||
</a>
|
||||
{% if project.attachments is not empty %}
|
||||
<a class="nav-link" id="v-pills-attachments-tab" data-bs-toggle="pill" href="#v-pills-attachments" role="tab" aria-controls="v-pills-attachments" aria-selected="false">
|
||||
<i class="fas fa-paperclip fa-fw"></i>
|
||||
{% trans %}entity.info.attachments.tab{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if project.parameters is not empty %}
|
||||
<a class="nav-link" id="v-pills-parameters-tab" data-bs-toggle="pill" href="#v-pills-parameters" role="tab" aria-controls="v-pills-parameters" aria-selected="false">
|
||||
<i class="fas fa-atlas fa-fw"></i>
|
||||
{% trans %}entity.info.parameters.tab{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if project.comment is not empty %}
|
||||
<a class="nav-link" id="v-pills-comment-tab" data-bs-toggle="pill" href="#v-pills-comment" role="tab">
|
||||
<i class="fas fa-comment-alt fa-fw"></i>
|
||||
{% trans %}comment.label{% endtrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
<div class="tab-content" id="v-pills-tabContent">
|
||||
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
|
||||
<div class="row">
|
||||
<div class="col-sm-9 form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4">{% trans %}entity.info.name{% endtrans %}:</label>
|
||||
<span class="col-sm form-control-static">{{ project.name }}</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4">{% trans %}entity.info.parent{% endtrans %}:</label>
|
||||
<span class="col-sm form-control-static">
|
||||
{% if project.parent %}
|
||||
{{ project.parent.fullPath }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
{% block quick_links %}{% endblock %}
|
||||
|
||||
<a class="btn btn-secondary w-100 mb-2" href="{{ entity_url(project, 'edit') }}">
|
||||
<i class="fas fa-edit"></i> {% trans %}entity.edit.btn{% endtrans %}
|
||||
</a>
|
||||
<div class="">
|
||||
<span class="text-muted" title="{% trans %}lastModified{% endtrans %}">
|
||||
<i class="fas fa-history fa-fw"></i> {{ project.lastModified | format_datetime("short") }}
|
||||
</span>
|
||||
<br>
|
||||
<span class="text-muted mt-1" title="{% trans %}createdAt{% endtrans %}">
|
||||
<i class="fas fa-calendar-plus fa-fw"></i> {{ project.addedDate | format_datetime("short") }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="v-pills-statistics" role="tabpanel" aria-labelledby="v-pills-statistics-tab">
|
||||
<div class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4">{% trans %}entity.info.children_count{% endtrans %}:</label>
|
||||
<span class="col-sm form-control-static">{{ project.children | length }}</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4">{% trans %}entity.info.parts_count{% endtrans %}:</label>
|
||||
<span class="col-sm form-control-static">{{ project.bomEntries | length }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if project.attachments is not empty %}
|
||||
<div class="tab-pane fade" id="v-pills-attachments" role="tabpanel" aria-labelledby="v-pills-attachments-tab">
|
||||
{% include "Parts/info/_attachments_info.html.twig" with {"part": project} %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if project.parameters is not empty %}
|
||||
<div class="tab-pane fade" id="v-pills-parameters" role="tabpanel" aria-labelledby="v-pills-parameters-tab">
|
||||
{% for name, parameters in project.groupedParameters %}
|
||||
{% if name is not empty %}<h5 class="mt-1">{{ name }}</h5>{% endif %}
|
||||
{{ helper.parameters_table(project) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if project.comment is not empty %}
|
||||
<div class="tab-pane fade" id="v-pills-comment" role="tabpanel" aria-labelledby="home-tab">
|
||||
<div class="container-fluid mt-2 latex" data-controller="common--latex">
|
||||
{{ project.comment|format_markdown }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
28
templates/projects/info/_subprojects.html.twig
Normal file
28
templates/projects/info/_subprojects.html.twig
Normal file
|
@ -0,0 +1,28 @@
|
|||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans %}name.label{% endtrans %}</th>
|
||||
<th>{% trans %}description.label{% endtrans %}</th>
|
||||
<th># {% trans %}project.info.bom_entries_count{% endtrans %}</th>
|
||||
<th># {% trans %}project.info.sub_projects_count{% endtrans %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for subproject in project.children %}
|
||||
<tr>
|
||||
<td> {# Name #}
|
||||
<a href="{{ entity_url(subproject, 'info') }}">{{ subproject.name }}</a>
|
||||
</td>
|
||||
<td> {# Description #}
|
||||
{{ subproject.description | format_markdown }}
|
||||
</td>
|
||||
<td>
|
||||
{{ subproject.bomEntries | length }}
|
||||
</td>
|
||||
<td>
|
||||
{{ subproject.children | length }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
105
templates/projects/info/info.html.twig
Normal file
105
templates/projects/info/info.html.twig
Normal file
|
@ -0,0 +1,105 @@
|
|||
{% extends "main_card.html.twig" %}
|
||||
{% import "helper.twig" as helper %}
|
||||
|
||||
{% block title %}
|
||||
{% trans %}project.info.title{% endtrans %}: {{ project.name }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ helper.breadcrumb_entity_link(project) }}
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
|
||||
{% block card_title %}
|
||||
{% if project.masterPictureAttachment is not null and attachment_manager.isFileExisting(project.masterPictureAttachment) %}
|
||||
<img class="hoverpic ms-0 me-1 d-inline" {{ stimulus_controller('elements/hoverpic') }} data-thumbnail="{{ entity_url(project.masterPictureAttachment, 'file_view') }}" src="{{ attachment_thumbnail(project.masterPictureAttachment, 'thumbnail_sm') }}">
|
||||
{% else %}
|
||||
{{ helper.entity_icon(project, "me-1") }}
|
||||
{% endif %}
|
||||
{% trans %}project.info.title{% endtrans %}: <b>{{ project.name }}</b>
|
||||
{% endblock %}
|
||||
|
||||
{% block card_content %}
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="info-tab" data-bs-toggle="tab" data-bs-target="#info-tab-pane"
|
||||
type="button" role="tab" aria-controls="info-tab-pane" aria-selected="true">
|
||||
<i class="fa-solid fa-circle-info fa-fw"></i>
|
||||
{% trans %}project.info.info.label{% endtrans %}
|
||||
</button>
|
||||
</li>
|
||||
{% if project.children is not empty %}
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="subprojects-tab" data-bs-toggle="tab" data-bs-target="#subprojects-tab-pane"
|
||||
type="button" role="tab" aria-controls="subprojects-tab-pane" aria-selected="false">
|
||||
<i class="fa-solid fa-folder-tree fa-fw"></i>
|
||||
{% trans %}project.info.sub_projects.label{% endtrans %}
|
||||
<span class="badge bg-secondary">{{ project.children | length }}</span>
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="bom-tab" data-bs-toggle="tab" data-bs-target="#bom-tab-pane"
|
||||
type="button" role="tab" aria-controls="bom-tab-pane" aria-selected="false">
|
||||
<i class="fa-solid fa-list-check fa-fw"></i>
|
||||
{% trans %}project_bom_entry.label{% endtrans %}
|
||||
<span class="badge bg-secondary">{{ project.bomEntries | length }}</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="builds-tab" data-bs-toggle="tab" data-bs-target="#builds-tab-pane"
|
||||
type="button" role="tab" aria-controls="builds-tab-pane" aria-selected="false">
|
||||
<i class="fa-solid fa-bolt fa-fw"></i>
|
||||
{% trans %}project.info.builds.label{% endtrans %}
|
||||
</button>
|
||||
</li>
|
||||
{% if project.attachments is not empty %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="attachments-tab" data-bs-toggle="tab"
|
||||
data-bs-target="#attachments-tab-pane" role="tab">
|
||||
<i class="fas fa-paperclip fa-fw"></i>
|
||||
{% trans %}attachment.labelp{% endtrans %}
|
||||
<span class="badge bg-secondary">{{ project.attachments | length }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if project.parameters is not empty %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="parameters-tab" data-bs-toggle="tab"
|
||||
data-bs-target="#parameters-tab-pane" role="tab">
|
||||
<i class="fas fa-atlas fa-fw"></i>
|
||||
{% trans %}entity.info.parameters.tab{% endtrans %}
|
||||
<span class="badge bg-secondary">{{ project.parameters | length }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade show active" id="info-tab-pane" role="tabpanel" aria-labelledby="info-tab" tabindex="0">
|
||||
{% include "projects/info/_info.html.twig" %}
|
||||
</div>
|
||||
{% if project.children is not empty %}
|
||||
<div class="tab-pane fade" id="subprojects-tab-pane" role="tabpanel" aria-labelledby="bom-tab" tabindex="0">
|
||||
{% include "projects/info/_subprojects.html.twig" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="tab-pane fade" id="bom-tab-pane" role="tabpanel" aria-labelledby="bom-tab" tabindex="0">
|
||||
{% include "projects/info/_bom.html.twig" %}
|
||||
</div>
|
||||
<div class="tab-pane fade" id="builds-tab-pane" role="tabpanel" aria-labelledby="builds-tab" tabindex="0">
|
||||
{% include "projects/info/_builds.html.twig" %}
|
||||
</div>
|
||||
<div class="tab-pane fade" id="attachments-tab-pane" role="tabpanel" aria-labelledby="attachments-tab" tabindex="0">
|
||||
{% include "Parts/info/_attachments_info.html.twig" with {"part": project} %}
|
||||
</div>
|
||||
<div class="tab-pane fade" id="parameters-tab-pane" role="tabpanel" aria-labelledby="parameters-tab">
|
||||
{% for name, parameters in project.groupedParameters %}
|
||||
{% if name is not empty %}<h5 class="mt-1">{{ name }}</h5>{% endif %}
|
||||
{{ helper.parameters_table(project.parameters) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
Loading…
Add table
Add a link
Reference in a new issue