Exemplo n.º 1
0
 /**
  * {@inheritDoc}
  */
 public function doLoad(ObjectManager $manager)
 {
     // Test for required leaveRequestss references first
     if (!$this->hasReference('admin') || !$this->hasReference('user') || !$this->hasReference('generalManager')) {
         throw new \RuntimeException('Mass leave request fixtures require user fixtures.');
     }
     $service = $this->container->get('opit.model.leave_request');
     $admin = $this->getReference('admin');
     // Create Datetimes.
     $startDate = new \DateTime(date('Y-12-24'));
     $endDate = new \DateTime(date('Y-01-01'));
     $endDate->modify('+1 year');
     // Notice: The service is based on LeaveDatesFixtures, ensure current year's public holidays are present.
     $days = $service->countLeaveDays($startDate, $endDate);
     // Create leave
     $leave = new Leave();
     $leave->setDescription('Christmas vacation');
     $leave->setStartDate($startDate);
     $leave->setEndDate($endDate);
     $leave->setNumberOfDays($days);
     $leave->setCategory($this->getReference('leave-category-full-day'));
     // Create leave request group.
     $leaveRequestGroup = new LeaveRequestGroup();
     $manager->persist($leaveRequestGroup);
     // Create First LeaveRequest.
     $leaveRequest1 = new LeaveRequest();
     $leaveRequest1->setEmployee($admin->getEmployee());
     $leaveRequest1->setCreatedUser($this->getReference('generalManager'));
     $leaveRequest1->setGeneralManager($this->getReference('generalManager'));
     $leaveRequest1->setIsMassLeaveRequest(false);
     $leaveRequest1->setLeaveRequestGroup($leaveRequestGroup);
     $leaveRequest1->addLeaf($leave);
     // Create mass leave request, persist first.
     $massLeaveRequest = clone $leaveRequest1;
     $massLeaveRequest->setEmployee($this->getReference('generalManager')->getEmployee());
     $massLeaveRequest->setCreatedUser($this->getReference('generalManager'));
     $massLeaveRequest->setIsMassLeaveRequest(true);
     $massLeaveRequest->setLeaveRequestGroup($leaveRequestGroup);
     $massLeaveRequest->addLeaf(clone $leave);
     $manager->persist($massLeaveRequest);
     // Add leave request states
     $leaveRequest1Status = new StatesLeaveRequests($this->getReference('approved'));
     $leaveRequest1Status->setCreated(new \DateTime());
     $leaveRequest1Status->setCreatedUser($this->getReference('generalManager'));
     $leaveRequest1->addState($leaveRequest1Status);
     $manager->persist($leaveRequest1);
     // Create Second leave request.
     $leaveRequest2 = clone $leaveRequest1;
     $leaveRequest2->setEmployee($this->getReference('user')->getEmployee());
     $leaveRequest2->setCreatedUser($this->getReference('generalManager'));
     $leaveRequest2->setIsMassLeaveRequest(false);
     $leaveRequest2->setLeaveRequestGroup($leaveRequestGroup);
     $leaveRequest2->addLeaf(clone $leave);
     $leaveRequest2->addState(clone $leaveRequest1Status);
     $manager->persist($leaveRequest2);
     $manager->flush();
 }
Exemplo n.º 2
0
 public function postPersist(LifecycleEventArgs $args)
 {
     $entity = $args->getEntity();
     $entityManager = $args->getEntityManager();
     if ($entity instanceof LeaveRequest) {
         $leaveRequestId = str_replace(array('{year}', '{id}'), array(date('y'), sprintf('%05d', $entity->getId())), LeaveRequest::getIDPattern());
         $entity->setLeaveRequestId($leaveRequestId);
         $entityManager->persist($entity);
         $entityManager->flush();
     }
 }
