Dołącza podzbiór zdarzeń na kliencie i znajduje ostatnie zdarzenie, zaraportowane, starsze niż obecna data (przyszłe zdarzenia nie miały miejsca to tylko plany). Jeśli ostatnie zdarzenie jest starsze niż 3 miesiące ustawia alarm.
public function findLastEvent($query, $options)
{
$query = $query->contain([
'Events' => function($q){
return $q->select([
'id', 'company_id', 'last_visit' => 'MAX(start_date)',
'alarm' => $q->newExpr()->addCase(
[ $q->newExpr()->lt('MAX(start_date)',
$q->func()->dateAdd('CURRENT_DATE', -3, 'MONTH'))
],
[1,0],
['integer', 'integer']
) // addCase
]) // select
->where(['report <>' => '']) // Zaraportowane
->where(['start_date <=' => new \DateTime('now')])
->order(['start_date' => 'DESC'])
->group(['Events.id']);
}]);
return $query;
}