svg
This commit is contained in:
@ -70,7 +70,7 @@ class IssueController extends AbstractController
|
||||
}
|
||||
|
||||
#[Route('/user/issue/order/{id}', name: 'app_issue_order', methods: ['POST'])]
|
||||
public function orderIssue(int $id, Request $request, IssueRepository $issueRepository): JsonResponse
|
||||
public function orderIssue(int $id, Request $request, IssueRepository $issueRepository, EntityManagerInterface $em): JsonResponse
|
||||
{
|
||||
$data = $request->request;
|
||||
|
||||
@ -112,23 +112,13 @@ class IssueController extends AbstractController
|
||||
return new JsonResponse(['message' => $e->getMessage()], 400);
|
||||
}
|
||||
|
||||
/*
|
||||
$payload =
|
||||
[
|
||||
'id' => $id,
|
||||
'issue' => [
|
||||
'status_id' => $targetStatus,
|
||||
'fixed_version_id' => $targetVersion,
|
||||
],
|
||||
'positions' => [],
|
||||
];
|
||||
|
||||
foreach ($targetIssues as $key => $issue) {
|
||||
$payload['positions'][$issue] = ['position' => $key];
|
||||
foreach ($targetIssues as $key => $rissue) {
|
||||
$issue = $issueRepository->find($rissue);
|
||||
if ($issue) {
|
||||
$issue->setRowissue($key);
|
||||
$em->flush();
|
||||
}
|
||||
}
|
||||
|
||||
$this->redmineService->updatePosition($payload, $this->getParameter('redmineApikey'));
|
||||
*/
|
||||
}
|
||||
|
||||
return new JsonResponse([
|
||||
|
@ -182,6 +182,7 @@ class RedmineService
|
||||
if (!$issue) {
|
||||
$issue = new Issue();
|
||||
$issue->setId($rissue['id']);
|
||||
$issue->setRowissue(1000000);
|
||||
}
|
||||
$issue->setRedmine($rissue);
|
||||
$issue->setProject($project);
|
||||
@ -217,12 +218,14 @@ class RedmineService
|
||||
}
|
||||
$issue->setRowsprint($sprintPosition);
|
||||
|
||||
// Calcul position issue
|
||||
// Calcul position issue = plus géré via redmine
|
||||
/*
|
||||
if (isset($rissue['sprint'])) {
|
||||
$issue->setRowissue($rissue['sprint']['position'] ?? 1000000);
|
||||
} else {
|
||||
$issue->setRowissue(1000000);
|
||||
}
|
||||
*/
|
||||
|
||||
$this->em->persist($issue);
|
||||
$project->setUpdateAt(new \DateTime());
|
||||
|
@ -72,6 +72,11 @@
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
<simplemain>
|
||||
{% block simplebody %}
|
||||
{% endblock %}
|
||||
</simplemain>
|
||||
|
||||
<main>
|
||||
{% if usesidebar is defined and usesidebar %}
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
@ -91,12 +96,12 @@
|
||||
</div>
|
||||
</sidebar>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<content style="margin: 0px auto; {{ (maxwidth is defined ? "max-width:"~maxwidth~"px;":"") }}">
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
</content>
|
||||
<content style="margin: 0px auto; {{ (maxwidth is defined ? "max-width:"~maxwidth~"px;":"") }}">
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
</content>
|
||||
</main>
|
||||
|
||||
<div class="toast-container position-fixed top-0 end-0 p-3" style="z-index: 9999;">
|
||||
|
@ -27,28 +27,11 @@
|
||||
<div class="col-md-6 mx-auto">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Information</div>
|
||||
<div class="card-body">
|
||||
{{ form_row(form.color) }}
|
||||
<div class="card-body">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mx-auto">
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Permissions</div>
|
||||
<div class="card-body">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if mode=="update" %}
|
||||
<div class="card mt-3">
|
||||
<div class="card-header">Détail Redmine</div>
|
||||
<div class="card-body">
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
|
||||
|
@ -16,15 +16,11 @@
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div><a href="{{path("app_issue_update",{id:issue.id})}}">Modifier</a></div>
|
||||
<div class="d-flex">
|
||||
<a href="{{path("app_issue_update",{id:issue.id})}}">Modifier</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{% for child in issue.childs %}
|
||||
{{ child.id }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="issueDescription card-body" style="height:500px;overflow-y:auto">
|
||||
<div class="d-flex">
|
||||
<div class="mb-3" style="flex-grow:0.5">
|
||||
@ -40,9 +36,9 @@
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if sprintName %}
|
||||
<strong>Sprint =</strong> {{sprintName}} (Position {{ issue.redmine.sprint.position }})<br>
|
||||
<strong>Sprint =</strong> {{sprintName}}<br>
|
||||
{% else %}
|
||||
<strong>Sprint =</strong> Aucun (Position {{ issue.redmine.sprint.position }})<br>
|
||||
<strong>Sprint =</strong> Aucun<br>
|
||||
{% endif %}
|
||||
<strong>Version Cible =</strong> {{(issue.redmine.fixed_version is defined?issue.redmine.fixed_version.name:'Aucune')}}<br>
|
||||
<strong>Story Point =</strong> {{issue.redmine.sprint.story_points}}<br>
|
||||
@ -72,6 +68,26 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{% if issue.parent %}
|
||||
<hr>
|
||||
<strong>Issues Parentes</strong>
|
||||
<div onClick='viewIssue({{ issue.parent.id }})' style="cursor:pointer">
|
||||
<small>#{{ issue.parent.id }} = {{ issue.parent.redmine.subject }}</small>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for child in issue.childs %}
|
||||
{% if loop.first %}
|
||||
<hr>
|
||||
<strong>Issues Liées</strong>
|
||||
{%endif%}
|
||||
<div onClick='viewIssue({{ child.id }})' style="cursor:pointer">
|
||||
<small>#{{ child.id }} = {{ child.redmine.subject }}</small>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% if issue.redmine.description %}
|
||||
<div class="mb-3">
|
||||
<hr>
|
||||
|
@ -17,7 +17,7 @@
|
||||
}
|
||||
|
||||
|
||||
main {
|
||||
simplemain {
|
||||
padding-top:80px;
|
||||
}
|
||||
|
||||
@ -122,7 +122,10 @@
|
||||
.issueParent{
|
||||
font-size:12px;
|
||||
line-height:12px;
|
||||
color:var(--bs-green);
|
||||
border-bottom: 1px solid;
|
||||
padding-bottom:5px;
|
||||
margin-bottom:5px;
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
.issueBody {
|
||||
@ -187,7 +190,7 @@
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% block simplebody %}
|
||||
|
||||
<div class='issueContainer'>
|
||||
</div>
|
||||
@ -257,63 +260,61 @@
|
||||
</div>
|
||||
|
||||
<div class='scrumContainer'>
|
||||
<div class='containerStatus'>
|
||||
{% for status in project.redmine.issue_statuses %}
|
||||
{% if status.id not in project.hiddenstatuses %}
|
||||
<div class='statusCard statusCard{{status.id}}'>
|
||||
<h2>{{ status.name }}</h2>
|
||||
{% for status in project.redmine.issue_statuses %}
|
||||
{% if status.id not in project.hiddenstatuses %}
|
||||
<div class='statusCard statusCard{{status.id}}'>
|
||||
<h2>{{ status.name }}</h2>
|
||||
|
||||
{% 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='sprintCardHeader card-header'>
|
||||
<div style='flex-grow:1'>Sprint = {{ sprint.name }}</div>
|
||||
{% if sprint.story_points[status.id] is defined %}
|
||||
<div>{{ sprint.story_points[status.id] }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% 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='sprintCardHeader card-header'>
|
||||
<div style='flex-grow:1'>Sprint = {{ sprint.name }}</div>
|
||||
{% if sprint.story_points[status.id] is defined %}
|
||||
<div>{{ sprint.story_points[status.id] }}</div>
|
||||
{% endif %}
|
||||
</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.id}}'></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>
|
||||
{% 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.id}}'></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 Aucun
|
||||
</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}}||{{version.id}}'></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<div class='sprintCard sprintCardNone card'>
|
||||
<div class='card-header'>
|
||||
Sprint Aucun
|
||||
</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}}||{{version.id}}'></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<div class='versionCard versionCardNone card-body'>
|
||||
<h5>Version = Aucune</h5>
|
||||
<div class='versionBody' data-id='{{status.id}}||'></div>
|
||||
</div>
|
||||
|
||||
<div class='versionCard versionCardNone card-body'>
|
||||
<h5>Version = Aucune</h5>
|
||||
<div class='versionBody' data-id='{{status.id}}||'></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% for issue in project.issues %}
|
||||
<div class="issueCard {{issue.color}} card tracker{{issue.redmine.tracker.id}} category{{(issue.redmine.category is defined?issue.redmine.category.id:'0') }}" data-status='{{issue.redmine.status.id}}' data-sprint='{{issue.rowsprint}}' data-version='{{(issue.redmine.fixed_version is defined?issue.redmine.fixed_version.id:'')}}' data-id='{{issue.id}}'>
|
||||
@ -664,17 +665,16 @@
|
||||
placeholder: 'issue-placeholder',
|
||||
forcePlaceholderSize: true,
|
||||
|
||||
scroll: true, // 👈 Active le scroll auto
|
||||
scrollSensitivity: 50, // 👈 distance (px) à partir du bord pour déclencher le scroll
|
||||
scrollSpeed: 100, // 👈 vitesse de défilement
|
||||
|
||||
start: function (event, ui) {
|
||||
$sourceContainer = ui.item.parent();
|
||||
$movedItem = ui.item;
|
||||
originalIndex = ui.item.index();
|
||||
enableAutoScroll($(window)); // ou remplace par ton conteneur scrollable
|
||||
},
|
||||
|
||||
stop: function () {
|
||||
disableAutoScroll();
|
||||
},
|
||||
|
||||
update: function (event, ui) {
|
||||
console.log("UPDATE");
|
||||
if (!event.originalEvent) return;
|
||||
@ -732,40 +732,5 @@
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
let autoScrollInterval = null;
|
||||
|
||||
function enableAutoScroll($container) {
|
||||
$(document).on('mousemove.autoScroll', function (e) {
|
||||
const scrollMargin = 50; // px depuis le bord de la fenêtre
|
||||
const scrollSpeed = 20; // px à chaque tick
|
||||
|
||||
const mouseY = e.clientY;
|
||||
const windowHeight = window.innerHeight;
|
||||
|
||||
// Scroll vers le haut
|
||||
if (mouseY < scrollMargin) {
|
||||
clearInterval(autoScrollInterval);
|
||||
autoScrollInterval = setInterval(() => {
|
||||
$container.scrollTop($container.scrollTop() - scrollSpeed);
|
||||
}, 50);
|
||||
}
|
||||
// Scroll vers le bas
|
||||
else if (mouseY > windowHeight - scrollMargin) {
|
||||
clearInterval(autoScrollInterval);
|
||||
autoScrollInterval = setInterval(() => {
|
||||
$container.scrollTop($container.scrollTop() + scrollSpeed);
|
||||
}, 50);
|
||||
} else {
|
||||
clearInterval(autoScrollInterval);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function disableAutoScroll() {
|
||||
$(document).off('mousemove.autoScroll');
|
||||
clearInterval(autoScrollInterval);
|
||||
}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
Reference in New Issue
Block a user