Commit 7caeca97 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Merge branch 'master' into spartan-2023-06-19-pfi-label

parents 4c01a181 dc8822b9
Loading
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -16,16 +16,16 @@ S'adresse aux gestionnaires d'application souhaitant installer et configurer une

### Configuration de base
 - [Authentification](configuration/config-auth.md)
 - [Gestion des documents](config-documents.md) : Configuration de la gestion des documents.
 - [Configuration des documents](config-documents.md)
 - [Configuration du moteur de recherche](config-elasticsearch.md)
 - [Configuration du serveur de tâche](config-gearman.md)
 - [Configuration du PFI](config-pfi.md)
 - [Configuration de la distribution des courriels](config-mailer.md)
 - [Configuration des notifications](config-notifications.md)
 - [Configuration de la numérotation automatique OSCAR](config-numerotation.md)
 - [Gestion des documents](configuration/config-documents.md) : Configuration de la gestion des documents.
 - [Configuration des documents](configuration/config-documents.md)
 - [Configuration du moteur de recherche](configuration/config-elasticsearch.md)
 - [Configuration du serveur de tâche](configuration/config-gearman.md)
 - [Configuration du PFI](configuration/config-pfi.md)
 - [Configuration de la distribution des courriels](configuration/config-mailer.md)
 - [Configuration des notifications](configuration/config-notifications.md)
 - [Configuration de la numérotation automatique OSCAR](configuration/config-numerotation.md)
 - [Configuration des feuilles de temps](timesheet.md)
 - [Configuration des dépenses (SIFAC)](config-sifac.md)
 - [Configuration des dépenses (SIFAC)](configuration/config-sifac.md)

### Synchronisation au Système d'Information
 - [Connectors Oscar](connectors.md) : Connecter Oscar au système d'information
@@ -34,7 +34,7 @@ S'adresse aux gestionnaires d'application souhaitant installer et configurer une
### Utilitaires et utilisation avancée
 - [Administrer Oscar en ligne de commande](oscar-commands.md)
 - [Oscar API](config-api.md) Configurer Oscar pour permettre son accès via une API Rest
 - [Modifier la méthode de génération des PDF](../config-docpdf.md) Permet un gain de performance pour la génération des *certains* documents
 - [Modifier la méthode de génération des PDF](configuration/config-docpdf.md) Permet un gain de performance pour la génération des *certains* documents

## Fonctionnalités optionnelles

+15 −43
Original line number Diff line number Diff line
@@ -1030,6 +1030,13 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // Récupération des informations annexes
            foreach ($activity->getPersons() as $activityPerson){
                $this->getPersonService()->personActivityRemove($activityPerson);
            }

            foreach ($activity->getOrganizations() as $activityOrganization){
                $this->getActivityService()->activityOrganizationRemove($activityOrganization);
            }

            // On supprime les créneaux
            try {
@@ -1040,6 +1047,9 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                );
            }

            // Suppression des notifications
            $this->getNotificationService()->deleteNotificationActivityById($activity->getId());

            // Suppression des documents
            $documents = $activity->getDocuments();
            if (count($documents)) {
@@ -2545,39 +2555,6 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                ->leftJoin('a.persons', 'm2')
                ->where('m1.person in(:ids) OR m2.person in (:ids)');

            $queryOrganisationNoRole = $this->getEntityManager()->createQueryBuilder()
                ->select('a.id')
                ->from(Activity::class, 'a', 'a.id')
                ->leftJoin('a.project', 'p')
                ->leftJoin('p.partners', 'o1')
                ->leftJoin('a.organizations', 'o2')
                ->leftJoin('p.members', 'm1')
                ->leftJoin('a.persons', 'm2')
                ->where('(o1.organization = :id OR o2.organization = :id)');

            $queryOrganisationRole = $this->getEntityManager()->createQueryBuilder()
                ->select('a.id')
                ->from(Activity::class, 'a', 'a.id')
                ->leftJoin('a.project', 'p')
                ->leftJoin('p.partners', 'o1')
                ->leftJoin('a.organizations', 'o2')
                ->leftJoin('p.members', 'm1')
                ->leftJoin('a.persons', 'm2')
                ->where(
                    '((o1.organization = :id AND o1.roleObj = :roleObj) OR (o2.organization = :id AND o2.roleObj = :roleObj))'
                );

            $queryOrganisationRoleNorOrg = $this->getEntityManager()->createQueryBuilder()
                ->select('a.id')
                ->from(Activity::class, 'a', 'a.id')
                ->leftJoin('a.project', 'p')
                ->leftJoin('p.partners', 'o1')
                ->leftJoin('a.organizations', 'o2')
                ->leftJoin('p.members', 'm1')
                ->leftJoin('a.persons', 'm2')
                ->where(
                    '(o1.roleObj = :roleObj OR o2.roleObj = :roleObj)'
                );

            $queryOrganisations = $this->getEntityManager()->createQueryBuilder()
                ->select('a.id')
@@ -2728,10 +2705,8 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                            )->getQuery()->getArrayResult()
                        );
                        break;
                    // Organisations (plusieurs)
                    case 'om' :


                    case 'om' :
                        $value1 = explode(',', $params[1]);
                        $crit['val1'] = $value1;
                        $organisationsRequire = $this->getOrganizationService()->getOrganizationsByIds($value1);
