/** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('users', EntityType::class, array('class' => 'GP\\CoreBundle\\Entity\\User', 'choices_as_values' => true, 'query_builder' => function (EntityRepository $er) { return $er->createQueryBuilder('u')->leftJoin('u.companies', 'companies')->andWhere('u.enabled = 1')->orderBy('u.lastLogin', 'DESC'); }, 'choice_label' => function (User $user) { return $user->getFirstName() . ' ' . $user->getLastName(); }, 'empty_value' => 'Choissez un utilisateur'))->add('companyRoles', EntityType::class, array('class' => 'GP\\CoreBundle\\Entity\\AccessRole', 'choices_as_values' => true, 'query_builder' => function (EntityRepository $er) { return $er->createQueryBuilder('ar')->where('ar.type = :company_type')->join('ar.company', 'c')->andWhere('c = :company')->setParameter('company_type', AccessRole::TYPE_COMPANY)->setParameter('company', $this->company->getId()); }, 'choice_label' => function (AccessRole $accessRole) { return $accessRole->getName(); }, 'empty_value' => 'Choissez un role à affecter')); }
/** * Test that admin can delete a given company * * @depends testUpdateCompany * * @param Company $company */ public function testSuccessDeleteCompany(Company $company) { $client = $this->connectUser(self::USER_ADMIN, self::USER_PASSWORD); $originalCompanyNb = $this->getTotalCompany(); $url = $this->generateRoute('admin_delete_company', array('id' => $company->getId())); $client->request('DELETE', $url); $this->assertRedirectTo($client, 'admin_show_all_company', array(), 'admin should be redirect to company dashboard when successfully delete a company'); $crawler = $client->followRedirect(); $this->assertStatusCode(200, $client); $newCompanyNb = $this->getTotalCompany(); $this->assertEquals($originalCompanyNb - 1, $newCompanyNb, 'It should delete the given Company in db when admin delete company'); $this->assertFlashMessageContains($crawler, "L'entreprise " . $company->getName() . " a été correctement supprimée"); }
/** * Test errors on create new project form * * @depends testCreateProjectAction * @dataProvider createProjectProvider * * @param $formSelect * @param $formInputData * @param $errors */ public function testFailCreateProjectAction($formSelect, $formInputData, $errors) { $client = $this->connectUser(self::USER_ADMIN, self::USER_PASSWORD); $url = $this->generateRoute('admin_create_project'); $crawler = $client->request('GET', $url); $this->assertStatusCode(200, $client); $company = $this->getCompanyByName($formSelect['companyName']); $projectCategory = $this->getProjectCategoryByName($formSelect['projectCategoryName']); if (!$company) { $company = new Company(); } if (!$projectCategory) { $projectCategory = new ProjectCategory(); } $form = $crawler->selectButton('_submit')->form(); $form["create_project[companies]"]->select($company->getId()); $form["create_project[projectCategory]"]->select($projectCategory->getId()); $crawler = $client->submit($form, $formInputData); $this->assertStatusCode(200, $client); foreach ($errors as $error) { $this->assertHtmlContains($crawler, $error); } }
/** * Check if user is really a member of the company * before removing him from it * * @param User $user * @param Company $company * @return bool */ private function checkUserExistInCompany(User $user, Company $company) { $userCompanies = $user->getCompany(); $check = false; foreach ($userCompanies as $userCompany) { if ($userCompany->getId() == $company->getId()) { return $check = true; } } return $check; }
public function findUserRoleInCompany(Company $company, User $user) { $result = $this->createQueryBuilder('ar')->where('ar.type = :company_type')->join('ar.company', 'c')->andWhere('c = :company')->join('ar.users', 'u')->andWhere('u = :users')->setParameter('company_type', AccessRole::TYPE_COMPANY)->setParameter('company', $company->getId())->setParameter('users', $user->getId())->getQuery()->getResult(); return $result; }
/** * Return number of project in progress for the given company * * status 20 = accepted * status 30 = started * status 40 = in progress * * @param Company $company * @return integer */ public function countProjectsInProgress(Company $company) { $result = $this->createQueryBuilder('project')->select('COUNT(project)')->join('project.companies', 'companies')->where('companies = :company')->andWhere('project.status = ' . Project::STATUS_PROJECT_ACCEPTED . ' OR project.status = ' . Project::STATUS_PROJECT_STARTED . ' OR project.status = ' . Project::STATUS_PROJECT_IN_PROGRESS)->setParameter('company', $company->getId())->getQuery()->getSingleScalarResult(); return $result; }