Commit 84a4a3fd authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Merge branch 'macclane' into macclane-recall

parents 77b0d559 787cee32
Loading
Loading
Loading
Loading
Loading
+16 −8
Changes for module/Oscar/src/Oscar/Controller/EnrollController.php: 16 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -820,14 +820,22 @@ class EnrollController extends AbstractOscarController implements UsePersonServi
    public function activityOrganizationEditAction()
    {
        try {
            // Récupération des données
            $organizationActivity = $this->getPostedActivityOrganization();
            /** @var ActivityOrganization $activityOrganization */
            $organizationActivity = $this->getEntityManager()->getRepository(ActivityOrganization::class)->find(
                $this->params()->fromRoute('idenroll')
            );

            if( !$organizationActivity ){
                throw new OscarException("Affectation introuvable");
            }

            // Accès
            $this->getOscarUserContextService()->check(Privileges::ACTIVITY_ORGANIZATION_MANAGE, $organizationActivity->getActivity());
            if( !$this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_ORGANIZATION_MANAGE, $organizationActivity->getActivity()) ){
                throw new OscarException("Droits insufisants");
            }

            $this->getProjectGrantService()->organizationActivityEdit($organizationActivity, $this->getPostedOrganizationRole(), $this->getDateStartPosted(), $this->getDateEndPosted());
            return $this->redirect()->toRoute( 'contract/show', ['id'=>$datas['enroller']->getId()]);

            return $this->redirect()->toRoute( 'contract/show', ['id'=>$organizationActivity->getActivity()->getId()]);
        } catch (\Exception $e) {
            return $this->getResponseInternalError("Impossible de modifier l'affectation de cette organisation dans l'activité : " . $e->getMessage());
        }
@@ -875,13 +883,13 @@ class EnrollController extends AbstractOscarController implements UsePersonServi
     * @throws OscarException
     */
    public function getPostedOrganizationRole(){
        $role = $this->params()->fromRoute('role');
        $role = $this->params()->fromPost('role', null);
        try {
            if( !$role )
                throw new \Exception("Vous devez choisir un rôle.");
            return $this->getEntityManager()->getRepository(OrganizationRole::class)->find($role);
        } catch (\Exception $e) {
            throw new OscarException(sprintf(_("Impossible de charger le rôle '%s' : %s.", $role, $e->getMessage())));
            throw new OscarException(sprintf(_("Impossible de charger le rôle (%s).", $e->getMessage())));
        }
    }

