예제 #1
0
 function it_dispatches_event_on_payment_update($factory, PaymentInterface $payment, OrderInterface $order, StateMachineInterface $sm, Collection $payments, Collection $filteredPayments)
 {
     $payment->getOrder()->willReturn($order);
     $payment->getState()->willReturn(PaymentInterface::STATE_COMPLETED);
     $payment->getAmount()->willReturn(1000);
     $order->getPayments()->willReturn($payments);
     $order->getTotal()->willReturn(1000);
     $order->setPaymentState(PaymentInterface::STATE_COMPLETED)->shouldBeCalled();
     $payments->filter(Argument::any())->willReturn($filteredPayments);
     $payments->count()->willReturn(1);
     $filteredPayments->count()->willReturn(1);
     $factory->get($order, OrderTransitions::GRAPH)->willReturn($sm);
     $sm->apply(OrderTransitions::SYLIUS_CONFIRM, true)->shouldBeCalled();
     $this->updateOrderOnPayment($payment);
 }
 function it_marks_order_as_partially_paid_if_one_of_the_payment_is_processing(FactoryInterface $stateMachineFactory, StateMachineInterface $stateMachine, OrderInterface $order, PaymentInterface $payment1, PaymentInterface $payment2)
 {
     $payment1->getAmount()->willReturn(6000);
     $payment1->getState()->willReturn(PaymentInterface::STATE_PROCESSING);
     $payment2->getAmount()->willReturn(4000);
     $payment2->getState()->willReturn(PaymentInterface::STATE_COMPLETED);
     $payments = new ArrayCollection([$payment1->getWrappedObject(), $payment2->getWrappedObject()]);
     $order->hasPayments()->willReturn(true);
     $order->getPayments()->willReturn($payments);
     $order->getPaymentState()->willReturn(OrderPaymentStates::STATE_AWAITING_PAYMENT);
     $order->getTotal()->willReturn(10000);
     $stateMachineFactory->get($order, OrderPaymentTransitions::GRAPH)->willReturn($stateMachine);
     $stateMachine->can(OrderPaymentTransitions::TRANSITION_PARTIALLY_PAY)->willReturn(true);
     $stateMachine->apply(OrderPaymentTransitions::TRANSITION_PARTIALLY_PAY)->shouldBeCalled();
     $this->resolve($order);
 }
예제 #3
0
 public function updateOrderOnPayment(PaymentInterface $payment)
 {
     $order = $payment->getOrder();
     if (null === $order) {
         throw new \RuntimeException(sprintf('Cannot retrieve Order from Payment with id %s', $payment->getId()));
     }
     $total = 0;
     foreach ($order->getPayments() as $payment) {
         if ($payment->getState() === PaymentInterface::STATE_COMPLETED) {
             $total += $payment->getAmount();
         }
     }
     if ($total === $order->getTotal()) {
         $this->factory->get($order, OrderTransitions::GRAPH)->apply(OrderTransitions::SYLIUS_CONFIRM, true);
     }
 }
예제 #4
0
 public function updateOrderOnPayment(PaymentInterface $payment)
 {
     /** @var $order OrderInterface */
     $order = $payment->getOrder();
     if (null === $order) {
         throw new \RuntimeException(sprintf('Cannot retrieve Order from Payment with id %s', $payment->getId()));
     }
     $total = 0;
     if (PaymentInterface::STATE_COMPLETED === $payment->getState()) {
         $payments = $order->getPayments()->filter(function (PaymentInterface $payment) {
             return PaymentInterface::STATE_COMPLETED === $payment->getState();
         });
         if ($payments->count() === $order->getPayments()->count()) {
             $order->setPaymentState(PaymentInterface::STATE_COMPLETED);
         }
         $total += $payment->getAmount();
     } else {
         $order->setPaymentState($payment->getState());
     }
     if ($total >= $order->getTotal()) {
         $this->factory->get($order, OrderTransitions::GRAPH)->apply(OrderTransitions::SYLIUS_CONFIRM, true);
     }
 }