null, "name" => null, "display" => null, "description" => null, "type" => null, ]; protected $casts = [ "name" => "string", "display" => "string", "description" => "?string", "type" => "string", ]; /** * Chat department users that are in department as administrador. These users belongs to department in all chats in any model associated and * will receive notifications always * * @return array */ public function chatDepartmentAdminUsers(){ $m = model(ChatDeparmentUserModel::class); $chatDepartmentUsers = $m->where('chat_department_id',$this->attributes['id']) ->where('pedido_id',null) ->where('factura_id',null) ->where('presupuesto_id',null)->findAll(); return $chatDepartmentUsers; } /** * Chat department users that has been associated to the department by sending a * message and users that are not as admin of the department that has written a message. * * @param integer $modelFkId Id from model associated * @param string $model Name of the model associated `['presupuesto','pedido','factura']` * @return array */ public function chatDepartmentExternalUsers(int $modelFkId,string $model = "presupuesto") : array { $m = model(ChatDeparmentUserModel::class); $m->where('chat_department_id',$this->attributes['id']); switch ($model) { case 'presupuesto': $m->where('presupuesto_id',$modelFkId); break; case 'pedido': $m->where('pedido_id',$modelFkId); break; case 'factura': $m->where('pedido_id',$modelFkId); break; default: break; } return $m->findAll() ?? []; } public function withUsers(int $modelFkId,string $model = "presupuesto") : self { $externalUsers = $this->chatDepartmentExternalUsers($modelFkId,$model); $this->attributes["adminUsers"] = array_map(fn(ChatDepartmentUserEntity $du) => $du->user()->withAvatar() , $this->chatDepartmentAdminUsers()); $this->attributes["externalUsers"] = array_map(fn(ChatDepartmentUserEntity $du) => $du->user()->withAvatar() , $externalUsers); return $this; } }