@@ -2741,14 +2716,10 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                            $filterOrganizations[$organisation->getId()] = (string)$organisation;
                        }

                        $ids = array_keys(
                            $queryOrganisations->setParameter(
                                'ids',
                                $value1
                            )->getQuery()->getArrayResult()
                        );
                        $ids = $this->getActivityService()->getActivityRepository()->getIdsWithOneOfOrganizationsRoled($value1);

                        break;

                    case 'ap' :
                    case 'sp' :
                        try {
@@ -2759,7 +2730,8 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                            $crit['val1Label'] = $person->getDisplayName();
                            $crit['val2Label'] = $value2 > 0 ? $this->getOscarUserContextService()->getAllRoleIdPerson(
                            )[$value2] : '';
                            $ids = $this->getActivityService()->getActivityRepository()->getIdsForPersonWithRole($person->getId(), $value2 ? $value2 : 0);
                            $ids = $this->getActivityService()->getActivityRepository()
                                ->getIdsForPersonWithRole($person->getId(), $value2 ? $value2 : 0);
                        } catch (\Exception $e) {
                            $crit['error'] = "Impossible de filtrer sur la personne";
                        }
+2 −1
Original line number Diff line number Diff line
@@ -1361,7 +1361,8 @@ class TimesheetController extends AbstractOscarController

        if ($action == "export2") {
            $out = $this->params()->fromQuery('out', 'pdf');
            $datas = $timesheetService->getPersonTimesheetsDatas($person, $period);
            $restrictedActivity = $this->params()->fromQuery('activityid', 0);
            $datas = $timesheetService->getPersonTimesheetsDatas($person, $period, false, $restrictedActivity);
            $datas['format'] = $out;

            if ($out == 'pdf') {
+16 −6
Original line number Diff line number Diff line
@@ -106,9 +106,14 @@ class ActivityRepository extends EntityRepository
        return array_map('current', $queryBuilder->getQuery()->getArrayResult());
    }

    public function getIdsWithOrganizationAndRole(int $organizationId = 0, int $roleObjId = 0) :array
    /**
     * Retourne les IDs des activités impliquant une des organizations donnée avec le rôle spécifié
     * @param array $organizationsIds IDS des organisations
     * @param int $roleObjId ID rôle
     */
    public function getIdsWithOneOfOrganizationsRoled( array $organizationsIds, int $roleObjId = 0 ) :array
    {
        if( $organizationId <= 0 && $roleObjId <= 0 ){
        if( count($organizationsIds) == 0 && $roleObjId <= 0 ){
            throw new OscarException("Vous devez préciser une organisation et/ou un rôle");
        }

@@ -121,10 +126,10 @@ class ActivityRepository extends EntityRepository
            $params['roleId'] = $roleObjId;
        }

        if( $organizationId > 0 ) {
            $clauseA[] = 'orga1.id = :orgId';
            $clauseB[] = 'orga2.id = :orgId';
            $params['orgId'] = $organizationId;
        if( count($organizationsIds) > 0 ) {
            $clauseA[] = 'orga1.id IN(:orgIds)';
            $clauseB[] = 'orga2.id IN(:orgIds)';
            $params['orgIds'] = $organizationsIds;
        }

        $queryBuilder = $this->baseQueryWithOrganizationOf();
@@ -141,6 +146,11 @@ class ActivityRepository extends EntityRepository
        return array_map('current', $queryBuilder->getQuery()->getArrayResult());
    }

    public function getIdsWithOrganizationAndRole(int $organizationId = 0, int $roleObjId = 0) :array
    {
        return $this->getIdsWithOneOfOrganizationsRoled([$organizationId], $roleObjId);
    }

    /**
     * Retourne les IDS des activités qui impliquent un des types de documents donnés.
     *
+6 −2
Original line number Diff line number Diff line
@@ -50,8 +50,12 @@ class GearmanJobLauncherService implements UseOscarConfigurationService, UseLogg
     */
    protected function sendBackgroundTask(string $task, array $params, string $key): void
    {
        try {
            $this->getLoggerService()->debug(" > gearman : $task($key) " . json_encode($params));
            $this->getGearmanClient()->doBackground($task, json_encode($params), $key);
        } catch (\Exception $e){
            throw new \Exception(sprintf("Impossible de programmer une task gearman (%s)", $e->getMessage()));
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Loading