@@ -910,7 +918,7 @@ class EnrollController extends AbstractOscarController implements UsePersonServi
        return $this->getPostedDateTime('dateStart');
    }

    public function detDateEndPosted(){
    public function getDateEndPosted(){
        return $this->getPostedDateTime('dateEnd');
    }

+80 −58
Changes for module/Oscar/src/Oscar/Service/ProjectGrantService.php: 80 added lines, 58 removed lines.
Original line number Diff line number Diff line
@@ -69,8 +69,7 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        UsePersonServiceTrait,
        UseOrganizationServiceTrait,
        UseActivityTypeServiceTrait,
        UseProjectServiceTrait
        ;
        UseProjectServiceTrait;

    /////////////////////////////////////////////////////////////////////////////////////////////////////////// SERVICES
    ///
@@ -111,6 +110,7 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
    {
        $this->notificationService = $notificationService;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    public function getActivityFull(Activity $activity)
@@ -130,14 +130,16 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
    }


    public function getTypeDocument( $typeDocumentId, $throw=false ){
    public function getTypeDocument($typeDocumentId, $throw = false)
    {
        $type = $this->getEntityManager()->getRepository(TypeDocument::class)->find($typeDocumentId);
        if ($type == null && $throw === true)
            throw new OscarException(sprintf(_("Le type de document %s n'existe pas"), $typeDocumentId));
        return $type;
    }

    public function getWorkPackagePersonPeriod( Person $person, $year, $month ){
    public function getWorkPackagePersonPeriod(Person $person, $year, $month)
    {

        // extraction de la période
        $from = sprintf("%s-%s-01", $year, $month);
@@ -168,7 +170,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $this->getEntityManager()->getRepository(Activity::class);
    }

    public function getActivityTypeById( $activityTypeId ){
    public function getActivityTypeById($activityTypeId)
    {
        return $this->getEntityManager()->getRepository(ActivityType::class)->find($activityTypeId);
    }

@@ -179,7 +182,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
     * @return Activity|null
     * @throws OscarException
     */
    public function getActivityById( $id, $throw=true ){
    public function getActivityById($id, $throw = true)
    {
        $activity = $this->getActivityRepository()->find($id);
        if (!$activity) {
            if (!$throw)
@@ -201,7 +205,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $query->getQuery()->getSingleScalarResult();
    }

    public function getActivitiesIdsPerson( Person $person ){
    public function getActivitiesIdsPerson(Person $person)
    {
        $query = $this->getEntityManager()->getRepository(Activity::class)->createQueryBuilder('a');
        $query->select('a.id')
            ->leftJoin('a.persons', 'apers')
@@ -210,13 +215,13 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
            ->leftJoin('aprj.members', 'pprs')
            ->leftJoin('pprs.person', 'pers2')
            ->where('pers1 = :person OR pers2 = :person')
            ->setParameter('person', $person)
        ;
            ->setParameter('person', $person);
        $activities = $query->getQuery()->getResult();
        return array_map('current', $activities);
    }

    public function getProjectsIdsSearch($text){
    public function getProjectsIdsSearch($text)
    {
        $query = $this->getEntityManager()->getRepository(Project::class)
            ->createQueryBuilder('p')
            ->select('p.id')
@@ -227,7 +232,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
    }


    public function getActivityIdsByJalon( $jalonTypeId ){
    public function getActivityIdsByJalon($jalonTypeId)
    {
        $q = $this->getActivityRepository()->createQueryBuilder('c')
            ->select('c.id')
            ->innerJoin('c.milestones', 'm')
@@ -244,7 +250,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
     * @param int $resultByPage
     * @return array
     */
    public function getActivitiesByIds( $ids, $page=1, $resultByPage=50 ) {
    public function getActivitiesByIds($ids, $page = 1, $resultByPage = 50)
    {

        $offsetSQL = ($page - 1) * $resultByPage;
        $limitSQL = $resultByPage;
@@ -263,19 +270,22 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $query->getQuery()->getResult();
    }

    public function exportJsonPerson( Person $person ){
    public function exportJsonPerson(Person $person)
    {
        $datas = $person->toJson();
        $datas['uid'] = $person->getId();
        return $datas;
    }

    public function exportJsonOrganization( Organization $organization ){
    public function exportJsonOrganization(Organization $organization)
    {
        $datas = $organization->toArray();
        $datas['uid'] = $organization->getId();
        return $datas;
    }

    public function exportJsonActivity( Activity $activity ){
    public function exportJsonActivity(Activity $activity)
    {
        $datas = $activity->toArray();
        $datas['uid'] = $activity->getOscarNum();

@@ -322,7 +332,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $datas;
    }

    public function getCustomNum() {
    public function getCustomNum()
    {
        static $customNum;
        if ($customNum === null) {
            // Récupération des différentes numérotations
@@ -350,7 +361,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana

    }

    public function exportJson( $object ){
    public function exportJson($object)
    {
        switch (get_class($object)) {
            case Activity::class:
                return $this->exportJsonActivity($object);
@@ -362,7 +374,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
     * @param OscarUserContext $oscaruserContext
     * @return array
     */
    public function getActivityJson( $id, $oscaruserContext){
    public function getActivityJson($id, $oscaruserContext)
    {
        /** @var Activity $activity */
        $activity = $this->getActivityRepository()->find($id);

@@ -454,7 +467,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $datas;
    }

    public function getMilestoneTypesArray(){
    public function getMilestoneTypesArray()
    {
        $milestones = [];
        /** @var DateType $milestoneType */
        foreach ($this->getEntityManager()->getRepository(DateType::class)->findAll() as $milestoneType) {
@@ -468,7 +482,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
    /// EXPORT
    ///
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    public function getExportComputedFields(){
    public function getExportComputedFields()
    {
        return $this->getOscarConfigurationService()->getExportComputedFields();
    }

@@ -477,7 +492,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
     *
     * @return array
     */
    public function getFieldsCSV(){
    public function getFieldsCSV()
    {

        $headers = [
            'core' => Activity::csvHeaders(),
@@ -539,13 +555,15 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $numbersKey;
    }

    public function getActivitiesPersonPeriod( $personId, $periodStr ){
    public function getActivitiesPersonPeriod($personId, $periodStr)
    {
        $period = DateTimeUtils::periodBounds($periodStr);
        $date = new \DateTime($period['end']);
        return $this->getActivityRepository()->getActivitiesPersonDate($personId, $date);
    }

    public function getDistinctNumberKeyUnreferenced(){
    public function getDistinctNumberKeyUnreferenced()
    {
        $exists = $this->getDistinctNumbersKey();
        $referenced = $this->getOscarConfigurationService()->getOptionalConfiguration('editable.numerotation', []);
        $unique = [];
@@ -560,7 +578,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
    /**
     * @return array
     */
    public function getActivitiesWithUnreferencedNumbers(){
    public function getActivitiesWithUnreferencedNumbers()
    {

        // Clefs connues
        $authorisedKeys = $this->getOscarConfigurationService()->getNumerotationKeys();
@@ -715,8 +734,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
    }


    
    public function digest(){
    public function digest()
    {
        foreach ($this->getActivityAlmostDone()->getQuery()->getResult() as $activity) {
            echo "$activity<br/>";
        }
@@ -769,7 +788,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
     * @param $idActivity
     * @return array
     */
    public function getMilestones( $idActivity ){
    public function getMilestones($idActivity)
    {
        return $this->getMilestoneService()->getMilestonesByActivityId($idActivity);
    }

@@ -788,21 +808,15 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        if (preg_match(EOTP::REGEX_EOTP, $what)) {
            $qb->andWhere($activityAlias . '.codeEOTP = :' . $fieldName)
                ->setParameter($fieldName, $what);
        }

        // Numéro SAIC
        } // Numéro SAIC
        elseif (preg_match("/^[0-9]{4}SAIC.*/mi", $what)) {
            $qb->andWhere($activityAlias . '.centaureNumConvention LIKE :' . $fieldName)
                ->setParameter($fieldName, $what . '%');
        }

        // La saisie est un numéro OSCAR©
        } // La saisie est un numéro OSCAR©
        elseif (preg_match("/^[0-9]{4}$oscarNumSeparator.*/mi", $what)) {
            $qb->andWhere($activityAlias . '.oscarNum LIKE :' . $fieldName)
                ->setParameter($fieldName, $what . '%');
        }

        // Saisie 'libre'
        } // Saisie 'libre'
        else {
            return false;
        }
@@ -925,7 +939,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $out;
    }

    public function getTVAsForJson(){
    public function getTVAsForJson()
    {
        try {
            $query = $this->getEntityManager()->getRepository(TVA::class)->createQueryBuilder('t')
                ->select('t.id, t.label, t.rate, t.active AS active, count(a) as used')
@@ -989,8 +1004,7 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $this->getEntityManager()->getRepository(DateType::class)
            ->createQueryBuilder('d')
            ->orderBy('d.facet', 'ASC')
            ->orderBy('d.label', 'ASC')
            ;
            ->orderBy('d.label', 'ASC');
    }

    /**
@@ -1047,8 +1061,7 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
                ->setNoteFinanciere($source->getNoteFinanciere())
                //->setDateStart($source->getDateStart())
                ->setDateEnd($source->getDateEnd())
                ->setCodeEOTP($source->getCodeEOTP())
            ;
                ->setCodeEOTP($source->getCodeEOTP());
            $newActivity->setFraisDeGestion($source->getFraisDeGestion());
            $newActivity->getAssietteSubventionnable($source->getAssietteSubventionnable());

@@ -1094,8 +1107,7 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
                    ->setDateStart($milestone->getDateStart())
                    ->setDateFinish($milestone->getDateFinish())
                    ->setType($milestone->getType())
                    ->setComment($milestone->getComment())
                ;
                    ->setComment($milestone->getComment());
                $this->getEntityManager()->flush($new);
            }
        }
@@ -1173,7 +1185,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        }
    }

    public function updateActivityPayment( $data ){
    public function updateActivityPayment($data)
    {
        /** @var ActivityPayment $payment */
        $payment = $this->getActivityPayment($data['id']);

@@ -1207,7 +1220,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $payment;
    }

    public function addNewActivityPayment( $datas, $notification = true ){
    public function addNewActivityPayment($datas, $notification = true)
    {

        $payment = new ActivityPayment();

@@ -1248,7 +1262,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $payment;
    }

    public function getListActivityPaymentByActivity( Activity $activity, $format = 'array' ){
    public function getListActivityPaymentByActivity(Activity $activity, $format = 'array')
    {
        $qb = $this->getEntityManager()->getRepository(ActivityPayment::class)->createQueryBuilder('p')
            ->addSelect('c')
            ->innerJoin('p.activity', 'a')
@@ -1270,7 +1285,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
        return $result;
    }

    public function getListActivityPayment( $search = '', $page = 1 ){
    public function getListActivityPayment($search = '', $page = 1)
    {
        $qb = $this->getEntityManager()->getRepository(ActivityPayment::class)->createQueryBuilder('p')
            ->addSelect('c, COALESCE(p.datePredicted, p.datePayment) as HIDDEN dateSort')
            ->innerJoin('p.activity', 'a')
@@ -1337,6 +1353,7 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana


    ////////////////////////////////////////////////////////////////////////////

    /**
     * @param string $startAt
     * @param null $endAt
@@ -1594,6 +1611,7 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
            ->getQuery()
            ->getResult();
    }

    /**
     * @return Discipline[]
     */
@@ -1693,7 +1711,8 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
     * @param $idRole
     * @return OrganizationRole
     */
    public function getRoleOrganizationById($idRole){
    public function getRoleOrganizationById($idRole)
    {
        try {
            $role = $this->getEntityManager()->getRepository(OrganizationRole::class)->find($idRole);
            return $role;
@@ -1706,20 +1725,25 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Affectation ORGANISATION <> ACTIVITÉ

    public function deleteActivityPerson( ActivityPerson $activityPerson ){
    public function deleteActivityPerson(ActivityPerson $activityPerson)
    {

    }

    public function organizationActivityEdit(ActivityOrganization $activityorganization, OrganizationRole $roleOrganization, $dateStart = null, $dateEnd = null, $buildIndex = true ){
    public function organizationActivityEdit(ActivityOrganization $activityorganization, OrganizationRole $roleOrganization, $dateStart = null, $dateEnd = null, $buildIndex = true)
    {
        try {

            $activityorganization->setRoleObj($roleOrganization);
            $this->getEntityManager()->flush($activityorganization);

            try {
                if ($buildIndex) {
                    $this->jobSearchUpdate($activityorganization->getActivity());
                    $this->getOrganizationService()->updateIndex($activityorganization->getOrganization());
                }
            } catch (\Exception $e) {
                $this->getLoggerService()->error($e->getMessage());
            }

        } catch (\Exception $e) {
            throw new OscarException(sprintf(_("Impossible de mettre à jour le rôle de l'organisation %s comme %s dans %s : %s", $activityorganization->getOrganization(), $roleOrganization, $activityorganization->getActivity(), $e->getMessage())));
@@ -1729,11 +1753,10 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Affectation ORGANISATION <> ACTIVITÉ

    public function organizationActivityAdd( Organization $organization, Activity $activity, OrganizationRole $roleOrganization, $dateStart = null, $dateEnd = null, $buildIndex = true ){
    public function organizationActivityAdd(Organization $organization, Activity $activity, OrganizationRole $roleOrganization, $dateStart = null, $dateEnd = null, $buildIndex = true)
    {
        try {

            // TODO Date de début/fin

            $organizationActivity = new ActivityOrganization();
            $this->getEntityManager()->persist($organizationActivity);
            $organizationActivity->setOrganization($organization)
@@ -1745,14 +1768,13 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
                $this->jobSearchUpdate($activity);
                $this->getOrganizationService()->updateIndex($organization);
            }


        } catch (\Exception $e) {
            throw new OscarException(sprintf(_("Impossible d'ajouter l'organisation %s comme %s dans %s : %s", $organization, $roleOrganization, $activity, $e->getMessage())));
        }
    }

    public function activityOrganizationRemove(ActivityOrganization $activityOrganization ){
    public function activityOrganizationRemove(ActivityOrganization $activityOrganization)
    {
        try {
            $activity = $activityOrganization->getActivity();
            $organization = $activityOrganization->getOrganization();
@@ -1769,6 +1791,7 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana


    ////////////////////////////////////////////////////////////////////////////

    /**
     * @return \Doctrine\ORM\QueryBuilder
     */
@@ -1790,7 +1813,6 @@ class ProjectGrantService implements UseOscarConfigurationService, UseEntityMana
            ->leftJoin('c.type', 't')
            ->leftJoin('c.documents', 'd')
            ->leftJoin('d.typeDocument', 'dt')

            ->leftJoin('p.organization', 'org');

        if ($includeObsolet === true)