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

PaymentService   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 5
Bugs 2 Features 1
Metric Value
wmc 5
c 5
b 2
f 1
lcom 1
cbo 2
dl 0
loc 65
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A createPayment() 0 15 3
A getRepository() 0 4 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