Passed
Push — master ( d83585...c5f1b0 )
by Jason
10:27
created

ProductExpirationManager::getCartReservations()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
c 0
b 0
f 0
dl 0
loc 5
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Dynamic\Foxy\Inventory\Extension;
4
5
use Dynamic\Foxy\Inventory\Model\CartReservation;
6
use SilverStripe\Forms\CheckboxField;
7
use SilverStripe\Forms\FieldList;
8
use SilverStripe\Forms\GridField\GridField;
9
use SilverStripe\Forms\GridField\GridFieldConfig_RecordViewer;
10
use SilverStripe\Forms\NumericField;
11
use SilverStripe\ORM\DataExtension;
12
use SilverStripe\ORM\ValidationResult;
13
use UncleCheese\DisplayLogic\Forms\Wrapper;
14
15
class ProductExpirationManager extends DataExtension
16
{
17
    /**
18
     * @var array
19
     */
20
    private static $db = [
0 ignored issues
show
introduced by
The private property $db is not used, and could be removed.
Loading history...
21
        'CartExpiration' => 'Boolean',
22
        'ExpirationMinutes' => 'Int',
23
    ];
24
25
    /**
26
     * @param FieldList $fields
27
     */
28
    public function updateCMSFields(FieldList $fields)
29
    {
30
        $expirationFields = [
31
            CheckboxField::create('CartExpiration')
32
                ->setTitle('Cart Product Expiration'),
33
            $duration = NumericField::create('ExpirationMinutes')
34
                ->setTitle('Expiration In Minutes')
35
                ->setDescription(
36
                    "After the time listed above in minutes, this product will be removed from the user's cart"
37
                ),
38
        ];
39
        $duration->displayIf('CartExpiration')->isChecked()->end();
40
        if ($this->owner->getCartReservations()->exists()) {
41
            $expirationGrid = GridField::create(
42
                'CartReservations',
43
                'Cart Reservations',
44
                $this->owner->getCartReservations()
45
                    ->filter('Expires:GreaterThan', date('Y-m-d H:i:s', strtotime('now')))
46
                    ->sort('Created'),
47
                $cartResConfig = GridFieldConfig_RecordViewer::create()
48
            );
49
            $expirationGrid->displayIf('CartExpiration')->isChecked()->end();
50
            $expirationFields[] = $expirationGrid;
51
        }
52
        $fields->addFieldsToTab(
53
            'Root.Inventory',
54
            Wrapper::create(
55
                $expirationFields
56
            )->displayIf('Available')->isChecked()->end()
57
        );
58
59
        if ($this->getCartReservations()) {
60
            $expirationGrid = GridField::create(
61
                'CartReservations',
62
                'Cart Reservations',
63
                $this->getCartReservations()->sort('Created'),
64
                $cartResConfig = GridFieldConfig_RecordViewer::create()
65
            );
66
            $expirationGrid->displayIf('ControlInventory')->isChecked()->end();
67
            $fields->addFieldToTab('Root.Inventory', $expirationGrid);
68
        }
69
    }
70
71
    /**
72
     * @param ValidationResult $validationResult
73
     */
74
    public function validate(ValidationResult $validationResult)
75
    {
76
        if ($this->owner->CartExpiration && $this->owner->ExpirationMinutes < 1) {
77
            $validationResult
78
                ->addFieldError(
79
                    'ExpirationMinutes',
80
                    'You must set the "Expiration In Minutes" or disable "Cart Product Expiration"'
81
                );
82
        }
83
    }
84
85
    /**
86
     * @return \SilverStripe\ORM\DataList
87
     */
88
    public function getCartReservations()
89
    {
90
        return CartReservation::get()
91
            ->filter('ProductID', $this->owner->ID)
92
            ->filter('Expires:GreaterThan', date('Y-m-d H:i:s', strtotime('now')));
93
    }
94
}
95