svg
This commit is contained in:
@ -2,27 +2,44 @@
|
||||
|
||||
{% block localstyle %}
|
||||
<style>
|
||||
.navbar {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
main {
|
||||
padding-top:80px;
|
||||
}
|
||||
|
||||
content {
|
||||
padding:0px;
|
||||
}
|
||||
.containerScrum {
|
||||
|
||||
.scrumContainer {
|
||||
display:none;
|
||||
}
|
||||
|
||||
.containerFiltre{
|
||||
.issueContainer {
|
||||
position:fixed;
|
||||
width:750px;
|
||||
}
|
||||
|
||||
.filtreContainer{
|
||||
display:flex;
|
||||
width:250px;
|
||||
width:300px;
|
||||
flex-direction:column;
|
||||
background-color: var(--bs-dark);
|
||||
padding:5px;
|
||||
}
|
||||
|
||||
.containerStatus{
|
||||
display:flex;
|
||||
width:10000px;
|
||||
overflow-x:scrool;
|
||||
//width:10000px;
|
||||
overflow-x:scroll;
|
||||
}
|
||||
|
||||
.colStatus {
|
||||
.statusCard {
|
||||
width:300px;
|
||||
padding: 15px 10px 0px 10px;
|
||||
}
|
||||
@ -45,7 +62,7 @@
|
||||
min-height:60px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
.versionCard h5 {
|
||||
color: var(--bs-primary-text-emphasis);
|
||||
font-size:16px;
|
||||
padding-left:10px;
|
||||
@ -65,6 +82,15 @@
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
.issueAction{
|
||||
align-self: baseline;
|
||||
padding: 0px 2px 0px 5px;
|
||||
}
|
||||
|
||||
.fa-eye {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.issueSubject{
|
||||
zoom: 70%;
|
||||
flex-grow: 1;
|
||||
@ -74,13 +100,27 @@
|
||||
|
||||
{% block body %}
|
||||
|
||||
<div class='containerScrum'>
|
||||
<div class='containerFiltre'>
|
||||
<div class='issueContainer'>
|
||||
</div>
|
||||
|
||||
<div class='scrumContainer'>
|
||||
<div class='filtreContainer'>
|
||||
<label>Statut</label>
|
||||
<select id="statusFilter" class="select2 form-select" multiple="true" tabindex="-1" aria-hidden="true">
|
||||
{% for statut in project.redmine.issue_statuses %}
|
||||
{% if statut.id not in project.hiddenstatuses %}
|
||||
<option value="{{statut.id}}">{{statut.name}}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<label>Sprints</label>
|
||||
<select id="sprintFilter" class="select2 form-select" multiple="true" tabindex="-1" aria-hidden="true">
|
||||
<option value="None">Aucun</option>
|
||||
{% for sprint in project.redmine.sprints|reverse %}
|
||||
<option value="{{sprint.id}}">{{sprint.name}}</option>
|
||||
{% if sprint.id not in project.hiddensprints %}
|
||||
<option value="{{sprint.id}}">{{sprint.name}}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
@ -88,7 +128,9 @@
|
||||
<select id="versionFilter" class="select2 form-select" multiple="true" tabindex="-1" aria-hidden="true">
|
||||
<option value="None">Aucune</option>
|
||||
{% for version in project.redmine.versions|reverse %}
|
||||
<option value="{{version.id}}">{{version.name}}</option>
|
||||
{% if version.id not in project.hiddenversions %}
|
||||
<option value="{{version.id}}">{{version.name}}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
@ -97,59 +139,67 @@
|
||||
|
||||
<div class='containerStatus'>
|
||||
{% for status in project.redmine.issue_statuses %}
|
||||
<div class='colStatus'>
|
||||
<h2>{{ status.name }}</h2>
|
||||
{% if status.id not in project.hiddenstatuses %}
|
||||
<div class='statusCard statusCard{{status.id}}'>
|
||||
<h2>{{ status.name }}</h2>
|
||||
|
||||
{% for sprint in project.redmine.sprints|reverse %}
|
||||
<div class='sprintCard sprintCard{{sprint.id}} card' style='margin-bottom:20px'>
|
||||
{% for sprint in project.redmine.sprints|reverse %}
|
||||
{% if sprint.id not in project.hiddensprints %}
|
||||
<div class='sprintCard sprintCard{{sprint.id}} card' style='margin-bottom:20px'>
|
||||
<div class='card-header'>
|
||||
Sprint = {{ sprint.name }}
|
||||
</div>
|
||||
|
||||
{% for version in project.redmine.versions|reverse %}
|
||||
{% if version.id not in project.hiddenversions %}
|
||||
<div class='versionCard versionCard{{version.id}} card-body'>
|
||||
<h5>Version = {{ version.name }}</h5>
|
||||
<div class='versionBody' data-id='{{status.id}}-{{sprint.id}}-{{version.name}}'></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<div class='versionCard versionCardNone card-body'>
|
||||
<h5>Version = Aucune</h5>
|
||||
<div class='versionBody' data-id='{{status.id}}-{{sprint.id}}-'></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<div class='sprintCard sprintCardNone card'>
|
||||
<div class='card-header'>
|
||||
Sprint = {{ sprint.name }}
|
||||
Sprint Aucun
|
||||
</div>
|
||||
|
||||
{% for version in project.redmine.versions|reverse %}
|
||||
{% for version in project.redmine.versions|reverse %}
|
||||
{% if version.id not in project.hiddenversions %}
|
||||
<div class='versionCard versionCard{{version.id}} card-body'>
|
||||
<h5>Version = {{ version.name }}</h5>
|
||||
<div class='versionBody' data-id='{{status.id}}-{{sprint.id}}-{{version.name}}'></div>
|
||||
<div class='versionBody' data-id='{{status.id}}--{{version.name}}'></div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<div class='versionCard versionCardNone card-body'>
|
||||
<h5>Version = Aucune</h5>
|
||||
<div class='versionBody' data-id='{{status.id}}-{{sprint.id}}-'></div>
|
||||
<div class='versionBody' data-id='{{status.id}}--'></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class='sprintCard sprintCardNone card'>
|
||||
<div class='card-header'>
|
||||
Sprint Aucun
|
||||
</div>
|
||||
|
||||
{% for version in project.redmine.versions|reverse %}
|
||||
<div class='versionCard versionCard{{version.id}} card-body'>
|
||||
<h5>Version = {{ version.name }}</h5>
|
||||
<div class='versionBody' data-id='{{status.id}}--{{version.name}}'></div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class='versionCard versionCardNone card-body'>
|
||||
<h5>Version = Aucune</h5>
|
||||
<div class='versionBody' data-id='{{status.id}}--'></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class='viewIssue'>
|
||||
</div>
|
||||
|
||||
{% for issue in project.issues %}
|
||||
<div class="issueCard card" data-status='{{issue.redmine.status.id}}' data-sprint='{{issue.rowsprint}}' data-version='{{issue.rowversion}}'>
|
||||
<div class='issueHeader'>
|
||||
<div class='issueId'>#{{issue.id}}</div>
|
||||
<div class='issueSubject'>{{issue.redmine.subject}}</div>
|
||||
<div class='issueAction'>
|
||||
<i class='fas fa-eye' onClick='fetchAndRenderIssue({{issue.id}})'></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class='issueBody'>
|
||||
sprint = {{issue.rowsprint}}<br>
|
||||
@ -167,6 +217,18 @@
|
||||
let showIssuebody = false;
|
||||
|
||||
function showhide() {
|
||||
// Statut
|
||||
selected = $('#statusFilter').val();
|
||||
if (!selected || selected.length === 0) {
|
||||
$('.statusCard').show();
|
||||
}
|
||||
else {
|
||||
$('.statusCard').hide();
|
||||
selected.forEach(function (id) {
|
||||
$('.statusCard' + id).show();
|
||||
});
|
||||
}
|
||||
|
||||
// Sprint
|
||||
selected = $('#sprintFilter').val();
|
||||
if (!selected || selected.length === 0) {
|
||||
@ -210,11 +272,15 @@
|
||||
if ($column.length) {
|
||||
$column.append($(this));
|
||||
}
|
||||
else { console.log ('no ='+id);}
|
||||
else {
|
||||
console.log ('no ='+id);
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
$('.containerScrum').css('display', 'flex');
|
||||
$('.scrumContainer').css('display', 'flex');
|
||||
|
||||
// Filtre
|
||||
$('#statusFilter').on('change',showhide);
|
||||
$('#sprintFilter').on('change',showhide);
|
||||
$('#versionFilter').on('change',showhide);
|
||||
showhide();
|
||||
@ -224,6 +290,28 @@
|
||||
toogleIssueBody();
|
||||
});
|
||||
|
||||
function fetchAndRenderIssue(issueId) {
|
||||
url='{{path('issue_view',{id:'xxx'})}}';
|
||||
url=url.replace('xxx',issueId);
|
||||
console.log(url);
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
method: 'GET',
|
||||
dataType: 'html',
|
||||
success: function (html) {
|
||||
$('.issueContainer').html(html);
|
||||
$('.issueContainer').show();
|
||||
$('.scrumContainer').css('padding-left','750px');
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.error('Erreur lors du chargement de l’issue :', error);
|
||||
$('.issueContainer').html('<div class="alert alert-danger">Erreur lors du chargement de l’issue.</div>');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$(function () {
|
||||
let $sourceContainer = null;
|
||||
let $movedItem = null;
|
||||
|
76
templates/issue/view.html.twig
Normal file
76
templates/issue/view.html.twig
Normal file
@ -0,0 +1,76 @@
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<div class="mb-0 d-flex" style="align-items:baseline">
|
||||
<h5 style="flex-grow:1">#{{ issue.redmine.id }} – {{ issue.redmine.subject }}</h5>
|
||||
<a href="{{redmineUrl}}/issues/{{issue.id}}" target="_blank" class="btn btn-primary"><i class="fas fa-eye"></i></a>
|
||||
<div class="btn btn-secondary" onClick="$('.issueContainer').hide();$('.scrumContainer').css('padding-left','0px');"><i class="fas fa-window-close"></i></div>
|
||||
|
||||
</div>
|
||||
<small class="text-muted">Projet : {{ issue.redmine.project.name }} • Tracker : {{ issue.redmine.tracker.name }}</small>
|
||||
</div>
|
||||
|
||||
<div class="card-body" style="height:500px;overflow-y:auto">
|
||||
<div class="d-flex">
|
||||
<div class="mb-3" style="flex-grow:0.5">
|
||||
<strong>Statut :</strong> {{ issue.redmine.status.name }}<br>
|
||||
<strong>Priorité :</strong> {{ issue.redmine.priority.name }}<br><br>
|
||||
|
||||
{% set sprintName = null %}
|
||||
{% for sprint in issue.project.redmine.sprints %}
|
||||
{% if sprint.id == issue.rowsprint %}
|
||||
{% set sprintName = sprint.name %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if sprintName %}
|
||||
<strong>Sprint :</strong> {{sprintName}} (Position {{ issue.redmine.sprint.position }})<br>
|
||||
{% else %}
|
||||
<strong>Sprint :</strong> Aucun (Position {{ issue.redmine.sprint.position }})<br>
|
||||
{% endif %}
|
||||
<strong>Story Point :</strong> {{issue.redmine.sprint.story_points}}<br>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<strong>Auteur :</strong> {{ issue.redmine.author.name }}<br>
|
||||
<strong>Progression :</strong> {{ issue.redmine.done_ratio }}%<br>
|
||||
<strong>Créé le :</strong>{{ issue.redmine.created_on|date('d/m/Y H:i') }}<br>
|
||||
<strong>Mis à jour le :</strong>{{ issue.redmine.updated_on|date('d/m/Y H:i') }}<br>
|
||||
<strong>Date de début :</strong> {{ issue.redmine.start_date|date('d/m/Y') }}<br>
|
||||
<strong>Date de fin :</strong> {{ issue.redmine.due_date|date('d/m/Y') }}<br>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if issue.redmine.description %}
|
||||
<div class="mb-3">
|
||||
<hr>
|
||||
<strong>Description :</strong>
|
||||
<p>{{ issue.redmine.description|markdown_to_html|textile_to_html }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if issue.redmine.custom_fields|length %}
|
||||
<div class="mb-3">
|
||||
<hr>
|
||||
<strong>Champs personnalisés :</strong>
|
||||
<ul class="list-group">
|
||||
{% for field in issue.redmine.custom_fields %}
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||
{{ field.name }}
|
||||
<span class="text-muted">
|
||||
{% if field.multiple is defined and field.multiple and field.value is iterable %}
|
||||
{{ field.value|join(', ') }}
|
||||
{% elseif field.value %}
|
||||
{{ field.value }}
|
||||
{% else %}
|
||||
<em>—</em>
|
||||
{% endif %}
|
||||
</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{{dump(issue.redmine)}}
|
||||
|
||||
</div>
|
||||
</div>
|
@ -24,9 +24,19 @@
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Information</div>
|
||||
<div class="card-body">
|
||||
{{ form_row(form.id) }}
|
||||
{{ form_row(form.title) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Parametres</div>
|
||||
<div class="card-body">
|
||||
{{ form_row(form.hiddenstatuses) }}
|
||||
{{ form_row(form.hiddensprints) }}
|
||||
{{ form_row(form.hiddenversions) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mx-auto">
|
||||
@ -36,7 +46,17 @@
|
||||
{{ form_row(form.users) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if mode=="update" %}
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Détail Redmine</div>
|
||||
<div class="card-body">
|
||||
{{ dump(project.redmine) }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
|
||||
|
Reference in New Issue
Block a user