Commit 02020696 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Commande pour afficher les données de synthèse d'une personne à une période

parent 1b9d4f28
Loading
Loading
Loading
Loading
Loading
+178 −0
Original line number Diff line number Diff line
<?php
/**
 * Created by PhpStorm.
 * User: bouvry
 * Date: 04/10/19
 * Time: 11:49
 */

namespace Oscar\Command;


use Moment\Moment;
use Oscar\Entity\Authentification;
use Oscar\Entity\LogActivity;
use Oscar\Entity\Person;
use Oscar\Entity\Role;
use Oscar\Entity\WorkPackage;
use Oscar\Entity\WorkPackagePerson;
use Oscar\Service\ConnectorService;
use Oscar\Service\OscarConfigurationService;
use Oscar\Service\OscarUserContext;
use Oscar\Service\PersonService;
use Oscar\Service\TimesheetService;
use Oscar\Utils\DateTimeUtils;
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Zend\Validator\Date;

class OscarTimesheetPersonPeriodInfosCommand extends OscarCommandAbstract
{
    protected static $defaultName = 'timesheets:person-period-infos';

    const ARG_DECLARER      = "declarer";
    const ARG_PERIOD        = "period";

    protected function configure()
    {
        $this
            ->setDescription("Fourni des informations sur les informations de temps pour un déclarant à la période donnée")
            ->addArgument(self::ARG_DECLARER, InputArgument::REQUIRED, "login du déclarant")
            ->addArgument(self::ARG_PERIOD, InputArgument::REQUIRED, "periode sous la forme YYYY-MM")
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $io = new SymfonyStyle($input, $output);

        /// OPTIONS and PARAMETERS
        $declarerLogin = $input->getArgument(self::ARG_DECLARER);
        $periodStr = $input->getArgument(self::ARG_PERIOD);
        $serialize = false;

        $person = $this->getPersonService()->getPersonByLdapLogin($declarerLogin);

        //$io->title("Période '$periodStr' pour '$person' : ");


        $datas = $this->getTimesheetService()->getPersonTimesheetsDatas($person, $periodStr);

        if( $serialize ){
            $serialized = serialize($datas);
            die($serialized);
        }

        $io->title("Période '$periodStr' pour '$person' : ");
        dump($datas);

        $headers = [""];
        $rows = [];
        $totalDays = $datas['totalDays'];
        foreach ($datas['daysInfos'] as $day=>$dayData) {
            $headers[] = sprintf("%s%s", substr($dayData['label'], 0, 1), $day);
        }
        $headers[] = 'Total';

        foreach ($datas['declarations'] as $itemKey=>$itemData) {
            $rows[] = ["+++ $itemKey"];
            foreach ($itemData as $subItem=>$subItemDatas) {

                $rows[] = ['+' . $subItemDatas['acronym']];

                foreach ($subItemDatas['subgroup'] as $subGroupKey=>$subGroupdatas) {
                    $row = [substr($subGroupdatas['label'],0,7)];
                    for($i=1; $i<=$totalDays; $i++){
                        $totalDay = 0;
                        if( array_key_exists($i, $subGroupdatas['days']) )
                            $totalDay = floatval($subGroupdatas   ['days'][$i]);
                        if( $datas['daysInfos'][$i]['locked'] )
                            $totalDay = $totalDay == 0 ? "." : "!".$totalDay;
                        $row[] = $totalDay;
                    }
                    $row[] = $subGroupdatas['total'];
                    $rows[] = $row;
                    $rows[] = ['---'];
                }
                $rows[] = [" = " . $subItemDatas['total']];
            }
        }

        $rows[] = ["---"];
        $row = ["Actif"];
        for($i=1; $i<=$totalDays; $i++){
            $totalDay = 0;
            if( array_key_exists($i, $datas['active']['days']) )
                $totalDay = floatval($datas['active']['days'][$i]);
            if( $datas['daysInfos'][$i]['locked'] )
                $totalDay = $totalDay == 0 ? "." : "!".$totalDay;
            $row[] = $totalDay;
        }
        $row[] = $datas['active']['total'];
        $rows[] = $row;

        $io->table($headers, $rows);
    }

    /**
     * @return TimesheetService
     */
    protected function getTimesheetService(){
        return $this->getServicemanager()->get(TimesheetService::class);
    }

