Passed
Pull Request — master (#16)
by
unknown
03:54
created

SaleRequest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 126
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 10
eloc 28
c 2
b 0
f 0
dl 0
loc 126
rs 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A setPayFromEmail() 0 4 1
A setFirstName() 0 4 1
A setReturnUrl() 0 4 1
A setStatusUrl() 0 4 1
A __construct() 0 5 1
A setLastName() 0 4 1
A enableRecurringBilling() 0 6 1
A setProductDescription() 0 5 1
A setCancelUrl() 0 4 1
A setLang() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Skrill\Request;
6
7
use Money\Money;
8
use Skrill\ValueObject\Url;
9
use Skrill\ValueObject\Email;
10
use Skrill\ValueObject\Language;
11
use Skrill\ValueObject\Description;
12
use Skrill\ValueObject\TransactionID;
13
use Skrill\Request\Traits\GetPayloadTrait;
14
use Skrill\ValueObject\RecurringBillingNote;
15
use Skrill\Request\Traits\AmountFormatterTrait;
16
17
/**
18
 * Class SaleRequest.
19
 */
20
final class SaleRequest {
21
    use GetPayloadTrait;
22
    use AmountFormatterTrait;
23
24
    /**
25
     * @param TransactionID $transactionId
26
     * @param Money $amount
27
     */
28
    public function __construct(TransactionID $transactionId, Money $amount) {
29
        $this->payload = [
30
            'transaction_id' => strval($transactionId),
31
            'currency' => strval($amount->getCurrency()),
32
            'amount' => $this->formatToFloat($amount),
33
        ];
34
    }
35
36
    /**
37
     * @param Language $lang
38
     *
39
     * @return SaleRequest
40
     */
41
    public function setLang(Language $lang): self {
42
        $this->payload['language'] = strval($lang);
43
44
        return $this;
45
    }
46
47
    /**
48
     * @param Email $email
49
     *
50
     * @return SaleRequest
51
     */
52
    public function setPayFromEmail(Email $email): self {
53
        $this->payload['pay_from_email'] = strval($email);
54
55
        return $this;
56
    }
57
58
    /**
59
     *
60
     * @param string $first_name
61
     * @return SaleRequest
62
     */
63
    public function setFirstName(string $first_name): self {
64
        $this->payload['first_name'] = $first_name;
65
66
        return $this;
67
    }
68
69
    /**
70
     *
71
     * @param string $last_name
72
     * @return SaleRequest
73
     */
74
    public function setLastName(string $last_name): self {
75
        $this->payload['last_name'] = $last_name;
76
77
        return $this;
78
    }
79
80
    /**
81
     * The detail1_description combined with the detail1_text is shown in the more information field of the merchant
82
     * account history CSV file.
83
     *
84
     * Example:
85
     * - detail1_description: "Product ID:"
86
     * - detail1_text: "4509334"
87
     *
88
     * Using the example values, this would be "Product ID: 4509334".
89
     *
90
     * @param Description $productDescription
91
     *
92
     * @return SaleRequest
93
     */
94
    public function setProductDescription(Description $productDescription): self {
95
        $this->payload['detail1_description'] = $productDescription->getSubject();
96
        $this->payload['detail1_text'] = $productDescription->getText();
97
98
        return $this;
99
    }
100
101
    /**
102
     * @param Url $url
103
     *
104
     * @return $this
105
     */
106
    public function setReturnUrl(Url $url): self {
107
        $this->payload['return_url'] = strval($url);
108
109
        return $this;
110
    }
111
112
    /**
113
     * @param Url $url
114
     *
115
     * @return $this
116
     */
117
    public function setCancelUrl(Url $url): self {
118
        $this->payload['cancel_url'] = strval($url);
119
120
        return $this;
121
    }
122
123
    /**
124
     * @param Url $url
125
     *
126
     * @return $this
127
     */
128
    public function setStatusUrl(Url $url): self {
129
        $this->payload['status_url'] = strval($url);
130
131
        return $this;
132
    }
133
134
    /**
135
     * @param RecurringBillingNote $note
136
     * @param Money $money
137
     *
138
     * @return $this
139
     */
140
    public function enableRecurringBilling(RecurringBillingNote $note, Money $money): self {
141
        $this->payload['ondemand_max_amount'] = $this->formatToFloat($money);
142
        $this->payload['ondemand_max_currency'] = strval($money->getCurrency());
143
        $this->payload['ondemand_note'] = strval($note);
144
145
        return $this;
146
    }
147
}
148