Skip to content

Commit b30d1d3

Browse files
committed
[smarcet] - #10198/#10196 * added emails templates for membership invitation/ attendee creation * fixed model to support multiple tickets types per order and multiple orders
per user Conflicts: migrations/code/tasks/DBMigrateTask.php
1 parent bdfab84 commit b30d1d3

28 files changed

Lines changed: 336 additions & 87 deletions

dupe_members/code/infrastructure/repositories/SapphireDupesMemberRepository.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,16 @@ public function __construct(){
3131
*/
3232
public function findByEmail($email)
3333
{
34-
return Member::get()->filter('Email', $email )->first();
34+
$member = Member::get()->filter('Email', $email )->first();
35+
if(is_null($member))
36+
{
37+
$member = Member::get()->filter('SecondEmail', $email )->first();
38+
}
39+
if(is_null($member))
40+
{
41+
$member = Member::get()->filter('ThirdEmail', $email )->first();
42+
}
43+
return $member;
3544
}
3645

3746
/**

migrations/code/tasks/DBMigrateTask.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ final class DBMigrateTask extends MigrationTask
2626
'MigrateExpertiseToDORelation',
2727
'ChangeTagsCollationMigration',
2828
'UpdateSurveyTemplateIndexMigration',
29+
'UpdateAttendeesTicketsMigration',
2930
);
3031

3132
function up()

openstack/code/utils/DDD/services/IMessageSenderService.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
*/
1818
interface IMessageSenderService {
1919
/**
20-
* @param IEntity $subject
20+
* @param mixed $subject
2121
* @throws InvalidArgumentException
2222
* @return void
2323
*/
24-
public function send(IEntity $subject);
24+
public function send($subject);
2525
}

summit/code/cron_tasks/EventbriteEventConsumerTask.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
final class EventbriteEventConsumerTask extends CronTask
1616
{
1717

18-
1918
/**
2019
* @return void
2120
*/
@@ -33,7 +32,12 @@ public function run()
3332
}
3433

3534
$manager = Injector::inst()->get('EventbriteEventManager');
36-
$processed = $manager->ingestEvents($batch_size);
35+
$processed = $manager->ingestEvents
36+
(
37+
$batch_size,
38+
new SummitAttendeeCreateMembershipAnnouncementEmailSender,
39+
new SummitAttendeeCreatedAnnouncementEmailSender
40+
);
3741

3842
$finish_time = time() - $init_time;
3943
echo 'processed records ' . $processed. ' - time elapsed : '.$finish_time. ' seconds.';

summit/code/infrastructure/active_records/events/SummitAttendee.php

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ final class SummitAttendee extends DataObject implements ISummitAttendee
1818
private static $db = array
1919
(
2020
// https://www.eventbrite.com/developer/v3/formats/order/#ebapi-std:format-order
21-
'ExternalOrderId' => 'Text',
21+
'ExternalOrderId' => 'Int',
2222
'ExternalId' => 'Text',
2323
'TicketBoughtDate' => 'SS_Datetime',
2424
'SharedContactInfo' => 'Boolean',
2525
'SummitHallCheckedIn' => 'Boolean',
2626
'SummitHallCheckedInDate' => 'SS_Datetime',
27-
'ExternalTicketClassID' => 'Text',
2827
);
2928

3029
private static $has_many = array
3130
(
31+
3232
);
3333

3434
private static $defaults = array
@@ -37,7 +37,8 @@ final class SummitAttendee extends DataObject implements ISummitAttendee
3737

3838
private static $many_many = array
3939
(
40-
'Schedule' => 'SummitEvent',
40+
'Schedule' => 'SummitEvent',
41+
'TicketTypes' => 'SummitTicketType'
4142
);
4243

4344
private static $belongs_to = array
@@ -57,7 +58,6 @@ final class SummitAttendee extends DataObject implements ISummitAttendee
5758
(
5859
'Member' => 'Member',
5960
'Summit' => 'Summit',
60-
'TicketType' => 'SummitTicketType'
6161
);
6262

6363
private static $summary_fields = array
@@ -69,7 +69,7 @@ final class SummitAttendee extends DataObject implements ISummitAttendee
6969

7070
static $indexes = array
7171
(
72-
'Summit_Member' => array('type'=>'unique', 'value'=>'SummitID,MemberID')
72+
'Summit_Member' => array('type'=>'unique', 'value'=>'SummitID,MemberID,ExternalOrderId')
7373
);
7474

7575
private static $searchable_fields = array
@@ -174,16 +174,6 @@ public function clearSchedule()
174174
AssociationFactory::getInstance()->getMany2ManyAssociation($this, 'Schedule')->removeAll();
175175
}
176176

