Exemple #1
0
 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));
 }
Exemple #4
0
 /**
  * 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);
 }
Exemple #5
0
 /**
  * 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());
 }
Exemple #6
0
 /**
  * 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()));
 }
Exemple #8
0
 /**
  * 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);
 }