    /**
     * @return PersonService
     */
    protected function getPersonService(){
        return $this->getServicemanager()->get(PersonService::class);
    }

    public function declarerPeriod( InputInterface $input, OutputInterface $output, $declarerId, $period ){
        // TODO Faire un rendu text des déclarations mensuelles des déclarants
        $datas = $this->getTimesheetService()->getTimesheetDatasPersonPeriod($this->getPersonService()->getPerson($declarerId), $period);
        echo "Non-disponible";
    }

    public function declarer( InputInterface $input, OutputInterface $output, $declarerId ){

        $io = new SymfonyStyle($input, $output);

        try {
            $declarer = $this->getPersonService()->getPerson($declarerId);

            $io->title("Système de relance pour $declarer");
            $periods = $this->getTimesheetService()->getPersonRecallDeclaration($declarer);

            $io->table(["Période", "Durée", "état"], $periods);

        } catch (\Exception $e) {
            $io->error('Impossible de charger le déclarant : ' . $e->getMessage());
            exit(0);
        }
    }

    public function declarersList( InputInterface $input, OutputInterface $output ){
        $io = new SymfonyStyle($input, $output);
        $io->title("Lite des déclarants");
        try {
            $declarants = $this->getTimesheetService()->getDeclarers();
            $out = [];
            /** @var Person $declarer */
            foreach ($declarants['persons'] as $personId=>$datas) {
                $out[] = [$personId, $datas['displayname'], $datas['affectation'], count($datas['declarations'])];
            }
            $headers = ['ID', 'Déclarant', 'Affectation', 'Déclaration(s)'];
            $io->table($headers, $out);

            $io->comment("Entrez la commande '".self::getName()." <ID> [PERIOD]' pour afficher les détails");
        } catch (\Exception $e) {
            $io->error($e->getMessage());
        }
    }
}
 No newline at end of file
+0 −20
Original line number Diff line number Diff line
@@ -392,24 +392,4 @@ class ApiController extends AbstractOscarController implements UseOscarUserConte
    {
        return $this->getProject($projectId)['partners'];
    }

    /**
     * @return ViewModel
     */
    public function searchStaffAction()
    {
        $sl = $this->getServiceLocator();
        $search = $this->getRequest()->getQuery()->get('q');

        if (strlen($search) >= 4) {
            $t = $sl->get('PersonnelService');
            /* @var \Application\Service\PersonnelService */
            $result = $t->searchStaff($search);
            return new JsonModel($result);
        } else {
            $response = new Response();
            $response->setStatusCode(400);
            return $response;
        }
    }
}
+2 −12
Original line number Diff line number Diff line
@@ -1510,7 +1510,6 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat
        // Données des déclarants pour la période
        $datas = $this->getTimesheetRepository()->getPersonPeriodSynthesis($personIds, $period);


        $validations = $this->getValidationsPeriodPersons($personIds, $period);

        $comments = [];
@@ -1544,7 +1543,6 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat
            }
        }


        foreach ($others as $key => $other) {

            $totaux['others'][$key] = 0.0;
@@ -1682,7 +1680,6 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat
            ->getQuery()
            ->setParameter('person', $person)
            ->getResult();

    }

    private $_cache_getPeriodDuration = [];
@@ -1737,7 +1734,6 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat
            $validationsState[$key] = $validation->getStatus();
        }


        /** @var Person $person */
        foreach ($activity->getDeclarers() as $person) {
            $declarersIds[] = $person->getId();
@@ -2122,6 +2118,8 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat
        return $days;
    }



    public function verificationPeriod(Person $person, $year, $month)
    {
        $datas = $this->getTimesheetDatasPersonPeriod($person, sprintf('%s-%s', $year, $month));
@@ -2177,13 +2175,6 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat
            }
        }

        /*
        foreach ($weeksMinCount as $week=>$weekDuration) {
            if( $weekDuration > $limitWeekMax ){
                $errors[] = sprintf("- Les heures déclarées en semaine %s dépassent la durée autorisée", $week);
            }
        }*/

        if ($month > $limitMonthMax) {
            $errors[] = "- Les heures déclarées pour ce mois dépassent la durée autorisée";
        }
@@ -2196,7 +2187,6 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat
            throw new OscarException(sprintf("Il y'a %s erreur(s) dans votre déclaration : \n %s", count($errors), implode("\n", $errors)));
        }


        return true;
    }

