diff --git a/src/ninegitea-1.0/config/routes.yaml b/src/ninegitea-1.0/config/routes.yaml index 464a03a..af50651 100644 --- a/src/ninegitea-1.0/config/routes.yaml +++ b/src/ninegitea-1.0/config/routes.yaml @@ -234,6 +234,28 @@ app_scrumteam_order: defaults: { _controller: App\Controller\ScrumteamController:order } +#== Scrumpriority ======================================================================================================== +app_scrumpriority_submit: + path: /master/scrumpriority/submit/{scrumid} + defaults: { _controller: App\Controller\ScrumpriorityController:submit } + +app_scrumpriority_update: + path: /master/scrumpriority/update/{id} + defaults: { _controller: App\Controller\ScrumpriorityController:update } + +app_scrumpriority_delete: + path: /master/scrumpriority/delete/{id} + defaults: { _controller: App\Controller\ScrumpriorityController:delete } + +app_scrumpriority_select: + path: /master/scrumpriority/select/{scrumid} + defaults: { _controller: App\Controller\ScrumpriorityController:select } + +app_scrumpriority_order: + path: /master/scrumpriority/order/{scrumid} + defaults: { _controller: App\Controller\ScrumpriorityController:order } + + #== Scrumissue ======================================================================================================== app_scrumissue_change: path: /user/scrumissue/change diff --git a/src/ninegitea-1.0/src/Controller/IssueController.php b/src/ninegitea-1.0/src/Controller/IssueController.php index b4485dd..45f6f07 100755 --- a/src/ninegitea-1.0/src/Controller/IssueController.php +++ b/src/ninegitea-1.0/src/Controller/IssueController.php @@ -35,6 +35,7 @@ class IssueController extends AbstractController $giteamilestones=[]; $giteacolumns=[]; $giteateams=[]; + $giteaprioritys=[]; $gitealabels=[]; $giteaassignees=$em->getRepository("App:User")->findBy([],["username"=>"ASC"]); @@ -78,6 +79,11 @@ class IssueController extends AbstractController array_push($giteateams,$team->getGiteajson()["name"]); } + foreach($scrum->getScrumprioritys() as $priority) { + if(!in_array($priority->getGiteajson()["name"],$giteaprioritys)) + array_push($giteaprioritys,$priority->getGiteajson()["name"]); + } + foreach($giteaissues as $giteaissue) { foreach($giteaissue->labels as $label) { if(!in_array($label->name,$gitealabels)) @@ -91,6 +97,7 @@ class IssueController extends AbstractController array_multisort($keysort, SORT_DESC, $giteamilestones); sort($giteacolumns); sort($giteateams); + sort($giteaprioritys); sort($gitealabels); sort($giteacategorys); @@ -100,6 +107,7 @@ class IssueController extends AbstractController $filtermilestones = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filtermilestones",$id); $filtercolumns = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filtercolumns",$id); $filterteams = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterteams",$id); + $filterprioritys = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterprioritys",$id); $filterlabels = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterlabels",$id); $filterassignees = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterassignees",$id); $showfilters = $em->getRepository("App:User")->getUserpreference($this->getUser(),"showfilters",$id); @@ -113,6 +121,7 @@ class IssueController extends AbstractController "giteamilestones" => $giteamilestones, "giteacolumns" => $giteacolumns, "giteateams" => $giteateams, + "giteaprioritys" => $giteaprioritys, "gitealabels" => $gitealabels, "giteaassignees" => $giteaassignees, "filtercategorys" => $filtercategorys, @@ -120,6 +129,7 @@ class IssueController extends AbstractController "filtermilestones" => $filtermilestones, "filtercolumns" => $filtercolumns, "filterteams" => $filterteams, + "filterprioritys" => $filterprioritys, "filterlabels" => $filterlabels, "filterassignees" => $filterassignees, "showfilters" => $showfilters, diff --git a/src/ninegitea-1.0/src/Controller/ScrumController.php b/src/ninegitea-1.0/src/Controller/ScrumController.php index cee3aab..61568a1 100755 --- a/src/ninegitea-1.0/src/Controller/ScrumController.php +++ b/src/ninegitea-1.0/src/Controller/ScrumController.php @@ -35,16 +35,15 @@ class ScrumController extends AbstractController array_push($giteacategorys,$scrum->getCategory()); $gitearepo=$this->giteaservice->getRepo($scrum->getGiteajson()["id"]); - if(!$gitearepo) die("Probleme de connexion avec gitea veuillez vous reconnecter"); + if($gitearepo) { + if($gitearepo->updated_at!=$scrum->getGiteajson()["updated_at"]||$gitearepo->open_issues_count!=$scrum->getGiteajson()["open_issues_count"]) { + $scrum->setGiteajson(json_decode(json_encode($gitearepo), true)); + $em->persist($scrum); + $em->flush(); + } - - if($gitearepo->updated_at!=$scrum->getGiteajson()["updated_at"]||$gitearepo->open_issues_count!=$scrum->getGiteajson()["open_issues_count"]) { - $scrum->setGiteajson(json_decode(json_encode($gitearepo), true)); - $em->persist($scrum); - $em->flush(); + array_push($gitearepos,$gitearepo); } - - array_push($gitearepos,$gitearepo); } sort($giteacategorys); @@ -176,11 +175,12 @@ class ScrumController extends AbstractController $data=$em->getRepository($this->entity)->find($id); if(!$data) return $this->redirectToRoute($this->route); - $em->getRepository("App:Scrum")->getGitea($data,$giteaassignees,$giteacolumns,$giteamilestones,$giteateams,$gitealabels); - + $em->getRepository("App:Scrum")->getGitea($data,$giteaassignees,$giteacolumns,$giteamilestones,$giteateams,$giteaprioritys,$gitealabels); + // Préférences utilisateur $filtermilestones = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filtermilestones",$id); $filterteams = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterteams",$id); + $filterprioritys = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterprioritys",$id); $filterlabels = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterlabels",$id); $filterassignees = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterassignees",$id); $showfilters = $em->getRepository("App:User")->getUserpreference($this->getUser(),"showfilters",$id); @@ -193,12 +193,14 @@ class ScrumController extends AbstractController 'giteacolumns' => $giteacolumns, 'giteamilestones' => $giteamilestones, 'giteateams' => $giteateams, + 'giteaprioritys' => $giteaprioritys, 'gitealabels' => $gitealabels, 'filtermilestones' => $filtermilestones, 'filterteams' => $filterteams, + 'filterprioritys' => $filterprioritys, 'filterlabels' => $filterlabels, 'filterassignees' => $filterassignees, - "showfilters" => $showfilters, + 'showfilters' => $showfilters, $this->data => $data, ]); } @@ -210,42 +212,62 @@ class ScrumController extends AbstractController $data=$em->getRepository($this->entity)->find($id); if(!$data) return $this->redirectToRoute($this->route); - $em->getRepository("App:Scrum")->getGitea($data,$giteaassignees,$giteacolumns,$giteamilestones,$giteateams,$gitealabels); + $em->getRepository("App:Scrum")->getGitea($data,$giteaassignees,$giteacolumns,$giteamilestones,$giteateams,$giteaprioritys,$gitealabels); + + // Préférences utilisateur + $filtermilestones = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filtermilestones",$id); + $filterteams = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterteams",$id); + $showfilters = $em->getRepository("App:User")->getUserpreference($this->getUser(),"showfilters",$id); $tbstat=[]; foreach($data->getScrumIssues() as $issue) { - $idmilestone=($issue->getGiteamilestone()?$issue->getGiteamilestone():-100); - $lbmilestone=($issue->getGiteamilestone()?$issue->getGiteamilestonename():"Aucun"); - if(!array_key_exists($idmilestone,$tbstat)) { - $tbstat[$idmilestone]=["id"=>$idmilestone,"name"=>$lbmilestone,"stat"=>[]]; - } - - if(!array_key_exists($issue->getScrumcolumn()->getId(),$tbstat[$idmilestone]["stat"])) { - $tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]=[ - "id"=>$issue->getScrumcolumn()->getId(), - "label"=>$issue->getScrumcolumn()->getName(), - "total"=>0, - "color"=>"#".$issue->getScrumcolumn()->getGiteajson()["color"], - "labels"=>[], - ]; - } $labels=$issue->getGiteajson()["labels"]; - foreach($labels as $label) { - if($issue->getScrumcolumn()->getGiteaid()!=$label["id"]) { - if(!array_key_exists($label["id"],$tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]["labels"])) { - $tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]["labels"][$label["id"]] = [ - "id"=>$label["id"], - "label"=>$label["name"], - "total"=>0, - "color"=>"#".$label["color"], - ]; + $haveteams=true; + if($filterteams) { + $haveteams=false; + foreach($filterteams as $filterteam) { + foreach($labels as $label) { + if($label["id"]==$filterteam) { + $haveteams=true; + } } - $tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]["labels"][$label["id"]]["total"]++; } } - $tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]["total"]++; + if($haveteams) { + $idmilestone=($issue->getGiteamilestone()?$issue->getGiteamilestone():-100); + $lbmilestone=($issue->getGiteamilestone()?$issue->getGiteamilestonename():"Aucun"); + if(!array_key_exists($idmilestone,$tbstat)) { + $tbstat[$idmilestone]=["id"=>$idmilestone,"name"=>$lbmilestone,"stat"=>[]]; + } + + if(!array_key_exists($issue->getScrumcolumn()->getId(),$tbstat[$idmilestone]["stat"])) { + $tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]=[ + "id"=>$issue->getScrumcolumn()->getId(), + "label"=>$issue->getScrumcolumn()->getName(), + "total"=>0, + "color"=>"#".$issue->getScrumcolumn()->getGiteajson()["color"], + "labels"=>[], + ]; + } + + foreach($labels as $label) { + if($issue->getScrumcolumn()->getGiteaid()!=$label["id"]) { + if(!array_key_exists($label["id"],$tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]["labels"])) { + $tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]["labels"][$label["id"]] = [ + "id"=>$label["id"], + "label"=>$label["name"], + "total"=>0, + "color"=>"#".$label["color"], + ]; + } + $tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]["labels"][$label["id"]]["total"]++; + } + } + + $tbstat[$idmilestone]["stat"][$issue->getScrumcolumn()->getId()]["total"]++; + } } foreach($tbstat as $k1=>$milestone) { @@ -264,7 +286,11 @@ class ScrumController extends AbstractController 'giteacolumns' => $giteacolumns, 'giteamilestones' => $giteamilestones, 'giteateams' => $giteateams, + 'giteaprioritys' => $giteaprioritys, 'gitealabels' => $gitealabels, + 'filtermilestones' => $filtermilestones, + 'filterteams' => $filterteams, + 'showfilters' => $showfilters, $this->data => $data, 'tbstat' => $tbstat, ]); diff --git a/src/ninegitea-1.0/src/Entity/Scrum.php b/src/ninegitea-1.0/src/Entity/Scrum.php index d218765..486441d 100644 --- a/src/ninegitea-1.0/src/Entity/Scrum.php +++ b/src/ninegitea-1.0/src/Entity/Scrum.php @@ -79,6 +79,12 @@ class Scrum */ private $scrumteams; + /** + * @ORM\OneToMany(targetEntity="Scrumpriority", mappedBy="scrum", cascade={"persist"}, orphanRemoval=true) + * @ORM\OrderBy({"rowid" = "ASC"}) + */ + private $scrumprioritys; + public function getStatistique() { $id=-100; @@ -103,6 +109,7 @@ class Scrum $this->scrumcolumns = new ArrayCollection(); $this->scrumissues = new ArrayCollection(); $this->scrumteams = new ArrayCollection(); + $this->scrumprioritys = new ArrayCollection(); } public function getId(): ?int @@ -302,4 +309,35 @@ class Scrum return $this; } + + /** + * @return Collection|Scrumpriority[] + */ + public function getScrumprioritys(): Collection + { + return $this->scrumprioritys; + } + + public function addScrumpriority(Scrumpriority $scrumpriority): self + { + if (!$this->scrumprioritys->contains($scrumpriority)) { + $this->scrumprioritys[] = $scrumpriority; + $scrumpriority->setScrum($this); + } + + return $this; + } + + public function removeScrumpriority(Scrumpriority $scrumpriority): self + { + if ($this->scrumprioritys->contains($scrumpriority)) { + $this->scrumprioritys->removeElement($scrumpriority); + // set the owning side to null (unless already changed) + if ($scrumpriority->getScrum() === $this) { + $scrumpriority->setScrum(null); + } + } + + return $this; + } } \ No newline at end of file diff --git a/src/ninegitea-1.0/src/Repository/ScrumRepository.php b/src/ninegitea-1.0/src/Repository/ScrumRepository.php index a539c59..9ff8c28 100644 --- a/src/ninegitea-1.0/src/Repository/ScrumRepository.php +++ b/src/ninegitea-1.0/src/Repository/ScrumRepository.php @@ -16,7 +16,7 @@ class ScrumRepository extends ServiceEntityRepository $this->giteaservice = $giteaservice; } - public function getGitea($scrum,&$giteaassignees,&$giteacolumns,&$giteamilestones,&$giteateams,&$gitealabels) { + public function getGitea($scrum,&$giteaassignees,&$giteacolumns,&$giteamilestones,&$giteateams,&$giteaprioritys,&$gitealabels) { // Récupérer le dernier order $last = $this->_em->getRepository('App:Scrumissue')->findOneBy(["scrum"=>$scrum], ['rowid' => 'DESC']); if(!$last) $lastrowid=-1; @@ -40,6 +40,13 @@ class ScrumRepository extends ServiceEntityRepository array_push($giteateams,$team->getGiteaid()); } + // Récupérer les prioritys + $prioritys=$this->_em->getRepository('App:Scrumpriority')->findBy(["scrum"=>$scrum], ['rowid' => 'ASC']); + $giteaprioritys=[]; + foreach($prioritys as $priority) { + array_push($giteaprioritys,$priority->getGiteaid()); + } + // Récupérer la orga de gitea if(!empty($scrum->getGiteajson()["owner"]["email"])) $giteaassignees=[$scrum->getGiteajson()["owner"]]; @@ -75,7 +82,7 @@ class ScrumRepository extends ServiceEntityRepository $gitealabels=$this->giteaservice->getLabels($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"]); if(!is_array($gitealabels)) die("Probleme de connexion avec gitea veuillez vous reconnecter"); foreach($gitealabels as $key => $gitealabel) { - if(in_array($gitealabel->id,$giteacolumns)||in_array($gitealabel->id,$giteateams)) + if(in_array($gitealabel->id,$giteacolumns)||in_array($gitealabel->id,$giteateams)||in_array($gitealabel->id,$giteaprioritys)) unset($gitealabels[$key]); } diff --git a/src/ninegitea-1.0/src/Service/giteaService.php b/src/ninegitea-1.0/src/Service/giteaService.php index 7452b3d..7acd6f3 100644 --- a/src/ninegitea-1.0/src/Service/giteaService.php +++ b/src/ninegitea-1.0/src/Service/giteaService.php @@ -30,7 +30,7 @@ class giteaService $body = \Unirest\Request\Body::json($query); $response=$this->api("POST",$apiurl,$body); - + if(!$response||$response->code!="200") return false; else { $this->session->set('giteatoken', $response->body->access_token); diff --git a/src/ninegitea-1.0/templates/Issue/list.html.twig b/src/ninegitea-1.0/templates/Issue/list.html.twig index 8e27b8a..c061f7c 100644 --- a/src/ninegitea-1.0/templates/Issue/list.html.twig +++ b/src/ninegitea-1.0/templates/Issue/list.html.twig @@ -31,7 +31,7 @@ {% block body %}
-
+
@@ -84,11 +84,20 @@
+
+ + +
+
+ {% for giteamilestone in giteamilestones %} + + {% endfor %} + +
-
- {% endfor %} + +
+ + +
+
+ +
+
+ + + + +
+ +

