• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

conedevelopment / bazar / 20312410163

17 Dec 2025 05:58PM UTC coverage: 64.395% (+0.9%) from 63.48%
20312410163

push

github

web-flow
Merge pull request #235 from conedevelopment/coupons

Coupons & Discounts

204 of 260 new or added lines in 23 files covered. (78.46%)

8 existing lines in 1 file now uncovered.

1096 of 1702 relevant lines covered (64.39%)

18.27 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

87.5
/src/Resources/CouponResource.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Cone\Bazar\Resources;
6

7
use Cone\Bazar\Enums\CouponType;
8
use Cone\Bazar\Models\Coupon;
9
use Cone\Root\Fields\Boolean;
10
use Cone\Root\Fields\Date;
11
use Cone\Root\Fields\Fieldset;
12
use Cone\Root\Fields\ID;
13
use Cone\Root\Fields\Number;
14
use Cone\Root\Fields\Select;
15
use Cone\Root\Fields\Text;
16
use Cone\Root\Resources\Resource;
17
use Illuminate\Database\Eloquent\Model;
18
use Illuminate\Http\Request;
19
use Illuminate\Validation\Rule;
20

21
class CouponResource extends Resource
22
{
23
    /**
24
     * The model class.
25
     */
26
    protected string $model = Coupon::class;
27

28
    /**
29
     * The group for the resource.
30
     */
31
    protected string $group = 'Shop';
32

33
    /**
34
     * The relations to eager load on every query.
35
     */
36
    protected array $withCount = [
37
        'applications',
38
    ];
39

40
    /**
41
     * Get the model for the resource.
42
     */
43
    public function getModel(): string
44
    {
45
        return $this->model::getProxiedClass();
70✔
46
    }
47

48
    /**
49
     * {@inheritdoc}
50
     */
51
    public function modelTitle(Model $model): string
52
    {
NEW
53
        return $model->code;
×
54
    }
55

56
    /**
57
     * Define the fields.
58
     */
59
    public function fields(Request $request): array
60
    {
61
        return [
70✔
62
            ID::make(),
70✔
63

64
            Text::make(__('Code'), 'code')
70✔
65
                ->rules(['required', 'string', 'max:256'])
70✔
66
                ->searchable()
70✔
67
                ->sortable()
70✔
68
                ->required(),
70✔
69

70
            Select::make(__('Type'), 'type')
70✔
71
                ->options(CouponType::toArray())
70✔
72
                ->required()
70✔
73
                ->rules(['required', Rule::in(array_column(CouponType::cases(), 'value'))]),
70✔
74

75
            Number::make(__('Value'), 'value')
70✔
76
                ->required()
70✔
77
                ->rules(['required', 'numeric', 'min:0'])
70✔
78
                ->step(0.1)
70✔
79
                ->min(0)
70✔
80
                ->format(static function (Request $request, Model $model): string {
70✔
NEW
81
                    return (string) match ($model->type) {
×
NEW
82
                        CouponType::PERCENT => $model->value.'%',
×
NEW
83
                        default => $model->value,
×
NEW
84
                    };
×
85
                }),
70✔
86

87
            Boolean::make(__('Active'), 'active')
70✔
88
                ->sortable(),
70✔
89

90
            Date::make(__('Expires At'), 'expires_at')
70✔
91
                ->withTime()
70✔
92
                ->sortable(),
70✔
93

94
            Boolean::make(__('Stackable'), 'stackable')
70✔
95
                ->sortable(),
70✔
96

97
            Fieldset::make(__('Rules'), 'rules')
70✔
98
                ->withFields(static function (): array {
70✔
99
                    return [
70✔
100
                        Number::make(__('Limit'), 'rules->limit')
70✔
101
                            ->min(0)
70✔
102
                            ->rules(['nullable', 'numeric', 'min:0']),
70✔
103
                    ];
70✔
104
                }),
70✔
105
        ];
70✔
106
    }
107
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc