22
33namespace App \Services ;
44
5+ use App \Models \Category ;
6+ use App \Models \Company ;
7+ use App \Models \AssetModel ;
8+ use App \Models \Location ;
9+ use App \Models \Manufacturer ;
10+ use App \Models \Statuslabel ;
11+ use App \Models \Supplier ;
512use DB ;
613use Exception ;
714use Throwable ;
815use App \Models \PredefinedFilter ;
16+ use App \Services \FilterService \FilterService ;
917use App \Services \PredefinedFilterPermissionService ;
1018use Illuminate \Http \Request ;
1119use Illuminate \Pagination \LengthAwarePaginator ;
@@ -22,6 +30,14 @@ public function __construct(PredefinedFilterPermissionService $predefinedFilterP
2230 $ this ->predefinedFilterPermissionService = $ predefinedFilterPermissionService ;
2331 }
2432
33+ protected ?FilterService $ filterService = null ;
34+
35+ public function filterService (): FilterService
36+ {
37+ return $ this ->filterService ??= app (FilterService::class);
38+
39+ }
40+
2541 public function getAllViewableFilters (): Collection
2642 {
2743 $ user = Auth::user ();
@@ -39,14 +55,101 @@ public function getAllViewableFilters(): Collection
3955 })->values ();
4056 }
4157
42- // TODO different Naming because it does more than only get a filter by ID - getFilterWithOptionalPermissionsById
43- public function getFilterById (int $ id , bool $ include_predefined_filter_groups = true )
58+ public function getFilterWithOptionalPermissionsById (int $ id , bool $ include_predefined_filter_groups = true )
4459 {
4560 $ predefinedFilter = PredefinedFilter::find ($ id );
4661 if ($ include_predefined_filter_groups && $ predefinedFilter ) {
4762 $ permissions = $ this ->predefinedFilterPermissionService ->getPermissionsByPredefinedFilterId ($ id );
4863 $ predefinedFilter ['permissions ' ] = $ permissions ;
4964 }
65+
66+ if (!$ predefinedFilter ){
67+ return null ;
68+ }
69+
70+ $ filters = $ predefinedFilter ->filter_data ;
71+
72+ foreach ($ filters as &$ filter ) {
73+
74+
75+ if (!empty ($ filter ['value ' ]) && is_array ($ filter ['value ' ]) && is_int ($ filter ['value ' ][0 ])) {
76+ $ values =[];
77+ foreach ($ filter ['value ' ] as $ valueId ){
78+ switch ($ filter ['field ' ]) {
79+ case 'company ' :
80+ $ company = Company::find ($ valueId );
81+ if ($ company ) {
82+ $ values [] = [
83+ 'id ' => $ company ->id ,
84+ 'name ' => $ company ->name ,
85+ ];
86+ }
87+ break ;
88+ case 'model ' :
89+ $ model = AssetModel::find ($ valueId );
90+ if ($ model ) {
91+ $ values [] = [
92+ 'id ' => $ model ->id ,
93+ 'name ' => $ model ->name ,
94+ ];
95+ }
96+ break ;
97+ case 'category ' :
98+ $ category = Category::find ($ valueId );
99+ if ($ category ) {
100+ $ values [] = [
101+ 'id ' => $ category ->id ,
102+ 'name ' => $ category ->name ,
103+ ];
104+ }
105+ break ;
106+ case 'statuslabel ' :
107+ $ status = Statuslabel::find ($ valueId );
108+ if ($ status ) {
109+ $ values [] = [
110+ 'id ' => $ status ->id ,
111+ 'name ' => $ status ->name ,
112+ ];
113+ }
114+ break ;
115+ case 'location ' :
116+ case 'default_location ' :
117+ $ location = Location::find ($ valueId );
118+ if ($ location ) {
119+ $ values [] = [
120+ 'id ' => $ location ->id ,
121+ 'name ' => $ location ->name ,
122+ ];
123+ }
124+ break ;
125+ case 'manufacturer ' :
126+ $ manufacturer = Manufacturer::find ($ valueId );
127+ if ($ manufacturer ) {
128+ $ values [] = [
129+ 'id ' => $ manufacturer ->id ,
130+ 'name ' => $ manufacturer ->name ,
131+ ];
132+ }
133+ break ;
134+ case 'supplier ' :
135+ $ supplier = Supplier::find ($ valueId );
136+ if ($ supplier ) {
137+ $ values [] = [
138+ 'id ' => $ supplier ->id ,
139+ 'name ' => $ supplier ->name ,
140+ ];
141+ }
142+ break ;
143+ default :
144+ break ;
145+ }
146+ }
147+
148+ $ filter ['value ' ] = $ values ;
149+ $ predefinedFilter ->filter_data = $ filters ;
150+
151+ }
152+ }
50153 return $ predefinedFilter ;
51154 }
52155
@@ -152,8 +255,6 @@ public function selectList(Request $request, bool $visibilityInName = false): Le
152255 $ query ->where ('name ' , 'LIKE ' , '% ' . trim ($ search ) . '% ' );
153256 }
154257
155-
156-
157258 $ paginated = $ query ->orderBy ('name ' )->paginate (50 );
158259
159260 foreach ($ paginated as $ item ) {
0 commit comments