+16 −0
Original line number Diff line number Diff line
<?php


namespace Oscar\Service;


use PHPUnit\Framework\TestCase;

class TimesheetServiceTest extends TestCase
{
    public function testValidationPersonPeriod()
    {
        $periodDatas = unserialize(file_get_contents(__DIR__.'/../../ressources/timesheets/period-datas-sb-202008.txt'));
        $this->assertTrue(true);
    }
}
 No newline at end of file
+4 −0
Original line number Diff line number Diff line
a:16:{s:8:"filename";s:40:"feuille-de-temps-stephane-bouvry-2020-08";s:6:"person";s:15:"Stephane Bouvry";s:6:"active";a:2:{s:5:"total";d:154.40000000000006;s:4:"days";a:21:{i:24;d:7.4;s:2:"03";d:7.4;s:2:"04";d:7.4;s:2:"05";d:7.4;i:25;d:7.4;i:26;d:7.4;i:27;d:6.4;i:28;d:7.4;i:31;d:7.4;s:2:"06";d:7.4;s:2:"07";d:7.4;i:10;d:7.4;i:11;d:7.4;i:12;d:7.4;i:13;d:7.4;i:14;d:7.4;i:17;d:7.4;i:18;d:7.4;i:19;d:7.4;i:20;d:7.4;i:21;d:7.4;}}s:12:"commentaires";s:9:" - 
 - 

";s:10:"totalGroup";a:2:{s:8:"research";a:2:{s:5:"total";d:147.00000000000006;s:4:"days";a:20:{i:24;d:7.4;s:2:"03";d:7.4;s:2:"04";d:7.4;s:2:"05";d:7.4;i:25;d:7.4;i:26;d:7.4;i:27;d:6.4;i:28;d:7.4;s:2:"06";d:7.4;s:2:"07";d:7.4;i:10;d:7.4;i:11;d:7.4;i:12;d:7.4;i:13;d:7.4;i:14;d:7.4;i:17;d:7.4;i:18;d:7.4;i:19;d:7.4;i:20;d:7.4;i:21;d:7.4;}}s:5:"other";a:2:{s:5:"total";d:7.4;s:4:"days";a:1:{i:31;d:7.4;}}}s:13:"organizations";a:2:{s:11:"Laboratoire";a:2:{i:0;s:44:"[C68F2] DSI DEV CERTIC CERTIC (CAEN CEDEX 5)";i:1;s:127:"[13A] UFR DS GREYC Groupe de Recherche en Informatique,Image,Automatique et Instrumentation de Caen (GREYC/U) [UMR 6072] (CAEN)";}s:18:"Tutelle de gestion";a:2:{i:0;s:44:"[C68F2] DSI DEV CERTIC CERTIC (CAEN CEDEX 5)";i:1;s:29:"[CERTIC] CERTIC CERTIC (Caen)";}}s:3:"num";s:26:"2020DRI00186, 2016DRI00035";s:3:"pfi";s:0:"";s:8:"acronyms";s:12:"GLOZZ, OSCAR";s:9:"person_id";i:5063;s:6:"period";s:7:"2020-08";s:11:"periodLabel";s:10:"août 2020";s:9:"totalDays";i:31;s:5:"total";d:154.40000000000006;s:9:"daysInfos";a:31:{i:1;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Sam";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:8:"2020-8-1";}i:2;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Dim";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:8:"2020-8-2";}i:3;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Lun";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:8:"2020-8-3";}i:4;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Mar";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:8:"2020-8-4";}i:5;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Mer";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:8:"2020-8-5";}i:6;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Jeu";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:8:"2020-8-6";}i:7;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Ven";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:8:"2020-8-7";}i:8;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Sam";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:8:"2020-8-8";}i:9;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Dim";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:8:"2020-8-9";}i:10;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Lun";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-10";}i:11;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Mar";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-11";}i:12;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Mer";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-12";}i:13;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Jeu";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-13";}i:14;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Ven";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-14";}i:15;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Sam";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:31:"Fermé Jour ferié (Assomption)";s:6:"closed";b:1;s:12:"closedReason";s:31:"Fermé Jour ferié (Assomption)";s:5:"infos";s:31:"Fermé Jour ferié (Assomption)";s:8:"datefull";s:9:"2020-8-15";}i:16;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Dim";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:9:"2020-8-16";}i:17;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Lun";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-17";}i:18;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Mar";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-18";}i:19;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Mer";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-19";}i:20;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Jeu";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-20";}i:21;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Ven";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-21";}i:22;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Sam";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:9:"2020-8-22";}i:23;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Dim";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:9:"2020-8-23";}i:24;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Lun";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-24";}i:25;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Mar";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-25";}i:26;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Mer";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-26";}i:27;a:14:{s:8:"duration";d:6.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Jeu";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-27";}i:28;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Ven";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-28";}i:29;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Sam";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:9:"2020-8-29";}i:30;a:14:{s:8:"duration";d:0;s:9:"dayLength";d:0;s:9:"maxLength";d:0;s:9:"minLength";d:0;s:12:"amplitudemin";d:0;s:12:"amplitudemax";d:0;s:5:"label";s:3:"Dim";s:5:"close";b:0;s:6:"locked";b:1;s:12:"lockedReason";s:7:"Weekend";s:6:"closed";b:1;s:12:"closedReason";s:7:"Weekend";s:5:"infos";s:7:"Weekend";s:8:"datefull";s:9:"2020-8-30";}i:31;a:14:{s:8:"duration";d:7.4;s:9:"dayLength";d:7.4;s:9:"maxLength";d:7.4;s:9:"minLength";d:7.4;s:12:"amplitudemin";d:7.4;s:12:"amplitudemax";d:7.4;s:5:"label";s:3:"Lun";s:5:"close";b:0;s:6:"locked";b:0;s:12:"lockedReason";s:0:"";s:6:"closed";b:0;s:12:"closedReason";s:0:"";s:5:"infos";s:0:"";s:8:"datefull";s:9:"2020-8-31";}}s:12:"declarations";a:3:{s:10:"activities";a:2:{s:67:"GLOZZ : Développement d'outils de mesure d'accord inter-annotateur";a:7:{s:5:"label";s:67:"GLOZZ : Développement d'outils de mesure d'accord inter-annotateur";s:2:"id";i:11674;s:4:"type";s:8:"activity";s:5:"group";s:8:"research";s:7:"acronym";s:5:"GLOZZ";s:5:"total";d:36;s:8:"subgroup";a:1:{s:25:"GLOZZ - Application Glozz";a:6:{s:5:"label";s:25:"GLOZZ - Application Glozz";s:2:"id";i:78;s:4:"type";s:2:"wp";s:5:"group";s:8:"research";s:5:"total";d:36;s:4:"days";a:5:{i:24;d:7.4;i:25;d:7.4;i:26;d:7.4;i:27;d:6.4;i:28;d:7.4;}}}}s:17:"OSCAR : Version 1";a:7:{s:5:"label";s:17:"OSCAR : Version 1";s:2:"id";i:9099;s:4:"type";s:8:"activity";s:5:"group";s:8:"research";s:7:"acronym";s:5:"OSCAR";s:5:"total";d:111.00000000000003;s:8:"subgroup";a:1:{s:20:"WP2 - Développement";a:6:{s:5:"label";s:20:"WP2 - Développement";s:2:"id";i:2;s:4:"type";s:2:"wp";s:5:"group";s:8:"research";s:5:"total";d:111.00000000000003;s:4:"days";a:15:{s:2:"03";d:7.4;s:2:"04";d:7.4;s:2:"05";d:7.4;s:2:"06";d:7.4;s:2:"07";d:7.4;i:10;d:7.4;i:11;d:7.4;i:12;d:7.4;i:13;d:7.4;i:14;d:7.4;i:17;d:7.4;i:18;d:7.4;i:19;d:7.4;i:20;d:7.4;i:21;d:7.4;}}}}}s:6:"others";a:1:{s:6:"Divers";a:7:{s:5:"label";s:6:"Divers";s:2:"id";i:-1;s:4:"type";s:6:"others";s:5:"group";s:5:"other";s:7:"acronym";s:0:"";s:5:"total";d:7.4;s:8:"subgroup";a:1:{s:5:"other";a:6:{s:5:"label";s:6:"Divers";s:2:"id";s:5:"other";s:4:"type";s:5:"other";s:5:"group";s:5:"other";s:5:"total";d:7.4;s:4:"days";a:1:{i:31;d:7.4;}}}}}s:10:"totalGroup";a:0:{}}}
 No newline at end of file