/** * @covers EventTicket::getAvailableForDateTime() */ public function testGetAvailableForDatetimeWithQuantity() { $ticket = new EventTicket(); $ticket->StartType = 'Date'; $ticket->StartDate = date('Y-m-d', time() - 3600 * 24); $ticket->EndType = 'Date'; $ticket->EndDate = date('Y-m-d', time() + 3600 * 24); $ticket->write(); $time = new RegistrableDateTime(); $time->write(); $ticket->Available = 50; $avail = $ticket->getAvailableForDateTime($time); $this->assertEquals(50, $avail['available']); // Create a registration that consumes some of the tickets. $rego = new EventRegistration(); $rego->Status = 'Valid'; $rego->TimeID = $time->ID; $rego->write(); $rego->Tickets()->add($ticket, array('Quantity' => 49)); $avail = $ticket->getAvailableForDateTime($time); $this->assertEquals(1, $avail['available']); // Then check we can exclude it. $avail = $ticket->getAvailableForDateTime($time, $rego->ID); $this->assertEquals(50, $avail['available']); // Then bump up the quantity so there are no more available. $rego->Tickets()->remove($ticket); $rego->Tickets()->add($ticket, array('Quantity' => 50)); $avail = $ticket->getAvailableForDateTime($time); $this->assertFalse($avail['available']); }
/** * Shows details for an individual event date time, as well as forms for * registering and un-registering. * * @param SS_HTTPRequest $request * @return array */ public function details($request) { $id = $request->param('ID'); if (!ctype_digit($id)) { $this->httpError(404); } $time = RegistrableDateTime::get()->byID($id); if (!$time || $time->EventID != $this->ID) { $this->httpError(404); } $request->shift(); $request->shiftAllParams(); return new EventTimeDetailsController($this, $time); }
/** * @covers EventInvitationField::doInvite() */ public function testDoInvite() { $event = new RegistrableEvent(); $event->write(); $datetime = new RegistrableDateTime(); $datetime->StartDate = date('Y-m-d'); $datetime->EventID = $event->ID; $datetime->write(); $field = new EventInvitationField($datetime, 'Invitations'); $form = new Form(new EventInvitationFieldTest_Controller(), 'Form', new FieldList($field), new FieldList()); $form->loadDataFrom($event); $invite = $field->InviteForm(); $invite->dataFieldByName('Emails')->setValue(array('new' => array('Name' => array('First Test', 'Second Test'), 'Email' => array('*****@*****.**', '*****@*****.**')))); $invite->dataFieldByName('TimeID')->setValue($datetime->ID); $field->doInvite(array(), $invite); $this->assertEmailSent('*****@*****.**'); $this->assertEmailSent('*****@*****.**'); $this->clearEmails(); $invite->dataFieldByName('Emails')->setValue(array('new' => array('Name' => array('First Test', 'Second Test', 'Third Test'), 'Email' => array('*****@*****.**', '*****@*****.**', '*****@*****.**')))); $field->doInvite(array(), $invite); $this->assertNull($this->findEmail('*****@*****.**')); $this->assertNull($this->findEmail('*****@*****.**')); $this->assertEmailSent('*****@*****.**'); }
/** * Calculates the timestamp for when this ticket stops going on sale for an * event date time. * * @param RegistrableDateTime $datetime * @return int */ public function getSaleEndForDateTime(RegistrableDateTime $datetime) { if ($this->EndType == 'Date') { return strtotime($this->EndDate); } $time = $datetime->getStartDateTime()->getTimestamp(); $time = sfTime::subtract($time, $this->EndDays, sfTime::DAY); $time = sfTime::subtract($time, $this->EndHours, sfTime::HOUR); $time = sfTime::subtract($time, $this->EndMins, sfTime::MINUTE); return $time; }