OrderVariationFactory   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 115
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 34
c 1
b 0
f 0
dl 0
loc 115
rs 10
wmc 14

7 Methods

Rating   Name   Duplication   Size   Complexity  
A setProduct() 0 5 1
A getProduct() 0 3 1
A __construct() 0 5 3
A setOrderVariations() 0 29 5
A getOrderVariations() 0 7 2
A getFoxyProduct() 0 3 1
A setFoxyProduct() 0 5 1
1
<?php
2
3
namespace Dynamic\Foxy\Orders\Factory;
4
5
use Dynamic\Foxy\Model\FoxyHelper;
6
use Dynamic\Foxy\Model\Variation;
7
use Dynamic\Foxy\Orders\Model\OrderVariation;
8
use GraphQL\Error\Debug;
9
use SilverStripe\Core\Config\Configurable;
10
use SilverStripe\Core\Injector\Injectable;
11
use SilverStripe\ORM\ArrayList;
12
use SilverStripe\View\ArrayData;
13
14
/**
15
 * Class OrderVariationFactory
16
 * @package Dynamic\Foxy\Orders\Factory
17
 */
18
class OrderVariationFactory
19
{
20
    use Configurable;
21
    use Injectable;
22
23
    /**
24
     * @var
25
     */
26
    private $order_variations;
27
28
    /**
29
     * @var ArrayData
30
     */
31
    private $foxy_product;
32
33
    /**
34
     * @var
35
     */
36
    private $product;
37
38
    /**
39
     * OrderVariationFactory constructor.
40
     * @param ArrayData|null $foxyProduct
41
     */
42
    public function __construct(ArrayData $foxyProduct = null, $productID = 0)
43
    {
44
        if ($foxyProduct instanceof ArrayData && $foxyProduct !== null) {
45
            $this->setFoxyProduct($foxyProduct);
46
            $this->setProduct($productID);
47
        }
48
    }
49
50
    /**
51
     * @param $foxyProduct
52
     * @return $this
53
     */
54
    public function setFoxyProduct($foxyProduct)
55
    {
56
        $this->foxy_product = $foxyProduct;
57
58
        return $this;
59
    }
60
61
    /**
62
     * @return ArrayData
63
     */
64
    protected function getFoxyProduct()
65
    {
66
        return $this->foxy_product;
67
    }
68
69
    /**
70
     * @param $productID
71
     * @return $this
72
     */
73
    public function setProduct($productID)
74
    {
75
        $this->product = FoxyHelper::singleton()->getProducts()->filter('ID', $productID)->first();
76
77
        return $this;
78
    }
79
80
    /**
81
     * @return mixed
82
     */
83
    protected function getProduct()
84
    {
85
        return $this->product;
86
    }
87
88
    /**
89
     * @return $this
90
     * @throws \SilverStripe\ORM\ValidationException
91
     */
92
    public function setOrderVariations()
93
    {
94
        $variations = ArrayList::create();
95
96
        foreach ($this->getFoxyProduct()->transaction_detail_options as $variationItem) {
97
            $variation = OrderVariation::create();
98
99
            foreach ($this->config()->get('variation_mapping') as $foxyField => $ssField) {
100
                if ($variationItem->hasField($foxyField)) {
101
                    $variation->{$ssField} = $variationItem->getField($foxyField);
102
                }
103
            }
104
105
            $productVariation = Variation::get()->filter([
106
                'Title' => $variation->Value,
107
                'ProductID' => $this->getProduct()->ID,
108
            ])->first();
109
110
            if ($productVariation) {
111
                $variation->VariationID = $productVariation->ID;
112
            }
113
114
            $variation->write();
115
            $variations->push($variation);
116
        }
117
118
        $this->order_variations = $variations;
119
120
        return $this;
121
    }
122
123
    /**
124
     * @return ArrayList
125
     */
126
    public function getOrderVariations()
127
    {
128
        if (!$this->order_variations instanceof ArrayList) {
129
            $this->setOrderVariations();
130
        }
131
132
        return $this->order_variations;
133
    }
134
}
135