public function testGetErrorMessages() { $type = new TestType(); $form = $this->factory->create($type); // Add form error using template $form->addError(new \Symfony\Component\Form\FormError('Text field cannot be empty'))->get('title')->addError(new \Symfony\Component\Form\FormError('', 'Text field requires at least %count% characters', array('%count%' => 4))); $result = Utils::getErrorMessages($form); $this->assertCount(2, $result, 'Utils::getErrorMessages: Count does not match.'); $this->assertEquals('Text field cannot be empty', $result[0], 'Utils::getErrorMessages: Error message not equal.'); }
/** * To add/edit job position in OPIT-HRM * * @Route("/secured/job/show/{id}", name="OpitOpitHrmHiringBundle_job_position_show", defaults={"id" = "new"}, requirements={ "id" = "new|\d+"}) * @Secure(roles="ROLE_TEAM_MANAGER") * @Method({"GET", "POST"}) * @Template() * @throws AccessDeniedException */ public function showJobPositionAction(Request $request) { $entityManager = $this->getDoctrine()->getManager(); $jobPositionId = $request->attributes->get('id'); $isNewJobPosition = 'new' === $jobPositionId; $securityContext = $this->container->get('security.context'); $isTeamManager = $securityContext->isGranted('ROLE_TEAM_MANAGER'); $currentUser = $securityContext->getToken()->getUser(); $isEditable = true; $errors = array(); $externalApplicationFormUrl = ''; if (!$isTeamManager) { throw new AccessDeniedException('Access denied for job position.'); } if ($isNewJobPosition) { $jobPosition = new JobPosition(); } else { $entityManager->getFilters()->disable('softdeleteable'); $jobPosition = $entityManager->getRepository('OpitOpitHrmHiringBundle:JobPosition')->find($jobPositionId); if (null === $jobPosition) { throw $this->createNotFoundException('Missing job position.'); } $isEditable = $securityContext->isGranted('ROLE_ADMIN') || $currentUser->getId() === $jobPosition->getCreatedUser()->getId(); // Only show job position external url when job position is active if (true === $jobPosition->getIsActive()) { $externalApplicationFormUrl = $this->generateUrl('OpitOpitHrmHiringBundle_job_application', array('token' => $jobPosition->getExternalToken()), true); } } $form = $this->createForm(new JobPositionType($isNewJobPosition), $jobPosition, array('em' => $entityManager)); if ($request->isMethod("POST")) { if (!$isEditable) { throw new AccessDeniedException('Job position can not be modified.'); } $form->handleRequest($request); if ($form->isValid()) { $entityManager->persist($jobPosition); $entityManager->flush(); if ($isNewJobPosition) { $this->sendJpMessages($jobPosition); } return $this->redirect($this->generateUrl('OpitOpitHrmHiringBundle_job_position_list')); } else { $errors = Utils::getErrorMessages($form); } } return $this->render('OpitOpitHrmHiringBundle:JobPosition:showJobPosition.html.twig', array('form' => $form->createView(), 'isNewJobPosition' => $isNewJobPosition, 'isEditable' => $isEditable, 'errors' => $errors, 'externalApplicationFormUrl' => $externalApplicationFormUrl)); }
/** * To add/edit applicant in OPIT-HRM * * @Route("/secured/applicant/show/{id}", name="OpitOpitHrmHiringBundle_applicant_show", defaults={"id" = "new"}, requirements={ "id" = "new|\d+"}) * @Secure(roles="ROLE_TEAM_MANAGER") * @Method({"GET", "POST"}) * @Template() * @throws AccessDeniedException */ public function showApplicantAction(Request $request) { $entityManager = $this->getDoctrine()->getManager(); $applicantId = $request->attributes->get('id'); $jobPositionId = $request->query->get('jobPositionId'); $isNewApplicant = 'new' === $applicantId; $securityContext = $this->container->get('security.context'); $isTeamManager = $securityContext->isGranted('ROLE_TEAM_MANAGER'); $statusManager = $this->get('opit.manager.applicant_status_manager'); $entityManager->getFilters()->disable('softdeleteable'); $currentUser = $securityContext->getToken()->getUser(); $isEditable = true; $isStatusLocked = false; $errors = array(); $nextStates = array(); $applicantCV = ''; if (!$isTeamManager) { throw new AccessDeniedException('Access denied for applicant.'); } if ($isNewApplicant) { $applicant = new Applicant(); // If the job position id exists fetch the job position entity and adding to the applicant. // The calling was from the job position list page. if (null !== $jobPositionId) { $jobPosition = $entityManager->getRepository('OpitOpitHrmHiringBundle:JobPosition')->find($jobPositionId); $applicant->setJobPosition($jobPosition); } } else { $applicant = $entityManager->getRepository('OpitOpitHrmHiringBundle:Applicant')->find($applicantId); $applicantCV = $applicant->getCv(); $isEditable = ($securityContext->isGranted('ROLE_ADMIN') || $applicant->getCreatedUser() && $applicant->getCreatedUser()->getId() === $currentUser->getId()) && null === $applicant->getJobPosition()->getDeletedAt(); if (null === $applicant) { throw $this->createNotFoundException('Missing applicant.'); } } $currentStatus = $statusManager->getCurrentStatusMetaData($applicant); if (null === $currentStatus) { $currentStatus = $entityManager->getRepository('OpitOpitHrmStatusBundle:Status')->find(Status::CREATED); $isStatusLocked = true; } else { $currentStatus = $statusManager->getCurrentStatus($applicant); $nextStates = $statusManager->getNextStates($currentStatus); $isStatusFinalized = Status::HIRED === $currentStatus->getId() || Status::REJECTED === $currentStatus->getId(); $isEditable = $isStatusFinalized ? false : $isEditable; $isStatusLocked = $isStatusFinalized ? true : $isStatusLocked; } $form = $this->createForm(new ApplicantType($isNewApplicant), $applicant, array('em' => $entityManager)); if ($request->isMethod('POST')) { if (!$isEditable) { throw new AccessDeniedException('Applicant can not be modified.'); } $form->handleRequest($request); if ($form->isValid()) { // If new applicant is being added // check if applicant has already been added to jp with same email or phone number. // Check after for is valid to make sure data is present. if ($isNewApplicant && $entityManager->getRepository('OpitOpitHrmHiringBundle:Applicant')->findByEmailPhoneNumber($applicant) > 0) { $form->addError(new FormError('Email or phone number has been already registered for this job position.')); $errors = Utils::getErrorMessages($form); } else { $entityManager->persist($applicant); $entityManager->flush(); if ($isNewApplicant) { $statusManager->addStatus($applicant, Status::CREATED, null); } return $this->redirect($this->generateUrl(null !== $jobPositionId ? 'OpitOpitHrmHiringBundle_job_position_list' : 'OpitOpitHrmHiringBundle_applicant_list')); } } else { $errors = Utils::getErrorMessages($form); } } return $this->render('OpitOpitHrmHiringBundle:Applicant:showApplicant.html.twig', array('form' => $form->createView(), 'isNewApplicant' => $isNewApplicant, 'isEditable' => $isEditable, 'errors' => $errors, 'isStatusLocked' => $isStatusLocked, 'nextStates' => $nextStates, 'currentStatus' => $currentStatus, 'applicantId' => $applicantId, 'applicantCV' => $applicantCV, 'jobPositionId' => $jobPositionId)); }
/** * Change the password of an exist user. * * @Route("/secured/user/update/password/{id}", name="OpitOpitHrmUserBundle_user_update_password", requirements={"id" = "\d+"}) * @Secure(roles="ROLE_USER") * @Method({"POST"}) * @Template() */ public function updatePasswordAction() { $result = array('response' => 'error'); $request = $this->getRequest(); $statusCode = 200; $user = $this->getUserObject($request->attributes->get('id')); $form = $this->createForm(new ChangePasswordType(), $user); if ($request->isMethod("POST")) { $form->handleRequest($request); if ($form->isValid()) { $this->setUserPassword($user); $result['response'] = 'success'; } else { $statusCode = 500; $errors = Utils::getErrorMessages($form); $result['errorMessage'] = $errors; } } return new JsonResponse(array($result), $statusCode); }
/** * Renders a transportation type form * * @Route("/travel/admin/transportation_type/show/{id}", name="OpitOpitHrmTravelBundle_admin_transportationtype_show", requirements={ "id" = "new|\d+"}, defaults={"id" = "new"}) * @Method({"GET", "POST"}) * @Secure(roles="ROLE_SYSTEM_ADMIN") * @Template() */ public function showTransportationTypeAction(Request $request, $id) { $entityManager = $this->getDoctrine()->getManager(); $result = array('response' => 'success'); $statusCode = 200; if ('new' === $id) { $transportationType = new TransportationType(); } else { $transportationType = $entityManager->getRepository('OpitOpitHrmTravelBundle:TransportationType')->find($id); } $form = $this->createForm(new TransportationTypeForm(), $transportationType); // Handle post data and persist if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { $entityManager->persist($transportationType); $entityManager->flush(); } else { $statusCode = 500; $result['response'] = 'error'; $result['errorMessage'] = Utils::getErrorMessages($form); } return new JsonResponse(array($result), $statusCode); } return array('form' => $form->createView()); }
/** * Method to create job application from outside of application * * @Route("/job/application/{token}", name="OpitOpitHrmHiringBundle_job_application", requirements={ "token" }) * @Template() * @throws AccessDeniedException */ public function externalJobApplicationAction(Request $request) { $entityManager = $this->getDoctrine()->getManager(); $errors = array(); $token = $request->attributes->get('token'); $jobPosition = $entityManager->getRepository('OpitOpitHrmHiringBundle:JobPosition')->findOneByExternalToken($token); if (null === $jobPosition || false === $jobPosition->getIsActive()) { throw new AccessDeniedException('Job position (' . $jobPosition->getJobTitle() . ') is no longer active.'); } $applicant = new Applicant(); $applicant->setJobPosition($jobPosition); $applicant->setApplicationDate(new \DateTime()); $form = $this->createForm(new ExternalApplicantType(), $applicant, array('em' => $entityManager)); if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { // If new applicant is being added // check if applicant has already been added to jp with same email or phone number. // Check after form is valid to make sure all data is present. if ($entityManager->getRepository('OpitOpitHrmHiringBundle:Applicant')->findByEmailPhoneNumber($applicant) > 0) { $form->addError(new FormError('Email or phone number has been already registered for this job position.')); $errors = Utils::getErrorMessages($form); } else { $entityManager->persist($applicant); $entityManager->flush(); // Send email to applicant $this->get('opit.manager.external_application_email_manager')->sendExternalApplicantMail($jobPosition, $applicant); // Add created status to applicant and send email about it $status = $this->get('opit.manager.applicant_status_manager')->addStatus($applicant, Status::CREATED, null); // Send a notification about new applicant $this->get('opit.manager.applicant_notification_manager')->addNewApplicantNotification($applicant, $status); return $this->render('OpitOpitHrmHiringBundle:Default:externalApplicationSuccessful.html.twig', array('jobPosition' => $jobPosition)); } } else { $errors = Utils::getErrorMessages($form); } } return $this->render('OpitOpitHrmHiringBundle:Default:externalApplication.html.twig', array('jobPosition' => $jobPosition, 'errors' => $errors, 'form' => $form->createView())); }
/** * @Route("/secured/admin/teams/show/{id}", name="OpitOpitHrmUserBundle_admin_teams_show", requirements={ "id" = "new|\d+"}, defaults={"id" = "new"}) * @Secure(roles="ROLE_SYSTEM_ADMIN") * @Method({"POST", "GET"}) * @Template() */ public function teamShowAction(Request $request) { $entityManager = $this->getDoctrine()->getManager(); $teamId = $request->attributes->get('id'); $employees = new ArrayCollection(); if ('new' === $teamId) { $team = new Team(); } else { $team = $entityManager->getRepository('OpitOpitHrmUserBundle:Team')->find($teamId); } foreach ($team->getEmployees() as $employee) { $employees->add($employee); } $form = $this->createForm(new TeamType(), $team, array('em' => $entityManager)); if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { // Remove teams from employee foreach ($employees as $employee) { if (false === $team->getEmployees()->contains($employee)) { $employee->removeTeam($team); } } // Add teams to employees foreach ($team->getEmployees() as $employee) { if (false === $employee->getTeams()->contains($team)) { $employee->addTeam($team); } } $entityManager->persist($team); $entityManager->flush(); return $this->render('OpitOpitHrmUserBundle:Admin:_teamsList.html.twig', $this->getAllTeams()); } else { $statusCode = 500; $errors = Utils::getErrorMessages($form); $result['errorMessage'] = $errors; return new JsonResponse(array($result), $statusCode); } } return $this->render('OpitOpitHrmUserBundle:Admin:showTeam.html.twig', array('form' => $form->createView())); }
/** * To add/edit leave in OPIT-HRM * * @Route("/secured/leave/show/{id}/{fa}", name="OpitOpitHrmLeaveBundle_leave_show", * defaults={"id" = "new", "fa" = "new"}, requirements={ "id" = "new|\d+", "fa" = "new|fa" }) * @Secure(roles="ROLE_USER") * @throws CreateNotFoundException * @Template() */ public function showLeaveRequestAction(Request $request) { $entityManager = $this->getDoctrine()->getManager(); $leaveRequestId = $request->attributes->get('id'); $forApproval = 'fa' === $request->attributes->get('fa') ? true : false; $isNewLeaveRequest = 'new' === $leaveRequestId ? true : false; $securityContext = $this->get('security.context'); $user = $securityContext->getToken()->getUser(); $employee = $user->getEmployee(); $isGeneralManager = $securityContext->isGranted('ROLE_GENERAL_MANAGER'); $requestFor = $request->request->get('leave-request-owner'); $employees = $request->request->get('employee', array()); $leavesLength = 0; $children = new ArrayCollection(); if ($isNewLeaveRequest) { $leaveRequest = new LeaveRequest(); $leaveRequest->setEmployee($employee); } else { $leaveRequest = $entityManager->getRepository('OpitOpitHrmLeaveBundle:LeaveRequest')->find($leaveRequestId); if (null === $leaveRequest) { throw $this->createNotFoundException('Missing leave request.'); } $requestFor = false === $leaveRequest->getIsMassLeaveRequest() ? 'own' : 'other-employees'; foreach ($leaveRequest->getLeaves() as $leave) { $leavesLength += $leave->getNumberOfDays(); $children->add($leave); } } if (!$securityContext->isGranted('view', $leaveRequest)) { throw new AccessDeniedException('Access denied for leave request ' . $leaveRequest->getLeaveRequestId()); } $leaveRequest->setIsCreatedByGM($isGeneralManager); $statusManager = $this->get('opit.manager.leave_status_manager'); $currentStatus = $statusManager->getCurrentStatus($leaveRequest); $leaveRequestStates = $statusManager->getNextStates($currentStatus); $form = $this->createForm(new LeaveRequestType($isNewLeaveRequest), $leaveRequest, array('em' => $entityManager)); if ($request->isMethod("POST")) { if (!$securityContext->isGranted('edit', $leaveRequest)) { throw new AccessDeniedException('Access denied for leave request ' . $leaveRequest->getLeaveRequestId()); } $form->handleRequest($request); $isMLR = count($employees) > 1 ? true : false; if (!$isNewLeaveRequest) { // Check if single leave request's request for property was changed if ($isMLR && !$leaveRequest->getIsMassLeaveRequest()) { $form->addError(new FormError('Request for can not be modified.')); } } if ($form->isValid()) { if (null === $requestFor || 'own' === $requestFor) { $employees = array($employee->getId()); // Single leave request for own employee $error = $this->createLeaveRequests($leaveRequest, $employees, false, true, $leavesLength, $children); } elseif (1 === count($employees)) { // Single leave request for other employee $error = $this->createLeaveRequests($leaveRequest, $employees, false, false, $leavesLength, $children); } elseif ($isMLR) { // MLR is being created $error = $this->createLeaveRequests($leaveRequest, $employees, true, false); } else { // No employee was passed while creating MLR $form->addError(new FormError('No employees are selected for mass leave request.')); } if (null !== $error) { $form->addError(new FormError($error)); } else { if ($forApproval && (null === $requestFor || 'own' === $requestFor)) { $leaveRequestService = $this->get('opit.model.leave_request'); $status = $entityManager->getRepository('OpitOpitHrmStatusBundle:Status')->find(Status::FOR_APPROVAL); $employee = $entityManager->getRepository('OpitOpitHrmUserBundle:Employee')->find($employees[0]); $this->setLRStatusSendNotificationEmail($leaveRequest, $employee, $status, $leaveRequestService); } return $this->redirect($this->generateUrl('OpitOpitHrmLeaveBundle_leave_list')); } } } $isForApproval = $currentStatus->getId() === Status::FOR_APPROVAL; return $this->render('OpitOpitHrmLeaveBundle:Leave:showLeaveRequest.html.twig', array('form' => $form->createView(), 'isNewLeaveRequest' => $isNewLeaveRequest, 'leaveRequestStates' => $leaveRequestStates, 'leaveRequest' => $leaveRequest, 'errors' => Utils::getErrorMessages($form), 'isGeneralManager' => $isGeneralManager, 'isForApproval' => $isForApproval, 'requestFor' => $requestFor, 'selectedEmployees' => $employees, 'employees' => $entityManager->getRepository('OpitOpitHrmUserBundle:Employee')->findBy(array(), array('employeeName' => 'ASC')))); }
/** * To generate add/edit Administrative Leave/Working Day form * * @Route("/secured/admin/add/leave/date/{id}", name="OpitOpitHrmLeaveBundle_admin_add_leave_date", requirements={ "id" = "\d+"}) * @Secure(roles="ROLE_SYSTEM_ADMIN") * @Method({"POST"}) * @Template() */ public function addLeaveDateAction() { $em = $this->getDoctrine()->getManager(); $request = $this->getRequest(); $id = $request->attributes->get('id'); $result = array('response' => 'error'); $statusCode = 200; if ($id) { $leaveDate = $this->getLeaveDate($id); } else { $leaveDate = new LeaveDate(); } $form = $this->createForm(new LeaveDateType(), $leaveDate); if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { $em->persist($leaveDate); $em->flush(); $result['response'] = 'success'; } else { $statusCode = 500; $errors = Utils::getErrorMessages($form); $result['errorMessage'] = $errors; } } return new JsonResponse(array($result), $statusCode); }