/** * {@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(); }
/** * Create a new instance of a leave request * * @param \Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest $leaveRequest * @param $leaveRequestGroup * @param \Opit\OpitHrm\UserBundle\Entity\Employee $employee * @return \Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest */ public function createLRInstance(LeaveRequest $leaveRequest, $leaveRequestGroup, Employee $employee, $isMassLeaveRequest = false) { $lr = new LeaveRequest(); $lr->setEmployee($employee); $lr->setGeneralManager($leaveRequest->getGeneralManager()); $lr->setTeamManager($leaveRequest->getTeamManager()); $lr->setLeaveRequestGroup($leaveRequestGroup); $lr->setIsMassLeaveRequest($isMassLeaveRequest); return $lr; }
/** * Method to create single leave request (own or single employee selected) * * @param \Opit\OpitHrm\LeaveBundle\Entity\LeaveRequest $leaveRequest * @param \Doctrine\ORM\EntityManagerInterface $entityManager * @param type $data * @param type $leftToAvail * @return string|null */ protected function createSingleLR(LeaveRequest $leaveRequest, EntityManagerInterface $entityManager, $data, $leftToAvail, $employee, $isOwn, $children) { $leaveRequestService = $this->get('opit.model.leave_request'); $securityContext = $this->container->get('security.context'); $leaveRequest->setEmployee($employee); $totalLeaveDaysCount = 0; $pastLeaveCount = 0; foreach ($leaveRequest->getLeaves() as $leave) { $countLeaveDays = $leaveRequestService->countLeaveDays($leave->getStartDate(), $leave->getEndDate()); // Validate leave category if (null === $leave->getCategory()) { return 'Category can not be empty.'; } // Check if leave is not to be substracted from entitlement $excludedCategoryIds = Utils::arrayValueRecursive('id', $entityManager->getRepository('OpitOpitHrmLeaveBundle:LeaveCategory')->findNotCountedAsLeaveIds()); if (!in_array($leave->getCategory()->getId(), $excludedCategoryIds)) { $totalLeaveDaysCount += $countLeaveDays; } if ($totalLeaveDaysCount > $leftToAvail) { return 'Employee has no more days left to avail.'; } else { if ($leave->getStartDate() < new \DateTime()) { $pastLeaveCount++; } $leave->setNumberOfDays($countLeaveDays); $entityManager->persist($leave); $leaveRequestService->removeChildNodes($leaveRequest, $children); } } $entityManager->persist($leaveRequest); $status = $data['approvedStatus']; // Check if user is setting LR for himself if ($securityContext->getToken()->getUser()->getEmployee()->getId() === $employee->getId() && $isOwn) { // If LR has leaves only in the past set status to approved else set // status to created $status = $pastLeaveCount === count($leaveRequest->getLeaves()) ? $data['approvedStatus'] : $data['createdStatus']; } $this->setLRStatusSendNotificationEmail($leaveRequest, $leaveRequest->getEmployee(), $status, $leaveRequestService); return null; }
/** * {@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(); }
/** * 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; }