Commit 3caa16ae authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Merge branch 'master' into sb/ripley-activity-show-2

parents ea346ef2 bda597bd
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -3,6 +3,11 @@
## 2024

### Novembre 2024
 - [Fix] Erreur avec les commandes lièes aux dépenses (`spent:list`, `spent:infos`, `spent:accounts`)
 - [Fix] Erreur dans le calcule d'accès aux documents des activités pour les personnes associées à une organisation affectée au projet des activitées.
 - [Fix] La date de dernière autentification est de nouveau mise à jour correctement.
 - [Fix] Erreur lors de la génération des versions Excel des feuilles de temps mensuelles validées pour une personne
 - [Fix] Affichage d'un message d'erreur lors de l'envoi d'un document sans spécifier le type depuis la fiche activité
 - [Fix] Maj du module Signature : Fix un problème avec les observateurs fixes déclarés via l'email. Normalisation de la case des emails.
 - [Up] Ajout d'un connector DB (Oracle) pour les synchronisations des personnes/organisations (doc : [doc/connectors-db.md](doc/connectors-db.md))
 - [Up] Mise à jour des *templates* pour la génération des feuilles de temps (doc: [doc/timesheet.md#personnalisation-des-rendus](doc/timesheet.md#personnalisation-des-rendus)). Permet de simplifier la personnalisation du logo, tout en conservant les *templates* par défaut.
+1 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@
## Versions

### Stable (MASTER)
- **VERSION 2.13.1** "Ripley" ([Mise à jour](doc/versions/version-2.13-ripley.md))
- **VERSION 2.13.1** "Ripley" ([Mise à jour](doc/versions/version-2.13.2-ripley-php8.md))
  
### Versions antérieures (Non-maintenues)
- VERSION 2.12.1 "Spartan" ([Note de version](doc/versions/version-2.12.1.md))
+18 −8
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ namespace Oscar;
use Laminas\EventManager\Event;
use Laminas\ModuleManager\ModuleManager;
use Laminas\Mvc\MvcEvent;
use Oscar\Entity\Authentification;
use Oscar\Service\ContractDocumentService;
use UnicaenAuthentification\Event\UserAuthenticatedEvent;
use UnicaenSignature\Event\ProcessEvent;
@@ -99,15 +100,24 @@ class Module
            $this->onSignatureEvent($e);
        });

        $manager->getEventManager()->getSharedManager()->attach('*', 'authentification.ldap.fail', function ($e) {
            $this->onUserLoginFail($e);
        });
// EVENT TRACKER
//        $manager->getEventManager()->getSharedManager()->attach('*', '*', function ($e) {
//            echo $e->getName()."\n";
//            $w = fopen('/tmp/debug-oscar.txt', 'a+');
//            fwrite($w, $e->getName()."\n");
//        });
        $manager->getEventManager()->getSharedManager()->attach('*', 'postPersist', function ($e) {
            $this->onLoginSuccess($e);
        });
    }

    public function onLoginSuccess( $e ) {
        if( get_class($e) == UserAuthenticatedEvent::class ) {
            /** @var ContractDocumentService $cdm */
            $cdm = $this->sm->get(ContractDocumentService::class);
            /** @var Authentification $dbUser */
            $dbUser = $e->getDbUser();
            if( $dbUser ){
                $cdm->getLoggerService()->info("Authentification de " . $dbUser->getUsername());
                $dbUser->setDateLogin(new \DateTime());
                $cdm->getEntityManager()->flush($dbUser);
            }
        }
    }

    public function onLdapError(Event $event)
+2 −0
Original line number Diff line number Diff line
@@ -69,9 +69,11 @@ class OscarSpentAccountListCommand extends OscarCommandAbstract
                }
            }
            $io->table(['Masse(cd)','Masse', 'Masse Héritée', 'Compte', 'Intitulé'], $table);
            return self::SUCCESS;

        } catch (\Exception $e) {
            $io->error($e->getMessage());
            return self::FAILURE;
        }
    }
}
 No newline at end of file
+53 −13
Original line number Diff line number Diff line
@@ -12,6 +12,9 @@ namespace Oscar\Command;
use Oscar\Service\OscarConfigurationService;
use Oscar\Service\OscarUserContext;
use Oscar\Service\SpentService;
use Symfony\Component\Console\Helper\TableCell;
use Symfony\Component\Console\Helper\TableCellStyle;
use Symfony\Component\Console\Helper\TableSeparator;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@@ -48,30 +51,67 @@ class OscarSpentInfosCommand extends OscarCommandAbstract
        /** @var SpentService $spentService */
        $spentService = $this->getServicemanager()->get(SpentService::class);

        $datas = $spentService->getSynthesisDatasPFI($pfi);
        $datas = $spentService->getSynthesisDatasPFI([$pfi]);

        $masses = $oscarConfig->getMasses();

        $headers = ["Annexe", "Total"];
        $headers = ["Annexe", "Engagé", "Nbr", "Effectué", "Nbr"];
        $rows = [];

        $styleNumber = new TableCellStyle(['align' => 'right']);
        $money = function($value) use ($styleNumber){
          $amount = number_format($value, 2, ',', ' ');
          return new TableCell($amount, ['style' => $styleNumber]);
        };

        foreach ($masses as $masse=>$label) {
            $rows[] = ["$label ($masse)", $datas[$masse]];
            $rows[] = [
                "$label ($masse)",
                $money($datas['synthesis'][$masse]['total_engage']),
                $datas['synthesis'][$masse]['nbr_engage'],
                $money($datas['synthesis'][$masse]['total_effectue']),
                $datas['synthesis'][$masse]['nbr_effectue'],
            ];
//            $io->text($label . " : <bold>" . $datas[$masse]. "</bold>");
        }
        $rows[] = [];

        $rows[] = ["Hors-masse", $datas['N.B']];
        $rows[] = ["Nbr d'enregistrements", $datas['entries']];
        $rows[] = ["TOTAL", $datas['total']];
        $rows[] = ["TOTAL",
            $money($datas['synthesis']['totaux']['engage']),
            "-",
            $money($datas['synthesis']['totaux']['effectue']),
            "-",
        ];


        $rows[] = new TableSeparator();
        $rows[] = ["Hors-masse",
            $money($datas['synthesis']['N.B']['total_engage']),
            $datas['synthesis']['N.B']['nbr_engage'],
            $money($datas['synthesis']['N.B']['total_effectue']),
            $datas['synthesis']['N.B']['nbr_effectue'],
        ];
        $rows[] = ["Ignorés",
            $money($datas['synthesis'][0]['total_engage']),
            $datas['synthesis'][0]['nbr_engage'],
            $money($datas['synthesis'][0]['total_effectue']),
            $datas['synthesis'][0]['nbr_effectue'],
        ];
        $rows[] = ["Recettes",
            $money($datas['synthesis'][1]['total_engage']),
            $datas['synthesis'][1]['nbr_engage'],
            $money($datas['synthesis'][1]['total_effectue']),
            $datas['synthesis'][1]['nbr_effectue'],
        ];

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

        if( count($datas['details']['N.B']) > 0 ){
            $io->title("Compte Générale dont la masse n'est pas renseignée : ");
            foreach( $datas['details']['N.B'] as $compte){
                $io->text( " - <bold>$compte</bold>");
            }
        }
        return self::SUCCESS;

//        if( count($datas['details']['N.B']) > 0 ){
//            $io->title("Compte Générale dont la masse n'est pas renseignée : ");
//            foreach( $datas['details']['N.B'] as $compte){
//                $io->text( " - <bold>$compte</bold>");
//            }
//        }
    }
}
 No newline at end of file
Loading