@@ -26,14 +26,37 @@ public static function bootBelongsToNurseThroughBeneficiary(): void
2626
2727 public function scopeForUser (Builder $ query , User $ user ): Builder
2828 {
29- if ($ user ->isNurse ()) {
30- return $ query ->whereRelation ('beneficiary ' , 'nurse_id ' , $ user ->id );
31- }
29+ return match (true ) {
30+ $ user ->isNurse () => $ query ->forNurse ($ user ),
31+ $ user ->isMediator () => $ query ->forMediator ($ user ),
32+ $ user ->isCoordinator () => $ query ->forCoordinator ($ user ),
33+ $ user ->isAdmin () => $ query ,
34+ };
35+ }
3236
33- if ($ user ->isCoordinator ()) {
34- return $ query ->whereRelation ('beneficiary.nurse ' , 'activity_county_id ' , $ user ->county_id );
35- }
37+ public function scopeForNurse (Builder $ query , User $ user ): Builder
38+ {
39+ return $ query ->whereRelation ('beneficiary ' , 'nurse_id ' , $ user ->id );
40+ }
3641
37- return $ query ;
42+ public function scopeForMediator (Builder $ query , User $ user ): Builder
43+ {
44+ return $ query ->where (
45+ fn (Builder $ query ): Builder => $ query
46+ ->whereRelation ('beneficiary ' , 'mediator_id ' , $ user ->id )
47+ ->when (
48+ $ this ->isFillable ('mediator_has_access ' ),
49+ fn (Builder $ query ): Builder => $ query ->where ('mediator_has_access ' , true )
50+ )
51+ );
52+ }
53+
54+ public function scopeForCoordinator (Builder $ query , User $ user ): Builder
55+ {
56+ return $ query ->where (
57+ fn (Builder $ query ): Builder => $ query
58+ ->whereRelation ('beneficiary.nurse ' , 'activity_county_id ' , $ user ->county_id )
59+ ->orWhereRelation ('beneficiary.mediator ' , 'activity_county_id ' , $ user ->county_id )
60+ );
3861 }
3962}
0 commit comments