Passed
Push — master ( c3ab59...cbfe75 )
by Giancarlos
04:52
created

See::getFactory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: Administrador
5
 * Date: 16/10/2017
6
 * Time: 04:23 PM
7
 */
8
9
namespace Greenter;
10
11
use Greenter\Builder\BuilderInterface;
12
use Greenter\Factory\FeFactory;
13
use Greenter\Model\DocumentInterface;
14
use Greenter\Model\Summary\Summary;
15
use Greenter\Model\Summary\SummaryV2;
16
use Greenter\Model\Voided\Reversion;
17
use Greenter\Model\Voided\Voided;
18
use Greenter\Services\SenderInterface;
19
use Greenter\Ws\Services\BillSender;
20
use Greenter\Ws\Services\SoapClient;
21
use Greenter\Ws\Services\SummarySender;
22
23
/**
24
 * Sistema de Emision del Contribuyente.
25
 *
26
 * Class See
27
 * @package Greenter
28
 */
29
class See
30
{
31
    /**
32
     * @var FeFactory
33
     */
34
    private $factory;
35
36
    /**
37
     * @var SoapClient
38
     */
39
    private $wsClient;
40
41
    /**
42
     * @var array
43
     */
44
    private $builders;
45
46
    /**
47
     * @var array
48
     */
49
    private $summarys;
50
51
    /**
52
     * See constructor.
53
     */
54 28
    public function __construct()
55
    {
56 28
        $this->factory = new FeFactory();
57 28
        $this->wsClient = new SoapClient();
58 28
        $this->builders = [
59 28
            Model\Sale\Invoice::class => Xml\Builder\InvoiceBuilder::class,
60 28
            Model\Sale\Note::class => Xml\Builder\NoteBuilder::class,
61 28
            Model\Summary\Summary::class => Xml\Builder\SummaryBuilder::class,
62 28
            Model\Summary\SummaryV2::class => Xml\Builder\SummaryV2Builder::class,
63 28
            Model\Voided\Voided::class => Xml\Builder\VoidedBuilder::class,
64 28
            Model\Despatch\Despatch::class => Xml\Builder\DespatchBuilder::class,
65 28
            Model\Retention\Retention::class => Xml\Builder\RetentionBuilder::class,
66 28
            Model\Perception\Perception::class => Xml\Builder\PerceptionBuilder::class,
67 28
            Model\Voided\Reversion::class => Xml\Builder\VoidedBuilder::class,
68
        ];
69 28
        $this->summarys = [Summary::class, SummaryV2::class, Voided::class, Reversion::class];
70 28
    }
71
72
    /**
73
     * @param string $certificate
74
     */
75 28
    public function setCertificate($certificate)
76
    {
77 28
        $this->factory->setCertificate($certificate);
78 28
    }
79
80
    /**
81
     * @param string $user
82
     * @param string $password
83
     */
84 28
    public function setCredentials($user, $password)
85
    {
86 28
        $this->wsClient->setCredentials($user, $password);
87 28
    }
88
89
    /**
90
     * @param string $service
91
     */
92 28
    public function setService($service)
93
    {
94 28
        $this->wsClient->setService($service);
95 28
    }
96
97
    /**
98
     * Get signed xml from document.
99
     *
100
     * @param DocumentInterface $document
101
     * @return string
102
     */
103 10
    public function getXmlSigned(DocumentInterface $document)
104
    {
105 10
        $classDoc = get_class($document);
106
107 10
        return $this->factory
108 10
            ->setBuilder($this->getBuilder($classDoc))
109 10
            ->getXmmlSigned($document);
110
    }
111
112
113
    /**
114
     * Envia documento.
115
     *
116
     * @param DocumentInterface $document
117
     * @return Model\Response\BaseResult
118
     */
119 18
    public function send(DocumentInterface $document)
120
    {
121 18
        $classDoc = get_class($document);
122 18
        $this->factory
123 18
            ->setBuilder($this->getBuilder($classDoc))
124 18
            ->setSender($this->getSender($classDoc));
125
126 18
        return $this->factory->send($document);
127
    }
128
129
    /**
130
     * @return FeFactory
131
     */
132 6
    public function getFactory()
133
    {
134 6
        return $this->factory;
135
    }
136
137
    /**
138
     * @param string $class
139
     * @return BuilderInterface
140
     */
141 28
    private function getBuilder($class)
142
    {
143 28
        $builder = $this->builders[$class];
144 28
        return new $builder();
145
    }
146
147
    /**
148
     * @param string $class
149
     * @return SenderInterface
150
     */
151 18
    private function getSender($class)
152
    {
153 18
        $sender = in_array($class, $this->summarys) ? new SummarySender(): new BillSender();
154 18
        $sender->setClient($this->wsClient);
155
156 18
        return $sender;
157
    }
158
}