<?php

namespace App\Controller;

use App\Entity\Action;
use App\Entity\ActivityPTA;
use App\Entity\Mainstay;
use App\Entity\Ministry;
use App\Entity\Costing;
use App\Entity\Goal;
use App\Entity\StructureYear;
use App\Form\MinistryOnlySelType;
use App\Form\MainstaySelType;
use App\Form\ActivityPTAType;
use App\Form\SuiviPTAModelType;
use App\Form\Model\SuiviPTAModel;
use App\Form\Model\SuiviPTACollectionModel;
use App\Form\EvaluationType;
use App\Form\UploadNewFormatType;
use App\Form\UploadNewType;
use App\Service\SettingsManager;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\StreamedResponse;


class SuiviPTAController extends AbstractController
{

    private $costings = [];

    /**
     * @Route("/app/suiviPTA/activities/show", name="app_show_activities", defaults={"id"=0})
     */
    public function showActivitiesSuiviPTAAction($id=0, Request $request)
    {
        $collection = $request->request->get('ministry_only_sel');
        $postId = isset($collection['ministry']) ? $collection['ministry'] : null;
        if ($postId and ($postId != $id)) {
            return $this->redirectToRoute('app_suiviPTA', ['id' => $postId]);
        }

        if (($this->isGranted('ROLE_FOCAL') or $this->isGranted('ROLE_DPP')) and $id==0){
            $id = $request->getSession()->get('_ministry') ? $request->getSession()->get('_ministry')->getId() : 0;
        }
        $ministry = $this->getDoctrine()
            ->getRepository(Ministry::class)
            ->findOneBy(['id' => $id]);

        $year = $request->getSession()->get('_year');
        $activities = [];
        $allactivities = [];
        $suivis = [];

        $form = $this->createForm(MinistryOnlySelType::class, null, [
            'sessionYear' => $request->getSession()->get('_year'),
            'ministry' => $ministry,
            'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $ministry = $form->get('ministry')->getData();
        }

        if ($ministry) {
            $activities = $this->getDoctrine()
                ->getRepository(ActivityPTA::class)
                ->findByMinistry($year, $ministry);
                foreach ($activities as $activity) {
                    $activity->setEtat(false);
                    $this->getDoctrine()->getManagerForClass(ActivityPTA::class)->persist($activity);
                }
                $this->getDoctrine()->getManagerForClass(ActivityPTA::class)->flush();
        }

        return $this->redirectToRoute('app_suiviPTA');
    }
    
    /**
     * @Route("/app/suiviPTA/activities/{id}/delete", name="app_activity_delete")
     */
    public function deleteActivitiesSuiviPTAAction($id)
    {
        try {
            $activite = $this->getDoctrine()->getRepository(ActivityPTA::class)->find($id);
            $this->getDoctrine()->getManager()->remove($activite);
            $this->getDoctrine()->getManager()->flush();
        } catch (\Exception $e) {
            $this->addFlash('error', 'Une erreur s\'est produite. Veuillez réssayer ou contacter le développeur');
            return $this->redirectToRoute('app_zones');
        }
        $this->addFlash('success', 'Activité supprimée avec succès');
        return $this->redirectToRoute('app_suiviPTA');
    }


    /**
     * @Route("/app/suiviPTA/activities", name="app_suiviPTA_activities")
     */
    public function activitiesSuiviPTAAction(Request $request)
    {
        $activities = [];

        $form = $this->createForm(MinistryOnlySelType::class, null, [
            'sessionYear' => $request->getSession()->get('_year'),
            'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $ministry = $form->get('ministry')->getData();
            $activities = $this->getDoctrine()
                ->getRepository(ActivityPTA::class)
                ->createQueryBuilder('y')
                ->select('y')
                ->andWhere('y.year = :year')
                ->andWhere('y.ministry = :ministry')
                ->setParameter('year', $request->getSession()->get('_year'))
                ->setParameter('ministry',$ministry)
                ->getQuery()->getResult();
        }

        return $this->render('suivi_pta/activity_list.html.twig', [
            'activities' => $activities,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/suiviPTA/activities/new", name="app_suiviPTA_activity_new")
     
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_MANAGER", "ROLE_DPP", "ROLE_FOCAL"})
    public function newSuiviPTAActivityAction(Request $request)
    {
        $activity = new ActivityPTA();

        $form = $this->createForm(ActivityPTAType::class, $activity, [
            'sessionYear' => $request->getSession()->get('_year'),
            'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $activity = $form->getData();
            $activity->setYear($request->getSession()->get('_year'));

            $this->getDoctrine()->getManagerForClass(ActivityPTA::class)->persist($activity);
            $this->getDoctrine()->getManagerForClass(ActivityPTA::class)->flush();
            
            return $this->redirectToRoute('app_suiviPTA_activities');
        }

        return $this->render('suivi_pta/activity_form.html.twig', [
            'activity' => $activity,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/suiviPTA/activities/{id}", name="app_suiviPTA_activity")
     
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_MANAGER", "ROLE_DPP", "ROLE_FOCAL"})
    public function activitySuiviPTAAction($id, Request $request)
    {
        $activity = $this->getDoctrine()
            ->getRepository(ActivityPTA::class)
            ->findOneBy(['id' => $id]);

        $form = $this->createForm(ActivityPTAType::class, $activity, [
            'sessionYear' => $request->getSession()->get('_year'),
            'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $activity = $form->getData();
            //$activity->setUpdatedBy($this->getUser());

            $this->getDoctrine()->getManagerForClass(ActivityPTA::class)->flush();

            return $this->redirectToRoute('app_suiviPTA_activities');
        }

        return $this->render('suivi_pta/activity_form.html.twig', [
            'activity' => $activity,
            'form' => $form->createView(),
        ]);
    }


    /**
     * @Route("/app/suiviPTA/{id}", name="app_suiviPTA", defaults={"id"=0})
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_MANAGER"})
    public function suiviPTAAction($id=0, Request $request, SettingsManager $settingsManager)
    {
        $collection = $request->request->get('ministry_only_sel');
        $postId = isset($collection['ministry']) ? $collection['ministry'] : null;
        if ($postId and ($postId != $id)) {
            return $this->redirectToRoute('app_suiviPTA', ['id' => $postId]);
        }

        if (($this->isGranted('ROLE_FOCAL') or $this->isGranted('ROLE_DPP')) and $id==0){
            $id = $request->getSession()->get('_ministry') ? $request->getSession()->get('_ministry')->getId() : 0;
        }
        $ministry = $this->getDoctrine()
            ->getRepository(Ministry::class)
            ->findOneBy(['id' => $id]);

        $year = $request->getSession()->get('_year');
        $activities = [];
        $allactivities = [];
        $suivis = [];

        $form = $this->createForm(MinistryOnlySelType::class, null, [
            'sessionYear' => $request->getSession()->get('_year'),
            'ministry' => $ministry,
            'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $ministry = $form->get('ministry')->getData();
        }

        if ($ministry) {
            $activities = $this->getDoctrine()
                ->getRepository(ActivityPTA::class)
                ->findByMinistry($year, $ministry);

            $allactivities = $this->getDoctrine()
                ->getRepository(ActivityPTA::class)
                ->findByMinistry($year, $ministry);
        }

        return $this->render('suivi_pta/suivi_list.html.twig', [
            'activities' => $activities,
            'allactivities' => $allactivities,
            'form' => $form->createView(),
            'ministry' => $ministry,
            'etat' => $settingsManager->autorisationSaisiePTA($request->getSession()->get('_year')),
        ]);
    }

    /**
     * @Route("/app/suiviPTA/edit/{id}", name="app_suiviPTA_edit")
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_MANAGER"})
    public function editSuiviPTAAction($id, Request $request)
    {
        $activity = $this->getDoctrine()
            ->getRepository(ActivityPTA::class)
            ->findOneBy(['id' => $id]);

        $model = New SuiviPTAModel();
        $model->activity = $activity;
        $model->expectedCost = $activity->getExpectedCost();
        $model->realizedCost = $activity->getRealizedCost();
        $model->executed = $activity->getExecuted();
        $model->achievement = $activity->getAchievement();
        $model->constraints = $activity->getConstraints();
        $model->factors = $activity->getFactors();
        $model->observations = $activity->getObservations();
        $model->taux = $activity->getTaux();
        $model->goal = $activity->getGoal();

        $form = $this->createForm(SuiviPTAModelType::class, $model, [
            'costing' => $activity->getCosting(),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $model = $form->getData();
            
            //if ($model->realizedCost) {
                $activity->setExecuted($model->executed);
                $activity->setRealizedCost($model->realizedCost);
                $activity->setAchievement($model->achievement);
                $activity->setConstraints($model->constraints);
                $activity->setFactors($model->factors);
                $activity->setObservations($model->observations);
                $activity->setGoal($model->goal);
                $activity->setEtat(true);

                $this->getDoctrine()->getManagerForClass(ActivityPTA::class)->flush();
            //}

            return $this->redirectToRoute('app_suiviPTA', ['id' => $activity->getMinistry()->getID()]);
        }

        return $this->render('suivi_pta/suivi_form.html.twig', [
            'model' => $model,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/suivipta/format", name="app_suivi_pta_format")
     
     */
    //* @IsGranted({"ROLE_FOCAL"})
    public function formatSuiviPTAAction(Request $request)
    {
        $actions=null;
        $annee = $request->getSession()->get('_year');
        $id = $request->getSession()->get('_ministry') ? $request->getSession()->get('_ministry')->getId() : 0;
        $ministry = $this->getDoctrine()->getRepository(Ministry::class)->findOneBy(['id' => $id]);
        $actions = $ministry->getCostings();

        $fileName = 'Activite-PTA-'.$ministry->getCode().'-'. $annee . '.xlsx';
        $maquette = $this->getParameter('kernel.project_dir') . '/public/upload/ministeres/pta.xlsx';

        $spreadsheet = IOFactory::load($maquette);

        $sheet = $spreadsheet->getSheet(1);
        $line = 2;
        foreach ($actions as $action) {
            $sheet->setCellValue('A' . $line, $action->getCode());
            $sheet->setCellValue('B' . $line, $action->getName());
            $line++;
        }

        //Retour sur la feuille accueil
        $sheet = $spreadsheet->setActiveSheetIndex(0);

        //Télécharchement du fichier
        $writer = new Xlsx($spreadsheet);
        $response =  new StreamedResponse(
            function () use ($writer) {
                $writer->save('php://output');
            }
        );
        $response->headers->set('Content-Type', 'application/vnd.ms-excel');
        $response->headers->set('Content-Disposition', 'attachment;filename="' . $fileName . '"');
        $response->headers->set('Cache-Control', 'max-age=0');
        return $response;
    }

    /**
     * @Route("/app/suivipta/upload", name="app_suivi_pta_upload")
     
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_FOCAL"})
    public function uploadSuiviPTAAction(Request $request,SettingsManager $settingsManager )
    {
        ini_set('memory_limit', '3G');
        $sessionYear = $request->getSession()->get('_year');
        $form = $this->createForm(UploadNewType::class, null, [
            'sessionYear' => $request->getSession()->get('_year'),
            'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);

        $formFormat = $this->createForm(UploadNewFormatType::class, null, [
            'sessionYear' => $request->getSession()->get('_year'),
            'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);

        $formFormat->handleRequest($request);
        if ($formFormat->isSubmitted() && $formFormat->isValid()) {
            $ministry = $formFormat->get('ministryformat')->getData();
            $actions=null;
            $annee = $request->getSession()->get('_year');
            $actions = $ministry->getCostings();

            $fileName = 'Activite-PTA-'.$ministry->getCode().'-'. $annee . '.xlsx';
            $maquette = $this->getParameter('kernel.project_dir') . '/public/upload/ministeres/pta.xlsx';

            $spreadsheet = IOFactory::load($maquette);

            $sheet = $spreadsheet->getSheet(1);
            $line = 2;
            foreach ($actions as $action) {
                $sheet->setCellValue('A' . $line, $action->getCode());
                $sheet->setCellValue('B' . $line, $action->getName());
                $line++;
            }

            //Retour sur la feuille accueil
            $sheet = $spreadsheet->setActiveSheetIndex(0);

            //Télécharchement du fichier
            $writer = new Xlsx($spreadsheet);
            $response =  new StreamedResponse(
                function () use ($writer) {
                    $writer->save('php://output');
                }
            );
            $response->headers->set('Content-Type', 'application/vnd.ms-excel');
            $response->headers->set('Content-Disposition', 'attachment;filename="' . $fileName . '"');
            $response->headers->set('Cache-Control', 'max-age=0');
            return $response;
        }

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            if ($this->isGranted('ROLE_MANAGER')){
                $ministry = $form->get('ministry')->getData();
            }else{
                $ministry = $this->getDoctrine()->getRepository(Ministry::class)->findOneBy(['id' => $request->getSession()->get('_ministry')->getId()]);
            }
            
            $inputFileName = $form->get('attachment')->getData();
            $inputFileType = IOFactory::identify($inputFileName);
            $reader = IOFactory::createReader($inputFileType);
            $reader->setReadDataOnly(true);
            $spreadsheet = $reader->load($inputFileName);
            
            $worksheet = $spreadsheet->getActiveSheet();
            $highestRow = $worksheet->getHighestRow();
            
            $fileOK = true;
            for ($row = 2; $row <= $highestRow; ++$row) {
                $costingKey = $worksheet->getCellByColumnAndRow(1, $row)->getCalculatedValue();
                if ( $costingKey!=''){
                    if(substr($costingKey, 0, 1) == 'A' ) {
                    if (!key_exists($costingKey, $this->costings)) {
                        $costing = $this->getDoctrine()
                            ->getRepository(Costing::class)
                            ->findOneBy(['code' => $costingKey]); //, 'ministry' => $ministry->getId()
                        
                        if ($costing) {
                            $this->costings[$costingKey] = $costing;
                        } else {
                            $this->addFlash("error", "La costing ". $costingKey . " n'esxiste pas");
                            $fileOK = false;
                            break;
                        }
                    }
                } else {
                    $this->addFlash('error', "La clé ". $costingKey . " n'est plas une clé de costing");
                    $fileOK = false;
                    break;
                }
            }

            $nbActivity = 0;
        try{
            if ($fileOK) {
                $currentProgramm = null;
                for ($row = 2; $row <= $highestRow; ++$row) {
                    $costingKey=$worksheet->getCellByColumnAndRow(1, $row)->getCalculatedValue();
                    if ( $costingKey!=''){
                    $activity = new ActivityPTA();
                    $costing = $this->getDoctrine()
                            ->getRepository(Costing::class)
                            ->findOneBy(['code' => $costingKey]);
                    $activity->setCosting($costing);
                    $activity->setName(trim($worksheet->getCellByColumnAndRow(2, $row)->getCalculatedValue()));
                    $activity->setAchievement(trim($worksheet->getCellByColumnAndRow(3, $row)->getCalculatedValue()));
                    $activity->setAchievement2(trim($worksheet->getCellByColumnAndRow(4, $row)->getCalculatedValue()));
                    $activity->setExecuted(strtolower($worksheet->getCellByColumnAndRow(5, $row)->getCalculatedValue())=='oui' ? true : false);
                    $activity->setExpectedCost((int)str_replace(' ', '', $worksheet->getCellByColumnAndRow(6, $row)->getCalculatedValue()));
                    $activity->setRealizedCost((int)str_replace(' ', '', $worksheet->getCellByColumnAndRow(7, $row)->getCalculatedValue()));
                    
                    $activity->setFactors(trim($worksheet->getCellByColumnAndRow(9, $row)->getCalculatedValue()));
                    $activity->setConstraints(trim($worksheet->getCellByColumnAndRow(10, $row)->getCalculatedValue()));
                    $activity->setObservations(trim($worksheet->getCellByColumnAndRow(11, $row)->getCalculatedValue()));
                    $activity->setMinistry($ministry);
                    $activity->setYear($sessionYear);
                    $activity->setEtat(false);
                    $activity->setGoal($costing->getGoals()[0]);
                    
                    $t=$worksheet->getCellByColumnAndRow(8, $row)->getCalculatedValue();
                    if ($t == "#DIV/0!" || $t == "#REF!" || $t == "#VALEUR!" || $t == "") {
                        
                    }else{
                        $activity->setTaux(round($t*100,2));
                    }
                    

                    $this->getDoctrine()->getManager()->persist($activity);
                    $nbActivity += 1;
                }
            }
                $this->getDoctrine()->getManager()->flush();

                $this->addFlash('notice', "Chargement effectué avec succès - Nombre d'activités chargées ".$nbActivity);
                if (!$this->isGranted('ROLE_MANAGER')){
                    return $this->redirectToRoute('app_suiviPTA');
                }
            }
        } catch (\Exception $e) {
            $this->addFlash('error', 'Une erreur s\'est produite. Veuillez vérifier votre format ou contacter la DGCS-ODD');
        }
            //return $this->redirectToRoute('app_upload');
        }

        }
            
        return $this->render('suivi_pta/upload_form.html.twig', [
            'form' => $form->createView(),
            'formFormat' => $formFormat->createView(),
            'etat' => $settingsManager->autorisationSaisiePTA($request->getSession()->get('_year')),
        ]);
    }

    /**
     * @Route("/app/pta/validation", name="app_pta_validation")
     */
    public function ptaValidationAction(Request $request, SettingsManager $settingsManager)
    {
        $year = $settingsManager->getYear($request->getSession()->get('_year'));
        $ministry = $request->getSession()->get('_ministry');
        $ministry = $this->getDoctrine()->getRepository(Ministry::class)->findOneBy(['id' => $ministry->getId()]);
        $structureyear = $settingsManager->getStructureYear($request->getSession()->get('_year'), $ministry);
        if (!$structureyear) {
            $structureyear = new StructureYear();
            $structureyear->setMinistry($ministry);
            $structureyear->setYear($year);
            $this->getDoctrine()->getManager()->persist($structureyear);
            $this->getDoctrine()->getManager()->flush();
        }
        if ($year && $ministry) {
            if ($this->isGranted('ROLE_DPP')) {
                $structureyear->setDpp2(true);
            }
            if ($this->isGranted('ROLE_FOCAL')) {
                $structureyear->setFocal2(true);
            }
            $this->getDoctrine()->getManagerForClass(StructureYear::class)->persist($structureyear);
            $this->getDoctrine()->getManagerForClass(StructureYear::class)->flush();
            $this->addFlash('success', 'Activités envoyées avec succès');
        } else {
            $this->addFlash('error', "Une erreur s'est produite. Veuillez réessayer plus tard.");
        }
        return $this->redirectToRoute('app_suiviPTA');
    }


    /**
     * @Route("/app/suivipta/validate/{id}", name="app_suivipta_validate", defaults={"id"=0})
     
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_DPP"})
    public function validateSuiviPTAAction($id=0, Request $request)
    {
        $activities = [];
        $action = $this->getDoctrine()
            ->getRepository(Action::class)
            ->findOneBy(['id' => (int)$id]);

        $form = $this->createForm(MinistryOnlySelType::class, $action, [
            'sessionYear' => $request->getSession()->get('_year'),
            'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);
      
        $form->handleRequest($request);
        //if ($form->isSubmitted() && $form->isValid()) {
            /*$action = $form->get('action')->getData();

            if ($action) {
                foreach ($action->getActivities() as $activity) {
                    if ($activity->getValidated() == false) {
                        $activities[] = $activity;
                    }
                }
            }*/
        //}

        return $this->render('suivi_pta/validate_form.html.twig', [
            'form' => $form->createView(),
            'action' => $action,
            'activities' => $activities,
        ]);
    }


    /**
     * @Route("/app/suiviPTA/output/finance", name="app_suiviPTA_output_finance")
     */
    public function outputSuiviPTAFinanceAction(Request $request)
    {
        $datas = [
            'header' => [],
            'rows' => []
        ];
        $title="Pilier";
        $year = $request->getSession()->get('_year');

        $form = $this->createForm(MainstaySelType::class);

        $rows = $this->getDoctrine()
            ->getRepository(Mainstay::class)
            ->getFinancialPTA($year);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $mainstay = $form->get('mainstay')->getData();
            $goal = $form->get('goal')->getData();

            if ( $goal ) {
                $title="Ministère";
                $rows = $this->getDoctrine()
                    ->getRepository(Ministry::class)
                    ->getFinancialPTA($year, $mainstay, $goal);
            } elseif ( $mainstay ) {
                $title="ODD";
                $rows = $this->getDoctrine()
                    ->getRepository(Goal::class)
                    ->getFinancialPTA($year, $mainstay);
            }
        }

        $nbActivity = 0;
        $sumExpectedCost = 0;
        $sumRealizedCost = 0;

        foreach ($rows as $key => $row) {
            $nbActivity += $rows[$key]['nbActivity'];
            $sumExpectedCost += $rows[$key]['sumExpectedCost'];
            $sumRealizedCost += $rows[$key]['sumRealizedCost'];
        }
        /*
        $header['year'] = $year;
        $header['level1']['name'] = $mainstay ? $mainstay->getName() : '';
        $header['level1']['code'] = $mainstay ? $mainstay->getCode() : '';
        $header['level2']['name'] = $goal ? $goal->getName() : '';
        $header['level2']['code'] = $goal ? $goal->getCode() : '';
        $header['level3']['name'] = '';
        $header['level3']['code'] = '';
        */
        $header['totalRate'] = $nbActivity ? $sumRealizedCost / $sumExpectedCost * 100 : 0;
        
        $header['nbActivity'] = $nbActivity;
        $header['sumExpectedCost'] = $sumExpectedCost;
        $header['sumRealizedCost'] = $sumRealizedCost;

        $datas['header'] = $header;
        $datas['rows'] = $rows;  

        return $this->render('suivi_pta/output_mainstay.html.twig', [
            'title' => $title,
            'datas' => $datas,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/suiviPTA/graph/finance", name="app_suiviPTA_graph_finance")
     */
    public function graphSuiviPTAFinanceAction(Request $request)
    {
        $barChart = [];
        $year = $request->getSession()->get('_year');

        $form = $this->createForm(MainstaySelType::class);

        $label = 'Pilier';
        $datas = $this->getDoctrine()
            ->getRepository(Mainstay::class)
            ->getFinancialPTA($year);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $mainstay = $form->get('mainstay')->getData();
            $goal = $form->get('goal')->getData();

            if ( $goal ) {
                $label = '';
                $datas = $this->getDoctrine()
                    ->getRepository(Ministry::class)
                    ->getFinancialPTA($year, $mainstay, $goal);
            } elseif ( $mainstay ) {
                $label = 'ODD';
                $datas = $this->getDoctrine()
                    ->getRepository(Goal::class)
                    ->getFinancialPTA($year, $mainstay);
            }
        }

        foreach ($datas as $key => $data) {
            $barChart['labels'][] = $label.' '.$datas[$key]['code'];
            $barChart['bgColor'][] = $datas[$key]['color'];
            $barChart['values'][] = round($datas[$key]['sumRealizedCost'] / $datas[$key]['sumExpectedCost'] * 100, 2);
        } 

        return $this->render('suivi_pta/graph_finance.html.twig', [
            'barChart' => $barChart,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/suiviPTA/output/global", name="app_suiviPTA_output_global")
     */
    public function outputSuiviPTAGlobalAction(Request $request)
    {
        $datas = [];
        $year = $request->getSession()->get('_year');

        $rows = $this->getDoctrine()
            ->getRepository(Mainstay::class)
            ->getFinancialPTA($year);

        $rowsOSC = $this->getDoctrine()
            ->getRepository(Mainstay::class)
            ->getFinancialOSC($year);

   
        foreach ($datas as $key => $data) {
            for ($i=1;$i<=4;++$i) {
                if ($datas[$key]['code']=='A'.$i) {
                    $barChart['dataset2'][$i-1] = round($datas[$key]['sumRealizedCost'] / $datas[$key]['sumExpectedCost'] * 100, 2);
                }
            }
        } 

        $nbActivity = 0;
        $sumExpectedCost = 0;
        $sumRealizedCost = 0;

        foreach ($rows as $key => $row) {
            $nbActivity += $rows[$key]['nbActivity'];
            $sumExpectedCost += $rows[$key]['sumExpectedCost'];
            $sumRealizedCost += $rows[$key]['sumRealizedCost'];
        }

        $header['totalRate'] = $nbActivity ? $sumRealizedCost / $sumExpectedCost * 100 : 0;
        
        $datas['rows'] = $rows;  

        return $this->render('suivi_pta/output_global.html.twig', [
            'datas' => $datas,
        ]);
    }


    /**
     * @Route("/app/suiviPTA/graph/global", name="app_suiviPTA_graph_global")
     */
    public function graphSuiviPTAGlobalAction(Request $request)
    {
        $barChart = [];
        $year = $request->getSession()->get('_year');

        $barChart['labels'] = ['Polutaion', 'Propérité', 'Planète', 'Paix'];
        $barChart['dataset1'] = [0,0,0,0];
        $barChart['dataset2'] = [0,0,0,0];


        $datas = $this->getDoctrine()
            ->getRepository(Mainstay::class)
            ->getFinancialPTA($year);
    
        foreach ($datas as $key => $data) {
            for ($i=1;$i<=4;++$i) {
                if ($datas[$key]['code']=='A'.$i) {
                    $barChart['dataset1'][$i-1] = round($datas[$key]['sumRealizedCost'] / $datas[$key]['sumExpectedCost'] * 100, 2);
                }
            }
        } 

        $datas = $this->getDoctrine()
            ->getRepository(Mainstay::class)
            ->getFinancialOSC($year);
    
            foreach ($datas as $key => $data) {
                for ($i=1;$i<=4;++$i) {
                    if ($datas[$key]['code']=='A'.$i) {
                        $barChart['dataset2'][$i-1] = round($datas[$key]['sumRealizedCost'] / $datas[$key]['sumExpectedCost'] * 100, 2);
                    }
                }
            } 
    
        return $this->render('suivi_pta/graph_global.html.twig', [
            'barChart' => $barChart,
        ]);
    }
    
}
