Пример #1
0
 function __construct(Am_Paysystem_Transaction_Interface $transaction)
 {
     $this->Amount = $transaction->getAmount();
     $this->PaysysId = $transaction->getPaysysId();
     $this->ReceiptId = $transaction->getReceiptId();
     $this->RecurringType = $transaction->getRecurringType();
     $this->Time = $transaction->getTime()->format('Y-m-d H:i:s');
     $this->TimeZone = $transaction->getTime()->getTimezone()->getName();
     $this->UniqId = $transaction->getUniqId();
 }
Пример #2
0
 public function setFromTransaction(Invoice $invoice, Am_Paysystem_Transaction_Interface $transaction, $refundType)
 {
     $this->dattm = $transaction->getTime()->format('Y-m-d H:i:s');
     $this->invoice_id = $invoice->invoice_id;
     $this->invoice_public_id = $invoice->public_id;
     $this->user_id = $invoice->user_id;
     $this->currency = $invoice->currency;
     $this->amount = $transaction->getAmount();
     $this->paysys_id = $transaction->getPaysysId();
     $this->receipt_id = $transaction->getReceiptId();
     $this->transaction_id = $transaction->getUniqId();
     $this->refund_type = $refundType;
     return $this;
 }
Пример #3
0
 public function setFromTransaction(Invoice $invoice, Am_Paysystem_Transaction_Interface $transaction)
 {
     $this->dattm = $transaction->getTime()->format('Y-m-d H:i:s');
     $this->invoice_id = $invoice->invoice_id;
     $this->invoice_public_id = $invoice->public_id;
     $this->user_id = $invoice->user_id;
     $this->currency = $invoice->currency;
     $this->paysys_id = $transaction->getPaysysId();
     $this->receipt_id = $transaction->getReceiptId();
     $this->transaction_id = $transaction->getUniqId();
     /// get from invoice
     $isFirst = !(doubleval($invoice->first_total) === 0.0 || $invoice->getPaymentsCount());
     $amount = $transaction->getAmount();
     if ($amount <= 0) {
         $amount = $isFirst ? $invoice->first_total : $invoice->second_total;
     }
     $this->amount = (double) $amount;
     $this->discount = $isFirst ? $invoice->first_discount : $invoice->second_discount;
     $this->tax = $isFirst ? $invoice->first_tax : $invoice->second_tax;
     $this->shipping = $isFirst ? $invoice->first_shipping : $invoice->second_shipping;
     return $this;
 }
Пример #4
0
 protected function addRefundInternal(Am_Paysystem_Transaction_Interface $transaction, $origReceiptId, $refundType, $refundAmount = null)
 {
     $access = $this->getAccessRecords();
     $dattm = $transaction->getTime();
     $yesterday = clone $dattm;
     $yesterday->modify('-1 days');
     $totalPaid = 0;
     foreach ($this->getDi()->invoicePaymentTable->findBy(array('receipt_id' => $origReceiptId, 'invoice_id' => $this->invoice_id)) as $p) {
         $p->refund($dattm);
         $totalPaid += $p->amount;
         //          do not disable any access for refunds
         //            if ($refundType == InvoiceRefund::REFUND) // disable only related access
         //                foreach ($access as $a)
         //                    if ($a->invoice_payment_id == $p->invoice_payment_id)
         //                        $a->updateQuick('expire_date', $yesterday->format('Y-m-d'));
     }
     if (!$refundAmount) {
         $refundAmount = $transaction->getAmount();
     }
     if (!$refundAmount) {
         $refundAmount = $totalPaid;
     }
     $refundAmount = abs($refundAmount);
     if ($refundType != InvoiceRefund::REFUND || $refundAmount === null || $totalPaid <= $refundAmount) {
         $this->revokeAccess($transaction, $origReceiptId);
     }
     // Some payment system plugins can pass negative value here.
     $r = $this->getDi()->invoiceRefundRecord;
     $r->setFromTransaction($this, $transaction, $origReceiptId, InvoiceRefund::REFUND);
     $r->amount = $refundAmount;
     $r->refund_type = (int) $refundType;
     if (!empty($p)) {
         $r->invoice_payment_id = $p->invoice_payment_id;
     }
     $r->insert();
     $this->updateStatus();
     $this->getUser()->checkSubscriptions(true);
     $this->getDi()->hook->call(Am_Event::INVOICE_PAYMENT_REFUND, array('invoice' => $this, 'refund' => $r));
 }