Exemplo n.º 3
0
 /**
  *
  * @param \Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest $resource
  * @param boolean $toGeneralManager
  * @param \Opit\OpitHrm\StatusBundle\Entity\Status $status
  */
 public function addNewLeaveNotification(LeaveRequest $resource, $toGeneralManager, Status $status)
 {
     // get last status name from resource
     $resourceStatus = strtolower($status->getName());
     $message = $resource->getLeaveRequestId();
     if (strpos('approved', $resourceStatus) !== false || strpos('rejected', $resourceStatus) !== false) {
         $message .= ' has been ' . $resourceStatus;
         $message = ucfirst($message);
     } else {
         $message .= ' changed to ' . $resourceStatus;
     }
     $message .= ' for ' . $resource->getEmployee()->getEmployeeName() . '.';
     $receiver = false === $toGeneralManager ? $this->entityManager->getRepository('OpitOpitHrmUserBundle:User')->findOneByEmployee($resource->getEmployee()) : $resource->getGeneralManager();
     $notification = new LRNotification();
     $notification->setLeaveRequest($resource);
     $notification->setMessage($message);
     $notification->setReceiver($receiver);
     $notification->setDateTime(new \DateTime('now'));
     $this->setNotificationStatus($notification);
     $this->entityManager->persist($notification);
     // Send notifications to additional recipients if status is set to approved
     if ($status->getId() === Status::APPROVED) {
         if ($teamManager = $resource->getTeamManager()) {
             $notificationsTM = clone $notification;
             $notificationsTM->setReceiver($teamManager);
             $this->entityManager->persist($notificationsTM);
         }
         $ccRecipients = $this->entityManager->getRepository('OpitOpitHrmUserBundle:Employee')->findNotificationRecipients($receiver);
         $notifications = array();
         foreach ($ccRecipients as $i => $employee) {
             $notifications[$i] = clone $notification;
             $notifications[$i]->setReceiver($employee->getUser());
             $this->entityManager->persist($notifications[$i]);
         }
     }
     $this->entityManager->flush();
 }
Exemplo n.º 4
0
 /**
  * Method to check if the status of a leave request can be changed
  *
  * @param \Symfony\Component\Security\Core\User\UserInterface $user
  * @param \Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest $leaveRequest
  * @param type $isAdmin
  * @param type $isGeneralManager
  * @param type $leaveRequestStatusId
  * @return type
  */
 protected function isLRStatusChangeable(UserInterface $user, $leaveRequest, $isAdmin, $isGeneralManager, $leaveRequestStatusId)
 {
     if (null === $leaveRequest->getId()) {
         return VoterInterface::ACCESS_DENIED;
     }
     if (in_array($leaveRequestStatusId, array(Status::APPROVED, Status::REJECTED))) {
         return VoterInterface::ACCESS_DENIED;
     }
     // If user is admin and status of lr is not approved allow status change
     if ($isAdmin) {
         return VoterInterface::ACCESS_GRANTED;
     } elseif ($isGeneralManager) {
         // Check if general manager is owner of leave request
         if ($user->getEmployee() === $leaveRequest->getEmployee()) {
             return VoterInterface::ACCESS_GRANTED;
         } else {
             // If user is gm only allow status change when lr status is for approval
             if (Status::FOR_APPROVAL === $leaveRequestStatusId) {
                 return VoterInterface::ACCESS_GRANTED;
             }
         }
     } elseif ($user->getEmployee() === $leaveRequest->getEmployee()) {
         // If user is assigned employee and status is created or revice allow status change
         if (in_array($leaveRequestStatusId, array(Status::CREATED, Status::REVISE))) {
             return VoterInterface::ACCESS_GRANTED;
         }
     }
     return VoterInterface::ACCESS_DENIED;
 }
Exemplo n.º 5
0
 /**
  * Removes related leave request leave instances.
  *
  * @param \Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest $leaveRequest
  * @param ArrayCollection $children
  */
 public function removeChildNodes(LeaveRequest $leaveRequest, $children)
 {
     foreach ($children as $child) {
         if (false === $leaveRequest->getLeaves()->contains($child)) {
             $child->setLeaveRequest();
             $this->entityManager->remove($child);
         }
     }
 }
