2 namespace PriceGuide\Service;
10 class Member extends \PriceGuide\DataBin\Member
15 * Create new entry. (Override DataBind service to we can handle duplicate invites)
17 * @param object|null $jobRecord
18 * @param \Workspace\Utility\ServiceInputParams $contract
21 public function exeCreate($meta, $jobRecord, \Workspace\Utility\ServiceInputParams $contract)
23 #-> Context data publication.
24 isset($contract->data->Context)
25 && \Utility\Registry::setOnce(
26 'Service.' . $this->meta['Base'] . '.Context',
27 $contract->data->Context
31 $base = $this->meta['Base'];
32 $data = $contract->data->$base;
33 $exist = $this->em->getRepository('\PriceGuide\Entity\Member')
35 'club' => $data['club'],
36 'company' => $data['company']
40 return $contract->success('Entry created.', array(
44 if (isset($meta['RelatedEntityFromInput']))
46 foreach ($meta['RelatedEntityFromInput'] as $context => $relation)
48 $workflow = $relation['Workflow'];
49 $service = $relation['Service'];
50 $service = new $service();
51 $service->setWorkflow(new $workflow());
52 $relId = $service->create($contract->data->$context)->id;
53 $data[$relation['Field']] = $relId;
56 if (isset($this->meta['JobField']))
58 $data[$this->meta['JobField']] = $jobRecord->id;
60 $record = $this->create($data);
61 $this->inviteMember($meta, $record);
64 return $contract->success('Entry created.', array(
70 * ExecuteAfter: Invite.
71 * Send invitation notification.
74 * @param object|null $record
77 public function inviteMember($meta, $record)
79 #-> Send invite notification.
81 ->getRepository('\User\Entity\Profile')
82 ->findOneBy(array('company' => $record->company->id));
83 if (!is_null($profile))
85 $record->profile = $profile;
86 $this->em->flush($record);
88 $company = $record->club->company;
90 'clubType' => 'Price Guide club',
91 'dealer' => $company->name,
92 'contact.name' => $company->contact->firstName,
93 'contact.familyName' => $company->contact->familyName,
94 'contact.email' => $company->contact->email,
95 'contact.cell' => $company->contact->mobile
97 $iterator = $profile->company->profiles->getIterator();
98 $authData = \Utility\Registry::getAuthData();
99 foreach ($iterator as $prof)
101 $params['firstName'] = $prof->firstName;
102 $params['familyName'] = $prof->familyName;
103 $email = $prof->email;
104 $oNotify = new \Utility\Comms\Notification();
105 $oNotify->sendFromTemplate(
106 $authData['company']['id'], $authData['id'],
107 $profile->company->id, $prof->id,
110 'club-invite-registered',
118 * ExecuteAfter: Accept.
119 * Member accepted invitation.
122 * @param object|null $jobRecord
123 * @param object|null $record
124 * @param \Workspace\Utility\ServiceInputParams $contract
127 public function acceptInvite($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract)
130 $record->status = 'Active';
131 $authData = \Utility\Registry::getAuthData();
132 if (is_null($record->company))
134 $record->company = $this->em
135 ->getReference('\Company\Entity\Company', $authData['company']['id']);
137 if (is_null($record->profile))
139 $record->profile = $this->em
140 ->getReference('\User\Entity\Profile', $authData['id']);
143 $email = $record->club->company->contact->email;
145 'firstName' => $record->club->company->contact->firstName,
146 'familyName' => $record->club->company->contact->familyName,
147 'clubName' => $record->club->name,
148 'clubType' => 'club',
149 'dealer' => $record->company->name,
150 'dealer.contactFirstName' => $record->company->contact->firstName,
151 'dealer.contactFamilyName' => $record->company->contact->familyName
154 $oNotify = new \Utility\Comms\Notification();
155 $oNotify->sendFromTemplate(
156 $authData['company']['id'], $authData['id'],
157 $record->club->company->id, null,
160 'club-invite-accepted',
167 * ExecuteAfter: Decline.
168 * Member declined invitation.
171 * @param object|null $jobRecord
172 * @param object|null $record
173 * @param \Workspace\Utility\ServiceInputParams $contract
176 public function declineInvite($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract)
179 $record->status = 'Declined';
180 $authData = \Utility\Registry::getAuthData();
181 if (is_null($record->company))
183 $record->company = $this->em
184 ->getReference('\Company\Entity\Company', $authData['company']['id']);
186 if (is_null($record->profile))
188 $record->profile = $this->em
189 ->getReference('\User\Entity\Profile', $authData['id']);
195 * ExecuteAfter: Activate.
198 * @param object|null $jobRecord
199 * @param object|null $record
200 * @param \Workspace\Utility\ServiceInputParams $contract
203 public function activateMembership($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract)
206 $record->status = 'Active';
211 * ExecuteAfter: Deactivate.
214 * @param object|null $jobRecord
215 * @param object|null $record
216 * @param \Workspace\Utility\ServiceInputParams $contract
219 public function deactivateMembership($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract)
222 $record->status = 'Inactive';
227 * ExecuteAfter: Update.
228 * Check if settings should be applied to all club memberships.
231 * @param object|null $jobRecord
232 * @param object|null $record
233 * @param \Workspace\Utility\ServiceInputParams $contract
236 public function checkApplyAll($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract)
239 if ($contract->data->Member['applyToAll'])
241 $authData = \Utility\Registry::getAuthData();
243 switch (\Utility\Registry::getUserType())
247 case 'Dealer Principle':
248 $companyFilter = \Utility\Registry::getSudo('Company', false);
251 $companyId = $companyFilter;
255 $companyId = $authData['company']['id'];
258 $memberships = $this->em->getRepository('\\PriceGuide\\Entity\\Member')
260 'company' => $companyId
262 foreach ($memberships as $membership)
264 if ($membership->id != $record->id)
266 #-> Remove existing makes.
267 $iterator = $membership->makes->getIterator();
268 foreach ($iterator as $mk)
270 $this->em->remove($mk);
272 if (!$record->allMakes)
274 #-> Transfer new list of makes.
275 $iterator = $record->makes->getIterator();
276 foreach ($iterator as $mk)
278 $memberMake = new \PriceGuide\Entity\MemberMake();
279 $memberMake->make = $this->em->getReference('\Stock\Entity\Make', $mk->make->id);
280 $memberMake->member = $membership;
281 $this->em->persist($memberMake);
284 $membership->allMakes = $record->allMakes;
285 $membership->fromYear = $record->fromYear;
286 $membership->toYear = $record->toYear;
287 $membership->fromKm = $record->fromKm;
288 $membership->toKm = $record->toKm;
289 $membership->emailNotification = $record->emailNotification;
290 $membership->smsNotification = $record->smsNotification;
299 * ExecuteAfter: Archive.
300 * Set status to Archived.
303 * @param object|null $jobRecord
304 * @param object|null $record
305 * @param \Workspace\Utility\ServiceInputParams $contract
308 public function archiveMember($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract)
311 $record->status = 'Archived';