appKernel = $appKernel; $this->giteaservice = $giteaservice; } public function list($id,Request $request) { set_time_limit(0); $em = $this->getDoctrine()->getManager(); $scrum = $em->getRepository("App:Scrum")->find($id); $repoid = $scrum->getGiteaid(); $repoowner = $scrum->getGiteajson()["owner"]["login"]; $reponame = $scrum->getGiteajson()["name"]; $repo=$this->giteaservice->getRepo($repoid); $issues=$this->giteaservice->getIssues($repoowner,$reponame,"?state=all"); foreach($issues as $keyissue => $issue) { // On ne prend pas les pull request if(!is_null($issue->pull_request)) { unset($issues[$keyissue]); continue; } //$issues[$keyissue]->body = $this->giteaservice->markdown("/".$scrum->getGiteajson()["full_name"],"comment",$issues[$keyissue]->body); //$issues[$keyissue]->comments=$this->giteaservice->getIssueComments($repoowner,$reponame,$issue->number); /* Trop lourd foreach($issues[$keyissue]->comments as $keycomment => $comment) { $issues[$keyissue]->comments[$keycomment]->body=$this->giteaservice->markdown("/".$scrum->getGiteajson()["full_name"],"comment",$issues[$keyissue]->comments[$keycomment]->body); } */ /* Trop lourd $issues[$keyissue]->timelines=$this->giteaservice->getIssueTimelines($repoowner,$reponame,$issue->number); */ $issues[$keyissue]->timelines=[]; } // Affichage du formulaire return $this->render('Report/list.html.twig', [ 'useheader' => false, 'usesidebar' => false, 'maxwidth' => true, 'repo' => $repo, 'issues' => $issues, ]); } public function csv($id,Request $request) { set_time_limit(0); $em = $this->getDoctrine()->getManager(); $scrum = $em->getRepository("App:Scrum")->find($id); $repoid = $scrum->getGiteaid(); $repoowner = $scrum->getGiteajson()["owner"]["login"]; $reponame = $scrum->getGiteajson()["name"]; $repo=$this->giteaservice->getRepo($repoid); $issues=$this->giteaservice->getIssues($repoowner,$reponame,"?state=all"); $fs = new Filesystem(); $rootdir = $this->appKernel->getProjectDir(); $destdir = $rootdir."/var/log/export.csv"; $csvh = fopen($destdir, 'w'); $d = ';'; // this is the default but i like to be explicit $e = '"'; // this is the default but i like to be explicit $tbcumul=[]; foreach($issues as $issue) { $monthsubmit=new \DateTime($issue->created_at); $monthsubmit=$monthsubmit->format("Ym"); if(!array_key_exists($monthsubmit,$tbcumul)) $tbcumul[$monthsubmit]=["month"=>$monthsubmit,"nbsubmit"=>0,"nbclose"=>0]; $tbcumul[$monthsubmit]["nbsubmit"]=$tbcumul[$monthsubmit]["nbsubmit"]+1; $monthclose=new \DateTime($issue->closed_at); $monthclose=$monthclose->format("Ym"); if(!array_key_exists($monthclose,$tbcumul)) $tbcumul[$monthclose]=["month"=>$monthclose,"nbsubmit"=>0,"nbclose"=>0]; $tbcumul[$monthclose]["nbclose"]=$tbcumul[$monthclose]["nbclose"]+1; } foreach($tbcumul as $cumul) { fputcsv($csvh, $cumul, $d, $e); } fclose($csvh); $response = new BinaryFileResponse($destdir); $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT); return $response; } public function milestone($idscrum,$mode,$month,Request $request) { $em = $this->getDoctrine()->getManager(); $scrum = $em->getRepository("App:Scrum")->find($idscrum); $datestart=new \DateTime($month."01"); $dateend=new \DateTime($month."31"); $repoid = $scrum->getGiteaid(); $repoowner = $scrum->getGiteajson()["owner"]["login"]; $reponame = $scrum->getGiteajson()["name"]; //$scrumissues = $em->getRepository("App:Scrumissue")->findBy(["scrum"=>$scrum,"giteastate"=>"open"],["giteamilestonename"=>"ASC","rowid"=>"DESC"]); $scrumissues = $em->getRepository("App:Scrumissue")->findBy(["scrum"=>$scrum],["giteamilestonename"=>"ASC","rowid"=>"DESC"]); $reportissues=[]; foreach($scrumissues as $scrumissue) { $labels=array_column($scrumissue->getGiteajson()["labels"], 'name'); $update=new \DateTime($scrumissue->getGiteajson()["updated_at"]); $close=new \DateTime($scrumissue->getGiteajson()["closed_at"]); //"created_at" => "2024-05-03T15:09:26+02:00" //"updated_at" => "2024-05-03T16:02:00+02:00" //"closed_at" => "2024-05-03T16:01:59+02:00" //if(in_array("Type/Scénario",$labels)&&in_array("Statut/Backlog",$labels)) { //if(in_array("Type/Scénario",$labels)) { // Dans le cas d'un report Propal on ne prend que les tickets ouvert de type scénario du backlog $ok=false; if($mode=="Propal") { if(in_array("Type/Scénario",$labels)&&in_array("Statut/Backlog",$labels)&&$scrumissue->getGiteastate()=="open") { $ok=true; } } // Dans le cas d'un report PV on prend tout les tickets avec une date de modification ou de cloture dans le mois if($mode=="PV") { $isstatut=false; $isupdate=false; $isclose=false; if(in_array("Statut/Livré PREPROD",$labels) || in_array("Statut/A Livrer PROD",$labels) || in_array("Statut/Livré PROD",$labels)) { $isstatut=true; } if(!empty($close)&&$close>=$datestart&&$close<=$dateend) $isclose=true; if($update>=$datestart&&$update<=$dateend) $isupdate=true; if($isstatut&&($isclose||$isupdate)) $ok=true; } if(!$ok) continue; $tmp= [ "id" => $scrumissue->getGiteanumber(), "title" => $scrumissue->getGiteatitle(), "milestone" => ($scrumissue->getGiteamilestonename()??"Aucun"), "statutorder" => $scrumissue->getScrumcolumn()->getRowid(), "statut" => $scrumissue->getScrumcolumn()->getName(), "issueorder" => $scrumissue->getRowid(), ]; array_push($reportissues,$tmp); } $statutsort = array_column($reportissues,"statutorder"); $issuesort = array_column($reportissues,"statutorder"); $milestonesort = array_column($reportissues,"milestone"); array_multisort($statutsort, SORT_ASC, $milestonesort, SORT_ASC, $issuesort, SORT_ASC, $reportissues); return $this->render('Report/milestone.html.twig', [ 'useheader' => true, 'issues' => $reportissues, ]); } public function test($id,Request $request) { $em = $this->getDoctrine()->getManager(); $scrum = $em->getRepository("App:Scrum")->find($id); $em = $this->getDoctrine()->getManager(); $scrum = $em->getRepository("App:Scrum")->find($id); $repoid = $scrum->getGiteaid(); $repoowner = $scrum->getGiteajson()["owner"]["login"]; $reponame = $scrum->getGiteajson()["name"]; $repo=$this->giteaservice->getRepo($repoid); dump($repo); dump($repoowner); $labels=$this->giteaservice->getorglabels($repoowner); dump($labels); } }