Exemplo n.º 6
0
 /**
  * {@inheritDoc}
  */
 public function doLoad(ObjectManager $manager)
 {
     // Test for required user/status references first
     if (!$this->hasReference('admin') || !$this->hasReference('created')) {
         throw new \RuntimeException('Leave request fixtures require user/status bundle fixtures.');
     }
     $service = $this->container->get('opit.model.leave_request');
     // First leave request
     $admin = $this->getReference('admin');
     $leaveRequest1 = new LeaveRequest();
     $leaveRequest1->setEmployee($admin->getEmployee());
     $leaveRequest1->setGeneralManager($this->getReference('generalManager'));
     $leaveRequest1->setCreatedUser($admin);
     // Add Leaves
     $startDate = new \DateTime(date('Y-01-01'));
     $startDate->modify('next monday');
     $endDate = clone $startDate;
     $endDate->add(new \DateInterval('P4D'));
     // Notice: The service is based on LeaveDatesFixtures, ensure current year's public holidays are present.
     $days = $service->countLeaveDays($startDate, $endDate);
     $leave1 = new Leave();
     $leave1->setDescription('Winter vacation');
     $leave1->setStartDate($startDate);
     $leave1->setEndDate($endDate);
     $leave1->setNumberOfDays($days);
     $leave1->setCategory($this->getReference('leave-category-full-day'));
     $leaveRequest1->addLeaf($leave1);
     // Fake the state times
     $createdDateTime = new \DateTime();
     $createdDateTime->modify('last year dec last weekday');
     $createdDateTime->setTime('09', '45', '00');
     $forApprovalDateTime = clone $createdDateTime;
     $forApprovalDateTime->add(new \DateInterval('PT1H'));
     $approvedDateTime = clone $forApprovalDateTime;
     $approvedDateTime->modify('next weekday 16:13:00');
     // Add leave request states
     $leaveRequest1Status = new StatesLeaveRequests($this->getReference('created'));
     $leaveRequest1Status->setCreated($createdDateTime);
     $leaveRequest1Status->setCreatedUser($admin);
     $leaveRequest1->addState($leaveRequest1Status);
     $leaveRequest2Status = new StatesLeaveRequests($this->getReference('forApproval'));
     $leaveRequest2Status->setCreated($forApprovalDateTime);
     $leaveRequest2Status->setCreatedUser($admin);
     $leaveRequest1->addState($leaveRequest2Status);
     $leaveRequest3Status = new StatesLeaveRequests($this->getReference('approved'));
     $leaveRequest3Status->setCreated($approvedDateTime);
     $leaveRequest3Status->setCreatedUser($this->getReference('generalManager'));
     $leaveRequest1->addState($leaveRequest3Status);
     $manager->persist($leaveRequest1);
     // Second leave request
     $user = $this->getReference('user');
     $leaveRequest2 = new LeaveRequest();
     $leaveRequest2->setEmployee($user->getEmployee());
     $leaveRequest2->setGeneralManager($this->getReference('generalManager'));
     $leaveRequest2->setCreatedUser($user);
     // Add Leaves
     $startDate = new \DateTime();
     $startDate->modify('next month monday');
     $endDate = clone $startDate;
     $endDate->add(new \DateInterval('P4D'));
     $days = $service->countLeaveDays($startDate, $endDate);
     $leave2 = new Leave();
     $leave2->setDescription('Family event');
     $leave2->setStartDate($startDate);
     $leave2->setEndDate($endDate);
     $leave2->setNumberOfDays($days);
     $leave2->setCategory($this->getReference('leave-category-full-day'));
     $leaveRequest2->addLeaf($leave2);
     // Fake the state times
     $createdDateTime = new \DateTime();
     $forApprovalDateTime = clone $createdDateTime;
     $forApprovalDateTime->add(new \DateInterval('PT15M'));
     // Add leave request states
     $leaveRequest4Status = new StatesLeaveRequests($this->getReference('created'));
     $leaveRequest4Status->setCreated($createdDateTime);
     $leaveRequest4Status->setCreatedUser($user);
     $leaveRequest2->addState($leaveRequest4Status);
     $leaveRequest5Status = new StatesLeaveRequests($this->getReference('forApproval'));
     $leaveRequest5Status->setCreated($forApprovalDateTime);
     $leaveRequest5Status->setCreatedUser($user);
     $leaveRequest2->addState($leaveRequest5Status);
     $manager->persist($leaveRequest2);
     // Third leave request, same user
     $leaveRequest3 = new LeaveRequest();
     $leaveRequest3->setEmployee($user->getEmployee());
     $leaveRequest3->setGeneralManager($this->getReference('generalManager'));
     $leaveRequest3->setCreatedUser($user);
     $startDate = new \DateTime();
     $startDate->modify('last week monday');
     $endDate = clone $startDate;
     $endDate->add(new \DateInterval('P2D'));
     $days = $service->countLeaveDays($startDate, $endDate);
     $leave3 = new Leave();
     $leave3->setDescription('Cold');
     $leave3->setStartDate($startDate);
     $leave3->setEndDate($endDate);
     $leave3->setNumberOfDays($days);
     $leave3->setCategory($this->getReference('leave-category-sick-leave'));
     $leaveRequest3->addLeaf($leave3);
     // Fake the state times
     $createdDateTime = clone $endDate;
     $createdDateTime->modify('next weekday');
     // Add leave request states
     $leaveRequest6Status = new StatesLeaveRequests($this->getReference('created'));
     $leaveRequest6Status->setCreated($createdDateTime);
     $leaveRequest6Status->setCreatedUser($user);
     $leaveRequest3->addState($leaveRequest6Status);
     $manager->persist($leaveRequest3);
     $manager->flush();
 }
