Passed
Pull Request — master (#6)
by Jason
02:22
created

ProductExpirationManager::validate()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 5
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 3
nc 2
nop 1
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
14
class ProductExpirationManager extends DataExtension
15
{
16
    /**
17
     * @var array
18
     */
19
    private static $db = [
0 ignored issues
show
introduced by
The private property $db is not used, and could be removed.
Loading history...
20
        'CartExpiration' => 'Boolean',
21
        'ExpirationMinutes' => 'Int',
22
    ];
23
24
    /**
25
     * @var array
26
     */
27
    private static $has_many = [
0 ignored issues
show
introduced by
The private property $has_many is not used, and could be removed.
Loading history...
28
        'CartReservations' => CartReservation::class,
29
    ];
30
31
    /**
32
     * @param FieldList $fields
33
     */
34
    public function updateCMSFields(FieldList $fields)
35
    {
36
        $expirationFields = [
37
            CheckboxField::create('CartExpiration')
38
                ->setTitle('Cart Product Expiration'),
39
            $duration = NumericField::create('ExpirationMinutes')
40
                ->setTitle('Expiration In Minutes')
41
                ->setDescription("After the time listed above in minutes, this product will be removed from the user's cart"),
42
        ];
43
        $duration->displayIf('CartExpiration')->isChecked()->end();
44
        if ($this->owner->CartReservations()->exists()) {
45
            $expirationGrid = GridField::create(
46
                'CartReservations',
47
                'Cart Reservations',
48
                $this->owner->CartReservations()
49
                    ->filter('Expires:GreaterThan', date('Y-m-d H:i:s', strtotime('now')))
50
                    ->sort('Created'),
51
                $cartResConfig = GridFieldConfig_RecordViewer::create()
52
            );
53
            $expirationGrid->displayIf('CartExpiration')->isChecked()->end();
54
            $expirationFields[] = $expirationGrid;
55
        }
56
        $fields->addFieldsToTab(
57
            'Root.Inventory',
58
            $expirationFields
59
        );
60
    }
61
62
    /**
63
     * @param ValidationResult $validationResult
64
     */
65
    public function validate(ValidationResult $validationResult)
66
    {
67
        if ($this->owner->CartExpiration && $this->owner->ExpirationMinutes < 1) {
68
            $validationResult
69
                ->addFieldError(
70
                    'ExpirationMinutes',
71
                    'You must set the "Expiration In Minutes" or disable "Cart Product Expiration"'
72
                );
73
        }
74
    }
75
}
76