| |
| $emailTemplate = TransactionEmailFactory::make($transaction, 'client')->render(); |
| |
| |
| abstract class TransactionEmailFactory |
| { |
| public static function make($transaction, $target) |
| { |
| switch ($transaction->trans_class) { |
| case 'car': |
| return new CarEmail($transaction, $target); |
| case 'hotel': |
| return new HotelEmail($transaction, $target); |
| } |
| } |
| } |
| |
| |
| class CarEmail extends TransactionEmail |
| { |
| public $vehicleType; |
| |
| public function __construct($transaction, $target) |
| { |
| parent::__construct($transaction, $target); |
| $this->vehicleType = $this->json_notes->vehicle; |
| } |
| } |
| |
| |
| class HotelEmail extends TransactionEmail |
| { |
| public $guestsInfo; |
| |
| public function __construct($transaction, $target) |
| { |
| parent::__construct($transaction, $targeta); |
| $this->guestsInfo = $this->json_notes->guests_info; |
| } |
| } |
| |
| |
| class TransactionEmail extends Mailable |
| { |
| public $transaction; |
| public $type; |
| public $target; |
| public $json_notes; |
| |
| public function __construct($transaction, $target) |
| { |
| $this->transaction = $transaction; |
| $this->type = strtolower($transaction->trans_class); |
| $this->target = $target; |
| $this->json_notes = json_decode($this->transaction->notes); |
| } |
| |
| public function build() |
| { |
| $target = $this->getTarget(); |
| $type = $this->getType(); |
| return $this->view("emails.transactionEmails.{$target}.{$type}"); |
| } |
| } |
| |
| |
| |
| |
| |
| |
| |
| class PartnerACustomization extends TransactionEmailCustomization |
| { |
| public function getTemplate() |
| { |
| if ($this->type == 'car') { |
| return "emails.transactionEmails.custom.partnerA.car"; |
| } |
| |
| return parent::getTemplate(); |
| } |
| } |
| |
| class TransactionEmailCustomization |
| { |
| public $type; |
| public $target; |
| |
| public function __construct($type, $target) |
| { |
| $this->type = $type; |
| $this->target = $target; |
| } |
| |
| public function getType() |
| { |
| return $this->type; |
| } |
| |
| public function getTarget() |
| { |
| return $this->target; |
| } |
| |
| public function getTemplate() |
| { |
| return "emails.transactionEmails.{$target}.{$type}"; |
| } |
| } |
| |
| interface TransactionEmailsCustomizationInterface |
| { |
| public function getType(); |
| public function getTarget(); |
| public function getTemplate(); |
| } |
| |
| |
| class TransactionEmail extends Mailable |
| { |
| ... |
| public $customization; |
| |
| public function __construct($transaction, $target, TransactionEmailsCustomizationInterface $customization) |
| { |
| ... |
| $this->customization = $customization; |
| } |
| |
| public function build() |
| { |
| return $this->view($this->customization->getTemplate()); |
| } |
| } |
| |
| |
| abstract class TransactionEmailFactory |
| { |
| public static function make($transaction, $target) |
| { |
| $customizationClass = $transaction->partner->getTransactionCustomizationClass(); |
| switch ($transaction->trans_class) { |
| case 'car': |
| return new CarEmail($transaction, $target, $customizationClass); |
| case 'hotel': |
| return new HotelEmail($transaction, $target, $customizationClass); |
| } |
| } |
| } |
| |
| |
| class CarEmail extends TransactionEmail |
| { |
| public $vehicleType; |
| |
| public function __construct($transaction, $target, $customizationClass) |
| { |
| parent::__construct($transaction, $target, $customizationClass); |
| $this->vehicleType = $this->json_notes->vehicle; |
| } |
| } |
| |
| |
| class HotelEmail extends TransactionEmail |
| { |
| public $guestsInfo; |
| |
| public function __construct($transaction, $target, $customizationClass) |
| { |
| parent::__construct($transaction, $targeta, $customizationClass); |
| $this->guestsInfo = $this->json_notes->guests_info; |
| } |
| } |
| |
| |