177-
/**
178-
* @param $external_order_id
179-
* @param ISummitTicketOrderService $order_service
180-
* @return void
181-
*/
182-
public function placeOrder($external_order_id, ISummitTicketOrderService $order_service)
183-
{
184-
$order_info = $order_service->getOrderInfo($external_order_id);
185-
}
186-
187177
/**
188178
* @return void
189179
*/
@@ -270,4 +260,41 @@ public function canView($member = null) {
270260
public function canEdit($member = null) {
271261
return Permission::check("ADMIN") || Permission::check("ADMIN_SUMMIT_APP") || Permission::check("ADMIN_SUMMIT_APP_SCHEDULE");
272262
}
263+
264+
265+
/**
266+
* @param ISummitTicketType $ticket
267+
* @return bool
268+
*/
269+
public function hasTicketType(ISummitTicketType $ticket)
270+
{
271+
$query = new QueryObject($this);
272+
$tickets = AssociationFactory::getInstance()->getMany2ManyAssociation($this, 'TicketTypes', $query)->toArray();
273+
foreach($tickets as $t)
274+
{
275+
if(intval($t->ExternalId) === intval($ticket->ExternalId)) return true;
276+
}
277+
return false;
278+
}
279+
280+
/**
281+
* @return ISummitTicketType[]
282+
* @throws Exception
283+
*/
284+
public function getTickets()
285+
{
286+
$query = new QueryObject($this);
287+
return AssociationFactory::getInstance()->getMany2ManyAssociation($this, 'TicketTypes', $query)->toArray();
288+
}
289+
290+
/**
291+
* @param ISummitTicketType $ticket
292+
* @return $this
293+
*/
294+
public function addTicketType(ISummitTicketType $ticket)
295+
{
296+
$query = new QueryObject($this);
297+
AssociationFactory::getInstance()->getMany2ManyAssociation($this, 'TicketTypes', $query)->add($ticket);
298+
return $this;
299+
}
273300
}

