Context data publication. isset($contract->data->Context) && \Utility\Registry::setOnce( 'Service.' . $this->meta['Base'] . '.Context', $contract->data->Context ); #-> Create entry. $base = $this->meta['Base']; $data = $contract->data->$base; $exist = $this->em->getRepository('\PriceGuide\Entity\Member') ->findOneBy(array( 'club' => $data['club'], 'company' => $data['company'] )); if (!is_null($exist)) { return $contract->success('Entry created.', array( 'id' => $exist->id )); } if (isset($meta['RelatedEntityFromInput'])) { foreach ($meta['RelatedEntityFromInput'] as $context => $relation) { $workflow = $relation['Workflow']; $service = $relation['Service']; $service = new $service(); $service->setWorkflow(new $workflow()); $relId = $service->create($contract->data->$context)->id; $data[$relation['Field']] = $relId; } } if (isset($this->meta['JobField'])) { $data[$this->meta['JobField']] = $jobRecord->id; } $record = $this->create($data); $this->inviteMember($meta, $record); #-> Done. return $contract->success('Entry created.', array( 'id' => $record->id )); } /** * ExecuteAfter: Invite. * Send invitation notification. * * @param array $meta * @param object|null $record * @return array */ public function inviteMember($meta, $record) { #-> Send invite notification. $profile = $this->em ->getRepository('\User\Entity\Profile') ->findOneBy(array('company' => $record->company->id)); if (!is_null($profile)) { $record->profile = $profile; $this->em->flush($record); $company = $record->club->company; $params = array( 'clubType' => 'Price Guide club', 'dealer' => $company->name, 'contact.name' => $company->contact->firstName, 'contact.familyName' => $company->contact->familyName, 'contact.email' => $company->contact->email, 'contact.cell' => $company->contact->mobile ); $iterator = $profile->company->profiles->getIterator(); $authData = \Utility\Registry::getAuthData(); foreach ($iterator as $prof) { $params['firstName'] = $prof->firstName; $params['familyName'] = $prof->familyName; $email = $prof->email; $oNotify = new \Utility\Comms\Notification(); $oNotify->sendFromTemplate( $authData['company']['id'], $authData['id'], $profile->company->id, $prof->id, $email, null, null, 'club-invite-registered', $params ); } } } /** * ExecuteAfter: Accept. * Member accepted invitation. * * @param array $meta * @param object|null $jobRecord * @param object|null $record * @param \Workspace\Utility\ServiceInputParams $contract * @return array */ public function acceptInvite($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract) { #-> Change status. $record->status = 'Active'; $authData = \Utility\Registry::getAuthData(); if (is_null($record->company)) { $record->company = $this->em ->getReference('\Company\Entity\Company', $authData['company']['id']); } if (is_null($record->profile)) { $record->profile = $this->em ->getReference('\User\Entity\Profile', $authData['id']); } $email = $record->club->company->contact->email; $params = array( 'firstName' => $record->club->company->contact->firstName, 'familyName' => $record->club->company->contact->familyName, 'clubName' => $record->club->name, 'clubType' => 'club', 'dealer' => $record->company->name, 'dealer.contactFirstName' => $record->company->contact->firstName, 'dealer.contactFamilyName' => $record->company->contact->familyName ); $oNotify = new \Utility\Comms\Notification(); $oNotify->sendFromTemplate( $authData['company']['id'], $authData['id'], $record->club->company->id, null, $email, null, null, 'club-invite-accepted', $params); $this->em->flush(); } /** * ExecuteAfter: Decline. * Member declined invitation. * * @param array $meta * @param object|null $jobRecord * @param object|null $record * @param \Workspace\Utility\ServiceInputParams $contract * @return array */ public function declineInvite($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract) { #-> Change status. $record->status = 'Declined'; $authData = \Utility\Registry::getAuthData(); if (is_null($record->company)) { $record->company = $this->em ->getReference('\Company\Entity\Company', $authData['company']['id']); } if (is_null($record->profile)) { $record->profile = $this->em ->getReference('\User\Entity\Profile', $authData['id']); } $this->em->flush(); } /** * ExecuteAfter: Activate. * * @param array $meta * @param object|null $jobRecord * @param object|null $record * @param \Workspace\Utility\ServiceInputParams $contract * @return array */ public function activateMembership($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract) { #-> Change status. $record->status = 'Active'; $this->em->flush(); } /** * ExecuteAfter: Deactivate. * * @param array $meta * @param object|null $jobRecord * @param object|null $record * @param \Workspace\Utility\ServiceInputParams $contract * @return array */ public function deactivateMembership($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract) { #-> Change status. $record->status = 'Inactive'; $this->em->flush(); } /** * ExecuteAfter: Update. * Check if settings should be applied to all club memberships. * * @param array $meta * @param object|null $jobRecord * @param object|null $record * @param \Workspace\Utility\ServiceInputParams $contract * @return array */ public function checkApplyAll($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract) { #-> Change status. if ($contract->data->Member['applyToAll']) { $authData = \Utility\Registry::getAuthData(); $companyId = 0; switch (\Utility\Registry::getUserType()) { case 'B4C User': case 'Group User': case 'Dealer Principle': $companyFilter = \Utility\Registry::getSudo('Company', false); if ($companyFilter) { $companyId = $companyFilter; } break; default: $companyId = $authData['company']['id']; break; } $memberships = $this->em->getRepository('\\PriceGuide\\Entity\\Member') ->findBy(array( 'company' => $companyId )); foreach ($memberships as $membership) { if ($membership->id != $record->id) { #-> Remove existing makes. $iterator = $membership->makes->getIterator(); foreach ($iterator as $mk) { $this->em->remove($mk); } if (!$record->allMakes) { #-> Transfer new list of makes. $iterator = $record->makes->getIterator(); foreach ($iterator as $mk) { $memberMake = new \PriceGuide\Entity\MemberMake(); $memberMake->make = $this->em->getReference('\Stock\Entity\Make', $mk->make->id); $memberMake->member = $membership; $this->em->persist($memberMake); } } $membership->allMakes = $record->allMakes; $membership->fromYear = $record->fromYear; $membership->toYear = $record->toYear; $membership->fromKm = $record->fromKm; $membership->toKm = $record->toKm; $membership->emailNotification = $record->emailNotification; $membership->smsNotification = $record->smsNotification; } } $this->em->flush(); } } /** * ExecuteAfter: Archive. * Set status to Archived. * * @param array $meta * @param object|null $jobRecord * @param object|null $record * @param \Workspace\Utility\ServiceInputParams $contract * @return array */ public function archiveMember($meta, $jobRecord, $record, \Workspace\Utility\ServiceInputParams $contract) { #-> Change status. $record->status = 'Archived'; $this->em->flush(); } }