1: <?php
2:
3: declare(strict_types=1);
4:
5: namespace Atk4\Ui\Table\Column\FilterModel;
6:
7: use Atk4\Data\Model;
8: use Atk4\Ui\Form;
9: use Atk4\Ui\Table\Column;
10:
11: class TypeNumber extends Column\FilterModel
12: {
13: #[\Override]
14: protected function init(): void
15: {
16: parent::init();
17:
18: $this->op->values = [
19: '=' => '=',
20: '!=' => '!=',
21: '<' => '<',
22: '<=' => '< or equal',
23: '>' => '>',
24: '>=' => '> or equal',
25: 'between' => 'Between',
26: ];
27: $this->op->default = '=';
28:
29: $this->value->ui['form'] = [Form\Control\Line::class, 'inputType' => 'number'];
30: $this->addField('range', ['ui' => ['caption' => '', 'form' => [Form\Control\Line::class, 'inputType' => 'number']]]);
31: }
32:
33: #[\Override]
34: public function setConditionForModel(Model $model)
35: {
36: $filter = $this->recallData();
37: if ($filter !== null) {
38: switch ($filter['op']) {
39: case 'between':
40: $model->addCondition(
41: $model->expr('[field] between [value] and [range]', [
42: 'field' => $model->getField($filter['name']),
43: 'value' => $filter['value'],
44: 'range' => $filter['range'],
45: ])
46: );
47:
48: break;
49: default:
50: $model->addCondition($filter['name'], $filter['op'], $filter['value']);
51: }
52: }
53:
54: return $model;
55: }
56:
57: #[\Override]
58: public function getFormDisplayRules(): array
59: {
60: return [
61: 'range' => ['op' => 'isExactly[between]'],
62: ];
63: }
64: }
65: