/** * @Route("/{id}/approve", name="approveInvoice") */ public function approveAction($id) { $invoice = $this->getDoctrine()->getRepository('InvoicingBundle:Invoice')->find($id); // handle not found if (!$invoice) { throw $this->createNotFoundException('No invoice found for id ' . $id); } // get user data $user = $this->getUser(); // get approving date $date = new \DateTime(); // week calendar and monday / friday exclusions are hardcoded, but could be loaded from database, a config file, an iCal file... $am = array('09:00:00', '12:00:00'); $pm = array('13:30:00', '17:00:00'); $classicDay = array($am, $pm); $timeTable = array(array(), $classicDay, $classicDay, $classicDay, $classicDay, $classicDay, array()); $timeExclusions = array(array(), $am, array(), array(), array(), $pm, array()); // create a holliday callendar object, file path could be loaded dynamicly from database. $holidaysCalendar = new HolidaysCalendar('../data/Holidays.ics'); // get email sending DateTime $interval = new \DateInterval('PT4H'); // '04:00:00'; $scheduler = new EmailScheduler($timeTable, $timeExclusions, $holidaysCalendar); $sendEmailOn = $scheduler->getSendDate(clone $date, $interval); // update $invoice->setApprovedBy($user); $invoice->setApprovedOn($date); $invoice->setSendEmailOn($sendEmailOn); // persist $em = $this->getDoctrine()->getManager(); $em->persist($invoice); $em->flush(); // feedback message $this->get('session')->getFlashBag()->add('notice', 'Invoice approved ! An email will be sent to ' . $invoice->getDebtor()->getEmail() . ' on ' . $sendEmailOn->format('m/d/Y H:i') . '.'); return $this->redirectToRoute('invoiceDetails', array('id' => $id)); }
public function testHolidays() { $date = new \DateTime('2015-12-26 09:00:00'); $expected = new \DateTime('2016-01-01 09:00:00'); $interval = new \DateInterval('PT4H'); // '04:00:00'; // week calendar and monday / friday exclusions are hardcoded, but could be loaded from database, a config file, an iCal file... $am = array('09:00:00', '12:00:00'); $pm = array('13:30:00', '17:00:00'); $classicDay = array($am, $pm); $timeTable = array(array(), $classicDay, $classicDay, $classicDay, $classicDay, $classicDay, array()); $timeExclusions = array(array(), $am, array(), array(), array(), $pm, array()); // create a holliday callendar object $holidaysCalendar = new HolidaysCalendar('C:/websites/invoicing-app2/data/Holidays.ics'); $scheduler = new EmailScheduler($timeTable, $timeExclusions, $holidaysCalendar); $result = $scheduler->getSendDate($date, $interval); $this->assertEquals($result, $expected); }