public function create(Refund $refund) { // Set create authorship data if not already set if (!$refund->authorship->createdAt()) { $refund->authorship->create(new DateTimeImmutable(), $this->_currentUser->id); } $this->_validate($refund); $event = new Event\TransactionalEvent($refund); $event->setTransaction($this->_trans); $refund = $this->_eventDispatcher->dispatch(Events::CREATE_START, $event)->getRefund(); $this->_trans->run(' INSERT INTO refund SET payment_id = :paymentID?in, created_at = :createdAt?d, created_by = :createdBy?in, currency_id = :currencyID?s, method = :method?sn, amount = :amount?f, reason = :reason?sn, reference = :reference?sn ', array('paymentID' => $refund->payment ? $refund->payment->id : null, 'createdAt' => $refund->authorship->createdAt(), 'createdBy' => $refund->authorship->createdBy(), 'currencyID' => $refund->currencyID, 'method' => $refund->method->getName(), 'amount' => $refund->amount, 'reason' => $refund->reason, 'reference' => $refund->reference)); $sqlVariable = 'REFUND_ID_' . uniqid(); $this->_trans->setIDVariable($sqlVariable); $refund->id = '@' . $sqlVariable; if (!$this->_transOverridden) { $this->_trans->commit(); return $this->_loader->getByID($this->_trans->getIDVariable($sqlVariable)); } return $refund; }
/** * Generate a voucher for a new refund with a method of "voucher" and set * the generated voucher code to the refund reference. * * @param Refund\Event\TransactionalEvent $event */ public function generateForVoucherRefunds(Refund\Event\TransactionalEvent $event) { $refund = $event->getRefund(); // Skip unless the refund is using the "voucher" method if ('voucher' !== $refund->method->getName()) { return false; } $voucher = new Voucher(); $voucher->currencyID = $refund->currencyID; $voucher->amount = $refund->amount; $voucher->id = $this->_idGenerator->generate(); $this->_create->setTransaction($event->getTransaction()); $this->_create->create($voucher); $refund->reference = $voucher->id; $event->setRefund($refund); }