Ejemplo n.º 1
0
 public function didRefundCharge(PhortuneCharge $charge, PhortuneCharge $refund)
 {
     $refund->setStatus(PhortuneCharge::STATUS_CHARGED);
     $this->openTransaction();
     $this->beginReadLocking();
     $copy = clone $charge;
     $copy->reload();
     if ($charge->getRefundingPHID() !== $refund->getPHID()) {
         throw new Exception(pht('Charge is in the wrong refunding state!'));
     }
     $charge->setRefundingPHID(null);
     // NOTE: There's some trickiness here to get the signs right. Both
     // these values are positive but the refund has a negative value.
     $total_refunded = $charge->getAmountRefundedAsCurrency()->add($refund->getAmountAsCurrency()->negate());
     $charge->setAmountRefundedAsCurrency($total_refunded);
     $charge->save();
     $refund->save();
     $this->endReadLocking();
     $this->saveTransaction();
     $amount = $refund->getAmountAsCurrency()->negate();
     foreach ($this->purchases as $purchase) {
         $purchase->getProduct()->didRefundProduct($purchase, $amount);
     }
     return $this;
 }