{{ scrum.name }}

+ +
+ {% for milestone in tbstat %} +
+

{{milestone.name}}

+
+
+
+ +
+ {% for column in milestone.stat %} +
+
{{ column.label }} = {{ column.total }}
+ +
+ {% for label in column.labels %} +
  • {{label.label}} = {{label.total}}
  • + {% endfor %} +
    +
    +
    + {%endfor%} +
    +
    +
    +
    + {% endfor %} +
    +
    + {% endblock %} {% block localjavascript %} + function showFilters() { + if($("#filters").hasClass("d-flex")) { + toshow=0; + $("#filters").addClass("d-none"); + $("#filters").removeClass("d-flex"); + } + else { + toshow=1; + $("#filters").addClass("d-flex"); + $("#filters").removeClass("d-none"); + } + + $.ajax({ + method: "POST", + url: "{{ path('app_user_preference') }}", + data: { + key:'showfilters', + id:{{scrum.id}}, + value: toshow + } + }); + } $(document).ready(function() { + // Apply Filter + function showhide() { + if($("#filtermilestones").val().length !== 0) { + $("[data-milestone]").hide(); + $.each($("#filtermilestones").val(), function( index, value ) { + $("[data-milestone="+value+"]").show(); + }); + } + else $("[data-milestone]").show(); + + textfilters=""; + if($("#filtermilestones").val().length!==0) { + data = $("#filtermilestones").select2('data'); + textfilters=textfilters+"    JALONS ="; + $.each($("#filtermilestones").val(), function( index, value ) { + if(index>0)textfilters=textfilters+" &"; + textfilters=textfilters+" "+data[index].text; + }); + } + + if($("#filterteams").val().length!==0) { + data = $("#filterteams").select2('data'); + textfilters=textfilters+"    EQUIPES ="; + $.each($("#filterteams").val(), function( index, value ) { + if(index>0)textfilters=textfilters+" &"; + textfilters=textfilters+" "+data[index].text; + }); + } + + $("#textfilters").html(textfilters); + } + + // Filter Milestones + function filtermilestones() { + $.ajax({ + method: "POST", + url: "{{ path('app_user_preference') }}", + data: { + key:'filtermilestones', + id:{{scrum.id}}, + value: $("#filtermilestones").val() + } + }); + + showhide(); + } + + $('#filtermilestones').select2(); + {% if filtermilestones %} + {% for milestone in filtermilestones %} + $("#filtermilestones").val($("#filtermilestones").val().concat("{{milestone}}")); + {%endfor%} + $('#filtermilestones').trigger('change'); + {% endif %} + $('#filtermilestones').on("select2:select", function(e) { + filtermilestones(); + }); + $('#filtermilestones').on("select2:unselect", function(e) { + filtermilestones(); + }); + + // Filter Teams + function filterteams() { + $.ajax({ + method: "POST", + url: "{{ path('app_user_preference') }}", + data: { + key:'filterteams', + id:{{scrum.id}}, + value: $("#filterteams").val() + } + }); + + location.reload(); + } + $('#filterteams').select2(); + {% if filterteams %} + {% for team in filterteams %} + $("#filterteams").val($("#filterteams").val().concat("{{team}}")); + {%endfor%} + $('#filterteams').trigger('change'); + {% endif %} + $('#filterteams').on("select2:select", function(e) { + filterteams(); + }); + $('#filterteams').on("select2:unselect", function(e) { + filterteams(); + }); + {% for milestone in tbstat %} var data = [ {% for data in milestone.stat %} @@ -63,9 +217,25 @@ var plotObj = $.plot($("#floatdonut{{ milestone.id }}"), data, { series: { pie: { - show: true + show: true, + radius: 1, + label: { + show: true, + radius: 1, + threshold: 0.1, + background: { + opacity: 0.5, + color: '#cdcdcd', + }, + formatter: function(label, series) { + return '' + label + ''; + } + } } }, + legend: { + show: false, + }, }); {% for data in milestone.stat %} @@ -100,6 +270,15 @@ }); {% endfor %} {% endfor %} - {% endfor %} + {% endfor %} + + {% if not showfilters %} + $("#filters").addClass("d-none"); + $("#filters").removeClass("d-flex"); + {% endif %} + + // Appliy filters + showhide(); + $("#mycontent").show(); }); {% endblock %} \ No newline at end of file diff --git a/src/ninegitea-1.0/templates/Scrum/view.html.twig b/src/ninegitea-1.0/templates/Scrum/view.html.twig index 4c15eb2..154ab01 100644 --- a/src/ninegitea-1.0/templates/Scrum/view.html.twig +++ b/src/ninegitea-1.0/templates/Scrum/view.html.twig @@ -3,6 +3,7 @@ {% block localstyle %} html { height:100%} body { height:100%; background-color:#efefef;} + #main { padding-left:0px; margin-bottom:0px; @@ -42,7 +43,7 @@ {% block body %}
    -
    +
    +
    + + +
    +