55namespace App \Models ;
66
77use App \Concerns \BelongsToNurse ;
8+ use Illuminate \Database \Eloquent \Builder ;
89use Illuminate \Database \Eloquent \Factories \HasFactory ;
910use Illuminate \Database \Eloquent \Model ;
1011use Illuminate \Database \Eloquent \Relations \HasMany ;
@@ -22,6 +23,22 @@ class Household extends Model
2223 'name ' ,
2324 ];
2425
26+ protected static function booted (): void
27+ {
28+ static ::addGlobalScope ('forCurrentUser ' , function (Builder $ builder ): void {
29+ if (! auth ()->check ()) {
30+ return ;
31+ }
32+ if (auth ()->user ()->isNurse ()) {
33+ $ builder ->forNurse (auth ()->user ());
34+ }
35+
36+ if (auth ()->user ()->isMediator ()) {
37+ $ builder ->forMediator (auth ()->user ());
38+ }
39+ });
40+ }
41+
2542 public function families (): HasMany
2643 {
2744 return $ this ->hasMany (Family::class);
@@ -40,9 +57,18 @@ public function getActivitylogOptions(): LogOptions
4057 ->logOnlyDirty ();
4158 }
4259
60+ public function scopeForMediator (Builder $ query , User $ user ): Builder
61+ {
62+ return $ query ->whereRelation ('beneficiaries ' , 'mediator_id ' , $ user ->id );
63+ }
64+
4365 public static function createForCurrentNurse (array $ data ): self
4466 {
45- $ data ['nurse_id ' ] = auth ()->id ();
67+ // A mediator's id must never be stored in nurse_id; mediator-owned
68+ // households are reached through their member beneficiaries instead.
69+ if (auth ()->user ()?->isNurse()) {
70+ $ data ['nurse_id ' ] = auth ()->id ();
71+ }
4672
4773 return self ::create ($ data );
4874 }
0 commit comments