Commit 5e257932 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Fix : Enregistrement des rôles pour les types de jalon

Fix : Trie par facet (plus de groupe multiple)
Up : Retour du nombre d'utilisation pour le type de jalon
parent e279cb7b
Loading
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -128,6 +128,8 @@ class ActivityDateController extends AbstractOscarController
                    case 'POST':
                        $action = $this->params()->fromPost('action', 'update');



                        if ($action == 'create') {
                            $this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_MILESTONE_MANAGE, $activity);
                            $milestone = $this->getMilestoneService()->createFromArray([
@@ -164,7 +166,6 @@ class ActivityDateController extends AbstractOscarController

                        } // Mise à jour
                        else if ($action == 'update') {

                            $this->getOscarUserContextService()->check(Privileges::ACTIVITY_MILESTONE_MANAGE, $activity);
                            $typeId = $this->params()->fromPost('type');
                            $comment = $this->params()->fromPost('comment');
+19 −27
Original line number Diff line number Diff line
@@ -33,27 +33,10 @@ class DateTypeController extends AbstractOscarController implements UseOscarUser
    {
        $this->getOscarUserContextService()->check(Privileges::MAINTENANCE_MILESTONETYPE_MANAGE);

        $entities = $this->getEntityManager()->getRepository(DateType::class)->allArray();

        $entities = [];
        /** @var DateType $type */
        foreach ($this->getEntityManager()->getRepository(DateType::class)->findAll() as $type) {
            $roles = [];
            foreach ($type->getRoles() as $role) {
                $roles[] = $role->getRoleId();
            }
            $entities[] = [
                'id' => $type->getId(),
                'label' => $type->getLabel(),
                'description' => $type->getDescription(),
                'facet' => $type->getFacet(),
                'finishable' => $type->isFinishable(),
                'recursivity' => $type->getRecursivity(),
                'roles' => $roles,
                'used' => 0
            ];
        }
        return [
            'entities' => $entities//$this->getEntityManager()->getRepository(DateType::class)->allWithUsage()
            'entities' => $entities
        ];
    }

@@ -82,10 +65,12 @@ class DateTypeController extends AbstractOscarController implements UseOscarUser
            }
        }

        $view = new ViewModel([
        $view = new ViewModel(
            [
                'entity' => $entity,
                'form' => $form,
        ]);
            ]
        );

        $view->setTemplate('oscar/date-type/form.phtml');
        return $view;
@@ -104,9 +89,11 @@ class DateTypeController extends AbstractOscarController implements UseOscarUser
        $id = $this->params()->fromRoute('id');
        $dateType = $this->getEntityManager()->getRepository(DateType::class)->find($id);

        $jalons = $this->getEntityManager()->getRepository(ActivityDate::class)->findBy([
        $jalons = $this->getEntityManager()->getRepository(ActivityDate::class)->findBy(
            [
                'type' => $dateType
        ]);
            ]
        );

        if (count($jalons) > 0) {
            throw new OscarException("Impossible de supprimer un type de jalon utilisé dans les activités");
@@ -136,7 +123,11 @@ class DateTypeController extends AbstractOscarController implements UseOscarUser
        foreach ($rolesCheck as $role) {
            $arrayRoles [] = $role->getId();
        }
        $form = new DateTypeForm($this->getOscarUserContextService()->getOscarRoles(), $this->getEntityManager(), $arrayRoles);
        $form = new DateTypeForm(
            $this->getOscarUserContextService()->getOscarRoles(),
            $this->getEntityManager(),
            $arrayRoles
        );
        $request = $this->getRequest();
        $form->setAttribute('action', $this->url()->fromRoute('datetype/edit', ['id' => $entity->getId()]));
        $form->bind($entity);
@@ -152,13 +143,14 @@ class DateTypeController extends AbstractOscarController implements UseOscarUser
            }
        }

        $view = new ViewModel([
        $view = new ViewModel(
            [
                'entity' => $entity,
                'form' => $form,
        ]);
            ]
        );

        $view->setTemplate('oscar/date-type/form.phtml');
        return $view;
    }

}
+9 −0
Original line number Diff line number Diff line
@@ -223,6 +223,15 @@ class DateType implements ITrackable
        return $this;
    }

    /**
     * @return $this
     */
    public function resetRoles() :self
    {
        $this->roles = new ArrayCollection();
        return $this;
    }


    function __toString()
    {
+35 −18
Original line number Diff line number Diff line
@@ -8,27 +8,44 @@
namespace Oscar\Entity;

use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query;
use Doctrine\ORM\Query\ResultSetMapping;

class DateTypeRepository extends EntityRepository
{
    public function allWithUsage(){
        $dql = "SELECT d.id, d.label, d.description, d.facet, d.finishable, d.recursivity, count(m.id) as used 
          FROM Oscar\Entity\DateType d 
          LEFT JOIN d.roles r
          LEFT JOIN d.milestones m 
          GROUP BY d.id 
          ORDER BY d.facet, d.label";
        $query = $this->getEntityManager()->createQuery($dql);
        return $query->getArrayResult();
    }

    public function getAllCounted()
    public function allArray()
    {
        return $this->createQueryBuilder('d')
            ->select('d')
            ->from(DateType::class, 'd')
        ->getQuery()->getResult();
    }
        try {
            $rsm = new ResultSetMapping();
            $rsm->addScalarResult('id', 'id');
            $rsm->addScalarResult('label', 'label');
            $rsm->addScalarResult('description', 'description');
            $rsm->addScalarResult('recursivity', 'recursivity');
            $rsm->addScalarResult('finishable', 'finishable');
            $rsm->addScalarResult('facet', 'facet');
            $rsm->addScalarResult('roles', 'roles');
            $rsm->addScalarResult('used', 'used');
            $sql = 'select d.id, d.label, d.description, 
                        d.finishable , d.recursivity, d.facet, 
                        count(a.id) as used, array_agg(distinct ur.role_id) as roles from datetype d
                    left join activitydate a ON a.type_id = d.id
                    left join role_datetype rd on rd.datetype_id = d.id 
                    left join user_role ur on ur.id = rd.role_id 
                    group by d.id
                    order by facet;';
            $query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
            $results = $query->getResult();

            foreach ($results as &$row) {
                if ($row['roles'] == '{NULL}') {
                    $row['roles'] = [];
                } else {
                    $rolesStr = '[' . substr($row['roles'], 1, strlen($row['roles']) - 2) . ']';
                    $row['roles'] = json_decode($rolesStr, false);
                }
            }
            return $results;
        } catch (\Exception $e) {
            die($e->getMessage());
        }
    }
}
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ class DateTypeFormHydrator implements HydratorInterface, ServiceLocatorAwareInte
     */
    public function hydrate(array $data, $object): DateType
    {
        $object->resetRoles();
        foreach ($data['roles'] as $idRole){
            $entityRole = $this->em->getRepository(Role::class)->findOneBy(["id"=>$idRole]);
            $object->addRole($entityRole);
Loading