1010use ACTTraining \QueryBuilder \Support \Criteria \DateCriteria ;
1111use ACTTraining \QueryBuilder \Support \Criteria \LikeCriteria ;
1212use ACTTraining \QueryBuilder \Support \Criteria \NullCriteria ;
13- use Illuminate \Support \Arr ;
1413use Illuminate \Support \Enumerable ;
1514
1615trait WithQueryBuilder
@@ -19,12 +18,13 @@ trait WithQueryBuilder
1918
2019 public string $ andOr = 'and ' ;
2120
21+ /** @noinspection PhpUndefinedMethodInspection */
2222 public function addCriteria (): void
2323 {
2424 $ this ->resetPage ();
2525
2626 $ conditions = $ this ->resolveConditions ();
27- $ condition = Arr:: first ( $ conditions );
27+ $ condition = $ conditions-> first ( );
2828
2929 $ operations = $ condition ->toArray ()['operations ' ];
3030 $ firstOperationKey = array_key_first ($ operations );
@@ -36,7 +36,8 @@ public function addCriteria(): void
3636 'extraValue ' => null ,
3737 'requiresExtra ' => false ,
3838 'displayValue ' => $ condition ->displayValue (),
39- 'inputType ' => $ condition ->inputType (),
39+ 'inputType ' => $ condition ->inputType ,
40+ 'factor ' => $ condition ->factor ,
4041 ];
4142 }
4243
@@ -63,6 +64,7 @@ public function updatedCriteria($value, $indexOrKeyName): void
6364 'requiresExtra ' => false ,
6465 'displayValue ' => $ this ->displayValueForOperation ($ firstOperationKey ),
6566 'inputType ' => $ this ->inputTypeForCondition ($ value ),
67+ 'factor ' => $ this ->factorForCondition ($ value ),
6668 ];
6769 }
6870
@@ -81,7 +83,11 @@ public function operations(string $key): array
8183 $ conditions = $ this ->resolveConditions ();
8284 $ condition = $ conditions ->firstWhere ('key ' , $ key );
8385
84- return $ condition ->toArray ()['operations ' ];
86+ if ($ condition ) {
87+ return $ condition ->toArray ()['operations ' ];
88+ }
89+
90+ return [];
8591 }
8692
8793 public function displayValueForOperation ($ value ): bool
@@ -94,7 +100,15 @@ public function inputTypeForCondition($key): string
94100 $ conditions = $ this ->resolveConditions ();
95101 $ condition = $ conditions ->firstWhere ('key ' , $ key );
96102
97- return $ condition ->inputType ();
103+ return $ condition ->inputType ;
104+ }
105+
106+ public function factorForCondition ($ key ): string
107+ {
108+ $ conditions = $ this ->resolveConditions ();
109+ $ condition = $ conditions ->firstWhere ('key ' , $ key );
110+
111+ return $ condition ->factor ;
98112 }
99113
100114 public function displayExtraValueForOperation ($ value ): bool
@@ -106,6 +120,8 @@ public function removeCriteria($index): void
106120 {
107121 unset($ this ->criteria [$ index ]);
108122 $ this ->criteria = array_values ($ this ->criteria );
123+
124+ $ this ->saveToSession ();
109125 }
110126
111127 public function setAndOr ($ condition ): void
@@ -155,22 +171,27 @@ private function getCriteriaClass($criteria
155171 $ column = $ criteria ['column ' ];
156172 $ value = $ criteria ['value ' ] ?? null ;
157173 $ extraValue = $ criteria ['extraValue ' ] ?? null ;
174+ $ factor = $ criteria ['factor ' ] ?? null ;
158175
159176 if (is_null ($ value ) && $ criteria ['displayValue ' ]) {
160177 return null ;
161178 }
162179
180+ if ($ factor ) {
181+ $ value = $ value * $ factor ;
182+ }
183+
163184 return match ($ criteria ['operation ' ]) {
164185 'equals ' => new CompareCriteria ($ column , $ value , '= ' ),
165186 'not_equals ' => new CompareCriteria ($ column , $ value , '!= ' ),
166187 'greater_than ' => new CompareCriteria ($ column , $ value , '> ' ),
167188 'less_than ' => new CompareCriteria ($ column , $ value , '< ' ),
168189 'greater_than_or_equal ' => new CompareCriteria ($ column , $ value , '>= ' ),
169190 'less_than_or_equal ' => new CompareCriteria ($ column , $ value , '<= ' ),
170- 'contains ' => new LikeCriteria ($ column , '% ' . $ value. '% ' ),
171- 'not_contains ' => new LikeCriteria ($ column , '% ' . $ value. '% ' , 'not like ' ),
172- 'starts_with ' => new LikeCriteria ($ column , $ value. '% ' ),
173- 'ends_with ' => new LikeCriteria ($ column , '% ' . $ value ),
191+ 'contains ' => new LikeCriteria ($ column , '% ' . $ value . '% ' ),
192+ 'not_contains ' => new LikeCriteria ($ column , '% ' . $ value . '% ' , 'not like ' ),
193+ 'starts_with ' => new LikeCriteria ($ column , $ value . '% ' ),
194+ 'ends_with ' => new LikeCriteria ($ column , '% ' . $ value ),
174195 'is_true ' => new BooleanCriteria ($ column , true ),
175196 'is_false ' => new BooleanCriteria ($ column , false ),
176197 'is ' => new DateCriteria ($ column , $ value , '= ' ),
0 commit comments