Commit 6f4584b6 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- Relance des validateurs/déclarants très en retard en cours de finalisation

parent f7bb987e
Loading
Loading
Loading
Loading
Loading
+27 −4
Changes for front/src/TimesheetHigDelay.vue: 27 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -9,12 +9,35 @@
      </div>
    </div>
    <article class="card" v-for="entry in entries">
      <h2 class="card-title">{{ entry.fullname }}</h2>
      <div>
        <i class="icon-calendar"></i> Nombre de période : <strong>{{ entry.total_periods }}</strong><br>
        <i class="icon-docs"></i> Déclaration(s) : <strong>{{ entry.total_declarations }}</strong>
      <h2>
        {{ entry.fullname }}
        <span class="cartouche xs warning">
          {{ entry.total_declarations }} / {{ entry.total_periods }}
        </span>
      </h2>
<!--      <div>-->
<!--        <i class="icon-calendar"></i> Nombre de période : <strong>{{ entry.total_periods }}</strong><br>-->
<!--        <i class="icon-docs"></i> Déclaration(s) : <strong>{{ entry.total_declarations }}</strong><br>-->


<!--      </div>-->
      <div class="validators">
        <h3>
          <i class="icon-user"></i>
          Validateur(s) impliqué(s) :
        </h3>
        <div v-if="entry.send == true && entry.validators.length == 0" class="alert alert-danger">
          <i class="icon-attention-1"></i>
          Aucun validateur n'est désigné pour valider ces déclarations, rendez-vous dans la fiche activité afin de vérifier que des validateurs sont bien désignés, ainsi que dans la fiche personne pour les créneaux Hors-lot
        </div>
        <ul v-else>
          <li v-for="v in entry.validators">{{ v }}</li>
        </ul>
      </div>
      <div class="periods">
        <h3>
          <i class="icon-calendar"></i>
          Période(s)</h3>
        <span v-for="(p, key) in entry.periods" class="cartouche xs" :class="{
          'success': p.valid == true,
          'danger': p.conflict == true,