Exemplo n.º 7
0
 /**
  * Check if leave category can be selected using the left to availed days,
  * add error message to leave category if days left to avail were exceeded.
  *
  * @param \Opit\OpitHrm\UserBundle\Entity\Employee $employee
  * @param \Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest $leaveRequest
  * @param \Opit\OpitHrm\LeaveBundle\Model\LeaveRequestService $leaveRequestService
  * @param \Doctrine\ORM\EntityManagerInterface $entityManager
  * @param type $form
  */
 protected function validateLeaveDatesCategory(LeaveRequest $leaveRequest, LeaveRequestService $leaveRequestService, EntityManagerInterface $entityManager, $form)
 {
     $leaveCalculationService = $this->get('opit_opithrm_leave.leave_calculation_service');
     $employee = $leaveRequest->getEmployee();
     // Leave entitlements of an employee.
     $leaveEntitlement = $leaveCalculationService->leaveDaysCalculationByEmployee($employee);
     // Availed leave days of an employee.
     $employeeAvailedLeaveDays = $entityManager->getRepository('OpitOpitHrmLeaveBundle:LeaveRequest')->totalCountedLeaveDays($employee->getId());
     // Left to avail days of an employee.
     $leftToAvail = $leaveEntitlement - $employeeAvailedLeaveDays;
     $countLeaveDays = 0;
     $leaves = $leaveRequest->getLeaves();
     $message = 'Entitlement exceeded - kindly change category';
     // Loop through all leaves employee has posted.
     foreach ($leaves as $index => $leave) {
         if (LeaveCategory::UNPAID !== $leave->getCategory()->getName()) {
             $countLeaveDays += $leaveRequestService->countLeaveDays($leave->getStartDate(), $leave->getEndDate());
             // Check if count of leave days are more than days left to avail.
             if ($countLeaveDays > $leftToAvail) {
                 // If there are days left to avail
                 if ($leftToAvail > 0) {
                     // Add error to leave category
                     $form->get('leaves')->get($index)->get('category')->addError(new FormError($message . ' or dates.'));
                     $leftToAvail = 0;
                 }
                 // Add error to leave category
                 $form->get('leaves')->get($index)->get('category')->addError(new FormError($message . '.'));
             }
         }
     }
 }
Exemplo n.º 8
0
 /**
  * Add leaveRequests
  *
  * @param \Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest $leaveRequests
  * @return Employee
  */
 public function addLeaveRequest(\Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest $leaveRequests)
 {
     $this->leaveRequests[] = $leaveRequests;
     $leaveRequests->setEmployee($this);
     // synchronously updating inverse side
     return $this;
 }