/** * @param InvoiceEvent $event */ public function onInvoiceCancelled(InvoiceEvent $event) { $invoice = $event->getInvoice(); /** @var PaymentRepository $paymentRepository */ $paymentRepository = $this->manager->getRepository('CSBillPaymentBundle:Payment'); $invoice->setBalance($invoice->getTotal()); $this->manager->persist($invoice); $totalPaid = $paymentRepository->getTotalPaidForInvoice($invoice); if ($totalPaid->isPositive()) { $paymentRepository->updatePaymentStatus($invoice->getPayments(), Status::STATUS_CREDIT); /** @var CreditRepository $creditRepository */ $creditRepository = $this->manager->getRepository('CSBillClientBundle:Credit'); $creditRepository->addCredit($invoice->getClient(), $totalPaid); } $this->manager->flush(); }
/** * @param InvoiceEvent $event */ public function onInvoicePaid(InvoiceEvent $event) { $invoice = $event->getInvoice(); /** @var PaymentRepository $paymentRepository */ $paymentRepository = $this->manager->getRepository('CSBillPaymentBundle:Payment'); $invoice->setBalance(new Money(0, $this->currency)); $this->manager->persist($invoice); $totalPaid = $paymentRepository->getTotalPaidForInvoice($invoice); if ($totalPaid->greaterThan($invoice->getTotal())) { $client = $invoice->getClient(); /** @var CreditRepository $creditRepository */ $creditRepository = $this->manager->getRepository('CSBillClientBundle:Credit'); $creditRepository->addCredit($client, $totalPaid->subtract($invoice->getTotal())); } $this->manager->flush(); }
/** * @param InvoiceEvent $event */ public function onInvoiceAccepted(InvoiceEvent $event) { $this->mailer->sendInvoice($event->getInvoice()); }