+16 −3
Changes for module/Oscar/src/Oscar/Command/OscarTimesheetHighDelayCommand.php: 16 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -85,11 +85,24 @@ class OscarTimesheetHighDelayCommand extends OscarAdvancedCommandAbstract
        $datas = $this->getPersonService()->getPersonsHighDelay($period->getPeriodCode());

        foreach ($datas as $personDt) {
            if( $personDt['send'] == true ){
                continue;
            $this->getIO()->title("Traitement pour " . $personDt['fullname']);
            if( $personDt['require_alert_declarer'] == true ){
                $this->getIO()->writeln("<green> > Envoi : Déclarant</green>");
            } else {
                $this->getIO()->writeln("<info> - pas d'envoi pour le déclarant</info>");
            }
            var_dump($personDt);

            if( $personDt['require_alert_validator'] == true ){
                if( count($personDt['validators']) ){
                    foreach ($personDt['validators'] as $i=>$name) {
                        $this->getIO()->writeln("<green> > Envoi validateur : $name</green>");
                    }
                } else {
                    $this->getIO()->error("Pas de validateur pour ce déclarant");
                }
            } else {
                $this->getIO()->writeln("pas d'envoi pour le déclarant");
            }
        }


+33 −1
Changes for module/Oscar/src/Oscar/Service/PersonService.php: 33 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -1216,9 +1216,32 @@ class PersonService implements UseOscarConfigurationService, UseEntityManager, U
        }
    }

    /**
     * Retourne la liste des validateurs EFFECTIFS impliqués dans la validatation des heures du déclarant pour la
     * période.
     *
     * @param int $delcarerId
     * @param string $periodCod
     * @return array
     */
    public function getValidatorsIdsPersonPeriod( int $declarerId, string $periodCode ) :array
    {
        $output = [];
        $validations = $this->getTimesheetService()->getValidationsPeriodPersonAt($declarerId, $periodCode);
        /** @var ValidationPeriod $validation */
        foreach ($validations as $validation) {
            /** @var Person $validator */
            foreach ($validation->getCurrentValidators() as $validator) {
                $output[$validator->getId()] = $validator->getFullname();
            }
        }
        return $output;
    }

    public function getPersonsHighDelay(string $period)
    {
        $declarers = $this->getDeclarersIdsBeforePeriod($period);

        $output = [];

        foreach ($declarers as $personId => $infos) {
@@ -1230,6 +1253,7 @@ class PersonService implements UseOscarConfigurationService, UseEntityManager, U
            $personEmail = $person->getEmail();
            $personPeriods = $this->getTimesheetService()->getPeriodsPerson($person);
            $repport = $this->getHighDelayForPerson($personId);
            $validatorsPerson = [];
            $periods = [];

            $output[$personId] = [
@@ -1251,6 +1275,7 @@ class PersonService implements UseOscarConfigurationService, UseEntityManager, U
                $send = (array_key_exists($pp, $repport) && $repport[$pp]['send']);
                $valid = array_key_exists($pp, $repport) && $repport[$pp]['valid'] ? true : false;
                $step = array_key_exists($pp, $repport) ? $repport[$pp]['step'] : 0;
                $validators = [];

                if ($pp >= $period) {
                    continue;
@@ -1258,6 +1283,11 @@ class PersonService implements UseOscarConfigurationService, UseEntityManager, U

                if( $send === false ){
                    $output[$personId]['send'] = false;
                } else {
                    $validators = $this->getValidatorsIdsPersonPeriod($personId, $pp);
                    foreach ($validators as $idValidator=>$validatorFullName){
                        $validatorsPerson[$idValidator] = $validatorFullName;
                    }
                }

                 if( $send === false ){
@@ -1277,7 +1307,8 @@ class PersonService implements UseOscarConfigurationService, UseEntityManager, U
                    'valid_adm' => false,
                    'send' => false,
                    'conflict' => false,
                    'step' => $step
                    'step' => $step,
                    'validators' => $validators
                ];
                if( array_key_exists($pp, $repport) ){
                    $periodInfos['valid'] = $repport[$pp]['valid'];
@@ -1298,6 +1329,7 @@ class PersonService implements UseOscarConfigurationService, UseEntityManager, U
            }

            $output[$personId]['periods'] = $periods;
            $output[$personId]['validators'] = $validatorsPerson;
        }

        return $output;
+5 −0
Changes for module/Oscar/src/Oscar/Service/TimesheetService.php: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -5182,6 +5182,11 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat
        }
    }

    public function getValidationsPeriodPersonAt( int $declarerId, string $periodCode ) :array
    {
        return $this->getValidationPeriodRepository()->getValidationPeriodForPersonAtPeriod($declarerId, $periodCode);
    }

    /**
     * Ajout d'un validateur désigné à une activité de recherche.
     *
+17 −0
Changes for module/Oscar/view/oscar/administration/accueil.phtml: 17 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -337,6 +337,23 @@
            <p>Cette interface permet de visualiser les déclarations et leur état. Elle permet également de <strong>gérer les validateurs</strong> et de <strong>modifier la répartition horaire du déclarant</strong> en cas de problème. Enfin, elle permet d'annuler un procédure de validation.</p>
        </article>

        <article class="card xs">
            <h3 class="card-title">
                <strong>
                    <i class="icon-calendar"></i>
                    Retard de déclaration</strong>
                <?php if( $this->grant()->privilege(\Oscar\Provider\Privileges::MAINTENANCE_VALIDATION_MANAGE) ):?>
                    <a href="<?= $this->url('timesheet/highdelay') ?>" class="right">
                        <i class="icon-cog"></i>
                        <?= $this->translate("Afficher") ?>
                    </a>
                <?php else: ?>
                    <em class="right"><i class="icon-lock"></i> Privilège insuffisant</em>
                <?php endif; ?>
            </h3>
            <p>Cette interface permet de visualiser les retards de déclaration.</p>
        </article>

        <article class="card xs">
            <h3 class="card-title">
                <strong>
Loading