summit/code/infrastructure/factories/SummitAttendeeFactory.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,17 @@ final class SummitAttendeeFactory implements ISummitAttendeeFactory
2020
* @param ISummit $summit
2121
* @param string $external_attendee_id
2222
* @param string $order_external_id
23-
* @param ISummitTicketType $ticket_type
2423
* @param string $bought_date
2524
* @param bool $shared_contact_info
2625
* @return ISummitAttendee
2726
*/
28-
public function build(Member $member, ISummit $summit, $external_attendee_id , $order_external_id, ISummitTicketType $ticket_type , $bought_date, $shared_contact_info = false)
27+
public function build(Member $member, ISummit $summit, $external_attendee_id , $order_external_id, $bought_date, $shared_contact_info = false)
2928
{
30-
$attendee = new SummitAttendee;
31-
$attendee->MemberID = $member->ID;
32-
$attendee->SummitID = $summit->ID;
33-
$attendee->ExternalId = $external_attendee_id;
34-
$attendee->ExternalOrderId = $order_external_id;
35-
$attendee->TicketTypeID = $ticket_type->getIdentifier();
36-
$attendee->ExternalTicketClassID = $ticket_type->getExternalId();
29+
$attendee = new SummitAttendee;
30+
$attendee->MemberID = $member->ID;
31+
$attendee->SummitID = $summit->ID;
32+
$attendee->ExternalId = $external_attendee_id;
33+
$attendee->ExternalOrderId = $order_external_id;
3734
$attendee->SharedContactInfo = $shared_contact_info;
3835
$attendee->TicketBoughtDate = $bought_date;
3936
return $attendee;

summit/code/infrastructure/repositories/SapphireSummitAttendeeRepository.php

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,57 @@
1515
final class SapphireSummitAttendeeRepository extends SapphireRepository implements ISummitAttendeeRepository
1616
{
1717

18+
private $cache = array();
19+
1820
public function __construct()
1921
{
2022
parent::__construct(new SummitAttendee);
2123
}
24+
2225
/**
2326
* @param int $member_id
2427
* @param int $summit_id
28+
* @param int $order_id
29+
* @return ISummitAttendee
30+
*/
31+
public function getByMemberAndSummitAndOrder($member_id, $summit_id, $order_id)
32+
{
33+
$cache_key = sprintf('%s_%s_%s', $member_id, $summit_id, $order_id );
34+
$attendee = SummitAttendee::get()->filter(array
35+
(
36+
'MemberID' => $member_id,
37+
'SummitID' => $summit_id,
38+
'ExternalOrderId' => $order_id
39+
))->first();
40+
41+
if(is_null($attendee) && isset($this->cache[$cache_key]))
42+
{
43+
$attendee = $this->cache[$cache_key];
44+
}
45+
return $attendee;
46+
}
47+
48+
/**
49+
* @param $order_id
50+
* @param $attendee_id
2551
* @return ISummitAttendee
2652
*/
27-
public function getByMemberAndSummit($member_id, $summit_id)
53+
public function getByOrderAndExternalAttendeeId($order_id, $attendee_id)
2854
{
2955
return SummitAttendee::get()->filter(array
3056
(
31-
'MemberID' => $member_id,
32-
'SummitID' => $summit_id,
57+
'ExternalId' => $attendee_id,
58+
'ExternalOrderId' => $order_id
3359
))->first();
3460
}
61+
62+
/**
63+
* @param IEntity $entity
64+
* @return int|void
65+
*/
66+
public function add(IEntity $entity)
67+
{
68+
parent::add($entity);
69+
$this->cache[sprintf('%s_%s_%s', $entity->MemberID, $entity->SummitID, $entity->ExternalOrderId )] = $entity;
70+
}
3571
}

summit/code/infrastructure/services/ApprovedPurchaseOrderEmailMessageSender.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
class ApprovedPurchaseOrderEmailMessageSender implements IMessageSenderService {
1616

1717
/**
18-
* @param IEntity $subject
18+
* @param mixed $subject
1919
* @throws InvalidArgumentException
2020
*/
21-
public function send(IEntity $subject)
21+
public function send($subject)
2222
{
2323
if(is_null($subject)) throw new InvalidArgumentException('$subject cant be null');
2424

summit/code/infrastructure/services/NewPurchaseOrderEmailMessageSender.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ class NewPurchaseOrderEmailMessageSender
1919
implements IMessageSenderService {
2020

2121
/**
22-
* @param IEntity $subject
22+
* @param mixed $subject
2323
* @throws InvalidArgumentException
2424
*/
25-
public function send(IEntity $subject)
25+
public function send($subject)
2626
{
27-
if(is_null($subject)) throw new InvalidArgumentException('$subject cant be null');
27+
if(is_null($subject)) throw new InvalidArgumentException('subject cant be null');
2828

2929
$email = EmailFactory::getInstance()->buildEmail(NEW_PURCHASE_ORDER_EMAIL_FROM,
3030
NEW_PURCHASE_ORDER_EMAIL_TO,

summit/code/infrastructure/services/PresentationSpeakerAcceptedAlternateAnnouncementEmailSender.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ final class PresentationSpeakerAcceptedAlternateAnnouncementEmailSender implemen
1616
{
1717

1818
/**
19-
* @param IEntity $subject
19+
* @param mixed $subject
2020
* @throws InvalidArgumentException
2121
* @return void
2222
*/
23-
public function send(IEntity $subject)
23+
public function send($subject)
2424
{
2525
if(!$subject instanceof IPresentationSpeaker) return;
2626

0 commit comments

Comments
 (0)