Completed
Pull Request — master (#24)
by Rafał
03:01
created

PaymentService::createPayment()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 15
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 1 Features 1
Metric Value
c 4
b 1
f 1
dl 0
loc 15
rs 9.4285
cc 3
eloc 11
nc 2
nop 1
1
<?php
2
3
/**
4
 * @author Rafał Muszyński <[email protected]>
5
 * @copyright 2015 Sourcefabric z.ú.
6
 * @license http://www.gnu.org/licenses/gpl-3.0.txt
7
 */
8
namespace Newscoop\PaywallBundle\Services;
9
10
use Newscoop\PaywallBundle\Entity\PaymentInterface;
11
use Newscoop\PaywallBundle\Entity\OrderInterface;
12
use Newscoop\PaywallBundle\Adapter\AdapterFactory;
13
use Doctrine\ORM\EntityManager;
14
use Newscoop\PaywallBundle\Adapter\GatewayAdapter;
15
use Newscoop\PaywallBundle\Provider\MethodProviderInterface;
16
17
/**
18
 * Payment service.
19
 */
20
class PaymentService
21
{
22
    /**
23
     * @var EntityManager
24
     */
25
    protected $entityManager;
26
27
    /**
28
     * @var GatewayAdapter
29
     */
30
    protected $adapter;
31
32
    /**
33
     * @var MethodProviderInterface
34
     */
35
    protected $paymentMethodProvider;
36
37
    /**
38
     * Construct.
39
     *
40
     * @param EntityManager           $entityManager
41
     * @param GatewayAdapter          $adapter
42
     * @param MethodProviderInterface $paymentMethodProvider
43
     */
44
    public function __construct(
45
        EntityManager $entityManager,
46
        GatewayAdapter $adapter,
47
        MethodProviderInterface $paymentMethodProvider
48
    ) {
49
        $this->entityManager = $entityManager;
50
        $this->adapter = $adapter;
51
        $this->paymentMethodProvider = $paymentMethodProvider;
52
    }
53
54
    /**
55
     * Create an payment.
56
     *
57
     * @param OrderInterface $order
58
     */
59
    public function createPayment(OrderInterface $order)
60
    {
61
        $enabledAdapter = $this->paymentMethodProvider->getActiveMethod();
62
        $payment = $this->getRepository()->createNew();
63
        $payment->setOrder($order);
64
        $payment->setMethod($this->adapter->isOfflineGateway() ? AdapterFactory::OFFLINE : $enabledAdapter->getValue());
65
        $payment->setAmount($order->getTotal());
66
        $payment->setCurrency($order->getCurrency());
67
        $payment->setState(PaymentInterface::STATE_COMPLETED);
68
        if ($this->adapter->isOfflineGateway()) {
69
            $payment->setState(PaymentInterface::STATE_PENDING);
70
        }
71
72
        $order->addPayment($payment);
73
    }
74
75
    /**
76
     * Get Payment repository.
77
     *
78
     * @return Newscoop\PaywallBundle\Repository\PaymentRepository
79
     */
80
    public function getRepository()
81
    {
82
        return $this->entityManager->getRepository('Newscoop\PaywallBundle\Entity\Payment');
83
    }
84
}
85