1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
/**
* @copyright Vertex. All rights reserved. https://www.vertexinc.com/
* @author Mediotype https://www.mediotype.com/
*/
namespace Vertex\Tax\Model\Api\Service;
use Vertex\Services\Invoice;
use Vertex\Services\InvoiceFactory as SdkInvoiceFactory;
use Vertex\Tax\Model\Api\ConfigBuilder;
use Vertex\Utility\ServiceActionPerformerFactory;
/**
* Build an {@see Invoice} service class
*/
class InvoiceBuilder
{
/** @var ConfigBuilder */
private $configBuilder;
/** @var string Scope ID */
private $scopeCode;
/** @var string Scope Type */
private $scopeType;
/** @var SdkInvoiceFactory */
private $sdkFactory;
/** @var ServiceActionPerformerFactory */
private $serviceActionPerformerFactory;
/**
* @param ConfigBuilder $configBuilder
* @param SdkInvoiceFactory $sdkFactory
*/
public function __construct(
ConfigBuilder $configBuilder,
SdkInvoiceFactory $sdkFactory,
ServiceActionPerformerFactory $serviceActionPerformerFactory
) {
$this->configBuilder = $configBuilder;
$this->sdkFactory = $sdkFactory;
$this->serviceActionPerformerFactory =$serviceActionPerformerFactory;
}
/**
* Create an Invoice Service
*
* @return Invoice
*/
public function build()
{
$config = $this->configBuilder
->setScopeCode($this->scopeCode)
->setScopeType($this->scopeType)
->build();
return $this->sdkFactory->create(
[
'configuration' => $config,
'actionPerformerFactory' => $this->serviceActionPerformerFactory
]
);
}
/**
* Set the Scope Code
*
* @param string|null $storeCode
* @return InvoiceBuilder
*/
public function setScopeCode($storeCode)
{
$this->scopeCode = $storeCode;
return $this;
}
/**
* Set the Scope Type
*
* @param string|null $scopeType
* @return InvoiceBuilder
*/
public function setScopeType($scopeType)
{
$this->scopeType = $scopeType;
return $this;
}
}