|
10885
|
215
|
59
|
2026-04-14T09:02:41.246585+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157361246_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorFV PhpStormFileEditViewNavigateCodeLaravelRefactorFV faVsco.js v#11894 on JY-18909-automated-reports-ask-iminny K vProject vToolsWindowHelp© ReportController.phpJiminnyDeouecommana.ong© AutomatedReportsCommand.php X= custom.log= laravel.logProphetAiAutomatedReportsSendCommand.php >© AddLayoutEntities.php© Team.php<?phps Sr iminny@localnosuiv D Reports© AutomatedReportsClAutomatedReportsService.phpdeclare(strict_types=1);A HS_local [jiminny@localhost]© AutomatedReportsReу IгаскrrovldernstalleacventoneA console (PROD]Al console [EU]© AutomatedReportsStc UserrilotacuiviiyListener.oneC ActivityLogged.phpnamespace Jiminny\Console\Commands\Reports;4 console [STAGING© CreateMockAskJimir© DeleteReportComma(e AutomatedRenortscalllbackService.onv© RequestGenerateAskJiminnyReportJob.phpuse Carbon\Carbon;AskJiminnyReportActivityService.php x© GenerateMarketingR© RequestGenerateReportJob.php© AutomatedReportResult.phpluse uumnare vonsole conmano.© RequestGenerateAskJiminnyReportJobTest© Team.phpuse uumnare conuracus bus usparcher as bususpatchert© Usage.php(C) AutomatedReport.phpluseuunnare suooor coctecconAcceptD Slackclass AutomatedReportsSendCommand extends CommandAnalyzing...Rejectuse Jiminny Jobs AutomatedReports RequestGenerateAskJiminnvReportJob:class AskJiminnyReportActivi_leams* ovar stringuse Jllinny Joos Automaceareporus requescbeneracereportJob*/D Tracks25 Ctprotected $signature = 'automated-reports:send';use valeny mouels Aucollldteunesore.private const int DEFAULO TranscriptionJuse Jiminny\Models\Team;O Twiliouse Jiminny\Repositories\AutomatedReportsRepository;private const array DATED Usersuse Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;ActivityActualDate:* The console command description.Vocabularyuse Psr\Log\LoggerInterface;ActivityActualDate::CZoomActivityUpdatedDate:30* @var string© CoachingFeedbacksUpr19 Dclass AutomatedReportsCommand extends CommandActivityUpdatedDate:31© Command.phpClosingPeriodFilter:32 Gtprocected sdescription = sends aucomated reports Dased on user tinc Crearevaroaseusers.oClosingPeriodFilter:c Daraoase oecountoi* Log prefix for all log messages© DeleteOldAiCrmNotesC:*/35 C© DeleteS3LeftoversComipublic function __construct(private readonly LoggerInterface $logger,DevPostmanCommand./private const string LOG_PREFIX = '[automated-reports]':public function __constrprivate readonly Actprivate readonly AutomatedReportsRepository $reportRepository,© DiarizeViaAiParticipantk/**private readonly Ela38private readonly AutomatedReportsService $automatedReportsServi© EncryptTokensComman* The name and signature of the console command.private readonly Log39private readonly BusDispatcher $dispatcher,© EngagementStatsRegen) {...}© FeatureFlagsHelper.php40Df..3* @var string© FixCrossTenantissues.p43/**© FlushRolesPermissionsCprotected $signature = 'automated-reports';* Fetch activity IDs fo45* Execute the console command.© GeneratelnternalWebho* Date filters stored• GroupSetDefaultLangua31 GtCascade & Y!Command &elprotected $signature = l'automated-reports f--report-id= : Process 40* no date constraint .© HelperTruncateCoachin© HubspotJournalPollingC/*** Creturn string[] Actipublic function handle(): int© HubspotWebhookServic* The console command description.*/© ImportRecording.phppublic function getActiv@ Imnortli|sercFromCcvEil$reportResults = $this->reportRepository->getGeneratedNotSentRe* Ovar stringSearch $savedSearch© IterateUsersCommand.foreach ($reportResults as $reportResult) {*/User $user,cJiminnvcacheclearcomprotected $description = 'Process automated reports based on theil47): array {/** @var AutomatedReportResult $reportResult */© JiminnyDebugCommanc(c)Jminnvser-ncrvotedio$validRecipients = $this->automatedReportsService->getValic38 Gprotected Sdescription ="Process automated reports based on thei, 48$requestParams = $thif ($this->automatedReportsService->shouldSendReport($valic(c) Jiminny okenintocomm$criteria = Criteria$this->logger->info(self::LOG_PREFIX'Dispatching© MakeSlackLiveCoaching'uuid' => $reportResult->getUuid(),41 đtpublic function __construct(array_merge(Sreq© ManageScimForTeam.p1):nuser->certnezoprivate readonly LoggerInterface $logger,© MarkBranchForEnvironnprivate readonly BusDispatcher $dispatcher,© MuteOrganizerChannel.$this->dispatcher->dispatch(new SendReportJob($reportReprivate readonly AutomatedReportsRepository $reportRepositon© PhpApm.php$filterSet = $this->© PropagateCoachingFeerparent::__constructO);© PurgeConferences.php$activityIds = $this© PurgeSoftDeletedOpporreturn commandallas. • SuccEss.© PurgeSyncBatchesCom$this->logger->info((C) RecalculateDealRisksCd50* Execute the console command.C) RemoveDeleteMarkersd61'saved_search_id'user_id'= Sus© RemoveExpiredNudgest* Oreturn int'activity_count'© RemoveUnusedParticip:1);© ResetElasticSearch.phppublic function handle(): int© RestoreActivityCrmProvreturn $activityIds;© RestoreActivityTypeCor1 1 of 6 estitsish>1 v Accept File *-1** Retect FitE PDX®. ESPapftedle); →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33), 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:41• RequestGenerateAskJiminnyReportJobTest -CascadeFixing ReportControlleAutomated Report MarAutomated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns emoty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +81 -5 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leamslo:lyso chars, 1/ line breaksuir-o( 4 spaces...
|
NULL
|
-3979618984081972417
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorFV PhpStormFileEditViewNavigateCodeLaravelRefactorFV faVsco.js v#11894 on JY-18909-automated-reports-ask-iminny K vProject vToolsWindowHelp© ReportController.phpJiminnyDeouecommana.ong© AutomatedReportsCommand.php X= custom.log= laravel.logProphetAiAutomatedReportsSendCommand.php >© AddLayoutEntities.php© Team.php<?phps Sr iminny@localnosuiv D Reports© AutomatedReportsClAutomatedReportsService.phpdeclare(strict_types=1);A HS_local [jiminny@localhost]© AutomatedReportsReу IгаскrrovldernstalleacventoneA console (PROD]Al console [EU]© AutomatedReportsStc UserrilotacuiviiyListener.oneC ActivityLogged.phpnamespace Jiminny\Console\Commands\Reports;4 console [STAGING© CreateMockAskJimir© DeleteReportComma(e AutomatedRenortscalllbackService.onv© RequestGenerateAskJiminnyReportJob.phpuse Carbon\Carbon;AskJiminnyReportActivityService.php x© GenerateMarketingR© RequestGenerateReportJob.php© AutomatedReportResult.phpluse uumnare vonsole conmano.© RequestGenerateAskJiminnyReportJobTest© Team.phpuse uumnare conuracus bus usparcher as bususpatchert© Usage.php(C) AutomatedReport.phpluseuunnare suooor coctecconAcceptD Slackclass AutomatedReportsSendCommand extends CommandAnalyzing...Rejectuse Jiminny Jobs AutomatedReports RequestGenerateAskJiminnvReportJob:class AskJiminnyReportActivi_leams* ovar stringuse Jllinny Joos Automaceareporus requescbeneracereportJob*/D Tracks25 Ctprotected $signature = 'automated-reports:send';use valeny mouels Aucollldteunesore.private const int DEFAULO TranscriptionJuse Jiminny\Models\Team;O Twiliouse Jiminny\Repositories\AutomatedReportsRepository;private const array DATED Usersuse Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;ActivityActualDate:* The console command description.Vocabularyuse Psr\Log\LoggerInterface;ActivityActualDate::CZoomActivityUpdatedDate:30* @var string© CoachingFeedbacksUpr19 Dclass AutomatedReportsCommand extends CommandActivityUpdatedDate:31© Command.phpClosingPeriodFilter:32 Gtprocected sdescription = sends aucomated reports Dased on user tinc Crearevaroaseusers.oClosingPeriodFilter:c Daraoase oecountoi* Log prefix for all log messages© DeleteOldAiCrmNotesC:*/35 C© DeleteS3LeftoversComipublic function __construct(private readonly LoggerInterface $logger,DevPostmanCommand./private const string LOG_PREFIX = '[automated-reports]':public function __constrprivate readonly Actprivate readonly AutomatedReportsRepository $reportRepository,© DiarizeViaAiParticipantk/**private readonly Ela38private readonly AutomatedReportsService $automatedReportsServi© EncryptTokensComman* The name and signature of the console command.private readonly Log39private readonly BusDispatcher $dispatcher,© EngagementStatsRegen) {...}© FeatureFlagsHelper.php40Df..3* @var string© FixCrossTenantissues.p43/**© FlushRolesPermissionsCprotected $signature = 'automated-reports';* Fetch activity IDs fo45* Execute the console command.© GeneratelnternalWebho* Date filters stored• GroupSetDefaultLangua31 GtCascade & Y!Command &elprotected $signature = l'automated-reports f--report-id= : Process 40* no date constraint .© HelperTruncateCoachin© HubspotJournalPollingC/*** Creturn string[] Actipublic function handle(): int© HubspotWebhookServic* The console command description.*/© ImportRecording.phppublic function getActiv@ Imnortli|sercFromCcvEil$reportResults = $this->reportRepository->getGeneratedNotSentRe* Ovar stringSearch $savedSearch© IterateUsersCommand.foreach ($reportResults as $reportResult) {*/User $user,cJiminnvcacheclearcomprotected $description = 'Process automated reports based on theil47): array {/** @var AutomatedReportResult $reportResult */© JiminnyDebugCommanc(c)Jminnvser-ncrvotedio$validRecipients = $this->automatedReportsService->getValic38 Gprotected Sdescription ="Process automated reports based on thei, 48$requestParams = $thif ($this->automatedReportsService->shouldSendReport($valic(c) Jiminny okenintocomm$criteria = Criteria$this->logger->info(self::LOG_PREFIX'Dispatching© MakeSlackLiveCoaching'uuid' => $reportResult->getUuid(),41 đtpublic function __construct(array_merge(Sreq© ManageScimForTeam.p1):nuser->certnezoprivate readonly LoggerInterface $logger,© MarkBranchForEnvironnprivate readonly BusDispatcher $dispatcher,© MuteOrganizerChannel.$this->dispatcher->dispatch(new SendReportJob($reportReprivate readonly AutomatedReportsRepository $reportRepositon© PhpApm.php$filterSet = $this->© PropagateCoachingFeerparent::__constructO);© PurgeConferences.php$activityIds = $this© PurgeSoftDeletedOpporreturn commandallas. • SuccEss.© PurgeSyncBatchesCom$this->logger->info((C) RecalculateDealRisksCd50* Execute the console command.C) RemoveDeleteMarkersd61'saved_search_id'user_id'= Sus© RemoveExpiredNudgest* Oreturn int'activity_count'© RemoveUnusedParticip:1);© ResetElasticSearch.phppublic function handle(): int© RestoreActivityCrmProvreturn $activityIds;© RestoreActivityTypeCor1 1 of 6 estitsish>1 v Accept File *-1** Retect FitE PDX®. ESPapftedle); →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33), 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:41• RequestGenerateAskJiminnyReportJobTest -CascadeFixing ReportControlleAutomated Report MarAutomated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns emoty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +81 -5 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leamslo:lyso chars, 1/ line breaksuir-o( 4 spaces...
|
10884
|
|
10886
|
214
|
45
|
2026-04-14T09:02:45.079341+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157365079_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:44+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
8596388193620349321
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:44+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
10882
|
|
10887
|
215
|
60
|
2026-04-14T09:02:45.049051+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157365049_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpFV faVsco.js v#11894 on JY-18909-automated-reports-ask-iminny K vProject v© ReportController.phpJiminnyDeouecommana.ong© AutomatedReportsCommapd.php x= custom.log= laravel.logProphetAiAutomatedReportsSendCommand.php >© AddLayoutEntities.php© Team.php<?phps Sr iminny@localnosuiv D Reports© AutomatedReportsClAutomatedReportsService.phpdeclare(strict_types=1);A HS_local [jiminny@localhost]© AutomatedReportsReу IгаскrrovldernstalleacventoneA console (PROD]Al console [EU]© AutomatedReportsStc UserPilotacuiviiyListener.oneC ActivityLogged.phpnamespace Jiminny\Console\Commands\Reports;4 console [STAGING© CreateMockAskJimir© DeleteReportComma(e AutomatedRenortscalllbackService.onv© RequestGenerateAskJiminnyReportJob.phpuse Carbon\Carbon;AskJiminnyReportActivityService.php x© GenerateMarketingR© RequestGenerateReportJob.php© AutomatedReportResult.phpluse uumnare vonsole conmano.© RequestGenerateAskJiminnyReportJobTest© Team.phpuse uumnare conuracus bus usparcher as bususpatchert© Usage.php(C) AutomatedReport.phpluseuunnare suooor coctecconAcceptD Slackclass AutomatedReportsSendCommand extends CommandAnalyzing...Rejectuse Jiminny Jobs AutomatedReports RequestGenerateAskJiminnvReportJob:class AskJiminnyReportActivi_leams* ovar stringuse Jllinny Joos Automaceareporus requescbeneracereportJob*/D Tracks25 Ctprotected $signature = 'automated-reports:send';use samanny mouecs Aucolllaceunesore.private const int DEFAULO TranscriptionJuse Jiminny\Models\Team;O Twiliouse Jiminny\Repositories\AutomatedReportsRepository;private const array DATED Usersuse Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;ActivityActualDate:* The console command description.Vocabularyuse Psr\Log\LoggerInterface;ActivityActualDate::CZoomActivityUpdatedDate:30* @var string© CoachingFeedbacksUpr19 Dclass AutomatedReportsCommand extends CommandActivityUpdatedDate:31© Command.phpClosingPeriodFilter:32 Gtprocected sdescription = sends aucomated reports Dased on user tinc Crearevaroaseusers.oClosingPeriodFilter:c Daraoase oecountoi* Log prefix for all log messages© DeleteOldAiCrmNotesC:*/35 C© DeleteS3LeftoversComipublic function __construct(private readonly LoggerInterface $logger,DevPostmanCommand./private const string LOG_PREFIX = '[automated-reports]':public function __constrprivate readonly Actprivate readonly AutomatedReportsRepository $reportRepository,© DiarizeViaAiParticipantk/**private readonly Ela38private readonly AutomatedReportsService $automatedReportsServi© EncryptTokensComman* The name and signature of the console command.private readonly Log39private readonly BusDispatcher $dispatcher,© EngagementStatsRegen) {...}© FeatureFlagsHelper.php40Df..3* @var string© FixCrossTenantissues.p43/**© FlushRolesPermissionsCprotected $signature = 'automated-reports';45* Execute the console command.© GeneratelnternalWebho• GroupSetDefaultLangua31 Gt* Oreturn intCascade & Y!Command &1protected $signature = l'automated-reports f--report-id= : Process 40* Fetch activity IDs fo* Date filters stored* no date constraint .© HelperTruncateCoachin© HubspotJournalPollingC/*** Creturn string[] Actipublic function handle(): int© HubspotWebhookServic* The console command description.© ImportRecording.php@ Imnortli|sercFromCcvEil$reportResults = $this->reportRepository->getGeneratedNotSentRe© IterateUsersCommand.cJiminnvcacheclearcom© JiminnyDebugCommanc(c)Jminnvser-ncrvotedio(c) Jiminny okenintocomm© MakeSlackLiveCoaching© ManageScimForTeam.pforeach ($reportResults as $reportResult) {/** @var AutomatedReportResult $reportResult */$validRecipients = $this->automatedReportsService->getValic38 Gif ($this->automatedReportsService->shouldSendReport($valic$this->logger->info(self::LOG_PREFIX'Dispatching'uuid' => $reportResult->getUuid(),41 đt1):* Ovar string*/protected $description = 'Process automated reports based on theil47protected Sdescription ="Process automated reports based on thei, 48*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge(Sreqnuser->certnezo© MarkBranchForEnvironn© MuteOrganizerChannel.$this->dispatcher->dispatch(new SendReportJob($reportRepublic function __construct(private readonly LoggerInterface $logger,private readonly BusDispatcher $dispatcher,private readonly AutomatedReportsRepository $reportRepositon© PhpApm.php$filterSet = $this->© PropagateCoachingFeerparent::__construct();© PurgeConferences.php$activityIds = $this© PurgeSoftDeletedOpporreturn commandallas. • SuccEss.© PurgeSyncBatchesCom(C) RecalculateDealRisksCd50* Execute the console command.C) RemoveDeleteMarkersd61© RemoveExpiredNudgest$this->logger->info('saved_search_id'user_id'= Sus'activity_count'* Oreturn int© RemoveUnusedParticip:1);© ResetElasticSearch.phppublic function handle(): int© RestoreActivityCrmProvreturn $activityIds;© RestoreActivityTypeCor1 1 of 6 estitsish>1 v Accept File *-1** Retect FitE PDX. 'ESRapftedle); →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33), 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:44• RequestGenerateAskJiminnyReportJobTest -CascadeFixing ReportControlleAutomated Report MarAutomated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns emoty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +81 -5 ›Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasur leamsuir-o( 4 spaces...
|
NULL
|
3843870077889727942
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpFV faVsco.js v#11894 on JY-18909-automated-reports-ask-iminny K vProject v© ReportController.phpJiminnyDeouecommana.ong© AutomatedReportsCommapd.php x= custom.log= laravel.logProphetAiAutomatedReportsSendCommand.php >© AddLayoutEntities.php© Team.php<?phps Sr iminny@localnosuiv D Reports© AutomatedReportsClAutomatedReportsService.phpdeclare(strict_types=1);A HS_local [jiminny@localhost]© AutomatedReportsReу IгаскrrovldernstalleacventoneA console (PROD]Al console [EU]© AutomatedReportsStc UserPilotacuiviiyListener.oneC ActivityLogged.phpnamespace Jiminny\Console\Commands\Reports;4 console [STAGING© CreateMockAskJimir© DeleteReportComma(e AutomatedRenortscalllbackService.onv© RequestGenerateAskJiminnyReportJob.phpuse Carbon\Carbon;AskJiminnyReportActivityService.php x© GenerateMarketingR© RequestGenerateReportJob.php© AutomatedReportResult.phpluse uumnare vonsole conmano.© RequestGenerateAskJiminnyReportJobTest© Team.phpuse uumnare conuracus bus usparcher as bususpatchert© Usage.php(C) AutomatedReport.phpluseuunnare suooor coctecconAcceptD Slackclass AutomatedReportsSendCommand extends CommandAnalyzing...Rejectuse Jiminny Jobs AutomatedReports RequestGenerateAskJiminnvReportJob:class AskJiminnyReportActivi_leams* ovar stringuse Jllinny Joos Automaceareporus requescbeneracereportJob*/D Tracks25 Ctprotected $signature = 'automated-reports:send';use samanny mouecs Aucolllaceunesore.private const int DEFAULO TranscriptionJuse Jiminny\Models\Team;O Twiliouse Jiminny\Repositories\AutomatedReportsRepository;private const array DATED Usersuse Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;ActivityActualDate:* The console command description.Vocabularyuse Psr\Log\LoggerInterface;ActivityActualDate::CZoomActivityUpdatedDate:30* @var string© CoachingFeedbacksUpr19 Dclass AutomatedReportsCommand extends CommandActivityUpdatedDate:31© Command.phpClosingPeriodFilter:32 Gtprocected sdescription = sends aucomated reports Dased on user tinc Crearevaroaseusers.oClosingPeriodFilter:c Daraoase oecountoi* Log prefix for all log messages© DeleteOldAiCrmNotesC:*/35 C© DeleteS3LeftoversComipublic function __construct(private readonly LoggerInterface $logger,DevPostmanCommand./private const string LOG_PREFIX = '[automated-reports]':public function __constrprivate readonly Actprivate readonly AutomatedReportsRepository $reportRepository,© DiarizeViaAiParticipantk/**private readonly Ela38private readonly AutomatedReportsService $automatedReportsServi© EncryptTokensComman* The name and signature of the console command.private readonly Log39private readonly BusDispatcher $dispatcher,© EngagementStatsRegen) {...}© FeatureFlagsHelper.php40Df..3* @var string© FixCrossTenantissues.p43/**© FlushRolesPermissionsCprotected $signature = 'automated-reports';45* Execute the console command.© GeneratelnternalWebho• GroupSetDefaultLangua31 Gt* Oreturn intCascade & Y!Command &1protected $signature = l'automated-reports f--report-id= : Process 40* Fetch activity IDs fo* Date filters stored* no date constraint .© HelperTruncateCoachin© HubspotJournalPollingC/*** Creturn string[] Actipublic function handle(): int© HubspotWebhookServic* The console command description.© ImportRecording.php@ Imnortli|sercFromCcvEil$reportResults = $this->reportRepository->getGeneratedNotSentRe© IterateUsersCommand.cJiminnvcacheclearcom© JiminnyDebugCommanc(c)Jminnvser-ncrvotedio(c) Jiminny okenintocomm© MakeSlackLiveCoaching© ManageScimForTeam.pforeach ($reportResults as $reportResult) {/** @var AutomatedReportResult $reportResult */$validRecipients = $this->automatedReportsService->getValic38 Gif ($this->automatedReportsService->shouldSendReport($valic$this->logger->info(self::LOG_PREFIX'Dispatching'uuid' => $reportResult->getUuid(),41 đt1):* Ovar string*/protected $description = 'Process automated reports based on theil47protected Sdescription ="Process automated reports based on thei, 48*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge(Sreqnuser->certnezo© MarkBranchForEnvironn© MuteOrganizerChannel.$this->dispatcher->dispatch(new SendReportJob($reportRepublic function __construct(private readonly LoggerInterface $logger,private readonly BusDispatcher $dispatcher,private readonly AutomatedReportsRepository $reportRepositon© PhpApm.php$filterSet = $this->© PropagateCoachingFeerparent::__construct();© PurgeConferences.php$activityIds = $this© PurgeSoftDeletedOpporreturn commandallas. • SuccEss.© PurgeSyncBatchesCom(C) RecalculateDealRisksCd50* Execute the console command.C) RemoveDeleteMarkersd61© RemoveExpiredNudgest$this->logger->info('saved_search_id'user_id'= Sus'activity_count'* Oreturn int© RemoveUnusedParticip:1);© ResetElasticSearch.phppublic function handle(): int© RestoreActivityCrmProvreturn $activityIds;© RestoreActivityTypeCor1 1 of 6 estitsish>1 v Accept File *-1** Retect FitE PDX. 'ESRapftedle); →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33), 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:44• RequestGenerateAskJiminnyReportJobTest -CascadeFixing ReportControlleAutomated Report MarAutomated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns emoty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +81 -5 ›Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasur leamsuir-o( 4 spaces...
|
NULL
|
|
10888
|
215
|
61
|
2026-04-14T09:02:47.688998+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157367688_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFVtavsco.isvViewNavigateCodeLaravelRef PhpStormFileFVtavsco.isvViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-liminny kvToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack• TeamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.phpo Cearevaroaseusers.oc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand.|© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© FixCrossTenantissues.p© FlushRolesPermissionsC© GeneratelnternalWebho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic© ImportRecording.php@ Imnortl|sercFromCcvEill(c) IterateUsersCommand.cJiminnvcacheclearcom(c) minnv Deouacommanc(c)Jminnvser-ncrvotedio(c) Jiminny okenintocomm© MakeSlackLiveCoaching© ManageScimForTeam.p© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(C) RecalculateDealRisksCdC) RemoveDeleteMarkersd© RemoveExpiredNudgest© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnybebuecommana.ongAutomaleakeportscommana.ong© AutomatedReportsSendCommand.phpC AutomatedReportsRepository.phpAulomaleakeporisservice.onoc CrealenelaAcuiviyevent.ono• TrackProviderInstalledEvent.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php© RequestGenerateReportJob.php© UserPilotActivityListener.php© AutomatedReportResult.phps.ong© ActivityLogged.php© AutomatedReport.phpdeclare(strict_types=1);namespace Jiminny\Console\Commands\Reports;use Carbon\Carbon;uuse uunnare console conmanoruse uumnare conuracus bus usparcher as bususoatcher.[useumnare suooor Locrecclomuse sainny oos Auronareckeoors reoues.cenerareask...mnnvreoortJoo.use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;use valuny mouees Aucolllaceuneoore.Juse Jiminny \Models\Team;use Jiminny\Repositories\AutomatedReportsRepository:use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;use Psr\Log\LoggerInterface;kenect19 Dclass AutonaredreoorrStonmano extenos conmano23/*** Log prefix for all log messages*/private const string LOG_PREFIX =[automated-reports]'/*** The name and signature of the console command.29* @var string*/Cascade & XICommand &elprotected $signature = 'automated-reports';31 Gtprotected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}':*** The console command description.* Ovar stringprotected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly)' ;38 Ctprotected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger4041 đtpublic function __construct(private readonly LoggerInterface $logger,private readonly BusDispatcher $dispatcher,private readonly AutomatedReportsRepository $reportRepository* Execute the console command.* Oreturn intT 1 of 6 editsAccept File &~X Reject File t3@+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.log4 SF ljiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]Al console [EU]4 console [STAGING]© AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F/*** Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;, 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:47• RequestGenerateAskJiminnyReportJobTest-CascadeFixing ReportControlleAutomated Report MaAutomated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +81 -5 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasur leamsuir-o( 4 spaces...
|
NULL
|
-5431219693283045843
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileFVtavsco.isvViewNavigateCodeLaravelRef PhpStormFileFVtavsco.isvViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-liminny kvToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack• TeamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.phpo Cearevaroaseusers.oc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand.|© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© FixCrossTenantissues.p© FlushRolesPermissionsC© GeneratelnternalWebho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic© ImportRecording.php@ Imnortl|sercFromCcvEill(c) IterateUsersCommand.cJiminnvcacheclearcom(c) minnv Deouacommanc(c)Jminnvser-ncrvotedio(c) Jiminny okenintocomm© MakeSlackLiveCoaching© ManageScimForTeam.p© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(C) RecalculateDealRisksCdC) RemoveDeleteMarkersd© RemoveExpiredNudgest© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnybebuecommana.ongAutomaleakeportscommana.ong© AutomatedReportsSendCommand.phpC AutomatedReportsRepository.phpAulomaleakeporisservice.onoc CrealenelaAcuiviyevent.ono• TrackProviderInstalledEvent.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php© RequestGenerateReportJob.php© UserPilotActivityListener.php© AutomatedReportResult.phps.ong© ActivityLogged.php© AutomatedReport.phpdeclare(strict_types=1);namespace Jiminny\Console\Commands\Reports;use Carbon\Carbon;uuse uunnare console conmanoruse uumnare conuracus bus usparcher as bususoatcher.[useumnare suooor Locrecclomuse sainny oos Auronareckeoors reoues.cenerareask...mnnvreoortJoo.use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;use valuny mouees Aucolllaceuneoore.Juse Jiminny \Models\Team;use Jiminny\Repositories\AutomatedReportsRepository:use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;use Psr\Log\LoggerInterface;kenect19 Dclass AutonaredreoorrStonmano extenos conmano23/*** Log prefix for all log messages*/private const string LOG_PREFIX =[automated-reports]'/*** The name and signature of the console command.29* @var string*/Cascade & XICommand &elprotected $signature = 'automated-reports';31 Gtprotected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}':*** The console command description.* Ovar stringprotected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly)' ;38 Ctprotected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger4041 đtpublic function __construct(private readonly LoggerInterface $logger,private readonly BusDispatcher $dispatcher,private readonly AutomatedReportsRepository $reportRepository* Execute the console command.* Oreturn intT 1 of 6 editsAccept File &~X Reject File t3@+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.log4 SF ljiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]Al console [EU]4 console [STAGING]© AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F/*** Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;, 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:47• RequestGenerateAskJiminnyReportJobTest-CascadeFixing ReportControlleAutomated Report MaAutomated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +81 -5 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasur leamsuir-o( 4 spaces...
|
10887
|
|
10889
|
214
|
46
|
2026-04-14T09:02:48.141488+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157368141_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:47+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% C48Fuune 4Today ~New...
|
NULL
|
-4746569452936189767
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:47+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% C48Fuune 4Today ~New...
|
NULL
|
|
10890
|
215
|
62
|
2026-04-14T09:02:50.083510+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157370083_m2.jpg...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Kiosk\AutomatedReports;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityActualDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityUpdatedDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\DealInsights\ClosingPeriodFilter;
use Jiminny\Component\ActivitySearch\Service\ActivitySearch;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\User;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
class AskJiminnyReportActivityService
{
private const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;
private const array DATE_FILTER_KEYS = [
ActivityActualDate::PARAM_START_DATE,
ActivityActualDate::PARAM_END_DATE,
ActivityUpdatedDate::PARAM_UPDATED_FROM,
ActivityUpdatedDate::PARAM_UPDATED_TO,
ClosingPeriodFilter::KEY_START_DATE,
ClosingPeriodFilter::KEY_END_DATE,
];
public function __construct(
private readonly ActivitySearch $activitySearch,
private readonly ElasticActivityRepository $elasticRepository,
private readonly LoggerInterface $logger,
) {
}
/**
* Fetch activity IDs for a saved search, passing its filters as-is to Criteria.
* Date filters stored on the saved search are excluded; if no other filters exist,
* no date constraint is applied — matching the behaviour of getContextForAskAnythingByFilter.
*
* @return string[] Activity IDs
*/
public function getActivityIdsForSavedSearch(
Search $savedSearch,
User $user,
): array {
$requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);
$criteria = Criteria::createFromRequest(
array_merge($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),
$user->getTimezone()
);
$filterSet = $this->activitySearch->getOnDemandPageFilterSet($criteria, $user);
$activityIds = $this->elasticRepository->onDemandSearchIdsOnly($user, $criteria, $filterSet);
$this->logger->info('[AskJiminnyReport] Fetched activity IDs for saved search', [
'saved_search_id' => $savedSearch->getId(),
'user_id' => $user->getId(),
'activity_count' => count($activityIds),
]);
return $activityIds;
}
private function buildRequestParamsFromSearch(Search $savedSearch, User $user): array
{
$params = [];
$arrayFilterKeys = $this->activitySearch->getArrayFilterKeys($user);
foreach ($savedSearch->getFilters() as $filter) {
$key = $filter->getFilterProperty();
$value = $filter->getFilterValue();
if (in_array($key, self::DATE_FILTER_KEYS, true)) {
continue;
}
if (isset($params[$key])) {
$params[$key][] = $value;
} elseif (in_array($key, $arrayFilterKeys, true)) {
$params[$key] = [$value];
} else {
$params[$key] = $value;
}
}
return $params;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands\Reports;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Illuminate\Support\Collection;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Team;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
class AutomatedReportsCommand extends Command
{
/**
* Log prefix for all log messages
*/
private const string LOG_PREFIX = '[automated-reports]';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger a specific report by ID or UUID.';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
$reportId = $this->option('report-id');
if ($reportId !== null) {
$reports = $this->getReportById($reportId);
} else {
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
}
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
// $this->dispatcher->dispatch($job);
$this->dispatcher->dispatchSync($job);
}
}
private function getReportById(string $reportId): Collection
{
$report = $this->reportRepository->findByIdOrUuid($reportId);
if ($report === null) {
$this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);
$this->warn("Report not found: {$reportId}");
return collect();
}
if (! $report->getStatus()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
]);
$this->warn('Report is inactive — processing anyway (manual override).');
}
$team = $report->getTeam();
if ($team->getStatus() !== Team::STATUS_ACTIVE) {
$this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'teamStatus' => $team->getStatus(),
]);
$this->warn("Team #{$report->getTeamId()} is not active — processing anyway (manual override).");
}
if ($report->isExpired()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'expiresAt' => $report->getExpiresAt()?->toDateString(),
]);
$this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');
}
$now = Carbon::now();
$frequency = $report->getFrequency();
$wouldRunToday = match ($frequency) {
AutomatedReportsService::FREQUENCY_DAILY => true,
AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),
AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,
AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10], true),
default => false,
};
if (! $wouldRunToday) {
$this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'frequency' => $frequency,
]);
$this->warn("Report frequency is '{$frequency}' — would NOT run today, processing anyway (manual override).");
}
return collect([$report]);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.76171875,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"RequestGenerateAskJiminnyReportJobTest","depth":6,"bounds":{"left":0.7796875,"top":0.017361112,"width":0.12109375,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.6699219,"top":0.19513889,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6816406,"top":0.19513889,"width":0.00859375,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6921875,"top":0.19375,"width":0.00859375,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.7007812,"top":0.19375,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Kiosk\\AutomatedReports;\n\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityActualDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityUpdatedDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\DealInsights\\ClosingPeriodFilter;\nuse Jiminny\\Component\\ActivitySearch\\Service\\ActivitySearch;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\n\nclass AskJiminnyReportActivityService\n{\n private const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;\n\n private const array DATE_FILTER_KEYS = [\n ActivityActualDate::PARAM_START_DATE,\n ActivityActualDate::PARAM_END_DATE,\n ActivityUpdatedDate::PARAM_UPDATED_FROM,\n ActivityUpdatedDate::PARAM_UPDATED_TO,\n ClosingPeriodFilter::KEY_START_DATE,\n ClosingPeriodFilter::KEY_END_DATE,\n ];\n\n public function __construct(\n private readonly ActivitySearch $activitySearch,\n private readonly ElasticActivityRepository $elasticRepository,\n private readonly LoggerInterface $logger,\n ) {\n }\n\n /**\n * Fetch activity IDs for a saved search, passing its filters as-is to Criteria.\n * Date filters stored on the saved search are excluded; if no other filters exist,\n * no date constraint is applied — matching the behaviour of getContextForAskAnythingByFilter.\n *\n * @return string[] Activity IDs\n */\n public function getActivityIdsForSavedSearch(\n Search $savedSearch,\n User $user,\n ): array {\n $requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);\n\n $criteria = Criteria::createFromRequest(\n array_merge($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($criteria, $user);\n\n $activityIds = $this->elasticRepository->onDemandSearchIdsOnly($user, $criteria, $filterSet);\n\n $this->logger->info('[AskJiminnyReport] Fetched activity IDs for saved search', [\n 'saved_search_id' => $savedSearch->getId(),\n 'user_id' => $user->getId(),\n 'activity_count' => count($activityIds),\n ]);\n\n return $activityIds;\n }\n\n private function buildRequestParamsFromSearch(Search $savedSearch, User $user): array\n {\n $params = [];\n $arrayFilterKeys = $this->activitySearch->getArrayFilterKeys($user);\n\n foreach ($savedSearch->getFilters() as $filter) {\n $key = $filter->getFilterProperty();\n $value = $filter->getFilterValue();\n\n if (in_array($key, self::DATE_FILTER_KEYS, true)) {\n continue;\n }\n\n if (isset($params[$key])) {\n $params[$key][] = $value;\n } elseif (in_array($key, $arrayFilterKeys, true)) {\n $params[$key] = [$value];\n } else {\n $params[$key] = $value;\n }\n }\n\n return $params;\n }\n}","depth":4,"bounds":{"left":0.6238281,"top":0.0,"width":0.31953126,"height":1.0},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Kiosk\\AutomatedReports;\n\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityActualDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityUpdatedDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\DealInsights\\ClosingPeriodFilter;\nuse Jiminny\\Component\\ActivitySearch\\Service\\ActivitySearch;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\n\nclass AskJiminnyReportActivityService\n{\n private const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;\n\n private const array DATE_FILTER_KEYS = [\n ActivityActualDate::PARAM_START_DATE,\n ActivityActualDate::PARAM_END_DATE,\n ActivityUpdatedDate::PARAM_UPDATED_FROM,\n ActivityUpdatedDate::PARAM_UPDATED_TO,\n ClosingPeriodFilter::KEY_START_DATE,\n ClosingPeriodFilter::KEY_END_DATE,\n ];\n\n public function __construct(\n private readonly ActivitySearch $activitySearch,\n private readonly ElasticActivityRepository $elasticRepository,\n private readonly LoggerInterface $logger,\n ) {\n }\n\n /**\n * Fetch activity IDs for a saved search, passing its filters as-is to Criteria.\n * Date filters stored on the saved search are excluded; if no other filters exist,\n * no date constraint is applied — matching the behaviour of getContextForAskAnythingByFilter.\n *\n * @return string[] Activity IDs\n */\n public function getActivityIdsForSavedSearch(\n Search $savedSearch,\n User $user,\n ): array {\n $requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);\n\n $criteria = Criteria::createFromRequest(\n array_merge($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($criteria, $user);\n\n $activityIds = $this->elasticRepository->onDemandSearchIdsOnly($user, $criteria, $filterSet);\n\n $this->logger->info('[AskJiminnyReport] Fetched activity IDs for saved search', [\n 'saved_search_id' => $savedSearch->getId(),\n 'user_id' => $user->getId(),\n 'activity_count' => count($activityIds),\n ]);\n\n return $activityIds;\n }\n\n private function buildRequestParamsFromSearch(Search $savedSearch, User $user): array\n {\n $params = [];\n $arrayFilterKeys = $this->activitySearch->getArrayFilterKeys($user);\n\n foreach ($savedSearch->getFilters() as $filter) {\n $key = $filter->getFilterProperty();\n $value = $filter->getFilterValue();\n\n if (in_array($key, self::DATE_FILTER_KEYS, true)) {\n continue;\n }\n\n if (isset($params[$key])) {\n $params[$key][] = $value;\n } elseif (in_array($key, $arrayFilterKeys, true)) {\n $params[$key] = [$value];\n } else {\n $params[$key] = $value;\n }\n }\n\n return $params;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.009375,"height":0.0},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.008203125,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands\\Reports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Bus\\Dispatcher as BusDispatcher;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateReportJob;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\n\nclass AutomatedReportsCommand extends Command\n{\n /**\n * Log prefix for all log messages\n */\n private const string LOG_PREFIX = '[automated-reports]';\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger a specific report by ID or UUID.';\n\n\n public function __construct(\n private readonly LoggerInterface $logger,\n private readonly BusDispatcher $dispatcher,\n private readonly AutomatedReportsRepository $reportRepository\n ) {\n parent::__construct();\n }\n\n /**\n * Execute the console command.\n *\n * @return int\n */\n public function handle(): int\n {\n $this->logger->info(self::LOG_PREFIX . ' Started');\n\n $now = Carbon::now();\n $isMonday = $now->isMonday();\n $isFirstDayOfMonth = $now->day === 1;\n $currentMonth = $now->month;\n\n // Check if the current month is a quarterly month (January, April, July, October)\n $isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);\n\n $this->logger->info(self::LOG_PREFIX . ' Checking conditions', [\n 'isMonday' => $isMonday,\n 'isFirstDayOfMonth' => $isFirstDayOfMonth,\n 'currentMonth' => $currentMonth,\n 'isQuarterlyMonth' => $isQuarterlyMonth,\n ]);\n\n // Process daily reports\n $this->processReports(AutomatedReportsService::FREQUENCY_DAILY);\n\n // Process weekly reports on Mondays\n if ($isMonday) {\n $this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);\n }\n\n // Process monthly reports on the first day of the month\n if ($isFirstDayOfMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);\n }\n\n // Process quarterly reports on the first day of January, April, July, and October\n if ($isFirstDayOfMonth && $isQuarterlyMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);\n }\n\n $this->logger->info(self::LOG_PREFIX . ' Completed');\n\n return 0;\n }\n\n /**\n * Process reports for a specific frequency.\n *\n * @param string $frequency\n *\n * @return void\n */\n private function processReports(string $frequency): void\n {\n $this->logger->info(self::LOG_PREFIX . \" Processing $frequency reports\");\n\n $reportId = $this->option('report-id');\n if ($reportId !== null) {\n $reports = $this->getReportById($reportId);\n } else {\n // Get all enabled, not deleted reports with active teams for the specified frequency\n $reports = $this->reportRepository->getActiveReportsByFrequency($frequency);\n }\n\n $this->logger->info(self::LOG_PREFIX . \" Found {$reports->count()} $frequency reports to process\");\n\n /** @var AutomatedReport $report */\n foreach ($reports as $report) {\n $this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'frequency' => $report->getFrequency(),\n 'type' => $report->getType(),\n ]);\n\n $job = $report->isAskJiminnyReport()\n ? new RequestGenerateAskJiminnyReportJob($report->getUuid())\n : new RequestGenerateReportJob($report->getUuid());\n\n // $this->dispatcher->dispatch($job);\n $this->dispatcher->dispatchSync($job);\n }\n }\n\n private function getReportById(string $reportId): Collection\n {\n $report = $this->reportRepository->findByIdOrUuid($reportId);\n\n if ($report === null) {\n $this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);\n $this->warn(\"Report not found: {$reportId}\");\n\n return collect();\n }\n\n if (! $report->getStatus()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n ]);\n $this->warn('Report is inactive — processing anyway (manual override).');\n }\n\n $team = $report->getTeam();\n if ($team->getStatus() !== Team::STATUS_ACTIVE) {\n $this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'teamStatus' => $team->getStatus(),\n ]);\n $this->warn(\"Team #{$report->getTeamId()} is not active — processing anyway (manual override).\");\n }\n\n if ($report->isExpired()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'expiresAt' => $report->getExpiresAt()?->toDateString(),\n ]);\n $this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');\n }\n\n $now = Carbon::now();\n $frequency = $report->getFrequency();\n $wouldRunToday = match ($frequency) {\n AutomatedReportsService::FREQUENCY_DAILY => true,\n AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),\n AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,\n AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10], true),\n default => false,\n };\n\n if (! $wouldRunToday) {\n $this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'frequency' => $frequency,\n ]);\n $this->warn(\"Report frequency is '{$frequency}' — would NOT run today, processing anyway (manual override).\");\n }\n\n return collect([$report]);\n }\n}","depth":4,"bounds":{"left":0.15234375,"top":0.12777779,"width":0.5601562,"height":0.8722222},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands\\Reports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Bus\\Dispatcher as BusDispatcher;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateReportJob;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\n\nclass AutomatedReportsCommand extends Command\n{\n /**\n * Log prefix for all log messages\n */\n private const string LOG_PREFIX = '[automated-reports]';\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger a specific report by ID or UUID.';\n\n\n public function __construct(\n private readonly LoggerInterface $logger,\n private readonly BusDispatcher $dispatcher,\n private readonly AutomatedReportsRepository $reportRepository\n ) {\n parent::__construct();\n }\n\n /**\n * Execute the console command.\n *\n * @return int\n */\n public function handle(): int\n {\n $this->logger->info(self::LOG_PREFIX . ' Started');\n\n $now = Carbon::now();\n $isMonday = $now->isMonday();\n $isFirstDayOfMonth = $now->day === 1;\n $currentMonth = $now->month;\n\n // Check if the current month is a quarterly month (January, April, July, October)\n $isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);\n\n $this->logger->info(self::LOG_PREFIX . ' Checking conditions', [\n 'isMonday' => $isMonday,\n 'isFirstDayOfMonth' => $isFirstDayOfMonth,\n 'currentMonth' => $currentMonth,\n 'isQuarterlyMonth' => $isQuarterlyMonth,\n ]);\n\n // Process daily reports\n $this->processReports(AutomatedReportsService::FREQUENCY_DAILY);\n\n // Process weekly reports on Mondays\n if ($isMonday) {\n $this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);\n }\n\n // Process monthly reports on the first day of the month\n if ($isFirstDayOfMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);\n }\n\n // Process quarterly reports on the first day of January, April, July, and October\n if ($isFirstDayOfMonth && $isQuarterlyMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);\n }\n\n $this->logger->info(self::LOG_PREFIX . ' Completed');\n\n return 0;\n }\n\n /**\n * Process reports for a specific frequency.\n *\n * @param string $frequency\n *\n * @return void\n */\n private function processReports(string $frequency): void\n {\n $this->logger->info(self::LOG_PREFIX . \" Processing $frequency reports\");\n\n $reportId = $this->option('report-id');\n if ($reportId !== null) {\n $reports = $this->getReportById($reportId);\n } else {\n // Get all enabled, not deleted reports with active teams for the specified frequency\n $reports = $this->reportRepository->getActiveReportsByFrequency($frequency);\n }\n\n $this->logger->info(self::LOG_PREFIX . \" Found {$reports->count()} $frequency reports to process\");\n\n /** @var AutomatedReport $report */\n foreach ($reports as $report) {\n $this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'frequency' => $report->getFrequency(),\n 'type' => $report->getType(),\n ]);\n\n $job = $report->isAskJiminnyReport()\n ? new RequestGenerateAskJiminnyReportJob($report->getUuid())\n : new RequestGenerateReportJob($report->getUuid());\n\n // $this->dispatcher->dispatch($job);\n $this->dispatcher->dispatchSync($job);\n }\n }\n\n private function getReportById(string $reportId): Collection\n {\n $report = $this->reportRepository->findByIdOrUuid($reportId);\n\n if ($report === null) {\n $this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);\n $this->warn(\"Report not found: {$reportId}\");\n\n return collect();\n }\n\n if (! $report->getStatus()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n ]);\n $this->warn('Report is inactive — processing anyway (manual override).');\n }\n\n $team = $report->getTeam();\n if ($team->getStatus() !== Team::STATUS_ACTIVE) {\n $this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'teamStatus' => $team->getStatus(),\n ]);\n $this->warn(\"Team #{$report->getTeamId()} is not active — processing anyway (manual override).\");\n }\n\n if ($report->isExpired()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'expiresAt' => $report->getExpiresAt()?->toDateString(),\n ]);\n $this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');\n }\n\n $now = Carbon::now();\n $frequency = $report->getFrequency();\n $wouldRunToday = match ($frequency) {\n AutomatedReportsService::FREQUENCY_DAILY => true,\n AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),\n AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,\n AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10], true),\n default => false,\n };\n\n if (! $wouldRunToday) {\n $this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'frequency' => $frequency,\n ]);\n $this->warn(\"Report frequency is '{$frequency}' — would NOT run today, processing anyway (manual override).\");\n }\n\n return collect([$report]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.0140625,"top":0.041666668,"width":0.028515626,"height":0.021527778},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4642392915445425012
|
7004952196924009268
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Kiosk\AutomatedReports;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityActualDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityUpdatedDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\DealInsights\ClosingPeriodFilter;
use Jiminny\Component\ActivitySearch\Service\ActivitySearch;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\User;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
class AskJiminnyReportActivityService
{
private const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;
private const array DATE_FILTER_KEYS = [
ActivityActualDate::PARAM_START_DATE,
ActivityActualDate::PARAM_END_DATE,
ActivityUpdatedDate::PARAM_UPDATED_FROM,
ActivityUpdatedDate::PARAM_UPDATED_TO,
ClosingPeriodFilter::KEY_START_DATE,
ClosingPeriodFilter::KEY_END_DATE,
];
public function __construct(
private readonly ActivitySearch $activitySearch,
private readonly ElasticActivityRepository $elasticRepository,
private readonly LoggerInterface $logger,
) {
}
/**
* Fetch activity IDs for a saved search, passing its filters as-is to Criteria.
* Date filters stored on the saved search are excluded; if no other filters exist,
* no date constraint is applied — matching the behaviour of getContextForAskAnythingByFilter.
*
* @return string[] Activity IDs
*/
public function getActivityIdsForSavedSearch(
Search $savedSearch,
User $user,
): array {
$requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);
$criteria = Criteria::createFromRequest(
array_merge($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),
$user->getTimezone()
);
$filterSet = $this->activitySearch->getOnDemandPageFilterSet($criteria, $user);
$activityIds = $this->elasticRepository->onDemandSearchIdsOnly($user, $criteria, $filterSet);
$this->logger->info('[AskJiminnyReport] Fetched activity IDs for saved search', [
'saved_search_id' => $savedSearch->getId(),
'user_id' => $user->getId(),
'activity_count' => count($activityIds),
]);
return $activityIds;
}
private function buildRequestParamsFromSearch(Search $savedSearch, User $user): array
{
$params = [];
$arrayFilterKeys = $this->activitySearch->getArrayFilterKeys($user);
foreach ($savedSearch->getFilters() as $filter) {
$key = $filter->getFilterProperty();
$value = $filter->getFilterValue();
if (in_array($key, self::DATE_FILTER_KEYS, true)) {
continue;
}
if (isset($params[$key])) {
$params[$key][] = $value;
} elseif (in_array($key, $arrayFilterKeys, true)) {
$params[$key] = [$value];
} else {
$params[$key] = $value;
}
}
return $params;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands\Reports;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Illuminate\Support\Collection;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Team;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
class AutomatedReportsCommand extends Command
{
/**
* Log prefix for all log messages
*/
private const string LOG_PREFIX = '[automated-reports]';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger a specific report by ID or UUID.';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
$reportId = $this->option('report-id');
if ($reportId !== null) {
$reports = $this->getReportById($reportId);
} else {
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
}
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
// $this->dispatcher->dispatch($job);
$this->dispatcher->dispatchSync($job);
}
}
private function getReportById(string $reportId): Collection
{
$report = $this->reportRepository->findByIdOrUuid($reportId);
if ($report === null) {
$this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);
$this->warn("Report not found: {$reportId}");
return collect();
}
if (! $report->getStatus()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
]);
$this->warn('Report is inactive — processing anyway (manual override).');
}
$team = $report->getTeam();
if ($team->getStatus() !== Team::STATUS_ACTIVE) {
$this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'teamStatus' => $team->getStatus(),
]);
$this->warn("Team #{$report->getTeamId()} is not active — processing anyway (manual override).");
}
if ($report->isExpired()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'expiresAt' => $report->getExpiresAt()?->toDateString(),
]);
$this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');
}
$now = Carbon::now();
$frequency = $report->getFrequency();
$wouldRunToday = match ($frequency) {
AutomatedReportsService::FREQUENCY_DAILY => true,
AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),
AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,
AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10], true),
default => false,
};
if (! $wouldRunToday) {
$this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'frequency' => $frequency,
]);
$this->warn("Report frequency is '{$frequency}' — would NOT run today, processing anyway (manual override).");
}
return collect([$report]);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All...
|
NULL
|
|
10891
|
214
|
47
|
2026-04-14T09:02:51.103934+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157371103_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:50+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
4901150412896676668
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:50+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
10889
|
|
10892
|
215
|
63
|
2026-04-14T09:02:51.137096+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157371137_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileViewNavigateCodelaraveRefactonToolsWin PhpStormFileViewNavigateCodelaraveRefactonToolsWindowHelpFVtavsco.isv#11894 on JY-18909-automated-reports-ask-iminny kvProject vProphetAiv _ Reports(C AutomatedReportsC(©) AutomatedReportsR(C) AutomatedReportsS(C) CreateMockAsk. liminC DeleteReportcommae ceneratemarkerinok©leam.phpC Usage.phpM Slack_leams→ Tracks_ TranscriptionD TwilioD Users_ Vocabulary_ 40om© coachingeedbacksupcg command.phpc Crearevaroaseusers.oc Daraoase oecountoiC DeleteOldAiCrmNotesC(C) DeleteS3LeftoversCom(C DevPostmanCommand.C DiarizeViaAiParticipantl(©) EncryptTokensCommar(©) EngagementStatsRegerT FeatureFlagsHelper.php© rixcross|enantissues.p(c) -ushro espermissions(e) Generatelnterna weoho(C) GroupSetDefaultLanquaC) HelperTruncateCoachin(C) HubspotJournalPollingC(C) HubspotWebhookServic(c) ImportRecording.phpC ImportUsersFromCsvFilC IterateUsersCommand.(©) JiminnyCacheClearCom(c) minnv Deouacommanc© Jiminnysetencryptedlo(c) Jiminny okenintocommMakeslackLvecoaching(c Manacescimror eam.o(©) MarkBranchForEnvironn(C) MuteOrganizerChannel(C) PhpApm.php(C PropagateCoachingFee(©) PurgeConterences.php(©) PurgeSoftDeletedOppol© PurgeSyncBatchesCom(e Recalculatebealkisksco(c) Removebe eremarkersc(e) Remove-xoiredNudoes(C) RemoveUnusedParticio:C ResetElasticSearch.php(C) RestoreActivityCrmProv(C) RestoreActivityTypeCorc) RenortController.ongJiminnybebuecommana.ongAutomaleakeportscommana.ongC) AutomatedReportsSendCommand.phpC AddLayoutEntities.php(©) Team.php= custom.log= laravel.logC AutomatedReportsRepository.phpAulomaleakeporisservice.onoc CrealenelaAcuiviyevent.ono© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php4 SF [iiminny@localhostl© UserPilotActivityListener.php9 ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpc HS_local Jiminny@localhost)(©) AutomatedReportResult.phpc) Automatedkeport.onee console (PROD]¿ console (EU]srongA console [STAGINGAskJiminnyReportActivityService.php Xdeclare(strict_types=1):C RequestGenerateAskJiminnyReportJobTesnamespace Jiminny Console\commands Reports:MLAI^class AskJLmennykeporcAct1V1use cardon cardon;uuse uumnare console conmanoruunnare conuracus bus usparcher as bususoatcher.luse Illuminate Support Collection:use sainny oos Auronareckeoors reoues.cenerareask...mnnvreoortJoo.use Jiminny Jobs AutomatedReports RequestGenerateReportJob:use Jiminny Models AutomatedReport:use Jiminny Models Team:use Jiminny Repositories AutomatedReportsrepos1tory:use Jiminny Services K1OSK AutomatedReports AutomatedReportsserviceuse Psr\LogLoggerinterface:class Autonaredredor scommano extenos connano/***/* Loa prefix for all loa messages33private const string LOG_PREFIX ='lautomated-reports.':/*** The name and signature of the console command.*ovar string*/Cascade 88 LCommand &1316protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}':33* The console command description.* dvar strincprotected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly)';AcceptReject38 6protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to danually trigger i5141©)public function __construct(private readonly LoggerInterface $logger,private readonly BusDispatcher Sdispatcher.private readonly AutomatedReportsRepository SreportRepositoryparent::__constructh* Execure mne console conmena.** dreturn int*/T 1 of 6 edits JAccept File &+3X Reject File t3@+ 2 of 2 files →nuhl ic function handlel. intWinasurt changelog 2.12.21: A new version is avallable. | View Changelog (today 10:33)private const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate:ActivityUpdatedDate:ActivityUpdatedDate:ClosingPer1odrilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log)4...3* Fetch activity IDs fo* Date filters stored* no dace constraint* @return stringl] Act:*/public function getActivSearch SsavedSearchUser suser): array {srequestParams = sthnenrera s untuerarray_mergelsrecnuser->certnezoSfilterSet = $this->SactivityIds = $thissthis->logger->infol'saved_search_10'User_1d'= SUSactvt counte1);return Sactivitvids, 0labl: Support Daily • in 2h 58 m100% [2Tue 14 Apr 12:02:50• RequestGenerateAskJiminnyReportJobTest-CascadeFixing ReportControlleAutomated Report MaAutomated Report1n7 211 and adc valication with loas insideGAutomatedRenortscommand. 0hn1 209-210et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSingleReport/warnlfNotApp Licab leForSchedu lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1-1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID•Non-numenc → Uu d ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +78 -4 >Ask anything (&+L)+ < CodeClaude Sennet 4.6Reject allAccept allwinasun leams14:2uir-oia 4 spaces...
|
NULL
|
-7651469665894883074
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileViewNavigateCodelaraveRefactonToolsWin PhpStormFileViewNavigateCodelaraveRefactonToolsWindowHelpFVtavsco.isv#11894 on JY-18909-automated-reports-ask-iminny kvProject vProphetAiv _ Reports(C AutomatedReportsC(©) AutomatedReportsR(C) AutomatedReportsS(C) CreateMockAsk. liminC DeleteReportcommae ceneratemarkerinok©leam.phpC Usage.phpM Slack_leams→ Tracks_ TranscriptionD TwilioD Users_ Vocabulary_ 40om© coachingeedbacksupcg command.phpc Crearevaroaseusers.oc Daraoase oecountoiC DeleteOldAiCrmNotesC(C) DeleteS3LeftoversCom(C DevPostmanCommand.C DiarizeViaAiParticipantl(©) EncryptTokensCommar(©) EngagementStatsRegerT FeatureFlagsHelper.php© rixcross|enantissues.p(c) -ushro espermissions(e) Generatelnterna weoho(C) GroupSetDefaultLanquaC) HelperTruncateCoachin(C) HubspotJournalPollingC(C) HubspotWebhookServic(c) ImportRecording.phpC ImportUsersFromCsvFilC IterateUsersCommand.(©) JiminnyCacheClearCom(c) minnv Deouacommanc© Jiminnysetencryptedlo(c) Jiminny okenintocommMakeslackLvecoaching(c Manacescimror eam.o(©) MarkBranchForEnvironn(C) MuteOrganizerChannel(C) PhpApm.php(C PropagateCoachingFee(©) PurgeConterences.php(©) PurgeSoftDeletedOppol© PurgeSyncBatchesCom(e Recalculatebealkisksco(c) Removebe eremarkersc(e) Remove-xoiredNudoes(C) RemoveUnusedParticio:C ResetElasticSearch.php(C) RestoreActivityCrmProv(C) RestoreActivityTypeCorc) RenortController.ongJiminnybebuecommana.ongAutomaleakeportscommana.ongC) AutomatedReportsSendCommand.phpC AddLayoutEntities.php(©) Team.php= custom.log= laravel.logC AutomatedReportsRepository.phpAulomaleakeporisservice.onoc CrealenelaAcuiviyevent.ono© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php4 SF [iiminny@localhostl© UserPilotActivityListener.php9 ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpc HS_local Jiminny@localhost)(©) AutomatedReportResult.phpc) Automatedkeport.onee console (PROD]¿ console (EU]srongA console [STAGINGAskJiminnyReportActivityService.php Xdeclare(strict_types=1):C RequestGenerateAskJiminnyReportJobTesnamespace Jiminny Console\commands Reports:MLAI^class AskJLmennykeporcAct1V1use cardon cardon;uuse uumnare console conmanoruunnare conuracus bus usparcher as bususoatcher.luse Illuminate Support Collection:use sainny oos Auronareckeoors reoues.cenerareask...mnnvreoortJoo.use Jiminny Jobs AutomatedReports RequestGenerateReportJob:use Jiminny Models AutomatedReport:use Jiminny Models Team:use Jiminny Repositories AutomatedReportsrepos1tory:use Jiminny Services K1OSK AutomatedReports AutomatedReportsserviceuse Psr\LogLoggerinterface:class Autonaredredor scommano extenos connano/***/* Loa prefix for all loa messages33private const string LOG_PREFIX ='lautomated-reports.':/*** The name and signature of the console command.*ovar string*/Cascade 88 LCommand &1316protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}':33* The console command description.* dvar strincprotected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly)';AcceptReject38 6protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to danually trigger i5141©)public function __construct(private readonly LoggerInterface $logger,private readonly BusDispatcher Sdispatcher.private readonly AutomatedReportsRepository SreportRepositoryparent::__constructh* Execure mne console conmena.** dreturn int*/T 1 of 6 edits JAccept File &+3X Reject File t3@+ 2 of 2 files →nuhl ic function handlel. intWinasurt changelog 2.12.21: A new version is avallable. | View Changelog (today 10:33)private const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate:ActivityUpdatedDate:ActivityUpdatedDate:ClosingPer1odrilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log)4...3* Fetch activity IDs fo* Date filters stored* no dace constraint* @return stringl] Act:*/public function getActivSearch SsavedSearchUser suser): array {srequestParams = sthnenrera s untuerarray_mergelsrecnuser->certnezoSfilterSet = $this->SactivityIds = $thissthis->logger->infol'saved_search_10'User_1d'= SUSactvt counte1);return Sactivitvids, 0labl: Support Daily • in 2h 58 m100% [2Tue 14 Apr 12:02:50• RequestGenerateAskJiminnyReportJobTest-CascadeFixing ReportControlleAutomated Report MaAutomated Report1n7 211 and adc valication with loas insideGAutomatedRenortscommand. 0hn1 209-210et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSingleReport/warnlfNotApp Licab leForSchedu lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1-1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID•Non-numenc → Uu d ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +78 -4 >Ask anything (&+L)+ < CodeClaude Sennet 4.6Reject allAccept allwinasun leams14:2uir-oia 4 spaces...
|
10890
|
|
10893
|
215
|
64
|
2026-04-14T09:02:53.772170+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157373772_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewFV faVsco.js vNavigateCodeLara PhpStormFileEditViewFV faVsco.js vNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack• TeamsD TracksO TranscriptionO TwilioD UsersVocabulary@Zoom© CoachingFeedbacksUpr© Command.phpo Cearevaroaseusers.oc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© FixCrossTenantlssues.p(c) -ushro espermissionsa(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.p© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo(c) Jiminny okenintocommMakeslackLvecoaching(c Manacescimror eam.oc мarkbranchrorenvironh© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e Recalculatebealkisksco(c) Removebe eremarkersc(e) Remove-xoiredNudoesc removeunusecrarclo© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnybeouecommana.ong© AutomatedReportsCommand.php x|© AutomatedReportsSendCommand.phpC AutomatedReportsRepository.phpC AutomatedReportsService.phpCreateHeldActivityEvent.php• TrackProviderInstalledEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php© AutomatedReportResult.phpclass AutomatedReportsCommand extends Commandpublic function handle(): intD):© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php© RequestGenerateReportJob.php899099100101102103104105106108109110111112113115116117118119120// Process daily reportspuh1s->processkeporus trequency: AUtomacedкeportsservice: :FREQUENCY_DALLY)HProcess veekty recors on monoaysif ($isMonday) €$this->processReports( frequency: AutomatedReportsService: :FREQUENCY_WEEKLY);// Process monthly reports on the first day of the monthif ($isFirstDay0fMonth) €$this->processReports( frequency: AutomatedReportsService::FREQUENCY_MONTHLY);// Process quarterly reports on the first day of January, April, July, and Octoberif ($isFirstDay0fMonth && $isQuarterZyMonth) &$this->processReports( frequency: AutomatedReportsService::FREQUENCY_QUARTERLY);$this->logger->info(self::LOG_PREFIXCompleted');return 0;* Process reports for a spec:Cascade & YICommand Sel* @param string $frequency* Oreturn void*/private function processReports(string $frequency): void$this->logger-›info(self::L0G_PREFIX . " Processing $frequency reports");// Get all enabled, not deleted reports with active teams for the specified frequency$reports = $this->reportRepository->getActiveReportsByFrequency ($frequency);$reports = collect([AutomatedReport: :find (68)]);$reportId = $this->option( key: 'report-id');if ($reportid !== nulU) k$reports = $this->getReportById($reportId);felse {// Get all enabled, not deleted reports with active teams for the specified frequency$reports = $this-›reportRepository->getActiveReportsByFrequency($frequency);AcceptReject$this->logger→>info(self::L0G_PREFIX• " Found ($reports->count()} $frequency reports to process");/** @var AutomatedReport $report */foreach ($reports as $report) {$this->logger->info(self::LOG_PREFIX'reportUuid'=> $report-›getuuidoWindsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]Al console [EU]4 console [STAGING)) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActivi3334ДДAAд57private const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F* Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo$filterSet = $this->$activityIds = $this$this->logger->info(' saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;, 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:53• RequestGenerateAskJiminnyReportJobTest -CascadeFixing ReportControlleAutomated Report MarAutomated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +77 -3 >Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams14:2uir-o( 4 spaces...
|
NULL
|
3583820075929564160
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditViewFV faVsco.js vNavigateCodeLara PhpStormFileEditViewFV faVsco.js vNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack• TeamsD TracksO TranscriptionO TwilioD UsersVocabulary@Zoom© CoachingFeedbacksUpr© Command.phpo Cearevaroaseusers.oc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© FixCrossTenantlssues.p(c) -ushro espermissionsa(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.p© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo(c) Jiminny okenintocommMakeslackLvecoaching(c Manacescimror eam.oc мarkbranchrorenvironh© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e Recalculatebealkisksco(c) Removebe eremarkersc(e) Remove-xoiredNudoesc removeunusecrarclo© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnybeouecommana.ong© AutomatedReportsCommand.php x|© AutomatedReportsSendCommand.phpC AutomatedReportsRepository.phpC AutomatedReportsService.phpCreateHeldActivityEvent.php• TrackProviderInstalledEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php© AutomatedReportResult.phpclass AutomatedReportsCommand extends Commandpublic function handle(): intD):© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php© RequestGenerateReportJob.php899099100101102103104105106108109110111112113115116117118119120// Process daily reportspuh1s->processkeporus trequency: AUtomacedкeportsservice: :FREQUENCY_DALLY)HProcess veekty recors on monoaysif ($isMonday) €$this->processReports( frequency: AutomatedReportsService: :FREQUENCY_WEEKLY);// Process monthly reports on the first day of the monthif ($isFirstDay0fMonth) €$this->processReports( frequency: AutomatedReportsService::FREQUENCY_MONTHLY);// Process quarterly reports on the first day of January, April, July, and Octoberif ($isFirstDay0fMonth && $isQuarterZyMonth) &$this->processReports( frequency: AutomatedReportsService::FREQUENCY_QUARTERLY);$this->logger->info(self::LOG_PREFIXCompleted');return 0;* Process reports for a spec:Cascade & YICommand Sel* @param string $frequency* Oreturn void*/private function processReports(string $frequency): void$this->logger-›info(self::L0G_PREFIX . " Processing $frequency reports");// Get all enabled, not deleted reports with active teams for the specified frequency$reports = $this->reportRepository->getActiveReportsByFrequency ($frequency);$reports = collect([AutomatedReport: :find (68)]);$reportId = $this->option( key: 'report-id');if ($reportid !== nulU) k$reports = $this->getReportById($reportId);felse {// Get all enabled, not deleted reports with active teams for the specified frequency$reports = $this-›reportRepository->getActiveReportsByFrequency($frequency);AcceptReject$this->logger→>info(self::L0G_PREFIX• " Found ($reports->count()} $frequency reports to process");/** @var AutomatedReport $report */foreach ($reports as $report) {$this->logger->info(self::LOG_PREFIX'reportUuid'=> $report-›getuuidoWindsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]Al console [EU]4 console [STAGING)) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActivi3334ДДAAд57private const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F* Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo$filterSet = $this->$activityIds = $this$this->logger->info(' saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;, 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:53• RequestGenerateAskJiminnyReportJobTest -CascadeFixing ReportControlleAutomated Report MarAutomated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +77 -3 >Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams14:2uir-o( 4 spaces...
|
NULL
|
|
10894
|
214
|
48
|
2026-04-14T09:02:54.125121+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157374125_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:53+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
6571008995904409906
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:53+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
|
10895
|
215
|
65
|
2026-04-14T09:02:56.821118+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157376821_m2.jpg...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Kiosk\AutomatedReports;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityActualDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityUpdatedDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\DealInsights\ClosingPeriodFilter;
use Jiminny\Component\ActivitySearch\Service\ActivitySearch;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\User;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
class AskJiminnyReportActivityService
{
private const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;
private const array DATE_FILTER_KEYS = [
ActivityActualDate::PARAM_START_DATE,
ActivityActualDate::PARAM_END_DATE,
ActivityUpdatedDate::PARAM_UPDATED_FROM,
ActivityUpdatedDate::PARAM_UPDATED_TO,
ClosingPeriodFilter::KEY_START_DATE,
ClosingPeriodFilter::KEY_END_DATE,
];
public function __construct(
private readonly ActivitySearch $activitySearch,
private readonly ElasticActivityRepository $elasticRepository,
private readonly LoggerInterface $logger,
) {
}
/**
* Fetch activity IDs for a saved search, passing its filters as-is to Criteria.
* Date filters stored on the saved search are excluded; if no other filters exist,
* no date constraint is applied — matching the behaviour of getContextForAskAnythingByFilter.
*
* @return string[] Activity IDs
*/
public function getActivityIdsForSavedSearch(
Search $savedSearch,
User $user,
): array {
$requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);
$criteria = Criteria::createFromRequest(
array_merge($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),
$user->getTimezone()
);
$filterSet = $this->activitySearch->getOnDemandPageFilterSet($criteria, $user);
$activityIds = $this->elasticRepository->onDemandSearchIdsOnly($user, $criteria, $filterSet);
$this->logger->info('[AskJiminnyReport] Fetched activity IDs for saved search', [
'saved_search_id' => $savedSearch->getId(),
'user_id' => $user->getId(),
'activity_count' => count($activityIds),
]);
return $activityIds;
}
private function buildRequestParamsFromSearch(Search $savedSearch, User $user): array
{
$params = [];
$arrayFilterKeys = $this->activitySearch->getArrayFilterKeys($user);
foreach ($savedSearch->getFilters() as $filter) {
$key = $filter->getFilterProperty();
$value = $filter->getFilterValue();
if (in_array($key, self::DATE_FILTER_KEYS, true)) {
continue;
}
if (isset($params[$key])) {
$params[$key][] = $value;
} elseif (in_array($key, $arrayFilterKeys, true)) {
$params[$key] = [$value];
} else {
$params[$key] = $value;
}
}
return $params;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands\Reports;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Illuminate\Support\Collection;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Team;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
class AutomatedReportsCommand extends Command
{
/**
* Log prefix for all log messages
*/
private const string LOG_PREFIX = '[automated-reports]';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger a specific report by ID or UUID.';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
$reportId = $this->option('report-id');
if ($reportId !== null) {
$reports = $this->getReportById($reportId);
} else {
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
}
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
// $this->dispatcher->dispatch($job);
$this->dispatcher->dispatchSync($job);
}
}
private function getReportById(string $reportId): Collection
{
$report = $this->reportRepository->findByIdOrUuid($reportId);
if ($report === null) {
$this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);
$this->warn("Report not found: {$reportId}");
return collect();
}
if (! $report->getStatus()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
]);
$this->warn('Report is inactive — processing anyway (manual override).');
}
$team = $report->getTeam();
if ($team->getStatus() !== Team::STATUS_ACTIVE) {
$this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'teamStatus' => $team->getStatus(),
]);
$this->warn("Team #{$report->getTeamId()} is not active — processing anyway (manual override).");
}
if ($report->isExpired()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'expiresAt' => $report->getExpiresAt()?->toDateString(),
]);
$this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');
}
$now = Carbon::now();
$frequency = $report->getFrequency();
$wouldRunToday = match ($frequency) {
AutomatedReportsService::FREQUENCY_DAILY => true,
AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),
AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,
AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10], true),
default => false,
};
if (! $wouldRunToday) {
$this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'frequency' => $frequency,
]);
$this->warn("Report frequency is '{$frequency}' — would NOT run today, processing anyway (manual override).");
}
return collect([$report]);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.76171875,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"RequestGenerateAskJiminnyReportJobTest","depth":6,"bounds":{"left":0.7796875,"top":0.017361112,"width":0.12109375,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.6699219,"top":0.19513889,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.6816406,"top":0.19513889,"width":0.00859375,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.6921875,"top":0.19375,"width":0.00859375,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.7007812,"top":0.19375,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Kiosk\\AutomatedReports;\n\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityActualDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityUpdatedDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\DealInsights\\ClosingPeriodFilter;\nuse Jiminny\\Component\\ActivitySearch\\Service\\ActivitySearch;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\n\nclass AskJiminnyReportActivityService\n{\n private const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;\n\n private const array DATE_FILTER_KEYS = [\n ActivityActualDate::PARAM_START_DATE,\n ActivityActualDate::PARAM_END_DATE,\n ActivityUpdatedDate::PARAM_UPDATED_FROM,\n ActivityUpdatedDate::PARAM_UPDATED_TO,\n ClosingPeriodFilter::KEY_START_DATE,\n ClosingPeriodFilter::KEY_END_DATE,\n ];\n\n public function __construct(\n private readonly ActivitySearch $activitySearch,\n private readonly ElasticActivityRepository $elasticRepository,\n private readonly LoggerInterface $logger,\n ) {\n }\n\n /**\n * Fetch activity IDs for a saved search, passing its filters as-is to Criteria.\n * Date filters stored on the saved search are excluded; if no other filters exist,\n * no date constraint is applied — matching the behaviour of getContextForAskAnythingByFilter.\n *\n * @return string[] Activity IDs\n */\n public function getActivityIdsForSavedSearch(\n Search $savedSearch,\n User $user,\n ): array {\n $requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);\n\n $criteria = Criteria::createFromRequest(\n array_merge($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($criteria, $user);\n\n $activityIds = $this->elasticRepository->onDemandSearchIdsOnly($user, $criteria, $filterSet);\n\n $this->logger->info('[AskJiminnyReport] Fetched activity IDs for saved search', [\n 'saved_search_id' => $savedSearch->getId(),\n 'user_id' => $user->getId(),\n 'activity_count' => count($activityIds),\n ]);\n\n return $activityIds;\n }\n\n private function buildRequestParamsFromSearch(Search $savedSearch, User $user): array\n {\n $params = [];\n $arrayFilterKeys = $this->activitySearch->getArrayFilterKeys($user);\n\n foreach ($savedSearch->getFilters() as $filter) {\n $key = $filter->getFilterProperty();\n $value = $filter->getFilterValue();\n\n if (in_array($key, self::DATE_FILTER_KEYS, true)) {\n continue;\n }\n\n if (isset($params[$key])) {\n $params[$key][] = $value;\n } elseif (in_array($key, $arrayFilterKeys, true)) {\n $params[$key] = [$value];\n } else {\n $params[$key] = $value;\n }\n }\n\n return $params;\n }\n}","depth":4,"bounds":{"left":0.6238281,"top":0.0,"width":0.31953126,"height":1.0},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Kiosk\\AutomatedReports;\n\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityActualDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityUpdatedDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\DealInsights\\ClosingPeriodFilter;\nuse Jiminny\\Component\\ActivitySearch\\Service\\ActivitySearch;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse Psr\\Log\\LoggerInterface;\n\nclass AskJiminnyReportActivityService\n{\n private const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;\n\n private const array DATE_FILTER_KEYS = [\n ActivityActualDate::PARAM_START_DATE,\n ActivityActualDate::PARAM_END_DATE,\n ActivityUpdatedDate::PARAM_UPDATED_FROM,\n ActivityUpdatedDate::PARAM_UPDATED_TO,\n ClosingPeriodFilter::KEY_START_DATE,\n ClosingPeriodFilter::KEY_END_DATE,\n ];\n\n public function __construct(\n private readonly ActivitySearch $activitySearch,\n private readonly ElasticActivityRepository $elasticRepository,\n private readonly LoggerInterface $logger,\n ) {\n }\n\n /**\n * Fetch activity IDs for a saved search, passing its filters as-is to Criteria.\n * Date filters stored on the saved search are excluded; if no other filters exist,\n * no date constraint is applied — matching the behaviour of getContextForAskAnythingByFilter.\n *\n * @return string[] Activity IDs\n */\n public function getActivityIdsForSavedSearch(\n Search $savedSearch,\n User $user,\n ): array {\n $requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);\n\n $criteria = Criteria::createFromRequest(\n array_merge($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),\n $user->getTimezone()\n );\n\n $filterSet = $this->activitySearch->getOnDemandPageFilterSet($criteria, $user);\n\n $activityIds = $this->elasticRepository->onDemandSearchIdsOnly($user, $criteria, $filterSet);\n\n $this->logger->info('[AskJiminnyReport] Fetched activity IDs for saved search', [\n 'saved_search_id' => $savedSearch->getId(),\n 'user_id' => $user->getId(),\n 'activity_count' => count($activityIds),\n ]);\n\n return $activityIds;\n }\n\n private function buildRequestParamsFromSearch(Search $savedSearch, User $user): array\n {\n $params = [];\n $arrayFilterKeys = $this->activitySearch->getArrayFilterKeys($user);\n\n foreach ($savedSearch->getFilters() as $filter) {\n $key = $filter->getFilterProperty();\n $value = $filter->getFilterValue();\n\n if (in_array($key, self::DATE_FILTER_KEYS, true)) {\n continue;\n }\n\n if (isset($params[$key])) {\n $params[$key][] = $value;\n } elseif (in_array($key, $arrayFilterKeys, true)) {\n $params[$key] = [$value];\n } else {\n $params[$key] = $value;\n }\n }\n\n return $params;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.009375,"height":0.0},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.008203125,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands\\Reports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Bus\\Dispatcher as BusDispatcher;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateReportJob;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\n\nclass AutomatedReportsCommand extends Command\n{\n /**\n * Log prefix for all log messages\n */\n private const string LOG_PREFIX = '[automated-reports]';\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger a specific report by ID or UUID.';\n\n\n public function __construct(\n private readonly LoggerInterface $logger,\n private readonly BusDispatcher $dispatcher,\n private readonly AutomatedReportsRepository $reportRepository\n ) {\n parent::__construct();\n }\n\n /**\n * Execute the console command.\n *\n * @return int\n */\n public function handle(): int\n {\n $this->logger->info(self::LOG_PREFIX . ' Started');\n\n $now = Carbon::now();\n $isMonday = $now->isMonday();\n $isFirstDayOfMonth = $now->day === 1;\n $currentMonth = $now->month;\n\n // Check if the current month is a quarterly month (January, April, July, October)\n $isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);\n\n $this->logger->info(self::LOG_PREFIX . ' Checking conditions', [\n 'isMonday' => $isMonday,\n 'isFirstDayOfMonth' => $isFirstDayOfMonth,\n 'currentMonth' => $currentMonth,\n 'isQuarterlyMonth' => $isQuarterlyMonth,\n ]);\n\n // Process daily reports\n $this->processReports(AutomatedReportsService::FREQUENCY_DAILY);\n\n // Process weekly reports on Mondays\n if ($isMonday) {\n $this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);\n }\n\n // Process monthly reports on the first day of the month\n if ($isFirstDayOfMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);\n }\n\n // Process quarterly reports on the first day of January, April, July, and October\n if ($isFirstDayOfMonth && $isQuarterlyMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);\n }\n\n $this->logger->info(self::LOG_PREFIX . ' Completed');\n\n return 0;\n }\n\n /**\n * Process reports for a specific frequency.\n *\n * @param string $frequency\n *\n * @return void\n */\n private function processReports(string $frequency): void\n {\n $this->logger->info(self::LOG_PREFIX . \" Processing $frequency reports\");\n\n $reportId = $this->option('report-id');\n if ($reportId !== null) {\n $reports = $this->getReportById($reportId);\n } else {\n // Get all enabled, not deleted reports with active teams for the specified frequency\n $reports = $this->reportRepository->getActiveReportsByFrequency($frequency);\n }\n\n $this->logger->info(self::LOG_PREFIX . \" Found {$reports->count()} $frequency reports to process\");\n\n /** @var AutomatedReport $report */\n foreach ($reports as $report) {\n $this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'frequency' => $report->getFrequency(),\n 'type' => $report->getType(),\n ]);\n\n $job = $report->isAskJiminnyReport()\n ? new RequestGenerateAskJiminnyReportJob($report->getUuid())\n : new RequestGenerateReportJob($report->getUuid());\n\n // $this->dispatcher->dispatch($job);\n $this->dispatcher->dispatchSync($job);\n }\n }\n\n private function getReportById(string $reportId): Collection\n {\n $report = $this->reportRepository->findByIdOrUuid($reportId);\n\n if ($report === null) {\n $this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);\n $this->warn(\"Report not found: {$reportId}\");\n\n return collect();\n }\n\n if (! $report->getStatus()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n ]);\n $this->warn('Report is inactive — processing anyway (manual override).');\n }\n\n $team = $report->getTeam();\n if ($team->getStatus() !== Team::STATUS_ACTIVE) {\n $this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'teamStatus' => $team->getStatus(),\n ]);\n $this->warn(\"Team #{$report->getTeamId()} is not active — processing anyway (manual override).\");\n }\n\n if ($report->isExpired()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'expiresAt' => $report->getExpiresAt()?->toDateString(),\n ]);\n $this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');\n }\n\n $now = Carbon::now();\n $frequency = $report->getFrequency();\n $wouldRunToday = match ($frequency) {\n AutomatedReportsService::FREQUENCY_DAILY => true,\n AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),\n AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,\n AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10], true),\n default => false,\n };\n\n if (! $wouldRunToday) {\n $this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'frequency' => $frequency,\n ]);\n $this->warn(\"Report frequency is '{$frequency}' — would NOT run today, processing anyway (manual override).\");\n }\n\n return collect([$report]);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands\\Reports;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Bus\\Dispatcher as BusDispatcher;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateReportJob;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Psr\\Log\\LoggerInterface;\n\nclass AutomatedReportsCommand extends Command\n{\n /**\n * Log prefix for all log messages\n */\n private const string LOG_PREFIX = '[automated-reports]';\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger a specific report by ID or UUID.';\n\n\n public function __construct(\n private readonly LoggerInterface $logger,\n private readonly BusDispatcher $dispatcher,\n private readonly AutomatedReportsRepository $reportRepository\n ) {\n parent::__construct();\n }\n\n /**\n * Execute the console command.\n *\n * @return int\n */\n public function handle(): int\n {\n $this->logger->info(self::LOG_PREFIX . ' Started');\n\n $now = Carbon::now();\n $isMonday = $now->isMonday();\n $isFirstDayOfMonth = $now->day === 1;\n $currentMonth = $now->month;\n\n // Check if the current month is a quarterly month (January, April, July, October)\n $isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);\n\n $this->logger->info(self::LOG_PREFIX . ' Checking conditions', [\n 'isMonday' => $isMonday,\n 'isFirstDayOfMonth' => $isFirstDayOfMonth,\n 'currentMonth' => $currentMonth,\n 'isQuarterlyMonth' => $isQuarterlyMonth,\n ]);\n\n // Process daily reports\n $this->processReports(AutomatedReportsService::FREQUENCY_DAILY);\n\n // Process weekly reports on Mondays\n if ($isMonday) {\n $this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);\n }\n\n // Process monthly reports on the first day of the month\n if ($isFirstDayOfMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);\n }\n\n // Process quarterly reports on the first day of January, April, July, and October\n if ($isFirstDayOfMonth && $isQuarterlyMonth) {\n $this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);\n }\n\n $this->logger->info(self::LOG_PREFIX . ' Completed');\n\n return 0;\n }\n\n /**\n * Process reports for a specific frequency.\n *\n * @param string $frequency\n *\n * @return void\n */\n private function processReports(string $frequency): void\n {\n $this->logger->info(self::LOG_PREFIX . \" Processing $frequency reports\");\n\n $reportId = $this->option('report-id');\n if ($reportId !== null) {\n $reports = $this->getReportById($reportId);\n } else {\n // Get all enabled, not deleted reports with active teams for the specified frequency\n $reports = $this->reportRepository->getActiveReportsByFrequency($frequency);\n }\n\n $this->logger->info(self::LOG_PREFIX . \" Found {$reports->count()} $frequency reports to process\");\n\n /** @var AutomatedReport $report */\n foreach ($reports as $report) {\n $this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'frequency' => $report->getFrequency(),\n 'type' => $report->getType(),\n ]);\n\n $job = $report->isAskJiminnyReport()\n ? new RequestGenerateAskJiminnyReportJob($report->getUuid())\n : new RequestGenerateReportJob($report->getUuid());\n\n // $this->dispatcher->dispatch($job);\n $this->dispatcher->dispatchSync($job);\n }\n }\n\n private function getReportById(string $reportId): Collection\n {\n $report = $this->reportRepository->findByIdOrUuid($reportId);\n\n if ($report === null) {\n $this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);\n $this->warn(\"Report not found: {$reportId}\");\n\n return collect();\n }\n\n if (! $report->getStatus()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n ]);\n $this->warn('Report is inactive — processing anyway (manual override).');\n }\n\n $team = $report->getTeam();\n if ($team->getStatus() !== Team::STATUS_ACTIVE) {\n $this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'teamId' => $report->getTeamId(),\n 'teamStatus' => $team->getStatus(),\n ]);\n $this->warn(\"Team #{$report->getTeamId()} is not active — processing anyway (manual override).\");\n }\n\n if ($report->isExpired()) {\n $this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'expiresAt' => $report->getExpiresAt()?->toDateString(),\n ]);\n $this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');\n }\n\n $now = Carbon::now();\n $frequency = $report->getFrequency();\n $wouldRunToday = match ($frequency) {\n AutomatedReportsService::FREQUENCY_DAILY => true,\n AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),\n AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,\n AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10], true),\n default => false,\n };\n\n if (! $wouldRunToday) {\n $this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', [\n 'reportId' => $reportId,\n 'reportUuid' => $report->getUuid(),\n 'frequency' => $frequency,\n ]);\n $this->warn(\"Report frequency is '{$frequency}' — would NOT run today, processing anyway (manual override).\");\n }\n\n return collect([$report]);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.0140625,"top":0.041666668,"width":0.028515626,"height":0.021527778},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4164496969910098014
|
7004952196924009268
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
1
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Kiosk\AutomatedReports;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityActualDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityUpdatedDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\DealInsights\ClosingPeriodFilter;
use Jiminny\Component\ActivitySearch\Service\ActivitySearch;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\User;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use Psr\Log\LoggerInterface;
class AskJiminnyReportActivityService
{
private const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;
private const array DATE_FILTER_KEYS = [
ActivityActualDate::PARAM_START_DATE,
ActivityActualDate::PARAM_END_DATE,
ActivityUpdatedDate::PARAM_UPDATED_FROM,
ActivityUpdatedDate::PARAM_UPDATED_TO,
ClosingPeriodFilter::KEY_START_DATE,
ClosingPeriodFilter::KEY_END_DATE,
];
public function __construct(
private readonly ActivitySearch $activitySearch,
private readonly ElasticActivityRepository $elasticRepository,
private readonly LoggerInterface $logger,
) {
}
/**
* Fetch activity IDs for a saved search, passing its filters as-is to Criteria.
* Date filters stored on the saved search are excluded; if no other filters exist,
* no date constraint is applied — matching the behaviour of getContextForAskAnythingByFilter.
*
* @return string[] Activity IDs
*/
public function getActivityIdsForSavedSearch(
Search $savedSearch,
User $user,
): array {
$requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);
$criteria = Criteria::createFromRequest(
array_merge($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),
$user->getTimezone()
);
$filterSet = $this->activitySearch->getOnDemandPageFilterSet($criteria, $user);
$activityIds = $this->elasticRepository->onDemandSearchIdsOnly($user, $criteria, $filterSet);
$this->logger->info('[AskJiminnyReport] Fetched activity IDs for saved search', [
'saved_search_id' => $savedSearch->getId(),
'user_id' => $user->getId(),
'activity_count' => count($activityIds),
]);
return $activityIds;
}
private function buildRequestParamsFromSearch(Search $savedSearch, User $user): array
{
$params = [];
$arrayFilterKeys = $this->activitySearch->getArrayFilterKeys($user);
foreach ($savedSearch->getFilters() as $filter) {
$key = $filter->getFilterProperty();
$value = $filter->getFilterValue();
if (in_array($key, self::DATE_FILTER_KEYS, true)) {
continue;
}
if (isset($params[$key])) {
$params[$key][] = $value;
} elseif (in_array($key, $arrayFilterKeys, true)) {
$params[$key] = [$value];
} else {
$params[$key] = $value;
}
}
return $params;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands\Reports;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Illuminate\Support\Collection;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\RequestGenerateReportJob;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\Team;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Psr\Log\LoggerInterface;
class AutomatedReportsCommand extends Command
{
/**
* Log prefix for all log messages
*/
private const string LOG_PREFIX = '[automated-reports]';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'automated-reports {--report-id= : Process a specific report by ID or UUID (bypasses frequency scheduling)}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process automated reports based on their frequency (weekly, monthly, quarterly). Use --report-id to manually trigger a specific report by ID or UUID.';
public function __construct(
private readonly LoggerInterface $logger,
private readonly BusDispatcher $dispatcher,
private readonly AutomatedReportsRepository $reportRepository
) {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$this->logger->info(self::LOG_PREFIX . ' Started');
$now = Carbon::now();
$isMonday = $now->isMonday();
$isFirstDayOfMonth = $now->day === 1;
$currentMonth = $now->month;
// Check if the current month is a quarterly month (January, April, July, October)
$isQuarterlyMonth = in_array($currentMonth, [1, 4, 7, 10], true);
$this->logger->info(self::LOG_PREFIX . ' Checking conditions', [
'isMonday' => $isMonday,
'isFirstDayOfMonth' => $isFirstDayOfMonth,
'currentMonth' => $currentMonth,
'isQuarterlyMonth' => $isQuarterlyMonth,
]);
// Process daily reports
$this->processReports(AutomatedReportsService::FREQUENCY_DAILY);
// Process weekly reports on Mondays
if ($isMonday) {
$this->processReports(AutomatedReportsService::FREQUENCY_WEEKLY);
}
// Process monthly reports on the first day of the month
if ($isFirstDayOfMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_MONTHLY);
}
// Process quarterly reports on the first day of January, April, July, and October
if ($isFirstDayOfMonth && $isQuarterlyMonth) {
$this->processReports(AutomatedReportsService::FREQUENCY_QUARTERLY);
}
$this->logger->info(self::LOG_PREFIX . ' Completed');
return 0;
}
/**
* Process reports for a specific frequency.
*
* @param string $frequency
*
* @return void
*/
private function processReports(string $frequency): void
{
$this->logger->info(self::LOG_PREFIX . " Processing $frequency reports");
$reportId = $this->option('report-id');
if ($reportId !== null) {
$reports = $this->getReportById($reportId);
} else {
// Get all enabled, not deleted reports with active teams for the specified frequency
$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);
}
$this->logger->info(self::LOG_PREFIX . " Found {$reports->count()} $frequency reports to process");
/** @var AutomatedReport $report */
foreach ($reports as $report) {
$this->logger->info(self::LOG_PREFIX . ' Dispatching Generate Report job for report', [
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'frequency' => $report->getFrequency(),
'type' => $report->getType(),
]);
$job = $report->isAskJiminnyReport()
? new RequestGenerateAskJiminnyReportJob($report->getUuid())
: new RequestGenerateReportJob($report->getUuid());
// $this->dispatcher->dispatch($job);
$this->dispatcher->dispatchSync($job);
}
}
private function getReportById(string $reportId): Collection
{
$report = $this->reportRepository->findByIdOrUuid($reportId);
if ($report === null) {
$this->logger->warning(self::LOG_PREFIX . ' Report not found for --report-id', ['reportId' => $reportId]);
$this->warn("Report not found: {$reportId}");
return collect();
}
if (! $report->getStatus()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is inactive, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
]);
$this->warn('Report is inactive — processing anyway (manual override).');
}
$team = $report->getTeam();
if ($team->getStatus() !== Team::STATUS_ACTIVE) {
$this->logger->warning(self::LOG_PREFIX . ' Team is not active, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'teamId' => $report->getTeamId(),
'teamStatus' => $team->getStatus(),
]);
$this->warn("Team #{$report->getTeamId()} is not active — processing anyway (manual override).");
}
if ($report->isExpired()) {
$this->logger->warning(self::LOG_PREFIX . ' Report is expired, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'expiresAt' => $report->getExpiresAt()?->toDateString(),
]);
$this->warn('Report is expired (expires_at: ' . $report->getExpiresAt()?->toDateString() . ') — processing anyway (manual override).');
}
$now = Carbon::now();
$frequency = $report->getFrequency();
$wouldRunToday = match ($frequency) {
AutomatedReportsService::FREQUENCY_DAILY => true,
AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday(),
AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,
AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10], true),
default => false,
};
if (! $wouldRunToday) {
$this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', [
'reportId' => $reportId,
'reportUuid' => $report->getUuid(),
'frequency' => $frequency,
]);
$this->warn("Report frequency is '{$frequency}' — would NOT run today, processing anyway (manual override).");
}
return collect([$report]);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
10893
|
|
10896
|
214
|
49
|
2026-04-14T09:02:57.283474+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157377283_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:57+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
4102537353098802705
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:57+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
10894
|
|
10897
|
214
|
50
|
2026-04-14T09:02:59.781824+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157379781_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:59+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
-8111834716981150585
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 58 mTue 14 Apr 12:02:59+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
|
10898
|
215
|
66
|
2026-04-14T09:02:59.769929+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157379769_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewFV faVsco.js vNavigateCodeLara PhpStormFileEditViewFV faVsco.js vNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack_leamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen©FeatureFlagsHelper.php© FixCrossTenantlssues.p(c) -ushro espermissionsa(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.f© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo© JiminnyTokenInfoCommMakeslackLvecoaching(c Manacescimror eam.o© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e Recalculatebealkisksco© RemoveDeleteMarkersC(e) Remove-xoiredNudoesc removeunusecrarclo© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnybebuecommana.ong© AutomatedReportsCommand.php xC AutomatedReportsRepository.phpC AutomatedReportsService.php(c CrealenelaAcuiviyevent.ono© AutomatedReportsCallbackService.php© AutomatedReportsSendCommand.php• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php© RequestGenerateReportJob.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportResult.phpc) Automatedkeport.oneclass AutomatedReportsCommand extends Command11541351361371381391401411421431441114511401471481491501511521531541551561571581591601611621631641651l00ACCepTReTeCCprivate function getReportById(string $reportId): Collectionl1100110%170172173174175176177178179180181182183184185186187$report = $this->reportRepository->findById0rUuid($reportId);if ($report === null) €$this->logger->warning(self::LOG_PREFIX' Report not found for --report-id', ['reportid' => SreportId]);l$this->warn( string: "Report not found: [$reportId)");return coulecturif (! $report->getStatusOD €$this->Logger->warning(self::LOG_PREFIX' Report is inactive, processing anyway (manual override)'. ['reportid' => $reportId,'reportuvid' => $report-›getUvid(),1D:$this->warn( string: 'Report is inactive - processing anyway (manual override).');$team = $report->getTeam();if ($team->getStatus() !== Team::STATUS_ACTIVE) ($this->Logger->warning(self::LOG_PREFIXTeam is not active, processing anyway (manual override).ldl'reportId' => $reportId,'reportuvid' => $report->getUvid(),'teamId' => $report->getTeamId(),'teamStatus'→>$*ID:Cascade & VlCommand &1$this->warn( string: "Team #{$report->getTeamId(} is not active - processing anyway (manual override).");if ($report->isExpired() €$this->logger->warning(self::LOG_PREFIX' Report is expired, processing anyway(manual override)'. [redorelon→ reooreLon"reрorcuula"=> $report->getUvidD,'expiresAt'=> $report->getExpiresAt()?->toDateStringO,1D:$this->warn( string: 'Report is expired (expires_at:' Sreport->getExpiresAt()?->toDateString() .') - processing anyway (manual overrSfequenar e Srepory-s getFrequeney 0):)$wouldRunToday = match ($frequency) {Automatedkeportsservice::FREQUENCY_bALLy p> crue,AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMondayO),AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10].| strict: true),default => false,lif C! $wouLdRunToday) l$this->Logger->info(self::LOG_PREFIX. Report frequency would not run today, processing anyway (manual override)'. ['reportId' => SreportId,reportuuid'l => Sreport-Sgeeu&do,+v Accept File %+X Reject File 1 9 €+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logs Sr iminny@localnosuiA HS_local [jiminny@localhost]A console (PROD]4 console [EU]4 console [STAGING)) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function _constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F* Fetch activity IDs fo* Date filters stored* no date constraint .43* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($req$user->getTimezo);$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;, 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:59• RequestGenerateAskJiminnyReportJobTest-CascadeFixing ReportControlleAutomated Report Ma• Automated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +70 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allWinasun leams135:05uir-o( 4 spaces...
|
NULL
|
8001592529400317771
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewFV faVsco.js vNavigateCodeLara PhpStormFileEditViewFV faVsco.js vNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack_leamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen©FeatureFlagsHelper.php© FixCrossTenantlssues.p(c) -ushro espermissionsa(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.f© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo© JiminnyTokenInfoCommMakeslackLvecoaching(c Manacescimror eam.o© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e Recalculatebealkisksco© RemoveDeleteMarkersC(e) Remove-xoiredNudoesc removeunusecrarclo© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnybebuecommana.ong© AutomatedReportsCommand.php xC AutomatedReportsRepository.phpC AutomatedReportsService.php(c CrealenelaAcuiviyevent.ono© AutomatedReportsCallbackService.php© AutomatedReportsSendCommand.php• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php© RequestGenerateReportJob.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportResult.phpc) Automatedkeport.oneclass AutomatedReportsCommand extends Command11541351361371381391401411421431441114511401471481491501511521531541551561571581591601611621631641651l00ACCepTReTeCCprivate function getReportById(string $reportId): Collectionl1100110%170172173174175176177178179180181182183184185186187$report = $this->reportRepository->findById0rUuid($reportId);if ($report === null) €$this->logger->warning(self::LOG_PREFIX' Report not found for --report-id', ['reportid' => SreportId]);l$this->warn( string: "Report not found: [$reportId)");return coulecturif (! $report->getStatusOD €$this->Logger->warning(self::LOG_PREFIX' Report is inactive, processing anyway (manual override)'. ['reportid' => $reportId,'reportuvid' => $report-›getUvid(),1D:$this->warn( string: 'Report is inactive - processing anyway (manual override).');$team = $report->getTeam();if ($team->getStatus() !== Team::STATUS_ACTIVE) ($this->Logger->warning(self::LOG_PREFIXTeam is not active, processing anyway (manual override).ldl'reportId' => $reportId,'reportuvid' => $report->getUvid(),'teamId' => $report->getTeamId(),'teamStatus'→>$*ID:Cascade & VlCommand &1$this->warn( string: "Team #{$report->getTeamId(} is not active - processing anyway (manual override).");if ($report->isExpired() €$this->logger->warning(self::LOG_PREFIX' Report is expired, processing anyway(manual override)'. [redorelon→ reooreLon"reрorcuula"=> $report->getUvidD,'expiresAt'=> $report->getExpiresAt()?->toDateStringO,1D:$this->warn( string: 'Report is expired (expires_at:' Sreport->getExpiresAt()?->toDateString() .') - processing anyway (manual overrSfequenar e Srepory-s getFrequeney 0):)$wouldRunToday = match ($frequency) {Automatedkeportsservice::FREQUENCY_bALLy p> crue,AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMondayO),AutomatedReportsService::FREQUENCY_MONTHLY => $now->day === 1,AutomatedReportsService::FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10].| strict: true),default => false,lif C! $wouLdRunToday) l$this->Logger->info(self::LOG_PREFIX. Report frequency would not run today, processing anyway (manual override)'. ['reportId' => SreportId,reportuuid'l => Sreport-Sgeeu&do,+v Accept File %+X Reject File 1 9 €+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logs Sr iminny@localnosuiA HS_local [jiminny@localhost]A console (PROD]4 console [EU]4 console [STAGING)) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function _constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F* Fetch activity IDs fo* Date filters stored* no date constraint .43* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($req$user->getTimezo);$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;, 0lablSupport Daily - in 2h 58mA100% C•Tue 14 Apr 12:02:59• RequestGenerateAskJiminnyReportJobTest-CascadeFixing ReportControlleAutomated Report Ma• Automated Report Lp#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terninal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +70 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allWinasun leams135:05uir-o( 4 spaces...
|
NULL
|
|
10899
|
215
|
67
|
2026-04-14T09:03:02.379123+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157382379_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditFV faVsco.js vViewNavigateCodeLara PhpStormFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-liminny k vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack_leamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen©FeatureFlagsHelper.php© FixCrossTenantlssues.p© FlushRolesPermissionsC© GeneratelnternalWebho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.p(©) JiminnyCacheClearCom(c) minnv Deouacommanc(c)Jminnvser-ncrvotedio(c) Jiminny okenintocomm© MakeSlackLiveCoaching© ManageScimForTeam.p© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e RecalculatebealkiskscoC) RemoveDeleteMarkersd(C) RemoveExpiredNudaes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnyDeouecommana.ongAutomaleakeportscommana.ong© AutomatedReportsSendCommand.phpC AutomatedReportsRepository.phpC AutomatedReportsService.php(c CrealenelaAcuiviyevent.ono• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsCommand extends Commandprivate function getReportById(string $reportId): Collection146147148if (! $report->getStatus()) €$this->Logger->warning(self::LOG_PREFIX*' Report is inactive, processing anyway (manual override)'. Eireoorclo so oreoorcro.redorcuuo"=> $report->getUuid(),© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php• RequestGenerateReportJob.php1501511521531541551561571581591601611621631641651661671681691701711721175174175176177179181183184185186187188189190191192193194195196I):$this->warn( string: |'Report is inactive - processing anyway (manual override).*P:$team = $report->getTeam();if ($team->getStatus() !== Team: :STATUS_ACTIVE) €$this->logger->warning(self::LOG_PREFIXTeam is not active, processing anyway (manual override)','reportId' => SreportId,'reportuvid' => $report->getUvid(),"Leamid" => preport-›gecleamta.Leallbtatus"→preall->getstacus.I):$this->warn( string: "Team #[$report->getTeamId()} is not active - processing anyway (manual override)."P:lif ($report->isExpired() €$this->logger->warning(self::LOG_PREFIX|!||' Report is expired, processing anyway (manual override)'|.|E|'reportId' => SreportId,"reportUvid'=> $report->getUvid(),'expiresAt'→> $report->getExpiresAt()?->toDateStringQ,ID:$this->warn( string:Cascade & XICommand &1Sreport->getExpiresAt()P→>toDateString() • |'P - processing anyway (manual overrid 40$now = Carbon: : now();$frequency = $report->getFrequency();$wouldRunToday = match ($frequency) {AutomatedReportsService::FREQUENCY_DAILY => true,AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday() ,AutomatedReportsService: : FREQUENCY_MONTHLY => $now->day === 1,AutomatedReportsService: :FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10],stict wruen.default = false,if (! $wouLdRunToday) €$this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', ['reportId' => $reportId,'reportUuid' => $report->getUuid(),$frequency,1):$this->warp ( string: "Report frequency is '($frequency}' - would NOT run today, processing anyway (manval override).");return collect([$report]):T 1 of 6 edits +v Accept File % +X Reject File 0*€+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logs Sr iminny@localnosuiA HS_local [jiminny@localhost]s console ProDI4 console [EU]console [STAGING) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTestX281лclass AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F* Fetch activity IDs fo* Date filters stored o* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo);$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;Support Daily - in 2 h 57mA100% C•Tue 14 Apr 12:03:02RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MarAutomated Report Lip#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino loo + terminal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +70 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams19b:lgol chars, 22 line breaksuir-o( 4 spaces...
|
NULL
|
-6394312236682759465
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditFV faVsco.js vViewNavigateCodeLara PhpStormFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-liminny k vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack_leamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen©FeatureFlagsHelper.php© FixCrossTenantlssues.p© FlushRolesPermissionsC© GeneratelnternalWebho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.p(©) JiminnyCacheClearCom(c) minnv Deouacommanc(c)Jminnvser-ncrvotedio(c) Jiminny okenintocomm© MakeSlackLiveCoaching© ManageScimForTeam.p© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e RecalculatebealkiskscoC) RemoveDeleteMarkersd(C) RemoveExpiredNudaes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnyDeouecommana.ongAutomaleakeportscommana.ong© AutomatedReportsSendCommand.phpC AutomatedReportsRepository.phpC AutomatedReportsService.php(c CrealenelaAcuiviyevent.ono• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsCommand extends Commandprivate function getReportById(string $reportId): Collection146147148if (! $report->getStatus()) €$this->Logger->warning(self::LOG_PREFIX*' Report is inactive, processing anyway (manual override)'. Eireoorclo so oreoorcro.redorcuuo"=> $report->getUuid(),© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php• RequestGenerateReportJob.php1501511521531541551561571581591601611621631641651661671681691701711721175174175176177179181183184185186187188189190191192193194195196I):$this->warn( string: |'Report is inactive - processing anyway (manual override).*P:$team = $report->getTeam();if ($team->getStatus() !== Team: :STATUS_ACTIVE) €$this->logger->warning(self::LOG_PREFIXTeam is not active, processing anyway (manual override)','reportId' => SreportId,'reportuvid' => $report->getUvid(),"Leamid" => preport-›gecleamta.Leallbtatus"→preall->getstacus.I):$this->warn( string: "Team #[$report->getTeamId()} is not active - processing anyway (manual override)."P:lif ($report->isExpired() €$this->logger->warning(self::LOG_PREFIX|!||' Report is expired, processing anyway (manual override)'|.|E|'reportId' => SreportId,"reportUvid'=> $report->getUvid(),'expiresAt'→> $report->getExpiresAt()?->toDateStringQ,ID:$this->warn( string:Cascade & XICommand &1Sreport->getExpiresAt()P→>toDateString() • |'P - processing anyway (manual overrid 40$now = Carbon: : now();$frequency = $report->getFrequency();$wouldRunToday = match ($frequency) {AutomatedReportsService::FREQUENCY_DAILY => true,AutomatedReportsService::FREQUENCY_WEEKLY => $now->isMonday() ,AutomatedReportsService: : FREQUENCY_MONTHLY => $now->day === 1,AutomatedReportsService: :FREQUENCY_QUARTERLY => $now->day === 1 && in_array($now->month, [1, 4, 7, 10],stict wruen.default = false,if (! $wouLdRunToday) €$this->logger->info(self::LOG_PREFIX . ' Report frequency would not run today, processing anyway (manual override)', ['reportId' => $reportId,'reportUuid' => $report->getUuid(),$frequency,1):$this->warp ( string: "Report frequency is '($frequency}' - would NOT run today, processing anyway (manval override).");return collect([$report]):T 1 of 6 edits +v Accept File % +X Reject File 0*€+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logs Sr iminny@localnosuiA HS_local [jiminny@localhost]s console ProDI4 console [EU]console [STAGING) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTestX281лclass AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F* Fetch activity IDs fo* Date filters stored o* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo);$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;Support Daily - in 2 h 57mA100% C•Tue 14 Apr 12:03:02RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MarAutomated Report Lip#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino loo + terminal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +70 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams19b:lgol chars, 22 line breaksuir-o( 4 spaces...
|
10898
|
|
10900
|
215
|
68
|
2026-04-14T09:03:05.438317+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157385438_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewFV faVsco.js vNavigateCodeLara PhpStormFileEditViewFV faVsco.js vNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack_leamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen©FeatureFlagsHelper.php© FixCrossTenantissues.p© FlushRolesPermissionsC© GeneratelnternalWebho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php@ Imnortli|sercFromCcvEil© IterateUsersCommand.c)Jiminnvcacheclearcom(c) minnv Deouacommanc(c)Jminnvser-ncrvotedio(c) Jiminny okenintocomm© MakeSlackLiveCoaching© ManageScimForTeam.p© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e RecalculatebealkiskscoC) RemoveDeleteMarkersd(e) Remove-xoiredNudoes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnyDeouecommana.ongAutomaleakeportscommana.ong© AutomatedReportsSendCommand.phpAutomatedReportsRepository.phpC AutomatedReportsService.php© UserPilotActivityListener.php© ActivityLogged.phpc CrealenelaAcuiviyevent.ono© AutomatedReportsCallbackService.php• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AutomatedReportResult.phpc) Automatedkeport.oneclass AutomatedReportsCommand extends Commandprivate function processReports(string $frequency): void© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php• RequestGenerateReportJob.php1321331154Rejectprivate function getReportById(string $reportId): Collection1150137138139140142143144145146147148149150151152153154155156158159160161162163164165166167168169170171172173174117511178$report = $this->reportRepository->findById0rUuid($reportId);if ($report === null) €$this->logger->warning(self::LOG_PREFIX .' Report not found for --report-id'. ['reportid' => $reportId]);$this->warn( string: "Report not found: {$reportId}");return collect():if C! $report->getStatus()) k$this->Logger->warning(self::LOG_PREFIX •' Report is inactive, processing anyway (manual override)'" ['reportId' = SreportId,'reportUvid' => $report->getUvid(),1):$this->warn( string: 'Report is inactive - processing anyway (manual override).'):$team = $report->getTeam();if ($team->getStatus() !== Team::STATUS_ACTIVE)$this->logger->warning(self::LOG_PREFIX'reportId' => $rep'reportuuid' => $1Cascade & XICommand Sel'teamId' => $report->getTeamIdO).'teamstatus'' => $team->getstatus(),Team is not active, processing anyway (manual override)'.[I);$this->warn( string: "Team #{$report->getTeamId(} is not active - processing anyway (manual override) .");|if ($report->isExpiredO) {$this->Logger->warning(self::LOG_PREFIX." Report is expired, processing anyway (manual override)". ['reportId' => $reportId,'reportUuid' => $report->getUuidO,'expiresAt'| => $report->getExpiresAt()?->toDateString().|I):$this->warn( string: |'Report is expired (expires_at: |' • Sreport->getExpiresAt(?->toDateString( •') - processing anyway (manual overridreturn collect([$report]);1 eal+ v Accept File %=X Reject File t3€+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]Al console [EU]4 console [STAGING)) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log)4...3* Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo$filterSet = $this->$activityIds = $this$this->logger->info(' saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;Support Daily - in 2 h 57mA100% C•Tue 14 Apr 12:03:05RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report Mar• Automated Report Lip#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automaleakeporscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +52 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allWinasun leams1/4.uir-o( 4 spaces...
|
NULL
|
8326474074468691993
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditViewFV faVsco.js vNavigateCodeLara PhpStormFileEditViewFV faVsco.js vNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack_leamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen©FeatureFlagsHelper.php© FixCrossTenantissues.p© FlushRolesPermissionsC© GeneratelnternalWebho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php@ Imnortli|sercFromCcvEil© IterateUsersCommand.c)Jiminnvcacheclearcom(c) minnv Deouacommanc(c)Jminnvser-ncrvotedio(c) Jiminny okenintocomm© MakeSlackLiveCoaching© ManageScimForTeam.p© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e RecalculatebealkiskscoC) RemoveDeleteMarkersd(e) Remove-xoiredNudoes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnyDeouecommana.ongAutomaleakeportscommana.ong© AutomatedReportsSendCommand.phpAutomatedReportsRepository.phpC AutomatedReportsService.php© UserPilotActivityListener.php© ActivityLogged.phpc CrealenelaAcuiviyevent.ono© AutomatedReportsCallbackService.php• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AutomatedReportResult.phpc) Automatedkeport.oneclass AutomatedReportsCommand extends Commandprivate function processReports(string $frequency): void© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php• RequestGenerateReportJob.php1321331154Rejectprivate function getReportById(string $reportId): Collection1150137138139140142143144145146147148149150151152153154155156158159160161162163164165166167168169170171172173174117511178$report = $this->reportRepository->findById0rUuid($reportId);if ($report === null) €$this->logger->warning(self::LOG_PREFIX .' Report not found for --report-id'. ['reportid' => $reportId]);$this->warn( string: "Report not found: {$reportId}");return collect():if C! $report->getStatus()) k$this->Logger->warning(self::LOG_PREFIX •' Report is inactive, processing anyway (manual override)'" ['reportId' = SreportId,'reportUvid' => $report->getUvid(),1):$this->warn( string: 'Report is inactive - processing anyway (manual override).'):$team = $report->getTeam();if ($team->getStatus() !== Team::STATUS_ACTIVE)$this->logger->warning(self::LOG_PREFIX'reportId' => $rep'reportuuid' => $1Cascade & XICommand Sel'teamId' => $report->getTeamIdO).'teamstatus'' => $team->getstatus(),Team is not active, processing anyway (manual override)'.[I);$this->warn( string: "Team #{$report->getTeamId(} is not active - processing anyway (manual override) .");|if ($report->isExpiredO) {$this->Logger->warning(self::LOG_PREFIX." Report is expired, processing anyway (manual override)". ['reportId' => $reportId,'reportUuid' => $report->getUuidO,'expiresAt'| => $report->getExpiresAt()?->toDateString().|I):$this->warn( string: |'Report is expired (expires_at: |' • Sreport->getExpiresAt(?->toDateString( •') - processing anyway (manual overridreturn collect([$report]);1 eal+ v Accept File %=X Reject File t3€+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]Al console [EU]4 console [STAGING)) AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log)4...3* Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo$filterSet = $this->$activityIds = $this$this->logger->info(' saved_search_id'user_id'= Sus'activity_count'1);return $activityIds;Support Daily - in 2 h 57mA100% C•Tue 14 Apr 12:03:05RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report Mar• Automated Report Lip#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automaleakeporscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +52 ›Ask anything (XAL)+ <> CodeClaude Sonnet 4.6Reject allAccept allWinasun leams1/4.uir-o( 4 spaces...
|
NULL
|
|
10901
|
214
|
51
|
2026-04-14T09:03:09.794177+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157389794_m1.jpg...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:09Fuune 4Today ~New...
|
NULL
|
8611154574146815996
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:09Fuune 4Today ~New...
|
10897
|
|
10902
|
215
|
69
|
2026-04-14T09:03:09.788963+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157389788_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditFV faVsco.js vViewNavigateCodeLara PhpStormFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack• TeamsD TracksO TranscriptionO TwilioD Users• VocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen©FeatureFlagsHelper.php© FixCrossTenantlssues.p© FlushRolesPermissionsC(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.p© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo(c) Jiminny okenintocommMakeslackLvecoaching(c Manacescimror eam.o© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e Recalculatebealkisksco(c) Removebe eremarkersc(e) Remove-xoiredNudoes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnybeouecommana.ong© AutomatedReportsCommand.php xAutomatedReportsRepository.phpC AutomatedReportsService.phpCreateHeldActivityEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsCommand extends Commandprivate function processReports(string $frequency): void$this->dispatcher->dispatchSync($job):© AutomatedReportsSendCommand.php• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php• RequestGenerateReportJob.php13113211541351361371381391401411421431144145Achgptrenectprivate function getReportById(string $reportId): Collection1471481491501511521531541551158159160161162163164165166167168169170171172173174175176$report = $this->reportRepository->findById0rUuid($reportId);if ($report === null) €$this->logger->warning(self::LOG_PREFIX .' Report not found for --report-id'. ['reportid' => $reportId]);$this->warn( string: "Report not found: {$reportId}");return collect():if (! Sreport->getstatus()) €$this->Logger->warning(self::LOG_PREFIX •' Report is inactive, processing anyway (manual override)'"L'reportId' => $reportId,'reportuuid' => $report->getUvid(),1):$this->warn( string: "Report is inactive - processing anyway (manual override).'):$team = $report->getTeam();if ($team->getStatus() !== Team::STATUS_ACTIVE) knunuseoloocereowariano'reportId' => $relCascade & XICommand Sel'reportUvid' => $report->getUvid,'teamId' => $report->getTeamId(),→> $team->getStatus(),* is not active, processing anyway (manual override)'. [1):$this->warn( string: "Team #[$report->getTeamId(} is not active - processing anyway (manual override)."):if ($report->isExpiredO) {$this->logger->warning(self::LOG_PREFIX' Report is expired, processing anyway (manual override)". I'reportId' => $reportId,"reportUvid'=> $report->getUuid),'expiresAt' => $report->getExpiresAt()?->toDateStringQ.|1D:$this-›warn( string: |'Report is expired (expires_at: || | |$report->getExpiresAt()?-›toDateString@ |||'b - processing anyway (manual overridreturn collect([$report]);1 ealv Accept File &-X Reject File t3€+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logs Sr iminny@localnosuiA HS_local [jiminny@localhost]A console (PROD]Al console [EU]I console [STAGING)AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F/*** Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo$filterSet = $this->$activityIds = $this$this->logger->info(' saved_search_id'user_id'= Sus'activity_count'1);return Sactivitvids:Support Daily - in 2 h 57mA100% C•Tue 14 Apr 12:03:09RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MarAutomated Report Lip#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automaleakeporscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +51 ›Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams1/3:9uir-o( 4 spaces...
|
NULL
|
8543559602004275972
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditFV faVsco.js vViewNavigateCodeLara PhpStormFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack• TeamsD TracksO TranscriptionO TwilioD Users• VocabularyDZoom© CoachingFeedbacksUpr© Command.php© CreateDatabaseUsers.pc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen©FeatureFlagsHelper.php© FixCrossTenantlssues.p© FlushRolesPermissionsC(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.p© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo(c) Jiminny okenintocommMakeslackLvecoaching(c Manacescimror eam.o© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e Recalculatebealkisksco(c) Removebe eremarkersc(e) Remove-xoiredNudoes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpJiminnybeouecommana.ong© AutomatedReportsCommand.php xAutomatedReportsRepository.phpC AutomatedReportsService.phpCreateHeldActivityEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsCommand extends Commandprivate function processReports(string $frequency): void$this->dispatcher->dispatchSync($job):© AutomatedReportsSendCommand.php• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php• RequestGenerateReportJob.php13113211541351361371381391401411421431144145Achgptrenectprivate function getReportById(string $reportId): Collection1471481491501511521531541551158159160161162163164165166167168169170171172173174175176$report = $this->reportRepository->findById0rUuid($reportId);if ($report === null) €$this->logger->warning(self::LOG_PREFIX .' Report not found for --report-id'. ['reportid' => $reportId]);$this->warn( string: "Report not found: {$reportId}");return collect():if (! Sreport->getstatus()) €$this->Logger->warning(self::LOG_PREFIX •' Report is inactive, processing anyway (manual override)'"L'reportId' => $reportId,'reportuuid' => $report->getUvid(),1):$this->warn( string: "Report is inactive - processing anyway (manual override).'):$team = $report->getTeam();if ($team->getStatus() !== Team::STATUS_ACTIVE) knunuseoloocereowariano'reportId' => $relCascade & XICommand Sel'reportUvid' => $report->getUvid,'teamId' => $report->getTeamId(),→> $team->getStatus(),* is not active, processing anyway (manual override)'. [1):$this->warn( string: "Team #[$report->getTeamId(} is not active - processing anyway (manual override)."):if ($report->isExpiredO) {$this->logger->warning(self::LOG_PREFIX' Report is expired, processing anyway (manual override)". I'reportId' => $reportId,"reportUvid'=> $report->getUuid),'expiresAt' => $report->getExpiresAt()?->toDateStringQ.|1D:$this-›warn( string: |'Report is expired (expires_at: || | |$report->getExpiresAt()?-›toDateString@ |||'b - processing anyway (manual overridreturn collect([$report]);1 ealv Accept File &-X Reject File t3€+ 2 of 2 files →Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logs Sr iminny@localnosuiA HS_local [jiminny@localhost]A console (PROD]Al console [EU]I console [STAGING)AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F/*** Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo$filterSet = $this->$activityIds = $this$this->logger->info(' saved_search_id'user_id'= Sus'activity_count'1);return Sactivitvids:Support Daily - in 2 h 57mA100% C•Tue 14 Apr 12:03:09RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MarAutomated Report Lip#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automaleakeporscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +51 ›Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams1/3:9uir-o( 4 spaces...
|
10900
|
|
10903
|
215
|
70
|
2026-04-14T09:03:13.236891+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157393236_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFV faVsco.js vViewNavigateCodeLaravelR PhpStormFileFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack• TeamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.phpc Crearevaroaseusers.oc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© FixCrossTenantlssues.p©FlushRolesPermissionsC(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.p© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo(c) Jiminny okenintocommMakeslackLvecoaching(c Manacescimror eam.o© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e RecalculatebealkiskscoC) RemoveDeleteMarkersd(e) Remove-xoiredNudoes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpC AutomatedReportsRepository.phpC AutomatedReportsService.php© UserPilotActivityListener.phpJiminnybeouecommana.ong© AutomatedReportsCommand.php xCreateHeldActivityEvent.php© AutomatedReportsCallbackService.php© ActivityLogged.php© AutomatedReportResult.phpclass AutomatedReportsCommand extends Commandpublic function handle(): intscurrencmonch = snow->month;© AutomatedReportsSendCommand.php• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php• RequestGenerateReportJob.php// Cneck It the current monch is a quarterly monch (vanuary, April, July, uccoder)SisOuarterlvMonth = in array($currentMonth. 11. 4. 7. 101.1sulel. Truen$this->logger->info(self::LOG_PREFIX . ' Checking conditions', ['isMonday' => $isMonday,'isFirstDay0fMonth' => $isFirstDay0fMonth,'currentMonth' => $currentMonth,'isQuarterLyMonth' => $isQuarterlyMonth,I);// Process daily reportsфuh1s->processkeporus( trequency: AUtomacedкeportsservice:.FREQUENCY_DALLY)HProcess weekly reports on Mondavsif ($isMonday) {$this->processReports( frequency: AutomatedReportsService: :FREQUENCY_WEEKLY);// Process monthly reports on the first day of the monthif ($isFirstDay0fMonth) {$this->processReports( frequency: AutomatedReportsService::FREQUENCY_MONTHLY);// Process quarterly reports on the first day of January, April, July, and Octoberif ($isFirstDay0fMonth &&Cascade 8e XICommand &1$this->processReports(-service::FREQUENCY_QUARTERLY);$this->logger->info(self::LOG_PREFIX .'Completed');return 0;/*** Process reports for a specific frequency.991100101102103104105106107108109110111112113114* @param string $frequency* Oreturn voidprivate function processReports(string $frequency): void$this->logger-›info(self::L0G_PREFIX . " Processing $frequency reports");$reportId = Sthis->option( key: 'report-id');if ($reportId !== null) {$reports = $this->getReportById($reportId);felse {// Get all enabled, not deleted reports with active teams for the specified frequency$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)43= custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]Al console [EU]I console [STAGING)AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F/*** Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo);$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return SactivitvidsSupport Daily - in 2 h 57mA100% C•Tue 14 Apr 12:03:13RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MarAutomated Report Lip#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automaleakeporscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +51 ›Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams134:1uir-o( 4 spaces...
|
NULL
|
-3191793147998243425
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileFV faVsco.js vViewNavigateCodeLaravelR PhpStormFileFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vProphetAiv D Reports© AutomatedReportsCl© AutomatedReportsRe© AutomatedReportsSt© CreateMockAskJimir© DeleteReportComma© GenerateMarketingR© Team.php© Usage.phpD Slack• TeamsD TracksO TranscriptionO TwilioD UsersVocabularyDZoom© CoachingFeedbacksUpr© Command.phpc Crearevaroaseusers.oc Daraoase oecountoi© DeleteOldAiCrmNotesC:© DeleteS3LeftoversComiDevPostmanCommand./© DiarizeViaAiParticipantk© EncryptTokensComman© EngagementStatsRegen© FeatureFlagsHelper.php© FixCrossTenantlssues.p©FlushRolesPermissionsC(e) Generatelnterna wepho• GroupSetDefaultLangua© HelperTruncateCoachin© HubspotJournalPollingC© HubspotWebhookServic©ImportRecording.php© ImportUsersFromCsvFil© IterateUsersCommand.p© JiminnyCacheClearCom© JiminnyDebugCommanc© JiminnySetEncryptedTo(c) Jiminny okenintocommMakeslackLvecoaching(c Manacescimror eam.o© MarkBranchForEnvironn© MuteOrganizerChannel.© PhpApm.php© PropagateCoachingFeer© PurgeConferences.php© PurgeSoftDeletedOppor© PurgeSyncBatchesCom(e RecalculatebealkiskscoC) RemoveDeleteMarkersd(e) Remove-xoiredNudoes© RemoveUnusedParticip:© ResetElasticSearch.php© RestoreActivityCrmProv© RestoreActivityTypeCor© ReportController.phpC AutomatedReportsRepository.phpC AutomatedReportsService.php© UserPilotActivityListener.phpJiminnybeouecommana.ong© AutomatedReportsCommand.php xCreateHeldActivityEvent.php© AutomatedReportsCallbackService.php© ActivityLogged.php© AutomatedReportResult.phpclass AutomatedReportsCommand extends Commandpublic function handle(): intscurrencmonch = snow->month;© AutomatedReportsSendCommand.php• TrackProviderInstalledEvent.php© RequestGenerateAskJiminnyReportJob.php© AddLayoutEntities.php© Team.phpCreateActivityLoggedEvent.php• RequestGenerateReportJob.php// Cneck It the current monch is a quarterly monch (vanuary, April, July, uccoder)SisOuarterlvMonth = in array($currentMonth. 11. 4. 7. 101.1sulel. Truen$this->logger->info(self::LOG_PREFIX . ' Checking conditions', ['isMonday' => $isMonday,'isFirstDay0fMonth' => $isFirstDay0fMonth,'currentMonth' => $currentMonth,'isQuarterLyMonth' => $isQuarterlyMonth,I);// Process daily reportsфuh1s->processkeporus( trequency: AUtomacedкeportsservice:.FREQUENCY_DALLY)HProcess weekly reports on Mondavsif ($isMonday) {$this->processReports( frequency: AutomatedReportsService: :FREQUENCY_WEEKLY);// Process monthly reports on the first day of the monthif ($isFirstDay0fMonth) {$this->processReports( frequency: AutomatedReportsService::FREQUENCY_MONTHLY);// Process quarterly reports on the first day of January, April, July, and Octoberif ($isFirstDay0fMonth &&Cascade 8e XICommand &1$this->processReports(-service::FREQUENCY_QUARTERLY);$this->logger->info(self::LOG_PREFIX .'Completed');return 0;/*** Process reports for a specific frequency.991100101102103104105106107108109110111112113114* @param string $frequency* Oreturn voidprivate function processReports(string $frequency): void$this->logger-›info(self::L0G_PREFIX . " Processing $frequency reports");$reportId = Sthis->option( key: 'report-id');if ($reportId !== null) {$reports = $this->getReportById($reportId);felse {// Get all enabled, not deleted reports with active teams for the specified frequency$reports = $this->reportRepository->getActiveReportsByFrequency($frequency);Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)43= custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]A console (PROD]Al console [EU]I console [STAGING)AskJiminnyReportActivityService.php x© RequestGenerateAskJiminnyReportJobTest×2 21 ^class AskJiminnyReportActiviprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate::ActivityUpdatedDate:ActivityUpdatedDate:ClosingPeriodFilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly LogDf..F/*** Fetch activity IDs fo* Date filters stored* no date constraint .* Creturn string[] Acti*/public function getActivSearch $savedSearchUser $user,): array {$requestParams = $th$criteria = Criteriaarray_merge($reqnuser->certnezo);$filterSet = $this->$activityIds = $this$this->logger->info('saved_search_id'user_id'= Sus'activity_count'1);return SactivitvidsSupport Daily - in 2 h 57mA100% C•Tue 14 Apr 12:03:13RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MarAutomated Report Lip#L211 and add validation with logs [EMAIL]#L209-213wLet me read the current state of the command file first.kead Automaleakeporscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:• AutomatedReportsRepository.phpAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violation,but sull rerurns the repor so processing continues.CheckBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredFrequency wouldn't run todaywarning log + terminal warn, continuesinfo log + terminal warn, continuesC1l -2 files +51 ›Ask anything (&AL)+ <> CodeClaude Sonnet 4.6Reject allAccept allwinasun leams134:1uir-o( 4 spaces...
|
NULL
|
|
10904
|
214
|
52
|
2026-04-14T09:03:15.844688+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157395844_m1.jpg...
|
PhpStorm
|
faVsco.js – AutomatedReportsCommand.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:15Fuune 4Today ~New...
|
NULL
|
8711455265129452026
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:15Fuune 4Today ~New...
|
NULL
|
|
10905
|
215
|
71
|
2026-04-14T09:03:19.478066+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157399478_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFditViewNavigateCodelaravelRefactonRun PhpStormFileFditViewNavigateCodelaravelRefactonRunToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny k ~Project v© Partner.phpC Permission.php© PhoneNumber.phpg Playback lheme.phpC Playbook.phpPlaybookcategory.phpC) Plavlist.phoC RateLimit.phpC) Region.pho(C) Role.phpC RoleChangeEvent.phpC) ScopeGroup.php(C) Session.phpg SlackBot.phpsocialAccount.php© Stage.phpC Task.php© Team.phpC) TeamAiContext.phpC) TeamDomain.phpC) TeamFeature.php©) TeamSettings.phpC TextRelay.php© Track.phpC) TranscriptionModel.php© TranscriptionModelLocale.|© TranscriptionProvider.phpC User. ohp© UserSettings.phpc) Vocabularv.ohp© VocabularyPronunciation.pC) VoiceAccess.php(C) VoiceConsentPrefix.php> _ Notifications• _ Observers> _ Policies>D Providers>D Queuev | Repositories> MAi> AutoScoring> Calendar>DCrm> → Geography© ActiveStreamsRepository.p(C) ActivityCommentRepositor(©) ActivityLogRepository.phpC) ActivityMessageRepository© ActivityMomentRepository.© ActivityProviderRepositoryC) ActivitvRepositorv.phpC) ActivitvSearchFilterReposil(C) ActivitvShareRepositorv.ohC) ActivityUploadSettingRepo(C) AiPromptRepository.phpC) AskAnythingRepository.phC AutomatedReportsReposit©) CallimportRepository.phpC) CoachingFeedbackReposit(©) ReportController.php© JiminnyDebugCommand.phpC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC) AddLayoutEntities.php(C) Team.php© AutomatedReportsRepository.php xC AutomatedReportsService.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass Aucomaceareporcskepostcory477280* Oreturn AutomatedReport*/pubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/**|* Find an automated report bu UUID* @param string Suuid* dreturn Automatedkeport/nullpubLic tunccion tindbyuu1d(scring suuld): :Automaсedкерогиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAccesmReiectlif (is_numeric($idorUuid)) €return AutomatedReport::w1thlrashed(->f1nd((1nt) s1d0rUu1d);recurn Automacedkeport::Wichlrasnedt-›wherel column: "Ju1d, Automatedкeporu:. couptimized slauruula-tirstun* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunccion gecALLscandardkeportslstring ssortcolumn = "created_at",string SsortDirection = 'desc': Collection (...l* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at".* @param string $sortDirection The sort direction. Allowed values:"asc", "desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usadespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn = created at'1 eait+Y Accept File &+X Reject File 1 38 €Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logs Sr iminny@localnosuic HS_local Jiminny@localhost)e console (PROD]e console (EU]I console [STAGING)AskJiminnyReportActivityService.php XC RequestGenerateAskJiminnyReportJobTesMLAI^class AskJiminnyReportActivigg лнg9 gnprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate:ActivityUpdatedDate:ActivityUpdatedDate:ClosingPer1odrilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log)4.}* Fetch activity IDs fo* Date filters stored* no dace constraint* @return stringl] Act:*/public function getActivSearch SsavedSearchUser suser): array {srequestParams = sthnenrera s untuerarray_mergelsrecnuser->certnezo);SfilterSet = $this->SactivityIds = $thissthis->logger->infol'saved_search_10'User_1d'= SUSactvt counte1);return Sactivitvids:Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:19RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report Ma•Automated Report !ip#L211 and add validation with logs insideGAutomatedRenortscommand.0ho11209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycollection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):AutomatedReportsCommand.php+1-1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID•Non-numenc → Uu d ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)+ & CodeClaude Sennet 4.6Reject allAccept allwinasun leams4/:21uir-oia 4 spaces...
|
NULL
|
4016787003287284930
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileFditViewNavigateCodelaravelRefactonRun PhpStormFileFditViewNavigateCodelaravelRefactonRunToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny k ~Project v© Partner.phpC Permission.php© PhoneNumber.phpg Playback lheme.phpC Playbook.phpPlaybookcategory.phpC) Plavlist.phoC RateLimit.phpC) Region.pho(C) Role.phpC RoleChangeEvent.phpC) ScopeGroup.php(C) Session.phpg SlackBot.phpsocialAccount.php© Stage.phpC Task.php© Team.phpC) TeamAiContext.phpC) TeamDomain.phpC) TeamFeature.php©) TeamSettings.phpC TextRelay.php© Track.phpC) TranscriptionModel.php© TranscriptionModelLocale.|© TranscriptionProvider.phpC User. ohp© UserSettings.phpc) Vocabularv.ohp© VocabularyPronunciation.pC) VoiceAccess.php(C) VoiceConsentPrefix.php> _ Notifications• _ Observers> _ Policies>D Providers>D Queuev | Repositories> MAi> AutoScoring> Calendar>DCrm> → Geography© ActiveStreamsRepository.p(C) ActivityCommentRepositor(©) ActivityLogRepository.phpC) ActivityMessageRepository© ActivityMomentRepository.© ActivityProviderRepositoryC) ActivitvRepositorv.phpC) ActivitvSearchFilterReposil(C) ActivitvShareRepositorv.ohC) ActivityUploadSettingRepo(C) AiPromptRepository.phpC) AskAnythingRepository.phC AutomatedReportsReposit©) CallimportRepository.phpC) CoachingFeedbackReposit(©) ReportController.php© JiminnyDebugCommand.phpC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC) AddLayoutEntities.php(C) Team.php© AutomatedReportsRepository.php xC AutomatedReportsService.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass Aucomaceareporcskepostcory477280* Oreturn AutomatedReport*/pubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/**|* Find an automated report bu UUID* @param string Suuid* dreturn Automatedkeport/nullpubLic tunccion tindbyuu1d(scring suuld): :Automaсedкерогиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAccesmReiectlif (is_numeric($idorUuid)) €return AutomatedReport::w1thlrashed(->f1nd((1nt) s1d0rUu1d);recurn Automacedkeport::Wichlrasnedt-›wherel column: "Ju1d, Automatedкeporu:. couptimized slauruula-tirstun* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunccion gecALLscandardkeportslstring ssortcolumn = "created_at",string SsortDirection = 'desc': Collection (...l* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at".* @param string $sortDirection The sort direction. Allowed values:"asc", "desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usadespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn = created at'1 eait+Y Accept File &+X Reject File 1 38 €Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logs Sr iminny@localnosuic HS_local Jiminny@localhost)e console (PROD]e console (EU]I console [STAGING)AskJiminnyReportActivityService.php XC RequestGenerateAskJiminnyReportJobTesMLAI^class AskJiminnyReportActivigg лнg9 gnprivate const int DEFAULprivate const array DATEActivityActualDate:ActivityActualDate:ActivityUpdatedDate:ActivityUpdatedDate:ClosingPer1odrilter:ClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log)4.}* Fetch activity IDs fo* Date filters stored* no dace constraint* @return stringl] Act:*/public function getActivSearch SsavedSearchUser suser): array {srequestParams = sthnenrera s untuerarray_mergelsrecnuser->certnezo);SfilterSet = $this->SactivityIds = $thissthis->logger->infol'saved_search_10'User_1d'= SUSactvt counte1);return Sactivitvids:Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:19RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report Ma•Automated Report !ip#L211 and add validation with logs insideGAutomatedRenortscommand.0ho11209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycollection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):AutomatedReportsCommand.php+1-1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int ID•Non-numenc → Uu d ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + ternnal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)+ & CodeClaude Sennet 4.6Reject allAccept allwinasun leams4/:21uir-oia 4 spaces...
|
10903
|
|
10906
|
215
|
72
|
2026-04-14T09:03:22.610600+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157402610_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRefactonRunT PhpStormFileFditViewNavigateCodelaraveRefactonRunToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny k ~Project v(©) ReportController.php© JiminnyDebugCommand.phpC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC) AddLayoutEntities.php(©) Team.php© DeviceRepository.php© AutomatedReportsRepository.php xAulomaleakeporisservice.onpc CrealenelaAcuiviyevent.ono© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.phpC ElasticActivityRepository.p© EmailMessageRepository.p© GenericAiPromptRepositor© GroupRepository.php(C InboxEmailBatchRepositon)© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass AucomaceareporcskepostcoryC InboxRepository.pnp© InvitationRepository.phpC) JobRepository.phpC) LanquageRepository.php© MomentRepository.phpNotificationRepository.phpC ParticipantRepository.php© ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.phpC PlavlistActivityRepository.p(© PlaylistRepository.png(C PlaylistShareRepository.phC) QuestionRepository.php(C) RoleChangeEventRepositolC RoleRepository.php© SearchRepository.phpC SnapshotRepository.phpC) SocialAccountRepository.p© StageRepository.php© SubscriptionSetRepository.(C) TaskRepository.pho© TeamAiContextRepository.©) TeamDomainsRepository.p(©) TeaminsightsRepository.phC) TeamRepository.phpC ThemeRepository.phpC TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.phpC) TranscriptionModelLocaleF© TranscriptionRepository.prC) TranscriptionSummarvRepC UserRepository.php© VocabularyRepository.pnp› Rulesv D Services>D Activity>D AReports>D AvatarcalendarM ConferenceM Crm>MImport> MInternallv → Kioskv _ AutomatedReports(C) ActivityTypeService.(©) AskJiminnyReportAc(C) AutomatedReportse(C) AutomatedReportsS* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л* Find an automated report bu UUID* Oparam string Suuid* dreturn Automatedkeport/nullpubLic tunccion tindbyuu1d(scring suuld): :Automaсedкерогиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceamReiectif (is_numeric($id0rUuid)) (return AutomatedReport::w1thlrashed(->f1nd((1nt) s1d0rUu1d);recurn Automacedkeport::Wichlrasnedt-›wherel column: "Ju1d, Automatedкeporu:. couptimized slauruula-tirstun* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc': Collection (...l* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at".* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usagespublic function getAskJiminnyReportsByUserdUser Suser.1 eallstring SsortColumn = created at'Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)\ Sa= custom.log= laravel.logs Sr iminny@localnosuic HS_local Liminny@localhost)e console (PROD]¿ console (EU]A console [STAGINGAskJiminnyReportActivityService.php xC RequestGenerateAskJiminnyReportJobTestclass ASkJiminnyReportActiviClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log) {...}* Fetch activity IDs fo* Date filters stored o* no dque conscrouns* dreturn stringl Actipublic function getActivSearch SsavedSearchUser suser,0: array {srequestParams = sthnenrera s urtueraAcceptmarcetsreqarray merge (Srecsuser->getTimez):btulterset = sthis-MacuVVOS =109Sthis->loqger->infod'saved search id'user id' => Sus'activity_countID:return sactivityidsprivate tuncuion bullakeJ v Accept File &+X Reject File 1 38&Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:22RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MaAutomated Reportip#L211 and add validation with logs insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycollection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric strine→ tindovinubNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)401 auesde Claude Sonnet 46Reject allAccept allwinasun leams51:1uir-oia 4 spaces...
|
NULL
|
-3311114688567086906
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRefactonRunT PhpStormFileFditViewNavigateCodelaraveRefactonRunToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny k ~Project v(©) ReportController.php© JiminnyDebugCommand.phpC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC) AddLayoutEntities.php(©) Team.php© DeviceRepository.php© AutomatedReportsRepository.php xAulomaleakeporisservice.onpc CrealenelaAcuiviyevent.ono© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.phpC ElasticActivityRepository.p© EmailMessageRepository.p© GenericAiPromptRepositor© GroupRepository.php(C InboxEmailBatchRepositon)© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass AucomaceareporcskepostcoryC InboxRepository.pnp© InvitationRepository.phpC) JobRepository.phpC) LanquageRepository.php© MomentRepository.phpNotificationRepository.phpC ParticipantRepository.php© ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.phpC PlavlistActivityRepository.p(© PlaylistRepository.png(C PlaylistShareRepository.phC) QuestionRepository.php(C) RoleChangeEventRepositolC RoleRepository.php© SearchRepository.phpC SnapshotRepository.phpC) SocialAccountRepository.p© StageRepository.php© SubscriptionSetRepository.(C) TaskRepository.pho© TeamAiContextRepository.©) TeamDomainsRepository.p(©) TeaminsightsRepository.phC) TeamRepository.phpC ThemeRepository.phpC TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.phpC) TranscriptionModelLocaleF© TranscriptionRepository.prC) TranscriptionSummarvRepC UserRepository.php© VocabularyRepository.pnp› Rulesv D Services>D Activity>D AReports>D AvatarcalendarM ConferenceM Crm>MImport> MInternallv → Kioskv _ AutomatedReports(C) ActivityTypeService.(©) AskJiminnyReportAc(C) AutomatedReportse(C) AutomatedReportsS* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л* Find an automated report bu UUID* Oparam string Suuid* dreturn Automatedkeport/nullpubLic tunccion tindbyuu1d(scring suuld): :Automaсedкерогиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceamReiectif (is_numeric($id0rUuid)) (return AutomatedReport::w1thlrashed(->f1nd((1nt) s1d0rUu1d);recurn Automacedkeport::Wichlrasnedt-›wherel column: "Ju1d, Automatedкeporu:. couptimized slauruula-tirstun* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc': Collection (...l* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at".* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usagespublic function getAskJiminnyReportsByUserdUser Suser.1 eallstring SsortColumn = created at'Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)\ Sa= custom.log= laravel.logs Sr iminny@localnosuic HS_local Liminny@localhost)e console (PROD]¿ console (EU]A console [STAGINGAskJiminnyReportActivityService.php xC RequestGenerateAskJiminnyReportJobTestclass ASkJiminnyReportActiviClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log) {...}* Fetch activity IDs fo* Date filters stored o* no dque conscrouns* dreturn stringl Actipublic function getActivSearch SsavedSearchUser suser,0: array {srequestParams = sthnenrera s urtueraAcceptmarcetsreqarray merge (Srecsuser->getTimez):btulterset = sthis-MacuVVOS =109Sthis->loqger->infod'saved search id'user id' => Sus'activity_countID:return sactivityidsprivate tuncuion bullakeJ v Accept File &+X Reject File 1 38&Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:22RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MaAutomated Reportip#L211 and add validation with logs insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycollection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric strine→ tindovinubNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)401 auesde Claude Sonnet 46Reject allAccept allwinasun leams51:1uir-oia 4 spaces...
|
NULL
|
|
10907
|
NULL
|
0
|
2026-04-14T09:03:33.340257+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157413340_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:33Fuune 4Today ~New...
|
NULL
|
-5529189722141514346
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:33Fuune 4Today ~New...
|
10904
|
|
10908
|
NULL
|
0
|
2026-04-14T09:03:33.327245+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157413327_m2.jpg...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityService.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5081751640215339021
|
-4009658842534132447
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
PhpStormFileFditViewNavigateCodelaraveRefactonRunToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny k ~Project v(©) ReportController.php© JiminnyDebugCommand.phpC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC) AddLayoutEntities.php(©) Team.php© DeviceRepository.php© AutomatedReportsRepository.php xAulomaleakeporisservice.onpc CrealenelaAcuiviyevent.ono© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.phpC ElasticActivityRepository.p© EmailMessageRepository.p© GenericAiPromptRepositor© GroupRepository.php(C InboxEmailBatchRepositon)© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass AucomaceareporcskepostcoryC InboxRepository.pnp© InvitationRepository.phpC) JobRepository.phpC) LanquageRepository.php© MomentRepository.phpNotificationRepository.phpC ParticipantRepository.php© ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.phpC PlavlistActivityRepository.p(© PlaylistRepository.png(C PlaylistShareRepository.phC) QuestionRepository.php(C) RoleChangeEventRepositolC RoleRepository.php© SearchRepository.phpC SnapshotRepository.phpC) SocialAccountRepository.p© StageRepository.php© SubscriptionSetRepository.(C) TaskRepository.pho© TeamAiContextRepository.C TeamDomainsRepository.p(©) TeaminsightsRepository.phC) TeamRepository.phpC ThemeRepository.phpC TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.phpC) TranscriptionModelLocaleF© TranscriptionRepository.prC) TranscriptionSummarvRepC UserRepository.php© VocabularyRepository.pnp› Rulesv D Services>D Activity>D AReports>D AvatarM CalendarM ConferenceM Crm>MImport> MInternallv → Kioskv _ AutomatedReports(C) ActivityTypeService.(©) AskJiminnyReportAc(C) AutomatedReportse(C) AutomatedReportsS* areturn AutomatedRenortpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л* Find an automated report bu UUID* Oparam string Suuid* dreturn Automatedkeport/nullpubLic tuncclon tindbyuu1d(string puu1d): :Automatedкeрoгиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotif (is_numeric($id0rUuid)) (return AutomatedReport::w1thlrashed(->f1nd((1nt) s1d0rUu1d);return AutomatedReport: :wit&Trashed()-›where( column: |'uuid', AutomatedReport:: to0ptimized(SidOrUvid))->firstO);* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to "created_at'.* aparam string $sortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc': Collection (...l* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at'.* @param string $sortDirection The sort direction. Allowed values:"asc", desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usagespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atWindsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)Reiect1 eall\ Sa= custom.log= laravel.logs Sr iminny@localnosuic HS_local Liminny@localhost)e console (PROD]¿ console (EU]A console [STAGINGAskJiminnyReportActivityService.php xC RequestGenerateAskJiminnyReportJobTestclass ASkJiminnyReportActiviClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log) {...}* Fetch activity IDs fo* Date filters stored o* no dque conscrouns* dreturn stringl Actipublic function getActivSearch SsavedSearchUser suser,0: array {srequestParams = sthnenrera s urtueraAcceptmarcetsreqarray merge (Srecsuser->getTimez):btulterset = sthis-MacuVVOS =109Sthis->loqger->infod'saved search id'user id' => Sus'activity_countID:return sactivityidsprivate tuncuion bullakeJ v Accept File &+X Reject File 1 38&Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:33RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MaAutomated Report !ip#L211 and add validation with logs insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):• AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric strine→ tindovinubNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal wam, rerurns empty collection sklos processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)401 auesde Claude Sonnet 46Reject allAccept allwinasun leams51:1uir-oia 4 spaces...
|
10906
|
|
10909
|
216
|
0
|
2026-04-14T09:03:41.110267+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157421110_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:40Fuune 4Today ~New...
|
NULL
|
8165261447115302344
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:40Fuune 4Today ~New...
|
NULL
|
|
10910
|
217
|
0
|
2026-04-14T09:03:41.077023+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157421077_m2.jpg...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityService.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRefactonTool PhpStormFileFditViewNavigateCodelaraveRefactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny k ~Project v© DeviceRepository.phpC ElasticActivityRepository.p© EmailMessageRepository.p© GenericAiPromptRepositor© GroupRepository.php(C InboxEmailBatchRepositon)C InboxRepository.pnp© InvitationRepository.phpC) JobRepository.phpC) LanquageRepository.php© MomentRepository.phpNotificationRepository.phpC ParticipantRepository.php© ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.phpC PlavlistActivityRepository.p(© PlaylistRepository.png(C PlaylistShareRepository.phC) QuestionRepository.php(C) RoleChangeEventRepositolC RoleRepository.php© SearchRepository.phpC SnapshotRepository.phpC) SocialAccountRepository.pg stageRepository.php© SubscriptionSetRepository.(C) TaskRepository.pho© TeamAiContextRepository.©) TeamDomainsRepository.p(©) TeaminsightsRepository.phC) TeamRepository.phpC ThemeRepository.phpC TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.phpC) TranscriptionModelLocaleF© TranscriptionRepository.prC) TranscriptionSummarvRepC UserRepository.php© VocabularyRepository.pnp› Rulesv D Services> _ Activity>D AReports>D AvatarcalendarM ConferenceM Crm>MImport> MInternallv → Kioskv _ AutomatedReports(C) ActivityTypeService.(©) AskJiminnyReportAc(C) AutomatedReportse(C) AutomatedReportsS(©) ReportController.php© JiminnyDebugCommand.phpC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC) AddLayoutEntities.php(©) Team.php© AutomatedReportsRepository.php xAulomaleakeporisservice.onp(c CrealenelaAcuiviyevent.ono© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass Aucomaceareporcskepostcory53* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л* Find an automated report bu UUID* Oparam string Suuid* dreturn Automatedkeport/nullpubLic tuncclon tindbyuu1d(string puu1d): :Automatedкeрoгиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotif (is_numeric($id0rUuid)) (return AutomateaReport: wathlrasned(->rzn antp szdoruuza)l;recurn Automacedkeport::Wichlrasnecu-›wherel column: "Ju1d, Automatedкeporu:. couptimized slauruula-tirstunCascade & l* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc': Collection (...l* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at".* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usagespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atWindsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)KenecuCommand*_51= custom.log= laravel.log4 SF [iiminny@localhostlc HS_local Jiminny@localhost)e console (PROD]¿ console (EU]A console [STAGINGAskJiminnyReportActivityService.php xC RequestGenerateAskJiminnyReportJobTestclass ASkJiminnyReportActiviClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log) {...}* Fetch activity IDs fo* Date filters stored o* no dque conscrouns* dreturn stringl Actipublic function getActivSearch SsavedSearchUser suser,D: arraysrequestParams = sthnenrera s urtueraAcceptmarcetsreqarray merge (Srecsuser->getTimez):btulterset = sthis-MacuVVOS =109Sthis->loqger->infod'saved search id'user id' => Sus'activity_countID:return sactivityidsprivate runcuion bulake1 eallJ v Accept File &+X Reject File 1 38&Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:40RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report Ma• Automated Report !ip#L211 and add validation with logs insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycollection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric strine→ tindovinubNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)401 auesde Claude Sonnet 46Reject allAccept allwinasur leams51:1uir-oia 4 spaces...
|
NULL
|
5012723601940443684
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRefactonTool PhpStormFileFditViewNavigateCodelaraveRefactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny k ~Project v© DeviceRepository.phpC ElasticActivityRepository.p© EmailMessageRepository.p© GenericAiPromptRepositor© GroupRepository.php(C InboxEmailBatchRepositon)C InboxRepository.pnp© InvitationRepository.phpC) JobRepository.phpC) LanquageRepository.php© MomentRepository.phpNotificationRepository.phpC ParticipantRepository.php© ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.phpC PlavlistActivityRepository.p(© PlaylistRepository.png(C PlaylistShareRepository.phC) QuestionRepository.php(C) RoleChangeEventRepositolC RoleRepository.php© SearchRepository.phpC SnapshotRepository.phpC) SocialAccountRepository.pg stageRepository.php© SubscriptionSetRepository.(C) TaskRepository.pho© TeamAiContextRepository.©) TeamDomainsRepository.p(©) TeaminsightsRepository.phC) TeamRepository.phpC ThemeRepository.phpC TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.phpC) TranscriptionModelLocaleF© TranscriptionRepository.prC) TranscriptionSummarvRepC UserRepository.php© VocabularyRepository.pnp› Rulesv D Services> _ Activity>D AReports>D AvatarcalendarM ConferenceM Crm>MImport> MInternallv → Kioskv _ AutomatedReports(C) ActivityTypeService.(©) AskJiminnyReportAc(C) AutomatedReportse(C) AutomatedReportsS(©) ReportController.php© JiminnyDebugCommand.phpC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC) AddLayoutEntities.php(©) Team.php© AutomatedReportsRepository.php xAulomaleakeporisservice.onp(c CrealenelaAcuiviyevent.ono© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass Aucomaceareporcskepostcory53* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л* Find an automated report bu UUID* Oparam string Suuid* dreturn Automatedkeport/nullpubLic tuncclon tindbyuu1d(string puu1d): :Automatedкeрoгиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotif (is_numeric($id0rUuid)) (return AutomateaReport: wathlrasned(->rzn antp szdoruuza)l;recurn Automacedkeport::Wichlrasnecu-›wherel column: "Ju1d, Automatedкeporu:. couptimized slauruula-tirstunCascade & l* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc': Collection (...l* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at".* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usagespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atWindsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)KenecuCommand*_51= custom.log= laravel.log4 SF [iiminny@localhostlc HS_local Jiminny@localhost)e console (PROD]¿ console (EU]A console [STAGINGAskJiminnyReportActivityService.php xC RequestGenerateAskJiminnyReportJobTestclass ASkJiminnyReportActiviClosingPeriodFilter:public function __constrprivate readonly Actprivate readonly Elaprivate readonly Log) {...}* Fetch activity IDs fo* Date filters stored o* no dque conscrouns* dreturn stringl Actipublic function getActivSearch SsavedSearchUser suser,D: arraysrequestParams = sthnenrera s urtueraAcceptmarcetsreqarray merge (Srecsuser->getTimez):btulterset = sthis-MacuVVOS =109Sthis->loqger->infod'saved search id'user id' => Sus'activity_countID:return sactivityidsprivate runcuion bulake1 eallJ v Accept File &+X Reject File 1 38&Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:40RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report Ma• Automated Report !ip#L211 and add validation with logs insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycollection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be betore the models alphabetically):AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1vone. oummary or changes.AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric strine→ tindovinubNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)401 auesde Claude Sonnet 46Reject allAccept allwinasur leams51:1uir-oia 4 spaces...
|
NULL
|
|
10911
|
217
|
1
|
2026-04-14T09:03:44.009370+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157424009_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFditViewNavigateCodelaravelPetactonToo PhpStormFileFditViewNavigateCodelaravelPetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject vD UnitActionsComponent› Configuration> MConsole> M ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixturesHelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobtcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTest→I Listeners→]Mal> MModelsM Notifications› M Observers› D PoliciesProvidersRepositories> D Rulesv Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenor(©) ReportController.phpJiminnybeouecommana.ongc) Automatedreoonscommane.oneutomatedRevor ssendCommane.onoC AddLayoutEntities.php(©) Team.php© AutomatedReportsRepository.php XC AutomatedReportsService.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php(0) RequestGenerate.sk.liminnvRenor.oh.ohn© RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass Aucomaceareporcskepostcory56 E72* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/**|* Find an automated report bu UUID* @param string Suuid* dreturn Automatedkeport/nullpubLic tuncclon tindbyuu1d(string puu1d): :Automatedкeрoгиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotlif (is_numeric($idorUuid)) €return AutomatedReport::w1thlrashed->f1nd((1nt) s1d0rUu1d)*recurn Automacedkeport::Wichlrasned()-›wherel column: "Ju1d, Automatedкeporu:. couptimized slauruula-tirstun* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc','desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc: Collection (...* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at".* dparam string ssortuireccion ine sorc aireccion. ALlowed values:"asc","desc' etalus to 'dese'* drerurn couuectonsaurondredredor14 usagespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atwinasurt change0g 2.12.21: A new version is available. // View Changelog (today 10:33)Reiect1 eall= custom.log= laravel.logL SF [jiminny@localhost]c HS_local Liminny@localhost)console PRob)¿ console (EU]A console [STAGINGAskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.phpC RequestGenerateAskJiminnyReportJobTesclass AskJiminnyReportActiv100117157—184185205—206224231275orivate tunccion makeusprivate function makesapublic function testbetouo uc runction testhenpublic function testGetpublic function testGetpublic function testGetpublic function testfetpubuic tunction testbet$user = $this->makeSsavedSearch = Sthi$filterSet = Sthissthis->activitySearscapturedcriteria%thas->actvitvsaar->method( con=>WalLLke turnite"unus-›elasclckedosSthis->loqger->methsthis->service->qetsthis->assertNotllu$this->assertFalse(pubuic tunction tescuetV Accept File &+X Reject File 1 38 @Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:43RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MaAutomated Report1n7 211 and adc valication with loas insideGAutomatedRenortscommand. 0hn1 209-210et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycollection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsre.oslorv.oneAlso tix the import order (Collection should be before the models alphabetically):AutomatedReportsCommand.php+1-1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int IDNon-numenc → Uu d ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51>Ask anything (&+L)3,0l &uesde Claude Sonnet 46Reject allAccept allwinasun leamsuir-oia 4 spaces...
|
NULL
|
5919062211770618231
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileFditViewNavigateCodelaravelPetactonToo PhpStormFileFditViewNavigateCodelaravelPetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject vD UnitActionsComponent› Configuration> MConsole> M ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixturesHelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobtcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTest→I Listeners→]Mal> MModelsM Notifications› M Observers› D PoliciesProvidersRepositories> D Rulesv Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenor(©) ReportController.phpJiminnybeouecommana.ongc) Automatedreoonscommane.oneutomatedRevor ssendCommane.onoC AddLayoutEntities.php(©) Team.php© AutomatedReportsRepository.php XC AutomatedReportsService.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php(0) RequestGenerate.sk.liminnvRenor.oh.ohn© RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass Aucomaceareporcskepostcory56 E72* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/**|* Find an automated report bu UUID* @param string Suuid* dreturn Automatedkeport/nullpubLic tuncclon tindbyuu1d(string puu1d): :Automatedкeрoгиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotlif (is_numeric($idorUuid)) €return AutomatedReport::w1thlrashed->f1nd((1nt) s1d0rUu1d)*recurn Automacedkeport::Wichlrasned()-›wherel column: "Ju1d, Automatedкeporu:. couptimized slauruula-tirstun* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc','desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc: Collection (...* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at".* dparam string ssortuireccion ine sorc aireccion. ALlowed values:"asc","desc' etalus to 'dese'* drerurn couuectonsaurondredredor14 usagespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atwinasurt change0g 2.12.21: A new version is available. // View Changelog (today 10:33)Reiect1 eall= custom.log= laravel.logL SF [jiminny@localhost]c HS_local Liminny@localhost)console PRob)¿ console (EU]A console [STAGINGAskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.phpC RequestGenerateAskJiminnyReportJobTesclass AskJiminnyReportActiv100117157—184185205—206224231275orivate tunccion makeusprivate function makesapublic function testbetouo uc runction testhenpublic function testGetpublic function testGetpublic function testGetpublic function testfetpubuic tunction testbet$user = $this->makeSsavedSearch = Sthi$filterSet = Sthissthis->activitySearscapturedcriteria%thas->actvitvsaar->method( con=>WalLLke turnite"unus-›elasclckedosSthis->loqger->methsthis->service->qetsthis->assertNotllu$this->assertFalse(pubuic tunction tescuetV Accept File &+X Reject File 1 38 @Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:43RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report MaAutomated Report1n7 211 and adc valication with loas insideGAutomatedRenortscommand. 0hn1 209-210et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycollection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucoma ceakepo rtscommand.ohoRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsre.oslorv.oneAlso tix the import order (Collection should be before the models alphabetically):AutomatedReportsCommand.php+1-1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int IDNon-numenc → Uu d ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51>Ask anything (&+L)3,0l &uesde Claude Sonnet 46Reject allAccept allwinasun leamsuir-oia 4 spaces...
|
10910
|
|
10912
|
216
|
1
|
2026-04-14T09:03:48.917469+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157428917_m1.jpg...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityServiceTest.ph faVsco.js – AskJiminnyReportActivityServiceTest.php...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"RequestGenerateAskJiminnyReportJobTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-632572907885338208
|
-8635651950404714175
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
+SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp> 0Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:48Fuune 4Today ~New...
|
10909
|
|
10913
|
217
|
2
|
2026-04-14T09:03:48.928563+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157428928_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongC AutomatedReportsCommand.phpl/utomatecRenorissenoCommana.ongC AddLayoutEntities.php(C) Team.phpD UnitActionsComponent› Configuration› M Console© AutomatedReportsRepository.php XC AutomatedReportsService.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass AucomaceareporcskepostcoryM ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixturesHelpersD Http>_Integrations> Minteractions• D Jobs> M ActivitvM AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobtcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTestMListeners> MModelsM Notifications› M ObserversPoliciesProvidersRepositories> D Rulesv Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenor* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/**|* Find an automated report bu UUID* @param string Suuid* dreturn Automatedkeport/nullpubLic tunccion tindbyuu1d(scring suuld): :Automaсedкерогиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotlif (is_numeric($idorUuid)) €return AutomatedReport:ende(int $idoruuld:recurn Automacedkeport:: where vuld, Automacedreporu:. couptimized(slauruula-stirsti* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc','desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn ="creaced_at",scring ssortbirection = 'desc: Collection (...* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at'.* dparam string ssortuireccion ine sorc aireccion. ALlowed values:"asc", desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usadespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atwinasurt changelog 2.12.21: A new version is available. // View Changelog (today 10:33)Kenecu1 eall= custom.log= laravel.logL SF [jiminny@localhost]c HS_local Jiminny@localhost)e console (PROD]¿ console (EU]4 console [STAGINGAskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.phpC RequestGenerateAskJiminnyReportJobTesclass AskJiminnyReportActiv71 >1A0 C>118 M >157 >— 184185 V >205DAVAS2242252220228229230249250— 251252 D>274_275orivate tunccion makeusprivate function makesapublic function testbetpubuic tunction testbetpublic function testGetpublic function testGetpublic function testGetpublic function testfetpubuic tunction testbet$user = schis->makeSsavedSearch = Sthi$filterSet = Sthis-sthis->activitySearscapturedcriteria"thns->activitvsas->methodl cor=>WalLlke turnitanunus-›elasu ickenps$this->loager->methsthis->service->qetsthis->assertNotllu$this->assertFalse(pubuic tunction tescuetAccept File &+X Reject File 1%g: Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:48RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Mar© Automated Report !1n7 211 and adc valication with loas insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be before the models alphabetically):AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int IDNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)3,0l &uesde Claude Sonnet 46Reject allAccept allwinasun leamsuir-oia 4 spaces...
|
NULL
|
-2731937510118527180
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongC AutomatedReportsCommand.phpl/utomatecRenorissenoCommana.ongC AddLayoutEntities.php(C) Team.phpD UnitActionsComponent› Configuration› M Console© AutomatedReportsRepository.php XC AutomatedReportsService.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass AucomaceareporcskepostcoryM ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixturesHelpersD Http>_Integrations> Minteractions• D Jobs> M ActivitvM AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobtcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTestMListeners> MModelsM Notifications› M ObserversPoliciesProvidersRepositories> D Rulesv Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenor* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/**|* Find an automated report bu UUID* @param string Suuid* dreturn Automatedkeport/nullpubLic tunccion tindbyuu1d(scring suuld): :Automaсedкерогиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotlif (is_numeric($idorUuid)) €return AutomatedReport:ende(int $idoruuld:recurn Automacedkeport:: where vuld, Automacedreporu:. couptimized(slauruula-stirsti* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc','desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn ="creaced_at",scring ssortbirection = 'desc: Collection (...* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at'.* dparam string ssortuireccion ine sorc aireccion. ALlowed values:"asc", desc". veraults to "desc".* drerurn couuectonsaurondredredor14 usadespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atwinasurt changelog 2.12.21: A new version is available. // View Changelog (today 10:33)Kenecu1 eall= custom.log= laravel.logL SF [jiminny@localhost]c HS_local Jiminny@localhost)e console (PROD]¿ console (EU]4 console [STAGINGAskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.phpC RequestGenerateAskJiminnyReportJobTesclass AskJiminnyReportActiv71 >1A0 C>118 M >157 >— 184185 V >205DAVAS2242252220228229230249250— 251252 D>274_275orivate tunccion makeusprivate function makesapublic function testbetpubuic tunction testbetpublic function testGetpublic function testGetpublic function testGetpublic function testfetpubuic tunction testbet$user = schis->makeSsavedSearch = Sthi$filterSet = Sthis-sthis->activitySearscapturedcriteria"thns->activitvsas->methodl cor=>WalLlke turnitanunus-›elasu ickenps$this->loager->methsthis->service->qetsthis->assertNotllu$this->assertFalse(pubuic tunction tescuetAccept File &+X Reject File 1%g: Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:48RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Mar© Automated Report !1n7 211 and adc valication with loas insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be before the models alphabetically):AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int IDNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Ask anything (&+L)3,0l &uesde Claude Sonnet 46Reject allAccept allwinasun leamsuir-oia 4 spaces...
|
NULL
|
|
10914
|
216
|
2
|
2026-04-14T09:03:52.100793+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157432100_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMsActivityFileEditViewGoHistoryWindow +SlackEDHomeDMsActivityFileEditViewGoHistoryWindow→Help> 0ladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:51..•More+Jiminny ...# Starred8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоаn АРусротораmone nu npomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievFuune 4Today ~New+Nikolay Yankov is typing...
|
NULL
|
-4355680490677091966
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMsActivityFileEditViewGoHistoryWindow +SlackEDHomeDMsActivityFileEditViewGoHistoryWindow→Help> 0ladlSupport Daily • in 2h 57 m100% C48Tue 14 Apr 12:03:51..•More+Jiminny ...# Starred8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоаn АРусротораmone nu npomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievFuune 4Today ~New+Nikolay Yankov is typing...
|
NULL
|
|
10915
|
217
|
3
|
2026-04-14T09:03:52.064201+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157432064_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRefactonTool PhpStormFileFditViewNavigateCodelaraveRefactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongC AutomatedReportsCommand.phpl/utomatecRenorissenoCommana.ongC AddLayoutEntities.php(C) Team.phpD Unit_ ActionsComponentConfiguration› M Console© AutomatedReportsRepository.php XC AutomatedReportsService.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php(©) RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass AucomaceareporcskepostcoryM ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixturesHelpersD Http>_Integrations> Minteractions• D Jobs> M ActivitvM AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobtcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTestMListeners→]Mal> MModelsM Notifications› M ObserversD PoliciesProvidersRepositories> D Rulesv Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c) AutomatedRenon* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/**|* Find an automated report bu UUID* @param string Suuid* dreturn Automatedkeport/nullpubLic tunccion tindbyuu1d(scring suuld): :Automaсedкерогиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotlif (is_numeric($idorUuid)) €return AutomatedReport: :find((int) sidoruuid):recurn Automacedkeport::where vuld, Automacedreporu:. couptimized(slauruula-stirsti* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc','desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc': Collection (...* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at'.* dparam string ssortuireccion ine sorc aireccion. ALlowed values:"asc","desc". beraults to "desc"* drerurn couuectonsaurondredredor14 usadespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atwinasurt changelog 2.12.21: A new version is available. // View Changelog (today 10:33)Kenecu1 eall= custom.log= laravel.logL SF [jiminny@localhost]c HS_local Jiminny@localhost)e console (PROD]¿ console (EU]4 console [STAGING)AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.phpC RequestGenerateAskJiminnyReportJobTesclass AskJiminnyReportActiv71 >1A0 C>118 M >157 >185 V >205DAVAS224225227228229230231249250— 251252 D>274_275orivate tunccion makeusprivate function makesapublic function testbetpubuic tunction testbetpublic function testGetpublic function testGetpublic function testGetpublic function testfetpubuic tunction testbet$user = schis->makeSsavedSearch = Sthi$filterSet = Sthis-sthis->activitySearscapturedcriteria"thns->activitvsas->methodl cor=>WalLLke turnitenunus-›elasu ickenps$this->logger->methsthis->service->qetsthis->assertNotllu$this->assertFalse(pubuic tunction tescuetAccept File &+X Reject File 1 38&: Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:51RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Mar© Automated Report !1n7 211 and adc valication with loas insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be before the models alphabetically):AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int IDNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Reject allAccept allAsk anything (&+L)30l &uesde Claude Sonnet 46Saving TaVsco.js settingswinasun leamsuir-oia 4 spaces...
|
NULL
|
-1446524370036857908
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRefactonTool PhpStormFileFditViewNavigateCodelaraveRefactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongC AutomatedReportsCommand.phpl/utomatecRenorissenoCommana.ongC AddLayoutEntities.php(C) Team.phpD Unit_ ActionsComponentConfiguration› M Console© AutomatedReportsRepository.php XC AutomatedReportsService.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php(©) RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass AucomaceareporcskepostcoryM ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixturesHelpersD Http>_Integrations> Minteractions• D Jobs> M ActivitvM AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobtcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTestMListeners→]Mal> MModelsM Notifications› M ObserversD PoliciesProvidersRepositories> D Rulesv Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c) AutomatedRenon* Oreturn AutomatedReportpubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/**|* Find an automated report bu UUID* @param string Suuid* dreturn Automatedkeport/nullpubLic tunccion tindbyuu1d(scring suuld): :Automaсedкерогиre atomеероt.ee, оmерrcoupamizealoouna atmetTusagepublic function findByld0rUuid(string Sid0rUuid): ?AutomatedReportAcceotlif (is_numeric($idorUuid)) €return AutomatedReport: :find((int) sidoruuid):recurn Automacedkeport::where vuld, Automacedreporu:. couptimized(slauruula-stirsti* Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to "created_at'.* aparam string SsortDirection The sort direction. Allowed values:'asc','desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn = "created_at",scring ssortbirection = 'desc': Collection (...* Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', "created_at'. Defaults to 'created_at'.* dparam string ssortuireccion ine sorc aireccion. ALlowed values:"asc","desc". beraults to "desc"* drerurn couuectonsaurondredredor14 usadespublic function getAskJiminnyReportsByUserdUser Suser.string SsortColumn =created atwinasurt changelog 2.12.21: A new version is available. // View Changelog (today 10:33)Kenecu1 eall= custom.log= laravel.logL SF [jiminny@localhost]c HS_local Jiminny@localhost)e console (PROD]¿ console (EU]4 console [STAGING)AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.phpC RequestGenerateAskJiminnyReportJobTesclass AskJiminnyReportActiv71 >1A0 C>118 M >157 >185 V >205DAVAS224225227228229230231249250— 251252 D>274_275orivate tunccion makeusprivate function makesapublic function testbetpubuic tunction testbetpublic function testGetpublic function testGetpublic function testGetpublic function testfetpubuic tunction testbet$user = schis->makeSsavedSearch = Sthi$filterSet = Sthis-sthis->activitySearscapturedcriteria"thns->activitvsas->methodl cor=>WalLLke turnitenunus-›elasu ickenps$this->logger->methsthis->service->qetsthis->assertNotllu$this->assertFalse(pubuic tunction tescuetAccept File &+X Reject File 1 38&: Support Daily • in 2h 57 m100% |45]Tue 14 Apr 12:03:51RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Mar© Automated Report !1n7 211 and adc valication with loas insideGAutomatedRenortscommand. 0ho.5 209-710et me read the current state of the command tile firstkead Automateakeportscommana.ongIcan see the user's approach— processsing lekeport already exists trom my earlier work dut qetkeporcbyla iswhat's being used in processReports.Ineed to implement getReportByld properly with validation + logs, and addine reposttory metnoo. Leume also check the eutumtnare supportycoLlection impon stuatlon:Searched use luminate Suooort Colectionin apo/Console/Commands/Renorts/AutomatedRenortsCommand.oh...Now implement both changes - the repository method and the getReportByld method with proper validation:Error whlle ealting Aucomaceakepo rtscommand.onpRead AutomatecRenortscommand.onoThe file is now only 140 lines - the user removed the processSing leReport/warnlfNotApp Licab leForSchedu Lemetnoas. Now limplementcom changes.• AutomatedReportsCommand.php+o -1Now add tindbyldoruuld to the repository:1 Aulomalecreoorsreroslorv.onoAlso tix the import order (Collection should be before the models alphabetically):AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1 -1Done. Summary of changes:AUromareckedor skenos1rorv:: Tndbylouruu1o lautonarecrenorSkedos1t0rv.0no:4/—5492Numeric string → find() bv int IDNon-numenc → Uud ookuo via tooptimizedoBoth use withTrashed() so soft-deleted reports are findable manuallygetReportByld() (AutomatedReportsCommand.php: 135-194) — checks all conditions that getActiveReportsByFrequency enforces, logging a warning to the log channel and printing a warn() to the terminal for each violationbut sull rerurns the repor so processing continues.chockBehaviour on failINot Tounewarhina loe + terminal warn, returns emoty collection skips processine)Inactive statuswarnino loe + terminal warn, continueseam not activewarnino lloo + terminal warn, continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo lod + terminal warn. continuesWC1l -2 files +51 >Reject allAccept allAsk anything (&+L)30l &uesde Claude Sonnet 46Saving TaVsco.js settingswinasun leamsuir-oia 4 spaces...
|
10913
|
|
10916
|
216
|
3
|
2026-04-14T09:03:52.826826+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157432826_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMsActivityFileEditViewGoHistoryWindow +SlackEDHomeDMsActivityFileEditViewGoHistoryWindow→Help> 0ladlSupport Daily • in 2h 57 m100% <478Tue 14 Apr 12:03:52..•More+Jiminny ...# Starred8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоаn АРусротораmone nu npomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievFuune 4Today ~New+Nikolay Yankov is typing...
|
NULL
|
1592566713905809836
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMsActivityFileEditViewGoHistoryWindow +SlackEDHomeDMsActivityFileEditViewGoHistoryWindow→Help> 0ladlSupport Daily • in 2h 57 m100% <478Tue 14 Apr 12:03:52..•More+Jiminny ...# Starred8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоаn АРусротораmone nu npomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievFuune 4Today ~New+Nikolay Yankov is typing...
|
10914
|
|
10917
|
217
|
4
|
2026-04-14T09:03:54.543327+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157434543_m2.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
app.staging.jiminny.com/ondemand?topic_id[]=e02f09 app.staging.jiminny.com/ondemand?topic_id[]=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 869720
28
28
14
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Topics:
Competitors
Show internal and external activities:
Show internal only
Save Search
Clear all
Saved searches Saved searches
Saved searches
Saved searches
Team
Search teams Search teams
Search teams
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.14930555,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Console Home | Console Home | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Console Home | Console Home | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.08671875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SecurityGroup | EC2 | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SecurityGroup | EC2 | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.06484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.225,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.23472223,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.2534722,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.26319444,"width":0.23476562,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.28194445,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.29166666,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31041667,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.015625,"top":0.3201389,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.31666666,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.33888888,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.34861112,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.3673611,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.015625,"top":0.37708333,"width":0.12617187,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.39583334,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.40555555,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.42430556,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.4340278,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.45277777,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.4625,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.48125,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.015625,"top":0.49097222,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.50972223,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.51944447,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.5395833,"width":0.08710937,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny ■ 869720","depth":9,"bounds":{"left":0.09453125,"top":0.9875,"width":0.11796875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"28","depth":12,"bounds":{"left":0.096875,"top":0.925,"width":0.01875,"height":0.030555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"28","depth":14,"bounds":{"left":0.10664062,"top":0.9284722,"width":0.00546875,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14","depth":14,"bounds":{"left":0.2421875,"top":0.061805554,"width":0.0109375,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activities","depth":14,"bounds":{"left":0.253125,"top":0.061805554,"width":0.031640626,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Get Notified","depth":13,"bounds":{"left":0.55078125,"top":0.058333334,"width":0.051171876,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Sort by Sort by: Most recent","depth":13,"bounds":{"left":0.36171874,"top":0.057638887,"width":0.091796875,"height":0.025694445},"value":"Sort by Sort by: Most recent","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Sort by","depth":14,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sort by:","depth":15,"bounds":{"left":0.3660156,"top":0.06458333,"width":0.019921875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Most recent","depth":15,"bounds":{"left":0.3859375,"top":0.06458333,"width":0.030078124,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Recording","depth":13,"bounds":{"left":0.4910156,"top":0.058333334,"width":0.056640625,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"common.ai-icon-alt","depth":14,"bounds":{"left":0.6050781,"top":0.05625,"width":0.0140625,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Topics:","depth":15,"bounds":{"left":0.24570313,"top":0.10069445,"width":0.014453125,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Competitors","depth":15,"bounds":{"left":0.26210937,"top":0.10069445,"width":0.0265625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal and external activities:","depth":15,"bounds":{"left":0.30546874,"top":0.10069445,"width":0.07695313,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal only","depth":15,"bounds":{"left":0.384375,"top":0.10069445,"width":0.0390625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Save Search","depth":14,"bounds":{"left":0.440625,"top":0.09861111,"width":0.0390625,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Clear all","depth":14,"bounds":{"left":0.48359376,"top":0.09861111,"width":0.030078124,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Saved searches Saved searches","depth":13,"bounds":{"left":0.1265625,"top":0.05486111,"width":0.095703125,"height":0.025},"value":"Saved searches Saved searches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Saved searches","depth":15,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Saved searches","depth":16,"bounds":{"left":0.13085938,"top":0.06111111,"width":0.037109375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Team","depth":13,"bounds":{"left":0.1265625,"top":0.099305555,"width":0.012890625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search teams Search teams","depth":12,"bounds":{"left":0.1265625,"top":0.115277775,"width":0.095703125,"height":0.025},"value":"Search teams Search teams","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search teams","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search teams","depth":14,"bounds":{"left":0.13085938,"top":0.12222222,"width":0.032421876,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Host","depth":13,"bounds":{"left":0.1265625,"top":0.15,"width":0.01171875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.1265625,"top":0.16944444,"width":0.095703125,"height":0.025},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.13085938,"top":0.17638889,"width":0.05390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Also search as participant","depth":13,"bounds":{"left":0.1265625,"top":0.19930555,"width":0.062109374,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8876423618644228424
|
1230984233880253134
|
visual_change
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 869720
28
28
14
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Topics:
Competitors
Show internal and external activities:
Show internal only
Save Search
Clear all
Saved searches Saved searches
Saved searches
Saved searches
Team
Search teams Search teams
Search teams
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant...
|
NULL
|
|
10918
|
217
|
5
|
2026-04-14T09:03:57.556446+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157437556_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpSaved searchesapp.staging.jiminny.com/ondemand?topic_id[]=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4You are currently impersonating Nikolay Yankov <)14 activitiesSort by: Most recentPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloleamSearch teamsiZ Configure SSH access to multipleHost@ Console Home | Console Home | usSearch team membersiSecurityGroup | EC2 |us-east-210niso searen as DarticloanuJY-20543 add AJ reports User pilcParuicipantSearch team members5 SRD-6779 | JY-20632 | Unable to$Jy 19798 evaluation for ai activity8 Jiminny7 Ask Jiminny test report - 8 Aor 201Service-Desk - Queues - PlatformC JY-20543 add AJ reports User pilc& Configure SSH access to multiple eCa CloudWatch | us-east-2New TabCa CloudWatch | us-east-2+ New TabCustomer ©Customer or SubjectTranscript ©• Search transcript |Said byMnyonePeriodAll timeTopicsCompetiActivity typlSearch activity typesDuration ©Min (minutes)Max (minutes)Al call scoreselect Ai call scoreMulomalea call scoreSelect automated calliCoaching scoreSelect coaching scoreCoach ®Search coaches.Stage at callSearch stagesCurrent stageSearch stages+ Add RecordingTopics: Competitors XShow internal and external activities: Show internal only X)( Save SearchClear allHostIActivityPSPhpStormJY-18909-automated-reports-ask-iiminny = 869720ContactActivityCurrent StagestatsTypeJiminny MSalestorce App IrainingJiminny WBekkie/ Jules - renewals and Contract..Jiminny MHandover training part 1Unknown Customer Md 6 Deal Insights playbook d $Exclaimer MExclaimer handoverAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @04:01Unknown Customer (played MTraining * - Jiminny App for Salesfor…Unknown Customer MAll-hands - Thank Yous, What Went, L...Unknown Customer (played MAll-hands - Nov 1thiUnknown Customer 1All Hands - October 31st ©Unknown Customer MDeal Insights Referesher/Training w/T...Unlikelv ToRenew$42,126$I00 D 4D300D 2$0 228.ĐO DO0D6$0 922 1D7{0 83DUD3$082Đ0 D490 D 11 c2D 11Duration4/m44m34m17m43m28m51m25m39m41mA Get NotifiedDate11/0/2024.2:28 PMI25/06/2024, 3:09 PM10/06/2024, 12:02 PM28/05/2024, 12:56 PM13/03/2024, 11:28 AM09/01/2024, 11:45 AM28/11/2023, 11:30 AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM0/119O/3.11:42 AMI31/10/2023, 11:35 AM25/10/2023, 11:46 AMQ InspectorP Filter URLsConsoleD DebuggerFllMLeSSMe Domain1206P.Mrlo.200 P...A8...206 P.A9...200 P...AD...200 P...A0...200 G..A aр....asoonxat o atrorm-stac xhn/api/5627310/envelope/2: fetch/api/5627310/envelope/?: fetch/api/5627310/envelope/?: fetch/api/5627310/envelope/?; fetchsearch?status[]=com200 G.A apр...200 G.A app...saved-search200 G.A ap...integrations•A xhr1206 G.A app...on-demand?topic_id200 P...A app...authenticate•A xhr200 G..A find...200 P...A r.lo...200 P...r.lo.200 P...Ar.lo..i?a=ponxaf/platform-stag xhr"a=oonxar olatromi?a=ponxaf/platform-stag xhr200 P..A r.lo...200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...r rlo..i?a=ponxaf/platform-stag xhr200 P... A r.lo...i?a=ponxaf/platform-stag xhrN1711U.TEa-pONAaIMIaLIUIISLa pEl200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr200) P...Ar.lo..iPa=ponxaf/plaWorm-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...r.lo..ra=ponxat plattorm-stac xhr200 P...A r.lo..i?a=ponxaf/platform-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...A r.o...i?a=ponxaf/platform-stag xhr200 P..r.lo.i?a=ponxaf/platform-stag xhr200 P...A r.o..i?a=ponxaf/platform-stag xhr200 P...A r.lo.i?a=ponxaf/platform-stag xhr200 P...A r.lo..i?a=ponxaf/platform-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr41 requests243.45 KB 2.22 MB transterredSupport Daily • in 2h 57 mA100% C•Tue 14 Apr 12:03:57N Network{) Style Editor( PerformanceO: MemoryE Storage0 99+_ Disable Cache No Throttling 50.HeadersCookiesRequestResponseTimingsSecurity5,59 KB0.Block Resend500 B 2 BGET nttos:aoostacing.lminnv.com/aoi/v/oage/on-cemanortooic 1c=e021093-co/0-4706003 286-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4500 B 2 B200500 B 2BHTTP/36.28 kB 2...55.54 kB (196.87 kB size)5.65 kB 1no-referrer-when-downgradesystem362kB 13.83 kB 5..55.54 .3.11 kB 9..slalusVersionTransferredReferrer PolicyDNS Resolutionkesponse Headers (2.900 Kb)alt-svc: h3=":443"; ma=86400cache-control: no-cache, onivatecontent-encoalng: ozlocontent-language: encontent-secuntv-policy-report-onv: scriot-src 'self 'unsate-inine 'unsate-eval" o oo: hitkawe307.70..1.74 Mb U.2.47 kB 0...4.91 kB 0.10.11 kB O...2.48 kB 0...24S KB 0.ucncio, slyto sie soll unsare mme mepencuttslasmebmimamcon mapedlonto yooMeaois.com nuos.cons.clouallare.com.mmg-sre sellmuos.con.stagmg.uminy.com/nuea.aoo.staging.liminnv.com [URL_WITH_CREDENTIALS]...
|
NULL
|
-8349689174085376944
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpSaved searchesapp.staging.jiminny.com/ondemand?topic_id[]=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4You are currently impersonating Nikolay Yankov <)14 activitiesSort by: Most recentPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloleamSearch teamsiZ Configure SSH access to multipleHost@ Console Home | Console Home | usSearch team membersiSecurityGroup | EC2 |us-east-210niso searen as DarticloanuJY-20543 add AJ reports User pilcParuicipantSearch team members5 SRD-6779 | JY-20632 | Unable to$Jy 19798 evaluation for ai activity8 Jiminny7 Ask Jiminny test report - 8 Aor 201Service-Desk - Queues - PlatformC JY-20543 add AJ reports User pilc& Configure SSH access to multiple eCa CloudWatch | us-east-2New TabCa CloudWatch | us-east-2+ New TabCustomer ©Customer or SubjectTranscript ©• Search transcript |Said byMnyonePeriodAll timeTopicsCompetiActivity typlSearch activity typesDuration ©Min (minutes)Max (minutes)Al call scoreselect Ai call scoreMulomalea call scoreSelect automated calliCoaching scoreSelect coaching scoreCoach ®Search coaches.Stage at callSearch stagesCurrent stageSearch stages+ Add RecordingTopics: Competitors XShow internal and external activities: Show internal only X)( Save SearchClear allHostIActivityPSPhpStormJY-18909-automated-reports-ask-iiminny = 869720ContactActivityCurrent StagestatsTypeJiminny MSalestorce App IrainingJiminny WBekkie/ Jules - renewals and Contract..Jiminny MHandover training part 1Unknown Customer Md 6 Deal Insights playbook d $Exclaimer MExclaimer handoverAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @04:01Unknown Customer (played MTraining * - Jiminny App for Salesfor…Unknown Customer MAll-hands - Thank Yous, What Went, L...Unknown Customer (played MAll-hands - Nov 1thiUnknown Customer 1All Hands - October 31st ©Unknown Customer MDeal Insights Referesher/Training w/T...Unlikelv ToRenew$42,126$I00 D 4D300D 2$0 228.ĐO DO0D6$0 922 1D7{0 83DUD3$082Đ0 D490 D 11 c2D 11Duration4/m44m34m17m43m28m51m25m39m41mA Get NotifiedDate11/0/2024.2:28 PMI25/06/2024, 3:09 PM10/06/2024, 12:02 PM28/05/2024, 12:56 PM13/03/2024, 11:28 AM09/01/2024, 11:45 AM28/11/2023, 11:30 AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM0/119O/3.11:42 AMI31/10/2023, 11:35 AM25/10/2023, 11:46 AMQ InspectorP Filter URLsConsoleD DebuggerFllMLeSSMe Domain1206P.Mrlo.200 P...A8...206 P.A9...200 P...AD...200 P...A0...200 G..A aр....asoonxat o atrorm-stac xhn/api/5627310/envelope/2: fetch/api/5627310/envelope/?: fetch/api/5627310/envelope/?: fetch/api/5627310/envelope/?; fetchsearch?status[]=com200 G.A apр...200 G.A app...saved-search200 G.A ap...integrations•A xhr1206 G.A app...on-demand?topic_id200 P...A app...authenticate•A xhr200 G..A find...200 P...A r.lo...200 P...r.lo.200 P...Ar.lo..i?a=ponxaf/platform-stag xhr"a=oonxar olatromi?a=ponxaf/platform-stag xhr200 P..A r.lo...200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...r rlo..i?a=ponxaf/platform-stag xhr200 P... A r.lo...i?a=ponxaf/platform-stag xhrN1711U.TEa-pONAaIMIaLIUIISLa pEl200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr200) P...Ar.lo..iPa=ponxaf/plaWorm-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...r.lo..ra=ponxat plattorm-stac xhr200 P...A r.lo..i?a=ponxaf/platform-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...A r.o...i?a=ponxaf/platform-stag xhr200 P..r.lo.i?a=ponxaf/platform-stag xhr200 P...A r.o..i?a=ponxaf/platform-stag xhr200 P...A r.lo.i?a=ponxaf/platform-stag xhr200 P...A r.lo..i?a=ponxaf/platform-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr200 P...A r.lo...i?a=ponxaf/platform-stag xhr41 requests243.45 KB 2.22 MB transterredSupport Daily • in 2h 57 mA100% C•Tue 14 Apr 12:03:57N Network{) Style Editor( PerformanceO: MemoryE Storage0 99+_ Disable Cache No Throttling 50.HeadersCookiesRequestResponseTimingsSecurity5,59 KB0.Block Resend500 B 2 BGET nttos:aoostacing.lminnv.com/aoi/v/oage/on-cemanortooic 1c=e021093-co/0-4706003 286-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4500 B 2 B200500 B 2BHTTP/36.28 kB 2...55.54 kB (196.87 kB size)5.65 kB 1no-referrer-when-downgradesystem362kB 13.83 kB 5..55.54 .3.11 kB 9..slalusVersionTransferredReferrer PolicyDNS Resolutionkesponse Headers (2.900 Kb)alt-svc: h3=":443"; ma=86400cache-control: no-cache, onivatecontent-encoalng: ozlocontent-language: encontent-secuntv-policy-report-onv: scriot-src 'self 'unsate-inine 'unsate-eval" o oo: hitkawe307.70..1.74 Mb U.2.47 kB 0...4.91 kB 0.10.11 kB O...2.48 kB 0...24S KB 0.ucncio, slyto sie soll unsare mme mepencuttslasmebmimamcon mapedlonto yooMeaois.com nuos.cons.clouallare.com.mmg-sre sellmuos.con.stagmg.uminy.com/nuea.aoo.staging.liminnv.com [URL_WITH_CREDENTIALS]...
|
10917
|
|
10919
|
217
|
6
|
2026-04-14T09:04:00.584545+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157440584_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject vD Unit_ ActionsComponent› Configuration> MConsoleM ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobtcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTest→I Listeners→]Mal> MModelsM Notifications› M ObserversPoliciesProvidersRepositories> D Rules• _ Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenorWinasun ch(©) ReportController.phpJiminnybeouecommana.ongC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC AddLayoutEntities.php(C) Team.php© AutomatedReportsRepository.php XAulomaleakeporisservice.onp© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php©) RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass Aucomaceareporcskepostcory52#15 V4A* dreturh AutomaredreporypubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/*** Find an automated report bu UUID* @param string suuid* dreturn Automatedreport/nullpubLic tuncclon tindbyuu1d(string puuld): :Automatedкeрoгиret atomaеероt.ee, оmеерrcouptamizeaoounaateetTusagepublic function findByld0rUuid(string $id0rUuid): ?AutomatedReportif (is_numeric($id0rUuid)) {return AutomatedReport::find((int) $1doruuid):recurn Automacedkeport.:where vuld", Automacedкeport.. couptimized(slauruula->tirstn/*** Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: "created_by','created_at'. Defaults to 'created_at'* @param string $sortDirection The sort direction. Allowed values:'asc','desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn="created_at",scring ssortbirection = 'desc: Collection (...*** Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at".* @param string $sortDirection The sort direction. Allowed values:"asc", "desc". veraults to "desc".* drerurn couuectonsaurondredredor"4 usadespublic function getAskJiminnyReportsByUserdUser suser.string SsortColumn = 'created at',stoind contiinection = "decc'ancelod loday 10:33.= custom.log= laravel.logL SF [jiminny@localhost]c HS_local Liminny@localhost)console PRob)¿ console (EU]4 console [STAGING)© AsKJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.phpC RequestGenerateAskJiminnyReportJobTesclass AskJiminnyReportActiv71 >1A0 C>118 M >157 % >— 185 % >2052A6 VA S2251220250231—2322332342362452462501251252 D>275orivate tunccion makeusprivate function makesapublic function testbetpubuic tunction testbetpublic function testGetpublic function testGetpublic function testGetpublic function testfetpubuic tunction testbet$user = schis->makeSsavedSearch = Sthi$filterSet = Sthis-sthis-Yactivitysascapturedcriteria"thns->activitvsas->methodl cor- VaLLketurnlanunus-›elasu ickenps$this->logger->methsthis->service->qetsthis->assertNotllu$this->assertFalse(pubuic tunction tescuetAccept File &+X Reject File 1%gSupport Daily • in 2h 57 m100% |45]Tue 14 Apr 12:04:00RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Ma© Automated Report !nand.php#L211 and add validation with logs insideohu Lolla Leunevot tscomiallus pnowL405-419Let me read the current state of the command file first.kead Automareakeporscommand.ongIcan see the user's approach - processsing LeReport already exists trom my earlier work but getReportByld iswhat's being used in processReports.Ineed to implement getReportById properly with validation + logs, and addthe reposilory method. Let me also check the Illuminate Support collection impon situation:Searched use Illuminate (Support Collection in app/Console/Commands/Reports/AutomatedReportsCommand.ph.Now implement both changes - the repository method and the getReportByld method with proper validation:trror while editing automacedkeportscommand. ppkead Automateakeportscommana.ongThe file is now only 140 lines - the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now "l implement oot changes:AutomatedReportsCommand.php+57 -1Now add findByldorUuid to the repository:• AutomatedReportsRepository.phpAlso fix the import order Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1-1Done. summary or changes:AutomatedReportsRepository::findByld0rUuid() (AutomatedReportsRepository-php:47-54):• Numeric string → find() by int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand.php:135-194) - checks all conditions that getActiveReportsByFrequency entorces, loceine a warnine to the loe channel ane orintne a warn lo the terminal tor eaeh violation,out stlll returns the revort so orocessina continuesCheckBehaviour on failNot toundwarnino loo + terminal warn. returns emory collection skios processino))nactive statuswarning log + terminal warn, continuesTeam not activewarnind llod + terminal warn. continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo log + terminal warn, continuesWGAl mAsk anything (&+L)401 &uesde Claude Sonnet 46Winasun leams50:8uir-oia 4 spaces...
|
NULL
|
-7192952862747346748
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject vD Unit_ ActionsComponent› Configuration> MConsoleM ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobtcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTest→I Listeners→]Mal> MModelsM Notifications› M ObserversPoliciesProvidersRepositories> D Rules• _ Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenorWinasun ch(©) ReportController.phpJiminnybeouecommana.ongC AutomatedReportsCommand.phpC) AutomatedReportsSendCommand.phpC AddLayoutEntities.php(C) Team.php© AutomatedReportsRepository.php XAulomaleakeporisservice.onp© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.phpC CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php©) RequestGenerateReportJob.php(©) AutomatedReportResult.phpc) Automatedkeport.oneclass Aucomaceareporcskepostcory52#15 V4A* dreturh AutomaredreporypubLic tunccion createlarray paata). Аuсопасеакероrиr. . .л/*** Find an automated report bu UUID* @param string suuid* dreturn Automatedreport/nullpubLic tuncclon tindbyuu1d(string puuld): :Automatedкeрoгиret atomaеероt.ee, оmеерrcouptamizeaoounaateetTusagepublic function findByld0rUuid(string $id0rUuid): ?AutomatedReportif (is_numeric($id0rUuid)) {return AutomatedReport::find((int) $1doruuid):recurn Automacedkeport.:where vuld", Automacedкeport.. couptimized(slauruula->tirstn/*** Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed values: "created_by','created_at'. Defaults to 'created_at'* @param string $sortDirection The sort direction. Allowed values:'asc','desc'. Defaults to 'desc'.* dreturn collection<Automatedreport>12 usagespubLic tunction gecALLstandardkeportsstring ssortcolumn="created_at",scring ssortbirection = 'desc: Collection (...*** Retrieve all Ask Jiminny reports created by the given user.* dparam UsersuserThe user whose reports to retrieve.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at".* @param string $sortDirection The sort direction. Allowed values:"asc", "desc". veraults to "desc".* drerurn couuectonsaurondredredor"4 usadespublic function getAskJiminnyReportsByUserdUser suser.string SsortColumn = 'created at',stoind contiinection = "decc'ancelod loday 10:33.= custom.log= laravel.logL SF [jiminny@localhost]c HS_local Liminny@localhost)console PRob)¿ console (EU]4 console [STAGING)© AsKJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.phpC RequestGenerateAskJiminnyReportJobTesclass AskJiminnyReportActiv71 >1A0 C>118 M >157 % >— 185 % >2052A6 VA S2251220250231—2322332342362452462501251252 D>275orivate tunccion makeusprivate function makesapublic function testbetpubuic tunction testbetpublic function testGetpublic function testGetpublic function testGetpublic function testfetpubuic tunction testbet$user = schis->makeSsavedSearch = Sthi$filterSet = Sthis-sthis-Yactivitysascapturedcriteria"thns->activitvsas->methodl cor- VaLLketurnlanunus-›elasu ickenps$this->logger->methsthis->service->qetsthis->assertNotllu$this->assertFalse(pubuic tunction tescuetAccept File &+X Reject File 1%gSupport Daily • in 2h 57 m100% |45]Tue 14 Apr 12:04:00RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Ma© Automated Report !nand.php#L211 and add validation with logs insideohu Lolla Leunevot tscomiallus pnowL405-419Let me read the current state of the command file first.kead Automareakeporscommand.ongIcan see the user's approach - processsing LeReport already exists trom my earlier work but getReportByld iswhat's being used in processReports.Ineed to implement getReportById properly with validation + logs, and addthe reposilory method. Let me also check the Illuminate Support collection impon situation:Searched use Illuminate (Support Collection in app/Console/Commands/Reports/AutomatedReportsCommand.ph.Now implement both changes - the repository method and the getReportByld method with proper validation:trror while editing automacedkeportscommand. ppkead Automateakeportscommana.ongThe file is now only 140 lines - the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now "l implement oot changes:AutomatedReportsCommand.php+57 -1Now add findByldorUuid to the repository:• AutomatedReportsRepository.phpAlso fix the import order Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1-1Done. summary or changes:AutomatedReportsRepository::findByld0rUuid() (AutomatedReportsRepository-php:47-54):• Numeric string → find() by int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand.php:135-194) - checks all conditions that getActiveReportsByFrequency entorces, loceine a warnine to the loe channel ane orintne a warn lo the terminal tor eaeh violation,out stlll returns the revort so orocessina continuesCheckBehaviour on failNot toundwarnino loo + terminal warn. returns emory collection skios processino))nactive statuswarning log + terminal warn, continuesTeam not activewarnind llod + terminal warn. continuesExoiredwarning log + terminal warn, continuesFrequency wouldn't run todayinfo log + terminal warn, continuesWGAl mAsk anything (&+L)401 &uesde Claude Sonnet 46Winasun leams50:8uir-oia 4 spaces...
|
NULL
|
|
10920
|
216
|
4
|
2026-04-14T09:04:02.761484+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157442761_m1.jpg...
|
PhpStorm
|
faVsco.js – AutomatedReportsRepository.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"RequestGenerateAskJiminnyReportJobTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2055311897093574929
|
-8644637159426898080
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
+SlackEDHomeDMSActivityFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 56 m100% <478Tue 14 Apr 12:04:02..•More+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievFuune 4Today ~New+Nikolay Yankov is typing...
|
NULL
|
|
10921
|
217
|
7
|
2026-04-14T09:04:03.816186+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157443816_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditFV faVsco.js vViewNavigateCodeLara PhpStormFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProjectv© AiPromptRepository.php© AskAnythingRepository.phj© AutomatedReportsReposits© CallImportRepository.php© CoachingFeedbackReposit© CrmTemplateFilterRepositc© CrmTemplateRepository.pt© CrmTemplateRunRepositor© DeviceRepository.php© ElasticActivityRepository.plC EmailMessageRepository.p© GenericAiPromptRepositorC) GroupRepository.phpInboxEmailBatchRepositoryInboxRepository.php© InvitationRepository.php© JobRepository.php© LanguageRepository.php© MomentRepository.php© NotificationRepository.php© ParticipantRepository.phpC) ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.php© PlaylistActivityRepository.f©PlaylistRepository.php© PlaylistShareRepository.ph©QuestionRepository.php© RoleChangeEventRepositor© RoleRepository.php©SearchRepository.php© SnapshotRepository.phpC) SocialAccountRepository.p© StageRepository.php© SubscriptionSetRepository.TaskRepository.php© TeamAiContextRepository.© TeamDomainsRepository.p© TeamInsightsRepository.pr© TeamRepository.php© ThemeRepository.php© TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.php© TranscriptionModelLocaleF© TranscriptionRepository.ph© TranscriptionSummaryRepr© UserRepository.php© VocabularyRepository.php> DRulesv D Services> D Activity> M AiReports> Avatar> CalendarConference>DCrm© ReportController.phpC AutomatedReportsSendCommand.php) AutomatedReportsService.php© JiminnyDebugCommand.php© AddLayoutEntities.php© CreateHeldActivityEvent.phpAutomatedReportsCommand.phpC) Team.php© AutomatedReportsRepository.phpx© TrackProviderInstalledEvent.php© ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsRepositoryB1 M41* @return AutomatedReportpublic function create(array $data): AutomatedReportf..}* Find an automated report by UUID* @param string $uvid71 % >* @return AutomatedReport/nullpublic function findByUuid(string $uvid): ?AutomatedReport118 % >return AutomatedReport: :Where('uvid', AutomatedReport::to0ptimized(Suvid))->first();157 % >Tusdyepublic function findById0rUuid(string $id0rUvid): ?AutomatedReportif (is_numeric($idOrUuid)) {return AutomatedReport: :where('uvid', AutomatedReport:: toOptimized(SidOrUuid))->first();206 г >224225 D22622722856/*** Retrieve all standard (non-Ask Jiminny) automated reports.250LOL232-233234* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created 235* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults t 236* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReports(string $sortColumn ='created_at',string $sortDirection = 'desc'): Collection {...}243/*** Retrieve all Ask Ziminny reports created by the given user.247248249250251252 >* Oparam User$userThe user whose reports to retrieve.*oparan scring esortho lunnIne cocumn co sorc oy. ALcowed vacues. creaced_oy , "creaced 275)* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. DefaultsT* Oreturn Collection<AutomatedReport>14 usagesWindsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.logconsole PRODE laravel.log4 console [EUlA SF [jiminny@localhost]A HS_local [iminny@localhost]A console [STAGING]© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php x© RequestGenerateAskJiminnyReportJobTest.phpclass AskuLminnyreporcActIviLyservicelest extenas lescuase29 6t >protected function setUp(): voidf...}11 usagesprivate function makeFilter(string $key, ?string $value): SearchFilter&Mo8 usagesprivate function makeUser(): User&Mock0bjectf.}8 usagesprivate function makeSavedSearch(array $filters): Search&Mock0bjectf...}public function testGetActivityIdsForSavedSearchReturnsIds(): voidf...}pubLic tunctlon testbecAcuivitylasrorsavedsearchreturnsempcywnennoresuluspublic function testGetActivityIdsFilters0utDateFilters(): void{...}public function testGetActivityIdsFilters0utClosingPeriodDateFilters():.vpublic function testGetActivityIdsHandLesArrayFilters(): voidf...}public function testGetActivityIdsHandLesScalarFilters(): voidf...}public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFir:$user = $this->makeUserO:lnsaveobearcn = ounsezllakesaveosearco.uiur$filterSet = $this->createMock( originalClassName: FilterDefinitionCollect$this-›activitySearch->method( constraint: 'getArrayFilterKeys')->willRet$capturedCriteria = null;$this-›activitySearch->expects($this->onceO))->method( constraint:"getOnDemandPageFilterSet')->willReturnCallback(function (Criteria $criteria) use ($filterse$this->elasticRepository->method( constraint: 'onDemandSearchIdsOnLy'D+>u$this->Logger->method ( constraint: "info'):$this->service->getActivityIdsForSavedSearch($savedSearch, $user);$this->assertNotNull($capturedCriteria);$this-›assertFalse($capturedCriteria->isFirstRequestO);public function testGetActivityIdsLogsWithCorrectContext(): voidf...3, 0lablSupport Daily - in 2h 56 mA• RequestGenerateAskJiminnyReportJobTest v100% C•Tue 14 Apr 12:04:03CascadeFixing ReportControlleAutomated Report Mar© Automated Report !nand. php#L211 and add validation with logs insideohu Lolla Leunevot tscomlahus pnorL409-419wLet me read the current state of the command file first.kead Automareakeporscommand.ongI can see the user's approach - processSingleReport already exists from my earlier work but getReportById iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addthe reposilory method. Let me also check the Illuminate Support collection impon situation:Searched use Illuminate (Support Collection in app/Console/Commands/Reports/AutomatedReportsCommand.ph.Now implement both changes - the repository method and the getReportById method with proper validation:trror while editing automacedkeportscommand. pnpkead Automateakeporscommana.ongThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now "l implement oot changes:• AutomatedReportsCommand.phpNow add findByIdOrUuid to the repository:• AutomatedReportsRepository.phpAlso fix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php• AutomatedReportsCommand.php+57 -1+1-1+I-1Done. summary or changes:AutomatedReportsRepository::findById0rUuid() (AutomatedReportsRepository-php: 47-54):• Numeric string → find() by int ID• Non-numeric → UUID lookup via toOptimized()• Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency entorces, loceine a warnine to the loe channel ane orintne a warn lo the terminal tor eaeh violation,but still returns the report so processing continues:CheckBehaviour on failNot toundwarnino oo + terminal warn. returns emory collection skios processino))nactive statusTeam not activeExpiredwarning log + terminal warn, continueswarning log + terminal warn, continueswarning log + terminal warn, continuesrrecuency woulentrun toodyinfo log + terminal warn, continuesGAl mAsk anything (2*L)+ <> CodeClaude Sonnet 4.6Winasun leams50:8uir-o( 4 spaces...
|
NULL
|
4147674210703858553
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditFV faVsco.js vViewNavigateCodeLara PhpStormFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProjectv© AiPromptRepository.php© AskAnythingRepository.phj© AutomatedReportsReposits© CallImportRepository.php© CoachingFeedbackReposit© CrmTemplateFilterRepositc© CrmTemplateRepository.pt© CrmTemplateRunRepositor© DeviceRepository.php© ElasticActivityRepository.plC EmailMessageRepository.p© GenericAiPromptRepositorC) GroupRepository.phpInboxEmailBatchRepositoryInboxRepository.php© InvitationRepository.php© JobRepository.php© LanguageRepository.php© MomentRepository.php© NotificationRepository.php© ParticipantRepository.phpC) ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.php© PlaylistActivityRepository.f©PlaylistRepository.php© PlaylistShareRepository.ph©QuestionRepository.php© RoleChangeEventRepositor© RoleRepository.php©SearchRepository.php© SnapshotRepository.phpC) SocialAccountRepository.p© StageRepository.php© SubscriptionSetRepository.TaskRepository.php© TeamAiContextRepository.© TeamDomainsRepository.p© TeamInsightsRepository.pr© TeamRepository.php© ThemeRepository.php© TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.php© TranscriptionModelLocaleF© TranscriptionRepository.ph© TranscriptionSummaryRepr© UserRepository.php© VocabularyRepository.php> DRulesv D Services> D Activity> M AiReports> Avatar> CalendarConference>DCrm© ReportController.phpC AutomatedReportsSendCommand.php) AutomatedReportsService.php© JiminnyDebugCommand.php© AddLayoutEntities.php© CreateHeldActivityEvent.phpAutomatedReportsCommand.phpC) Team.php© AutomatedReportsRepository.phpx© TrackProviderInstalledEvent.php© ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsRepositoryB1 M41* @return AutomatedReportpublic function create(array $data): AutomatedReportf..}* Find an automated report by UUID* @param string $uvid71 % >* @return AutomatedReport/nullpublic function findByUuid(string $uvid): ?AutomatedReport118 % >return AutomatedReport: :Where('uvid', AutomatedReport::to0ptimized(Suvid))->first();157 % >Tusdyepublic function findById0rUuid(string $id0rUvid): ?AutomatedReportif (is_numeric($idOrUuid)) {return AutomatedReport: :where('uvid', AutomatedReport:: toOptimized(SidOrUuid))->first();206 г >224225 D22622722856/*** Retrieve all standard (non-Ask Jiminny) automated reports.250LOL232-233234* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created 235* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults t 236* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReports(string $sortColumn ='created_at',string $sortDirection = 'desc'): Collection {...}243/*** Retrieve all Ask Ziminny reports created by the given user.247248249250251252 >* Oparam User$userThe user whose reports to retrieve.*oparan scring esortho lunnIne cocumn co sorc oy. ALcowed vacues. creaced_oy , "creaced 275)* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. DefaultsT* Oreturn Collection<AutomatedReport>14 usagesWindsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.logconsole PRODE laravel.log4 console [EUlA SF [jiminny@localhost]A HS_local [iminny@localhost]A console [STAGING]© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php x© RequestGenerateAskJiminnyReportJobTest.phpclass AskuLminnyreporcActIviLyservicelest extenas lescuase29 6t >protected function setUp(): voidf...}11 usagesprivate function makeFilter(string $key, ?string $value): SearchFilter&Mo8 usagesprivate function makeUser(): User&Mock0bjectf.}8 usagesprivate function makeSavedSearch(array $filters): Search&Mock0bjectf...}public function testGetActivityIdsForSavedSearchReturnsIds(): voidf...}pubLic tunctlon testbecAcuivitylasrorsavedsearchreturnsempcywnennoresuluspublic function testGetActivityIdsFilters0utDateFilters(): void{...}public function testGetActivityIdsFilters0utClosingPeriodDateFilters():.vpublic function testGetActivityIdsHandLesArrayFilters(): voidf...}public function testGetActivityIdsHandLesScalarFilters(): voidf...}public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFir:$user = $this->makeUserO:lnsaveobearcn = ounsezllakesaveosearco.uiur$filterSet = $this->createMock( originalClassName: FilterDefinitionCollect$this-›activitySearch->method( constraint: 'getArrayFilterKeys')->willRet$capturedCriteria = null;$this-›activitySearch->expects($this->onceO))->method( constraint:"getOnDemandPageFilterSet')->willReturnCallback(function (Criteria $criteria) use ($filterse$this->elasticRepository->method( constraint: 'onDemandSearchIdsOnLy'D+>u$this->Logger->method ( constraint: "info'):$this->service->getActivityIdsForSavedSearch($savedSearch, $user);$this->assertNotNull($capturedCriteria);$this-›assertFalse($capturedCriteria->isFirstRequestO);public function testGetActivityIdsLogsWithCorrectContext(): voidf...3, 0lablSupport Daily - in 2h 56 mA• RequestGenerateAskJiminnyReportJobTest v100% C•Tue 14 Apr 12:04:03CascadeFixing ReportControlleAutomated Report Mar© Automated Report !nand. php#L211 and add validation with logs insideohu Lolla Leunevot tscomlahus pnorL409-419wLet me read the current state of the command file first.kead Automareakeporscommand.ongI can see the user's approach - processSingleReport already exists from my earlier work but getReportById iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addthe reposilory method. Let me also check the Illuminate Support collection impon situation:Searched use Illuminate (Support Collection in app/Console/Commands/Reports/AutomatedReportsCommand.ph.Now implement both changes - the repository method and the getReportById method with proper validation:trror while editing automacedkeportscommand. pnpkead Automateakeporscommana.ongThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now "l implement oot changes:• AutomatedReportsCommand.phpNow add findByIdOrUuid to the repository:• AutomatedReportsRepository.phpAlso fix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php• AutomatedReportsCommand.php+57 -1+1-1+I-1Done. summary or changes:AutomatedReportsRepository::findById0rUuid() (AutomatedReportsRepository-php: 47-54):• Numeric string → find() by int ID• Non-numeric → UUID lookup via toOptimized()• Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency entorces, loceine a warnine to the loe channel ane orintne a warn lo the terminal tor eaeh violation,but still returns the report so processing continues:CheckBehaviour on failNot toundwarnino oo + terminal warn. returns emory collection skios processino))nactive statusTeam not activeExpiredwarning log + terminal warn, continueswarning log + terminal warn, continueswarning log + terminal warn, continuesrrecuency woulentrun toodyinfo log + terminal warn, continuesGAl mAsk anything (2*L)+ <> CodeClaude Sonnet 4.6Winasun leams50:8uir-o( 4 spaces...
|
10919
|
|
10922
|
216
|
5
|
2026-04-14T09:04:09.503235+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157449503_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMsActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMsActivityFilesLater..•MoreFileEditViewGoHistoryWindowHelp→lalolSupport Daily - in 2h 56 mTue 14 Apr 12:04:09+Jiminny ...# Starred8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+tnove ne tccioune chyirponormone nu npomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievAa100% <478Fuune 4Today ~New...
|
NULL
|
-2137260568171984750
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMsActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMsActivityFilesLater..•MoreFileEditViewGoHistoryWindowHelp→lalolSupport Daily - in 2h 56 mTue 14 Apr 12:04:09+Jiminny ...# Starred8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+tnove ne tccioune chyirponormone nu npomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievAa100% <478Fuune 4Today ~New...
|
10920
|
|
10923
|
217
|
8
|
2026-04-14T09:04:09.503236+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157449503_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFV faVsco.js vProjectvEditViewNavigate PhpStormFileFV faVsco.js vProjectvEditViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelp© AiPromptRepository.php© AskAnythingRepository.phj© AutomatedReportsReposits© CallImportRepository.php© CoachingFeedbackReposit© CrmTemplateFilterRepositc© CrmTemplateRepository.pt© CrmTemplateRunRepositor© DeviceRepository.php© ElasticActivityRepository.plC EmailMessageRepository.p© GenericAiPromptRepositorC) GroupRepository.phpInboxEmailBatchRepositoryInboxRepository.php© InvitationRepository.php© JobRepository.php© LanguageRepository.php© MomentRepository.php© NotificationRepository.php© ParticipantRepository.phpC) ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.php© PlaylistActivityRepository.f©PlaylistRepository.php© PlaylistShareRepository.ph©QuestionRepository.php© RoleChangeEventRepositor© RoleRepository.php©SearchRepository.php© SnapshotRepository.phpC) SocialAccountRepository.p© StageRepository.php© SubscriptionSetRepository.TaskRepository.php© TeamAiContextRepository.© TeamDomainsRepository.p© TeamInsightsRepository.pr© TeamRepository.php© ThemeRepository.php© TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.php© TranscriptionModelLocaleF© TranscriptionRepository.ph© TranscriptionSummaryRepr© UserRepository.php© VocabularyRepository.php> DRulesv D Services> D Activity> M AiReports> Avatar> CalendarConference>DCrm© ReportController.php© JiminnyDebugCommand.php© AutomatedReportsSendCommand.php© AddLayoutEntities.php) AutomatedReportsService.php© CreateHeldActivityEvent.phpAutomatedReportsCommand.phpC) Team.php© AutomatedReportsRepository.phpx© TrackProviderInstalledEvent.php© ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpE custom.log= laravel.logA SF [jiminny@localhost]Hs local liminnyalocalnostconsole PRODAl console (EU]¿ consoe STAGINGI© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php x© RequestGenerateAskJiminnyReportJobTest.phpsrong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsRepositorydeclare(strict_types=1);56A15 X41namespace Tests\Unit\Services\Kiosk\AutomatedReports;* @return AutomatedReportuse...public function create(array $data): AutomatedReport{..}class AskJiminnyReportActivityServiceTest extends TestCase* Find an automated report by UUID* @param string $uvid25* @return AutomatedReport/nullpublic function findByUuid(string $uvid): ?AutomatedReportreturn AutomatedReport: :Where('uvid', AutomatedReport::to0ptimized(Suvid))->first();29 6t >Tusdyepublic function findById0rUuid(string $id0rUvid): ?AutomatedReportif (is_numeric($idOrUuid)) {return AutomatedReport: :where('uvid', AutomatedReport:: toOptimized(SidOrUvid))->first();71 % >/*** Retrieve all standard (non-Ask Jiminny) automated reports.100 % >* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 118 >* Oparam string $sortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'des156157 %>* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReports(string $sortColumn ='created_at',string $sortDirection = 'desc'): Collection {...}185 ₽ >206 0 >-224225 v/*** Retrieve all Ask Ziminny reports created by the given user.* Oparam User$userThe user whose reports to retrieve.*oparan scring esortho lunnThe column to sort by. Allowed values: 'created_by', 'created_at'. 232* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'des233* Oreturn Collection<AutomatedReport>22923023123514 usages1242Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)18 usageslo usaces1o usages9 usagesprivate ActivitySearch&Mock0bject $activitySearch;private ElasticActivityRepository&Mock0bject $elasticRepository;private LoggerInterface&Mock0bject $logger;private AskJiminnyReportActivityService $service;protected function setUp(): voidf...}11 usagesprivate function makeFilter(string $key, ?string $value): SearchFilto usaeesprivate function makeUser(): User&Mock0bject{...}8 usagesprivate function makeSavedSearch(array $filters): Search&Mock0bject)pubLic tunction tescbecAculvityLasrorsavedsearchkecurnstas: voldtpublic function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoRepublic function testGetActivityIdsFilters0utDateFilters(): voidf.public function testGetActivityIdsFilters0utClosingPeriodDateFilterspublic function testGetActivityIdsHandlesArrayFilters(): voidf..public function testGetActivityIdsHandlesScalarFilters(): voidf..pustzo frunctzon-testGetActivityIdsPassesNonZeroSequenceNumberToDisalpuser - ochis->makeusert,$savedSearch = $this->makeSavedSearch([]);$filterSet = $this->createMock( originalClassName: FilterDefinitionc$this->activitySearch->method( constraint: 'getArrayFilterKeys')->w$capturedCriteria = null;$this->activitySearch->expects($this->once@)|=>neuno constrain'getOnDemandPageFilterSet')->willReturnCallback(function (Criteria $criteria) use ($f1], 0lablSupport Daily - in 2h 56 mARequestGenerateAskJiminnyReportJobTest v100% C•Tue 14 Apr 12:04:09CascadeFixing ReportControlleAutomated Report Mar© Automated Report !+D..nand. php#L211 and add validation with logs insideohu Lolla Leunevot tscomlahus pnorL409-419wLet me read the current state of the command file first.kead Automareakeporscommand.ongI can see the user's approach - processSingleReport already exists from my earlier work but getReportById iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addthe reposilory method. Let me also check the Illuminate Support collection impon situation:Searched use Illuminate (Support Collection in app/Console/Commands/Reports/AutomatedReportsCommand.ph.Now implement both changes - the repository method and the getReportById method with proper validation:trror while editing automacedkeportscommand.pnpkead Automateakeporscommana.ongThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now "l implement oot changes:• AutomatedReportsCommand.phpNow add findByIdOrUuid to the repository:• AutomatedReportsRepository.phpAlso fix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php• AutomatedReportsCommand.php+57 -1+1-1+I-1Done. summary or changes:AutomatedReportsRepository::findById0rUuid() (AutomatedReportsRepository-php: 47-54):• Numeric string → find() by int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency entorces, loceine a warnine to the loe channel ane orintne a warn lo the terminal tor eaeh violation,out stlll returns the revort so orocessina continuesCheckNot toundBehaviour on failwarnino loo + termina warn. returns emory collection sxios processino))nactive statusTeam not activeExpiredwarning log + terminal warn, continueswarning log + terminal warn, continueswarning log + terminal warn, continuesrrequency woulen trun toodyinfo log + terminal warn, continuesGAl mAsk anything (2*L)+ <> CodeClaude Sonnet 4.6Winasun leams50:8uir-o( 4 spaces...
|
NULL
|
8178170432464236121
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileFV faVsco.js vProjectvEditViewNavigate PhpStormFileFV faVsco.js vProjectvEditViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelp© AiPromptRepository.php© AskAnythingRepository.phj© AutomatedReportsReposits© CallImportRepository.php© CoachingFeedbackReposit© CrmTemplateFilterRepositc© CrmTemplateRepository.pt© CrmTemplateRunRepositor© DeviceRepository.php© ElasticActivityRepository.plC EmailMessageRepository.p© GenericAiPromptRepositorC) GroupRepository.phpInboxEmailBatchRepositoryInboxRepository.php© InvitationRepository.php© JobRepository.php© LanguageRepository.php© MomentRepository.php© NotificationRepository.php© ParticipantRepository.phpC) ParticipantSpeechReposito© ParticipantStatsRepository© PlaybookCategoryRepositc© PlaybookRepository.php© PlaylistActivityRepository.f©PlaylistRepository.php© PlaylistShareRepository.ph©QuestionRepository.php© RoleChangeEventRepositor© RoleRepository.php©SearchRepository.php© SnapshotRepository.phpC) SocialAccountRepository.p© StageRepository.php© SubscriptionSetRepository.TaskRepository.php© TeamAiContextRepository.© TeamDomainsRepository.p© TeamInsightsRepository.pr© TeamRepository.php© ThemeRepository.php© TimezoneRepository.php© TopicRepository.php© TopicTriggerRepository.ph© TrackRepository.php© TranscriptionModelLocaleF© TranscriptionRepository.ph© TranscriptionSummaryRepr© UserRepository.php© VocabularyRepository.php> DRulesv D Services> D Activity> M AiReports> Avatar> CalendarConference>DCrm© ReportController.php© JiminnyDebugCommand.php© AutomatedReportsSendCommand.php© AddLayoutEntities.php) AutomatedReportsService.php© CreateHeldActivityEvent.phpAutomatedReportsCommand.phpC) Team.php© AutomatedReportsRepository.phpx© TrackProviderInstalledEvent.php© ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpE custom.log= laravel.logA SF [jiminny@localhost]Hs local liminnyalocalnostconsole PRODAl console (EU]¿ consoe STAGINGI© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php x© RequestGenerateAskJiminnyReportJobTest.phpsrong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsRepositorydeclare(strict_types=1);56A15 X41namespace Tests\Unit\Services\Kiosk\AutomatedReports;* @return AutomatedReportuse...public function create(array $data): AutomatedReport{..}class AskJiminnyReportActivityServiceTest extends TestCase* Find an automated report by UUID* @param string $uvid25* @return AutomatedReport/nullpublic function findByUuid(string $uvid): ?AutomatedReportreturn AutomatedReport: :Where('uvid', AutomatedReport::to0ptimized(Suvid))->first();29 6t >Tusdyepublic function findById0rUuid(string $id0rUvid): ?AutomatedReportif (is_numeric($idOrUuid)) {return AutomatedReport: :where('uvid', AutomatedReport:: toOptimized(SidOrUvid))->first();71 % >/*** Retrieve all standard (non-Ask Jiminny) automated reports.100 % >* @param string $sortColumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 118 >* Oparam string $sortDirection The sort direction. Allowed values:'asc', 'desc'. Defaults to 'des156157 %>* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReports(string $sortColumn ='created_at',string $sortDirection = 'desc'): Collection {...}185 ₽ >206 0 >-224225 v/*** Retrieve all Ask Ziminny reports created by the given user.* Oparam User$userThe user whose reports to retrieve.*oparan scring esortho lunnThe column to sort by. Allowed values: 'created_by', 'created_at'. 232* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'des233* Oreturn Collection<AutomatedReport>22923023123514 usages1242Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)18 usageslo usaces1o usages9 usagesprivate ActivitySearch&Mock0bject $activitySearch;private ElasticActivityRepository&Mock0bject $elasticRepository;private LoggerInterface&Mock0bject $logger;private AskJiminnyReportActivityService $service;protected function setUp(): voidf...}11 usagesprivate function makeFilter(string $key, ?string $value): SearchFilto usaeesprivate function makeUser(): User&Mock0bject{...}8 usagesprivate function makeSavedSearch(array $filters): Search&Mock0bject)pubLic tunction tescbecAculvityLasrorsavedsearchkecurnstas: voldtpublic function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoRepublic function testGetActivityIdsFilters0utDateFilters(): voidf.public function testGetActivityIdsFilters0utClosingPeriodDateFilterspublic function testGetActivityIdsHandlesArrayFilters(): voidf..public function testGetActivityIdsHandlesScalarFilters(): voidf..pustzo frunctzon-testGetActivityIdsPassesNonZeroSequenceNumberToDisalpuser - ochis->makeusert,$savedSearch = $this->makeSavedSearch([]);$filterSet = $this->createMock( originalClassName: FilterDefinitionc$this->activitySearch->method( constraint: 'getArrayFilterKeys')->w$capturedCriteria = null;$this->activitySearch->expects($this->once@)|=>neuno constrain'getOnDemandPageFilterSet')->willReturnCallback(function (Criteria $criteria) use ($f1], 0lablSupport Daily - in 2h 56 mARequestGenerateAskJiminnyReportJobTest v100% C•Tue 14 Apr 12:04:09CascadeFixing ReportControlleAutomated Report Mar© Automated Report !+D..nand. php#L211 and add validation with logs insideohu Lolla Leunevot tscomlahus pnorL409-419wLet me read the current state of the command file first.kead Automareakeporscommand.ongI can see the user's approach - processSingleReport already exists from my earlier work but getReportById iswhat's being used in processReports. I need to implement getReportById properly with validation + logs, and addthe reposilory method. Let me also check the Illuminate Support collection impon situation:Searched use Illuminate (Support Collection in app/Console/Commands/Reports/AutomatedReportsCommand.ph.Now implement both changes - the repository method and the getReportById method with proper validation:trror while editing automacedkeportscommand.pnpkead Automateakeporscommana.ongThe file is now only 140 lines — the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now "l implement oot changes:• AutomatedReportsCommand.phpNow add findByIdOrUuid to the repository:• AutomatedReportsRepository.phpAlso fix the import order (Collection should be before the models alphabetically):• AutomatedReportsCommand.php• AutomatedReportsCommand.php+57 -1+1-1+I-1Done. summary or changes:AutomatedReportsRepository::findById0rUuid() (AutomatedReportsRepository-php: 47-54):• Numeric string → find() by int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand. php:135-194) - checks all conditions that getActiveReportsByFrequency entorces, loceine a warnine to the loe channel ane orintne a warn lo the terminal tor eaeh violation,out stlll returns the revort so orocessina continuesCheckNot toundBehaviour on failwarnino loo + termina warn. returns emory collection sxios processino))nactive statusTeam not activeExpiredwarning log + terminal warn, continueswarning log + terminal warn, continueswarning log + terminal warn, continuesrrequency woulen trun toodyinfo log + terminal warn, continuesGAl mAsk anything (2*L)+ <> CodeClaude Sonnet 4.6Winasun leams50:8uir-o( 4 spaces...
|
NULL
|
|
10924
|
217
|
9
|
2026-04-14T09:04:11.570224+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157451570_m2.jpg...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityServiceTest.ph faVsco.js – AskJiminnyReportActivityServiceTest.php...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Services\Kiosk\AutomatedReports;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityActualDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityUpdatedDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\DealInsights\ClosingPeriodFilter;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\ActivitySearch\Service\ActivitySearch;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\User;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
class AskJiminnyReportActivityServiceTest extends TestCase
{
private ActivitySearch&MockObject $activitySearch;
private ElasticActivityRepository&MockObject $elasticRepository;
private LoggerInterface&MockObject $logger;
private AskJiminnyReportActivityService $service;
protected function setUp(): void
{
$this->activitySearch = $this->createMock(ActivitySearch::class);
$this->elasticRepository = $this->createMock(ElasticActivityRepository::class);
$this->logger = $this->createMock(LoggerInterface::class);
$this->service = new AskJiminnyReportActivityService(
$this->activitySearch,
$this->elasticRepository,
$this->logger,
);
}
private function makeFilter(string $key, ?string $value): SearchFilter&MockObject
{
$filter = $this->createMock(SearchFilter::class);
$filter->method('getFilterProperty')->willReturn($key);
$filter->method('getFilterValue')->willReturn($value);
return $filter;
}
private function makeUser(): User&MockObject
{
$tz = new \DateTimeZone('UTC');
$user = $this->createMock(User::class);
$user->method('getTimezone')->willReturn($tz);
$user->method('getId')->willReturn(1);
$user->method('getUuid')->willReturn('user-uuid');
return $user;
}
private function makeSavedSearch(array $filters): Search&MockObject
{
$savedSearch = $this->createMock(Search::class);
$savedSearch->method('getId')->willReturn(42);
$savedSearch->method('getFilters')->willReturn(new \Illuminate\Support\LazyCollection($filters));
return $savedSearch;
}
public function testGetActivityIdsForSavedSearchReturnsIds(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->expects($this->once())
->method('getArrayFilterKeys')
->with($user)
->willReturn([]);
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturn($filterSet);
$this->elasticRepository->expects($this->once())
->method('onDemandSearchIdsOnly')
->willReturn(['id-1', 'id-2', 'id-3']);
$this->logger->expects($this->once())
->method('info')
->with('[AskJiminnyReport] Fetched activity IDs for saved search');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1', 'id-2', 'id-3'], $result);
}
public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->expects($this->once())->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEmpty($result);
}
public function testGetActivityIdsFiltersOutDateFilters(): void
{
$user = $this->makeUser();
$nonDateFilter = $this->makeFilter('owner_id', '123');
$startDateFilter = $this->makeFilter(ActivityActualDate::PARAM_START_DATE, '2025-01-01 00:00:00');
$endDateFilter = $this->makeFilter(ActivityActualDate::PARAM_END_DATE, '2025-01-31 23:59:59');
$updatedFromFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_FROM, '2025-01-01 00:00:00');
$updatedToFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_TO, '2025-01-31 23:59:59');
$savedSearch = $this->makeSavedSearch([
$nonDateFilter,
$startDateFilter,
$endDateFilter,
$updatedFromFilter,
$updatedToFilter,
]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$capturedCriteria = null;
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {
$capturedCriteria = $criteria;
return $filterSet;
});
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->method('info');
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertNotNull($capturedCriteria);
}
public function testGetActivityIdsFiltersOutClosingPeriodDateFilters(): void
{
$user = $this->makeUser();
$closingStartFilter = $this->makeFilter(ClosingPeriodFilter::KEY_START_DATE, '2025-01-01');
$closingEndFilter = $this->makeFilter(ClosingPeriodFilter::KEY_END_DATE, '2025-03-31');
$regularFilter = $this->makeFilter('rep_id', '99');
$savedSearch = $this->makeSavedSearch([
$closingStartFilter,
$closingEndFilter,
$regularFilter,
]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1'], $result);
}
public function testGetActivityIdsHandlesArrayFilters(): void
{
$user = $this->makeUser();
$filter1 = $this->makeFilter('outcome', 'positive');
$filter2 = $this->makeFilter('outcome', 'negative');
$savedSearch = $this->makeSavedSearch([$filter1, $filter2]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn(['outcome']);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1'], $result);
}
public function testGetActivityIdsHandlesScalarFilters(): void
{
$user = $this->makeUser();
$filter = $this->makeFilter('direction', 'inbound');
$savedSearch = $this->makeSavedSearch([$filter]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-5']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-5'], $result);
}
public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$capturedCriteria = null;
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {
$capturedCriteria = $criteria;
return $filterSet;
});
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->method('info');
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertNotNull($capturedCriteria);
$this->assertFalse($capturedCriteria->isFirstRequest());
}
public function testGetActivityIdsLogsWithCorrectContext(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['a', 'b']);
$this->logger->expects($this->once())
->method('info')
->with(
'[AskJiminnyReport] Fetched activity IDs for saved search',
$this->callback(fn ($context) => $context['saved_search_id'] === 42
&& $context['user_id'] === 1
&& $context['activity_count'] === 2)
);
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
15
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Repositories;
use Carbon\CarbonImmutable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\DB;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\Kiosk\AutomatedReports\ReportSort;
use Jiminny\Services\Kiosk\AutomatedReports\ReportSortDirection;
class AutomatedReportsRepository
{
/**
* Create a new automated report
*
* @param array $data
*
* @return AutomatedReport
*/
public function create(array $data): AutomatedReport
{
return AutomatedReport::create($data);
}
/**
* Find an automated report by UUID
*
* @param string $uuid
*
* @return AutomatedReport|null
*/
public function findByUuid(string $uuid): ?AutomatedReport
{
return AutomatedReport::where('uuid', AutomatedReport::toOptimized($uuid))->first();
}
public function findByIdOrUuid(string $idOrUuid): ?AutomatedReport
{
if (is_numeric($idOrUuid)) {
return AutomatedReport::find((int) $idOrUuid);
}
return AutomatedReport::where('uuid', AutomatedReport::toOptimized($idOrUuid))->first();
}
/**
* Retrieve all standard (non-Ask Jiminny) automated reports.
*
* @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.
* @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.
*
* @return Collection<AutomatedReport>
*/
public function getAllStandardReports(
string $sortColumn = 'created_at',
string $sortDirection = 'desc'
): Collection {
return $this->buildSortedQuery($sortColumn, $sortDirection)
->whereNot('type', AutomatedReportsService::TYPE_ASK_JIMINNY)
->get();
}
/**
* Retrieve all Ask Jiminny reports created by the given user.
*
* @param User $user The user whose reports to retrieve.
* @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.
* @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.
*
* @return Collection<AutomatedReport>
*/
public function getAskJiminnyReportsByUser(
User $user,
string $sortColumn = 'created_at',
string $sortDirection = 'desc'
): Collection {
return $this->buildSortedQuery($sortColumn, $sortDirection)
->where('type', AutomatedReportsService::TYPE_ASK_JIMINNY)
->where('created_by', $user->getId())
->get();
}
private function buildSortedQuery(string $sortColumn, string $sortDirection): \Illuminate\Database\Eloquent\Builder
{
$allowedColumns = ['created_by', 'created_at'];
if (! in_array($sortColumn, $allowedColumns)) {
$sortColumn = 'created_at';
}
$sortDirection = strtolower($sortDirection) === 'asc' ? 'asc' : 'desc';
$query = AutomatedReport::query()->with(['creator', 'team']);
if ($sortColumn === 'created_by') {
$query->leftJoin('users', 'users.id', '=', 'automated_reports.created_by')
->orderByRaw("users.name COLLATE utf8mb4_unicode_ci {$sortDirection}")
->select('automated_reports.*');
} else {
$query->orderBy($sortColumn, $sortDirection);
}
return $query;
}
/**
* Get all active and enabled reports with active teams for the specified frequency.
*
* @param string $frequency
*
* @return Collection<AutomatedReport>
*/
public function getActiveReportsByFrequency(string $frequency): Collection
{
return AutomatedReport::where('automated_reports.status', true)
->where('automated_reports.frequency', $frequency)
->join('teams', 'automated_reports.team_id', '=', 'teams.id')
->where('teams.status', Team::STATUS_ACTIVE)
->where(function ($query) {
$query->whereNull('automated_reports.expires_at')
->orWhere('automated_reports.expires_at', '>=', now()->toDateString());
})
->select('automated_reports.*')
->get();
}
/**
* Update an automated report
*
* @param AutomatedReport $report
* @param array $data
*
* @return AutomatedReport
*/
public function update(AutomatedReport $report, array $data): AutomatedReport
{
$report->update($data);
return $report;
}
/**
* Create a new automated report result.
*
* @param array $data The data to create the automated report result with.
*
* @return AutomatedReportResult The newly created automated report result.
*/
public function createResult(array $data): AutomatedReportResult
{
return AutomatedReportResult::create($data);
}
/**
* Find an automated report result by UUID.
*
* @param string $uuid The UUID to find the automated report result with.
*
* @return AutomatedReportResult|null The automated report result if found, otherwise null.
*/
public function findResultByUuid(string $uuid): ?AutomatedReportResult
{
return AutomatedReportResult::where('uuid', AutomatedReportResult::toOptimized($uuid))->first();
}
public function findResultByUuidForUser(string $uuid, User $user): ?AutomatedReportResult
{
return AutomatedReportResult::query()
->where('uuid', AutomatedReportResult::toOptimized($uuid))
->whereHas('report', static function ($query) use ($user): void {
$query->where('team_id', $user->getTeamId())
->where('created_by', $user->getId());
})
->first();
}
public function findChildResult(AutomatedReportResult $result, string $type): ?AutomatedReportResult
{
return AutomatedReportResult::query()
->where('parent_id', $result->getId())
->where('media_type', $type)
->first();
}
public function getGeneratedNotSentResults(): Collection
{
return AutomatedReportResult::query()
->whereNotNull('generated_at')
->whereNull('sent_at')
->where('status', AutomatedReportResult::STATUS_GENERATED)
->whereHas('report')
->with('report')
->get();
}
public function getPaginatedUserReports(
User $user,
ReportSort $sort,
ReportSortDirection $sortDirection,
int $resultsPerPage,
int $page,
?Carbon $fromDate,
?Carbon $toDate,
array $teamIds,
array $reportTypes,
?string $name,
): LengthAwarePaginator {
$query = AutomatedReportResult::query()
->whereNotNull('automated_report_results.generated_at')
->join('automated_reports', 'automated_report_results.report_id', '=', 'automated_reports.id')
->where('automated_reports.team_id', $user->getTeamId())
->whereJsonContains('automated_reports.recipients->users', $user->getId())
->orderByRaw("$sort->value COLLATE utf8mb4_unicode_ci {$sortDirection->value}")
->select('automated_report_results.*')
->with('report.team');
if ($fromDate !== null && $toDate !== null) {
$query->whereBetween('generated_at', [$fromDate, $toDate]);
}
if (! empty($teamIds)) {
$query->where(function ($q) use ($teamIds) {
foreach ($teamIds as $id) {
$q->orWhereJsonContains('automated_reports.groups', $id);
}
});
}
if (! empty($reportTypes)) {
$query->whereIn('automated_reports.type', $reportTypes);
}
if (! empty($name)) {
$query->whereLike('name', "%$name%");
}
return $query->paginate($resultsPerPage, ['*'], 'page', $page);
}
public function countUserReports(User $user): int
{
return AutomatedReportResult::query()
->whereNotNull('generated_at')
->whereNotNull('sent_at')
->whereHas('report', function ($q) use ($user) {
$q->where('team_id', $user->getTeamId())
->whereJsonContains('recipients->users', $user->getId());
})
->count();
}
/**
* Get report IDs for a specific team
*
* @param Team $team
*
* @return \Illuminate\Support\Collection
*/
public function getReportIdsByTeam(Team $team): \Illuminate\Support\Collection
{
return AutomatedReport::where('team_id', $team->getId())->pluck('id');
}
/**
* Get all reports for a specific team
*
* @param Team $team
*
* @return Collection
*/
public function getReportsByTeam(Team $team): Collection
{
return AutomatedReport::where('team_id', $team->getId())->get();
}
/**
* Get all report results for a specific report
*
* @param AutomatedReport $report
*
* @return Collection
*/
public function getResultsByReport(AutomatedReport $report): Collection
{
return $this->getResultsByReportQuery($report)->get();
}
public function getResultsByReportQuery(AutomatedReport $report): Builder
{
return AutomatedReportResult::where('report_id', $report->getId());
}
public function getReportResultsQueryForRetention(Team $team, CarbonImmutable $retentionDate): Builder
{
$reportIds = $this->getReportIdsByTeam($team);
return AutomatedReportResult::query()->whereIn('report_id', $reportIds)
->whereRaw('IFNULL(generated_at, created_at) <= ?', [$retentionDate]);
}
/**
* @param int|null $teamId Optional team ID to filter results
*
* @return \Illuminate\Support\Collection<int, int> Collection of team IDs
*/
public function getTeamIdsWithReportsResults(?int $teamId = null): \Illuminate\Support\Collection
{
$query = DB::table('automated_reports')
->join('teams', 'automated_reports.team_id', '=', 'teams.id')
->select('teams.id')
->distinct();
if ($teamId !== null) {
$query->where('teams.id', $teamId);
}
return $query->pluck('teams.id');
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app
.circleci
.cursor
.github
.sonarlint
.vscode
.windsurf
app, sources root
Actions
Component
Configuration
Console
Commands
Activities
Analytics
Calendars
Crm
Hubspot
IntegrationApp
AddLayoutEntities.php, class
AutologDelayedCommand.php, class
BullhornCommandAbstract.php, abstract class
BullhornPingCommand.php, class
BullhornSearchCommand.php, class
BullhornSessionCommand.php, class
CheckActivityLoggableCommand.php, final class
CleanDuplicateFieldDataCommand.php, class
FullSyncOpportunityCommand.php, class
LogActivitiesCommand.php, final class
ManageSyncStrategyCommand.php, class
MatchCrmObjectsCommand.php, class
MatchOpportunityActivitiesCommand.php, class
MigrateProvider.php, class
ProcessHubspotObjectsSyncBatches.php, class
PurgeDeletedOpportunitiesCommand.php, class
ResetGovernorLimits.php, class
SendNotLogged.php, class
SetupActivityTypeForFollowUp.php, final class
SetupCloseCrm.php, class
SetupCopperCrm.php, class
SetupCrmCommand.php, abstract class
SetupLayouts.php, class
SyncAccount.php, class
SyncContact.php, class
SyncFieldMetadata.php, class
SyncHubspotActiveDeals.php, class
SyncLead.php, class
SyncObjects.php, class
SyncOpportunitiesMissingFieldDataCommand.php, class
SyncOpportunity.php, class
SyncProfileMetadata.php, class
SyncTeamMetadata.php, class
UpdateOpportunitySpecifications.php, class
DealInsights
Dev
Dialers
DTOs
Elasticsearch
EngagementStats
GeckoExport
Livestream
Mailboxes
Migrate
PlaybackThemes
Playbooks
Playlists
Postmark
ProphetAi
Reports
AutomatedReportsCommand.php, class...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.76171875,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"RequestGenerateAskJiminnyReportJobTest","depth":6,"bounds":{"left":0.7796875,"top":0.017361112,"width":0.12109375,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.009375,"height":0.0},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.009375,"height":0.0},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.008203125,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Services\\Kiosk\\AutomatedReports;\n\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityActualDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityUpdatedDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\DealInsights\\ClosingPeriodFilter;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\ActivitySearch\\Service\\ActivitySearch;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Log\\LoggerInterface;\n\nclass AskJiminnyReportActivityServiceTest extends TestCase\n{\n private ActivitySearch&MockObject $activitySearch;\n private ElasticActivityRepository&MockObject $elasticRepository;\n private LoggerInterface&MockObject $logger;\n private AskJiminnyReportActivityService $service;\n\n protected function setUp(): void\n {\n $this->activitySearch = $this->createMock(ActivitySearch::class);\n $this->elasticRepository = $this->createMock(ElasticActivityRepository::class);\n $this->logger = $this->createMock(LoggerInterface::class);\n\n $this->service = new AskJiminnyReportActivityService(\n $this->activitySearch,\n $this->elasticRepository,\n $this->logger,\n );\n }\n\n private function makeFilter(string $key, ?string $value): SearchFilter&MockObject\n {\n $filter = $this->createMock(SearchFilter::class);\n $filter->method('getFilterProperty')->willReturn($key);\n $filter->method('getFilterValue')->willReturn($value);\n\n return $filter;\n }\n\n private function makeUser(): User&MockObject\n {\n $tz = new \\DateTimeZone('UTC');\n $user = $this->createMock(User::class);\n $user->method('getTimezone')->willReturn($tz);\n $user->method('getId')->willReturn(1);\n $user->method('getUuid')->willReturn('user-uuid');\n\n return $user;\n }\n\n private function makeSavedSearch(array $filters): Search&MockObject\n {\n $savedSearch = $this->createMock(Search::class);\n $savedSearch->method('getId')->willReturn(42);\n $savedSearch->method('getFilters')->willReturn(new \\Illuminate\\Support\\LazyCollection($filters));\n\n return $savedSearch;\n }\n\n public function testGetActivityIdsForSavedSearchReturnsIds(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->expects($this->once())\n ->method('getArrayFilterKeys')\n ->with($user)\n ->willReturn([]);\n\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturn($filterSet);\n\n $this->elasticRepository->expects($this->once())\n ->method('onDemandSearchIdsOnly')\n ->willReturn(['id-1', 'id-2', 'id-3']);\n\n $this->logger->expects($this->once())\n ->method('info')\n ->with('[AskJiminnyReport] Fetched activity IDs for saved search');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1', 'id-2', 'id-3'], $result);\n }\n\n public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n\n $this->logger->expects($this->once())->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEmpty($result);\n }\n\n public function testGetActivityIdsFiltersOutDateFilters(): void\n {\n $user = $this->makeUser();\n\n $nonDateFilter = $this->makeFilter('owner_id', '123');\n $startDateFilter = $this->makeFilter(ActivityActualDate::PARAM_START_DATE, '2025-01-01 00:00:00');\n $endDateFilter = $this->makeFilter(ActivityActualDate::PARAM_END_DATE, '2025-01-31 23:59:59');\n $updatedFromFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_FROM, '2025-01-01 00:00:00');\n $updatedToFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_TO, '2025-01-31 23:59:59');\n\n $savedSearch = $this->makeSavedSearch([\n $nonDateFilter,\n $startDateFilter,\n $endDateFilter,\n $updatedFromFilter,\n $updatedToFilter,\n ]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n\n $capturedCriteria = null;\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {\n $capturedCriteria = $criteria;\n\n return $filterSet;\n });\n\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n $this->logger->method('info');\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertNotNull($capturedCriteria);\n }\n\n public function testGetActivityIdsFiltersOutClosingPeriodDateFilters(): void\n {\n $user = $this->makeUser();\n\n $closingStartFilter = $this->makeFilter(ClosingPeriodFilter::KEY_START_DATE, '2025-01-01');\n $closingEndFilter = $this->makeFilter(ClosingPeriodFilter::KEY_END_DATE, '2025-03-31');\n $regularFilter = $this->makeFilter('rep_id', '99');\n\n $savedSearch = $this->makeSavedSearch([\n $closingStartFilter,\n $closingEndFilter,\n $regularFilter,\n ]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1'], $result);\n }\n\n public function testGetActivityIdsHandlesArrayFilters(): void\n {\n $user = $this->makeUser();\n\n $filter1 = $this->makeFilter('outcome', 'positive');\n $filter2 = $this->makeFilter('outcome', 'negative');\n\n $savedSearch = $this->makeSavedSearch([$filter1, $filter2]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn(['outcome']);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1'], $result);\n }\n\n public function testGetActivityIdsHandlesScalarFilters(): void\n {\n $user = $this->makeUser();\n\n $filter = $this->makeFilter('direction', 'inbound');\n $savedSearch = $this->makeSavedSearch([$filter]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-5']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-5'], $result);\n }\n\n public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n\n $capturedCriteria = null;\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {\n $capturedCriteria = $criteria;\n\n return $filterSet;\n });\n\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n $this->logger->method('info');\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertNotNull($capturedCriteria);\n $this->assertFalse($capturedCriteria->isFirstRequest());\n }\n\n public function testGetActivityIdsLogsWithCorrectContext(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['a', 'b']);\n\n $this->logger->expects($this->once())\n ->method('info')\n ->with(\n '[AskJiminnyReport] Fetched activity IDs for saved search',\n $this->callback(fn ($context) => $context['saved_search_id'] === 42\n && $context['user_id'] === 1\n && $context['activity_count'] === 2)\n );\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n }\n}","depth":4,"bounds":{"left":0.490625,"top":0.12777779,"width":0.3347656,"height":0.8722222},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Services\\Kiosk\\AutomatedReports;\n\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityActualDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityUpdatedDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\DealInsights\\ClosingPeriodFilter;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\ActivitySearch\\Service\\ActivitySearch;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Log\\LoggerInterface;\n\nclass AskJiminnyReportActivityServiceTest extends TestCase\n{\n private ActivitySearch&MockObject $activitySearch;\n private ElasticActivityRepository&MockObject $elasticRepository;\n private LoggerInterface&MockObject $logger;\n private AskJiminnyReportActivityService $service;\n\n protected function setUp(): void\n {\n $this->activitySearch = $this->createMock(ActivitySearch::class);\n $this->elasticRepository = $this->createMock(ElasticActivityRepository::class);\n $this->logger = $this->createMock(LoggerInterface::class);\n\n $this->service = new AskJiminnyReportActivityService(\n $this->activitySearch,\n $this->elasticRepository,\n $this->logger,\n );\n }\n\n private function makeFilter(string $key, ?string $value): SearchFilter&MockObject\n {\n $filter = $this->createMock(SearchFilter::class);\n $filter->method('getFilterProperty')->willReturn($key);\n $filter->method('getFilterValue')->willReturn($value);\n\n return $filter;\n }\n\n private function makeUser(): User&MockObject\n {\n $tz = new \\DateTimeZone('UTC');\n $user = $this->createMock(User::class);\n $user->method('getTimezone')->willReturn($tz);\n $user->method('getId')->willReturn(1);\n $user->method('getUuid')->willReturn('user-uuid');\n\n return $user;\n }\n\n private function makeSavedSearch(array $filters): Search&MockObject\n {\n $savedSearch = $this->createMock(Search::class);\n $savedSearch->method('getId')->willReturn(42);\n $savedSearch->method('getFilters')->willReturn(new \\Illuminate\\Support\\LazyCollection($filters));\n\n return $savedSearch;\n }\n\n public function testGetActivityIdsForSavedSearchReturnsIds(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->expects($this->once())\n ->method('getArrayFilterKeys')\n ->with($user)\n ->willReturn([]);\n\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturn($filterSet);\n\n $this->elasticRepository->expects($this->once())\n ->method('onDemandSearchIdsOnly')\n ->willReturn(['id-1', 'id-2', 'id-3']);\n\n $this->logger->expects($this->once())\n ->method('info')\n ->with('[AskJiminnyReport] Fetched activity IDs for saved search');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1', 'id-2', 'id-3'], $result);\n }\n\n public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n\n $this->logger->expects($this->once())->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEmpty($result);\n }\n\n public function testGetActivityIdsFiltersOutDateFilters(): void\n {\n $user = $this->makeUser();\n\n $nonDateFilter = $this->makeFilter('owner_id', '123');\n $startDateFilter = $this->makeFilter(ActivityActualDate::PARAM_START_DATE, '2025-01-01 00:00:00');\n $endDateFilter = $this->makeFilter(ActivityActualDate::PARAM_END_DATE, '2025-01-31 23:59:59');\n $updatedFromFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_FROM, '2025-01-01 00:00:00');\n $updatedToFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_TO, '2025-01-31 23:59:59');\n\n $savedSearch = $this->makeSavedSearch([\n $nonDateFilter,\n $startDateFilter,\n $endDateFilter,\n $updatedFromFilter,\n $updatedToFilter,\n ]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n\n $capturedCriteria = null;\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {\n $capturedCriteria = $criteria;\n\n return $filterSet;\n });\n\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n $this->logger->method('info');\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertNotNull($capturedCriteria);\n }\n\n public function testGetActivityIdsFiltersOutClosingPeriodDateFilters(): void\n {\n $user = $this->makeUser();\n\n $closingStartFilter = $this->makeFilter(ClosingPeriodFilter::KEY_START_DATE, '2025-01-01');\n $closingEndFilter = $this->makeFilter(ClosingPeriodFilter::KEY_END_DATE, '2025-03-31');\n $regularFilter = $this->makeFilter('rep_id', '99');\n\n $savedSearch = $this->makeSavedSearch([\n $closingStartFilter,\n $closingEndFilter,\n $regularFilter,\n ]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1'], $result);\n }\n\n public function testGetActivityIdsHandlesArrayFilters(): void\n {\n $user = $this->makeUser();\n\n $filter1 = $this->makeFilter('outcome', 'positive');\n $filter2 = $this->makeFilter('outcome', 'negative');\n\n $savedSearch = $this->makeSavedSearch([$filter1, $filter2]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn(['outcome']);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1'], $result);\n }\n\n public function testGetActivityIdsHandlesScalarFilters(): void\n {\n $user = $this->makeUser();\n\n $filter = $this->makeFilter('direction', 'inbound');\n $savedSearch = $this->makeSavedSearch([$filter]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-5']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-5'], $result);\n }\n\n public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n\n $capturedCriteria = null;\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {\n $capturedCriteria = $criteria;\n\n return $filterSet;\n });\n\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n $this->logger->method('info');\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertNotNull($capturedCriteria);\n $this->assertFalse($capturedCriteria->isFirstRequest());\n }\n\n public function testGetActivityIdsLogsWithCorrectContext(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['a', 'b']);\n\n $this->logger->expects($this->once())\n ->method('info')\n ->with(\n '[AskJiminnyReport] Fetched activity IDs for saved search',\n $this->callback(fn ($context) => $context['saved_search_id'] === 42\n && $context['user_id'] === 1\n && $context['activity_count'] === 2)\n );\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15","depth":4,"bounds":{"left":0.4234375,"top":0.1736111,"width":0.011328125,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.43710938,"top":0.1736111,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.4484375,"top":0.17222223,"width":0.00859375,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.45703125,"top":0.17222223,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Repositories;\n\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Facades\\DB;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\ReportSort;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\ReportSortDirection;\n\nclass AutomatedReportsRepository\n{\n /**\n * Create a new automated report\n *\n * @param array $data\n *\n * @return AutomatedReport\n */\n public function create(array $data): AutomatedReport\n {\n return AutomatedReport::create($data);\n }\n\n /**\n * Find an automated report by UUID\n *\n * @param string $uuid\n *\n * @return AutomatedReport|null\n */\n public function findByUuid(string $uuid): ?AutomatedReport\n {\n return AutomatedReport::where('uuid', AutomatedReport::toOptimized($uuid))->first();\n }\n\n public function findByIdOrUuid(string $idOrUuid): ?AutomatedReport\n {\n if (is_numeric($idOrUuid)) {\n return AutomatedReport::find((int) $idOrUuid);\n }\n\n return AutomatedReport::where('uuid', AutomatedReport::toOptimized($idOrUuid))->first();\n }\n\n /**\n * Retrieve all standard (non-Ask Jiminny) automated reports.\n *\n * @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.\n * @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.\n *\n * @return Collection<AutomatedReport>\n */\n public function getAllStandardReports(\n string $sortColumn = 'created_at',\n string $sortDirection = 'desc'\n ): Collection {\n return $this->buildSortedQuery($sortColumn, $sortDirection)\n ->whereNot('type', AutomatedReportsService::TYPE_ASK_JIMINNY)\n ->get();\n }\n\n /**\n * Retrieve all Ask Jiminny reports created by the given user.\n *\n * @param User $user The user whose reports to retrieve.\n * @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.\n * @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.\n *\n * @return Collection<AutomatedReport>\n */\n public function getAskJiminnyReportsByUser(\n User $user,\n string $sortColumn = 'created_at',\n string $sortDirection = 'desc'\n ): Collection {\n return $this->buildSortedQuery($sortColumn, $sortDirection)\n ->where('type', AutomatedReportsService::TYPE_ASK_JIMINNY)\n ->where('created_by', $user->getId())\n ->get();\n }\n\n private function buildSortedQuery(string $sortColumn, string $sortDirection): \\Illuminate\\Database\\Eloquent\\Builder\n {\n $allowedColumns = ['created_by', 'created_at'];\n if (! in_array($sortColumn, $allowedColumns)) {\n $sortColumn = 'created_at';\n }\n\n $sortDirection = strtolower($sortDirection) === 'asc' ? 'asc' : 'desc';\n\n $query = AutomatedReport::query()->with(['creator', 'team']);\n\n if ($sortColumn === 'created_by') {\n $query->leftJoin('users', 'users.id', '=', 'automated_reports.created_by')\n ->orderByRaw(\"users.name COLLATE utf8mb4_unicode_ci {$sortDirection}\")\n ->select('automated_reports.*');\n } else {\n $query->orderBy($sortColumn, $sortDirection);\n }\n\n return $query;\n }\n\n /**\n * Get all active and enabled reports with active teams for the specified frequency.\n *\n * @param string $frequency\n *\n * @return Collection<AutomatedReport>\n */\n public function getActiveReportsByFrequency(string $frequency): Collection\n {\n return AutomatedReport::where('automated_reports.status', true)\n ->where('automated_reports.frequency', $frequency)\n ->join('teams', 'automated_reports.team_id', '=', 'teams.id')\n ->where('teams.status', Team::STATUS_ACTIVE)\n ->where(function ($query) {\n $query->whereNull('automated_reports.expires_at')\n ->orWhere('automated_reports.expires_at', '>=', now()->toDateString());\n })\n ->select('automated_reports.*')\n ->get();\n }\n\n /**\n * Update an automated report\n *\n * @param AutomatedReport $report\n * @param array $data\n *\n * @return AutomatedReport\n */\n public function update(AutomatedReport $report, array $data): AutomatedReport\n {\n $report->update($data);\n\n return $report;\n }\n\n /**\n * Create a new automated report result.\n *\n * @param array $data The data to create the automated report result with.\n *\n * @return AutomatedReportResult The newly created automated report result.\n */\n public function createResult(array $data): AutomatedReportResult\n {\n return AutomatedReportResult::create($data);\n }\n\n /**\n * Find an automated report result by UUID.\n *\n * @param string $uuid The UUID to find the automated report result with.\n *\n * @return AutomatedReportResult|null The automated report result if found, otherwise null.\n */\n public function findResultByUuid(string $uuid): ?AutomatedReportResult\n {\n return AutomatedReportResult::where('uuid', AutomatedReportResult::toOptimized($uuid))->first();\n }\n\n public function findResultByUuidForUser(string $uuid, User $user): ?AutomatedReportResult\n {\n return AutomatedReportResult::query()\n ->where('uuid', AutomatedReportResult::toOptimized($uuid))\n ->whereHas('report', static function ($query) use ($user): void {\n $query->where('team_id', $user->getTeamId())\n ->where('created_by', $user->getId());\n })\n ->first();\n }\n\n public function findChildResult(AutomatedReportResult $result, string $type): ?AutomatedReportResult\n {\n return AutomatedReportResult::query()\n ->where('parent_id', $result->getId())\n ->where('media_type', $type)\n ->first();\n }\n\n public function getGeneratedNotSentResults(): Collection\n {\n return AutomatedReportResult::query()\n ->whereNotNull('generated_at')\n ->whereNull('sent_at')\n ->where('status', AutomatedReportResult::STATUS_GENERATED)\n ->whereHas('report')\n ->with('report')\n ->get();\n }\n\n public function getPaginatedUserReports(\n User $user,\n ReportSort $sort,\n ReportSortDirection $sortDirection,\n int $resultsPerPage,\n int $page,\n ?Carbon $fromDate,\n ?Carbon $toDate,\n array $teamIds,\n array $reportTypes,\n ?string $name,\n ): LengthAwarePaginator {\n $query = AutomatedReportResult::query()\n ->whereNotNull('automated_report_results.generated_at')\n ->join('automated_reports', 'automated_report_results.report_id', '=', 'automated_reports.id')\n ->where('automated_reports.team_id', $user->getTeamId())\n ->whereJsonContains('automated_reports.recipients->users', $user->getId())\n ->orderByRaw(\"$sort->value COLLATE utf8mb4_unicode_ci {$sortDirection->value}\")\n ->select('automated_report_results.*')\n ->with('report.team');\n\n if ($fromDate !== null && $toDate !== null) {\n $query->whereBetween('generated_at', [$fromDate, $toDate]);\n }\n\n if (! empty($teamIds)) {\n $query->where(function ($q) use ($teamIds) {\n foreach ($teamIds as $id) {\n $q->orWhereJsonContains('automated_reports.groups', $id);\n }\n });\n }\n\n if (! empty($reportTypes)) {\n $query->whereIn('automated_reports.type', $reportTypes);\n }\n\n if (! empty($name)) {\n $query->whereLike('name', \"%$name%\");\n }\n\n return $query->paginate($resultsPerPage, ['*'], 'page', $page);\n }\n\n public function countUserReports(User $user): int\n {\n return AutomatedReportResult::query()\n ->whereNotNull('generated_at')\n ->whereNotNull('sent_at')\n ->whereHas('report', function ($q) use ($user) {\n $q->where('team_id', $user->getTeamId())\n ->whereJsonContains('recipients->users', $user->getId());\n })\n ->count();\n }\n\n /**\n * Get report IDs for a specific team\n *\n * @param Team $team\n *\n * @return \\Illuminate\\Support\\Collection\n */\n public function getReportIdsByTeam(Team $team): \\Illuminate\\Support\\Collection\n {\n return AutomatedReport::where('team_id', $team->getId())->pluck('id');\n }\n\n /**\n * Get all reports for a specific team\n *\n * @param Team $team\n *\n * @return Collection\n */\n public function getReportsByTeam(Team $team): Collection\n {\n return AutomatedReport::where('team_id', $team->getId())->get();\n }\n\n /**\n * Get all report results for a specific report\n *\n * @param AutomatedReport $report\n *\n * @return Collection\n */\n public function getResultsByReport(AutomatedReport $report): Collection\n {\n return $this->getResultsByReportQuery($report)->get();\n }\n\n public function getResultsByReportQuery(AutomatedReport $report): Builder\n {\n return AutomatedReportResult::where('report_id', $report->getId());\n }\n\n public function getReportResultsQueryForRetention(Team $team, CarbonImmutable $retentionDate): Builder\n {\n $reportIds = $this->getReportIdsByTeam($team);\n\n return AutomatedReportResult::query()->whereIn('report_id', $reportIds)\n ->whereRaw('IFNULL(generated_at, created_at) <= ?', [$retentionDate]);\n }\n\n /**\n * @param int|null $teamId Optional team ID to filter results\n *\n * @return \\Illuminate\\Support\\Collection<int, int> Collection of team IDs\n */\n public function getTeamIdsWithReportsResults(?int $teamId = null): \\Illuminate\\Support\\Collection\n {\n $query = DB::table('automated_reports')\n ->join('teams', 'automated_reports.team_id', '=', 'teams.id')\n ->select('teams.id')\n ->distinct();\n\n if ($teamId !== null) {\n $query->where('teams.id', $teamId);\n }\n\n return $query->pluck('teams.id');\n }\n}","depth":4,"bounds":{"left":0.15234375,"top":0.0,"width":0.39882812,"height":1.0},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Repositories;\n\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Facades\\DB;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\ReportSort;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\ReportSortDirection;\n\nclass AutomatedReportsRepository\n{\n /**\n * Create a new automated report\n *\n * @param array $data\n *\n * @return AutomatedReport\n */\n public function create(array $data): AutomatedReport\n {\n return AutomatedReport::create($data);\n }\n\n /**\n * Find an automated report by UUID\n *\n * @param string $uuid\n *\n * @return AutomatedReport|null\n */\n public function findByUuid(string $uuid): ?AutomatedReport\n {\n return AutomatedReport::where('uuid', AutomatedReport::toOptimized($uuid))->first();\n }\n\n public function findByIdOrUuid(string $idOrUuid): ?AutomatedReport\n {\n if (is_numeric($idOrUuid)) {\n return AutomatedReport::find((int) $idOrUuid);\n }\n\n return AutomatedReport::where('uuid', AutomatedReport::toOptimized($idOrUuid))->first();\n }\n\n /**\n * Retrieve all standard (non-Ask Jiminny) automated reports.\n *\n * @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.\n * @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.\n *\n * @return Collection<AutomatedReport>\n */\n public function getAllStandardReports(\n string $sortColumn = 'created_at',\n string $sortDirection = 'desc'\n ): Collection {\n return $this->buildSortedQuery($sortColumn, $sortDirection)\n ->whereNot('type', AutomatedReportsService::TYPE_ASK_JIMINNY)\n ->get();\n }\n\n /**\n * Retrieve all Ask Jiminny reports created by the given user.\n *\n * @param User $user The user whose reports to retrieve.\n * @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.\n * @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.\n *\n * @return Collection<AutomatedReport>\n */\n public function getAskJiminnyReportsByUser(\n User $user,\n string $sortColumn = 'created_at',\n string $sortDirection = 'desc'\n ): Collection {\n return $this->buildSortedQuery($sortColumn, $sortDirection)\n ->where('type', AutomatedReportsService::TYPE_ASK_JIMINNY)\n ->where('created_by', $user->getId())\n ->get();\n }\n\n private function buildSortedQuery(string $sortColumn, string $sortDirection): \\Illuminate\\Database\\Eloquent\\Builder\n {\n $allowedColumns = ['created_by', 'created_at'];\n if (! in_array($sortColumn, $allowedColumns)) {\n $sortColumn = 'created_at';\n }\n\n $sortDirection = strtolower($sortDirection) === 'asc' ? 'asc' : 'desc';\n\n $query = AutomatedReport::query()->with(['creator', 'team']);\n\n if ($sortColumn === 'created_by') {\n $query->leftJoin('users', 'users.id', '=', 'automated_reports.created_by')\n ->orderByRaw(\"users.name COLLATE utf8mb4_unicode_ci {$sortDirection}\")\n ->select('automated_reports.*');\n } else {\n $query->orderBy($sortColumn, $sortDirection);\n }\n\n return $query;\n }\n\n /**\n * Get all active and enabled reports with active teams for the specified frequency.\n *\n * @param string $frequency\n *\n * @return Collection<AutomatedReport>\n */\n public function getActiveReportsByFrequency(string $frequency): Collection\n {\n return AutomatedReport::where('automated_reports.status', true)\n ->where('automated_reports.frequency', $frequency)\n ->join('teams', 'automated_reports.team_id', '=', 'teams.id')\n ->where('teams.status', Team::STATUS_ACTIVE)\n ->where(function ($query) {\n $query->whereNull('automated_reports.expires_at')\n ->orWhere('automated_reports.expires_at', '>=', now()->toDateString());\n })\n ->select('automated_reports.*')\n ->get();\n }\n\n /**\n * Update an automated report\n *\n * @param AutomatedReport $report\n * @param array $data\n *\n * @return AutomatedReport\n */\n public function update(AutomatedReport $report, array $data): AutomatedReport\n {\n $report->update($data);\n\n return $report;\n }\n\n /**\n * Create a new automated report result.\n *\n * @param array $data The data to create the automated report result with.\n *\n * @return AutomatedReportResult The newly created automated report result.\n */\n public function createResult(array $data): AutomatedReportResult\n {\n return AutomatedReportResult::create($data);\n }\n\n /**\n * Find an automated report result by UUID.\n *\n * @param string $uuid The UUID to find the automated report result with.\n *\n * @return AutomatedReportResult|null The automated report result if found, otherwise null.\n */\n public function findResultByUuid(string $uuid): ?AutomatedReportResult\n {\n return AutomatedReportResult::where('uuid', AutomatedReportResult::toOptimized($uuid))->first();\n }\n\n public function findResultByUuidForUser(string $uuid, User $user): ?AutomatedReportResult\n {\n return AutomatedReportResult::query()\n ->where('uuid', AutomatedReportResult::toOptimized($uuid))\n ->whereHas('report', static function ($query) use ($user): void {\n $query->where('team_id', $user->getTeamId())\n ->where('created_by', $user->getId());\n })\n ->first();\n }\n\n public function findChildResult(AutomatedReportResult $result, string $type): ?AutomatedReportResult\n {\n return AutomatedReportResult::query()\n ->where('parent_id', $result->getId())\n ->where('media_type', $type)\n ->first();\n }\n\n public function getGeneratedNotSentResults(): Collection\n {\n return AutomatedReportResult::query()\n ->whereNotNull('generated_at')\n ->whereNull('sent_at')\n ->where('status', AutomatedReportResult::STATUS_GENERATED)\n ->whereHas('report')\n ->with('report')\n ->get();\n }\n\n public function getPaginatedUserReports(\n User $user,\n ReportSort $sort,\n ReportSortDirection $sortDirection,\n int $resultsPerPage,\n int $page,\n ?Carbon $fromDate,\n ?Carbon $toDate,\n array $teamIds,\n array $reportTypes,\n ?string $name,\n ): LengthAwarePaginator {\n $query = AutomatedReportResult::query()\n ->whereNotNull('automated_report_results.generated_at')\n ->join('automated_reports', 'automated_report_results.report_id', '=', 'automated_reports.id')\n ->where('automated_reports.team_id', $user->getTeamId())\n ->whereJsonContains('automated_reports.recipients->users', $user->getId())\n ->orderByRaw(\"$sort->value COLLATE utf8mb4_unicode_ci {$sortDirection->value}\")\n ->select('automated_report_results.*')\n ->with('report.team');\n\n if ($fromDate !== null && $toDate !== null) {\n $query->whereBetween('generated_at', [$fromDate, $toDate]);\n }\n\n if (! empty($teamIds)) {\n $query->where(function ($q) use ($teamIds) {\n foreach ($teamIds as $id) {\n $q->orWhereJsonContains('automated_reports.groups', $id);\n }\n });\n }\n\n if (! empty($reportTypes)) {\n $query->whereIn('automated_reports.type', $reportTypes);\n }\n\n if (! empty($name)) {\n $query->whereLike('name', \"%$name%\");\n }\n\n return $query->paginate($resultsPerPage, ['*'], 'page', $page);\n }\n\n public function countUserReports(User $user): int\n {\n return AutomatedReportResult::query()\n ->whereNotNull('generated_at')\n ->whereNotNull('sent_at')\n ->whereHas('report', function ($q) use ($user) {\n $q->where('team_id', $user->getTeamId())\n ->whereJsonContains('recipients->users', $user->getId());\n })\n ->count();\n }\n\n /**\n * Get report IDs for a specific team\n *\n * @param Team $team\n *\n * @return \\Illuminate\\Support\\Collection\n */\n public function getReportIdsByTeam(Team $team): \\Illuminate\\Support\\Collection\n {\n return AutomatedReport::where('team_id', $team->getId())->pluck('id');\n }\n\n /**\n * Get all reports for a specific team\n *\n * @param Team $team\n *\n * @return Collection\n */\n public function getReportsByTeam(Team $team): Collection\n {\n return AutomatedReport::where('team_id', $team->getId())->get();\n }\n\n /**\n * Get all report results for a specific report\n *\n * @param AutomatedReport $report\n *\n * @return Collection\n */\n public function getResultsByReport(AutomatedReport $report): Collection\n {\n return $this->getResultsByReportQuery($report)->get();\n }\n\n public function getResultsByReportQuery(AutomatedReport $report): Builder\n {\n return AutomatedReportResult::where('report_id', $report->getId());\n }\n\n public function getReportResultsQueryForRetention(Team $team, CarbonImmutable $retentionDate): Builder\n {\n $reportIds = $this->getReportIdsByTeam($team);\n\n return AutomatedReportResult::query()->whereIn('report_id', $reportIds)\n ->whereRaw('IFNULL(generated_at, created_at) <= ?', [$retentionDate]);\n }\n\n /**\n * @param int|null $teamId Optional team ID to filter results\n *\n * @return \\Illuminate\\Support\\Collection<int, int> Collection of team IDs\n */\n public function getTeamIdsWithReportsResults(?int $teamId = null): \\Illuminate\\Support\\Collection\n {\n $query = DB::table('automated_reports')\n ->join('teams', 'automated_reports.team_id', '=', 'teams.id')\n ->select('teams.id')\n ->distinct();\n\n if ($teamId !== null) {\n $query->where('teams.id', $teamId);\n }\n\n return $query->pluck('teams.id');\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.0140625,"top":0.041666668,"width":0.028515626,"height":0.021527778},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app","depth":6,"role_description":"text"},{"role":"AXStaticText","text":".circleci","depth":7,"role_description":"text"},{"role":"AXStaticText","text":".cursor","depth":7,"role_description":"text"},{"role":"AXStaticText","text":".github","depth":7,"role_description":"text"},{"role":"AXStaticText","text":".sonarlint","depth":7,"role_description":"text"},{"role":"AXStaticText","text":".vscode","depth":7,"role_description":"text"},{"role":"AXStaticText","text":".windsurf","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"app, sources root","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Actions","depth":8,"role_description":"text"},{"role":"AXStaticText","text":"Component","depth":8,"role_description":"text"},{"role":"AXStaticText","text":"Configuration","depth":8,"role_description":"text"},{"role":"AXStaticText","text":"Console","depth":8,"role_description":"text"},{"role":"AXStaticText","text":"Commands","depth":9,"role_description":"text"},{"role":"AXStaticText","text":"Activities","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Analytics","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Calendars","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Crm","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Hubspot","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"IntegrationApp","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"AddLayoutEntities.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"AutologDelayedCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"BullhornCommandAbstract.php, abstract class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"BullhornPingCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"BullhornSearchCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"BullhornSessionCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"CheckActivityLoggableCommand.php, final class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"CleanDuplicateFieldDataCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"FullSyncOpportunityCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"LogActivitiesCommand.php, final class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"ManageSyncStrategyCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"MatchCrmObjectsCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"MatchOpportunityActivitiesCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"MigrateProvider.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"ProcessHubspotObjectsSyncBatches.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"PurgeDeletedOpportunitiesCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"ResetGovernorLimits.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SendNotLogged.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SetupActivityTypeForFollowUp.php, final class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SetupCloseCrm.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SetupCopperCrm.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SetupCrmCommand.php, abstract class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SetupLayouts.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncAccount.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncContact.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncFieldMetadata.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncHubspotActiveDeals.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncLead.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncObjects.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncOpportunitiesMissingFieldDataCommand.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncOpportunity.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncProfileMetadata.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"SyncTeamMetadata.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"UpdateOpportunitySpecifications.php, class","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"DealInsights","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Dev","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Dialers","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"DTOs","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Elasticsearch","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"EngagementStats","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"GeckoExport","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Livestream","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Mailboxes","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Migrate","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"PlaybackThemes","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Playbooks","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Playlists","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Postmark","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"ProphetAi","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"Reports","depth":10,"role_description":"text"},{"role":"AXStaticText","text":"AutomatedReportsCommand.php, class","depth":11,"role_description":"text"}]...
|
8105292536523201559
|
-8276794435621667532
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Services\Kiosk\AutomatedReports;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityActualDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityUpdatedDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\DealInsights\ClosingPeriodFilter;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\ActivitySearch\Service\ActivitySearch;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\User;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
class AskJiminnyReportActivityServiceTest extends TestCase
{
private ActivitySearch&MockObject $activitySearch;
private ElasticActivityRepository&MockObject $elasticRepository;
private LoggerInterface&MockObject $logger;
private AskJiminnyReportActivityService $service;
protected function setUp(): void
{
$this->activitySearch = $this->createMock(ActivitySearch::class);
$this->elasticRepository = $this->createMock(ElasticActivityRepository::class);
$this->logger = $this->createMock(LoggerInterface::class);
$this->service = new AskJiminnyReportActivityService(
$this->activitySearch,
$this->elasticRepository,
$this->logger,
);
}
private function makeFilter(string $key, ?string $value): SearchFilter&MockObject
{
$filter = $this->createMock(SearchFilter::class);
$filter->method('getFilterProperty')->willReturn($key);
$filter->method('getFilterValue')->willReturn($value);
return $filter;
}
private function makeUser(): User&MockObject
{
$tz = new \DateTimeZone('UTC');
$user = $this->createMock(User::class);
$user->method('getTimezone')->willReturn($tz);
$user->method('getId')->willReturn(1);
$user->method('getUuid')->willReturn('user-uuid');
return $user;
}
private function makeSavedSearch(array $filters): Search&MockObject
{
$savedSearch = $this->createMock(Search::class);
$savedSearch->method('getId')->willReturn(42);
$savedSearch->method('getFilters')->willReturn(new \Illuminate\Support\LazyCollection($filters));
return $savedSearch;
}
public function testGetActivityIdsForSavedSearchReturnsIds(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->expects($this->once())
->method('getArrayFilterKeys')
->with($user)
->willReturn([]);
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturn($filterSet);
$this->elasticRepository->expects($this->once())
->method('onDemandSearchIdsOnly')
->willReturn(['id-1', 'id-2', 'id-3']);
$this->logger->expects($this->once())
->method('info')
->with('[AskJiminnyReport] Fetched activity IDs for saved search');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1', 'id-2', 'id-3'], $result);
}
public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->expects($this->once())->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEmpty($result);
}
public function testGetActivityIdsFiltersOutDateFilters(): void
{
$user = $this->makeUser();
$nonDateFilter = $this->makeFilter('owner_id', '123');
$startDateFilter = $this->makeFilter(ActivityActualDate::PARAM_START_DATE, '2025-01-01 00:00:00');
$endDateFilter = $this->makeFilter(ActivityActualDate::PARAM_END_DATE, '2025-01-31 23:59:59');
$updatedFromFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_FROM, '2025-01-01 00:00:00');
$updatedToFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_TO, '2025-01-31 23:59:59');
$savedSearch = $this->makeSavedSearch([
$nonDateFilter,
$startDateFilter,
$endDateFilter,
$updatedFromFilter,
$updatedToFilter,
]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$capturedCriteria = null;
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {
$capturedCriteria = $criteria;
return $filterSet;
});
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->method('info');
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertNotNull($capturedCriteria);
}
public function testGetActivityIdsFiltersOutClosingPeriodDateFilters(): void
{
$user = $this->makeUser();
$closingStartFilter = $this->makeFilter(ClosingPeriodFilter::KEY_START_DATE, '2025-01-01');
$closingEndFilter = $this->makeFilter(ClosingPeriodFilter::KEY_END_DATE, '2025-03-31');
$regularFilter = $this->makeFilter('rep_id', '99');
$savedSearch = $this->makeSavedSearch([
$closingStartFilter,
$closingEndFilter,
$regularFilter,
]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1'], $result);
}
public function testGetActivityIdsHandlesArrayFilters(): void
{
$user = $this->makeUser();
$filter1 = $this->makeFilter('outcome', 'positive');
$filter2 = $this->makeFilter('outcome', 'negative');
$savedSearch = $this->makeSavedSearch([$filter1, $filter2]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn(['outcome']);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1'], $result);
}
public function testGetActivityIdsHandlesScalarFilters(): void
{
$user = $this->makeUser();
$filter = $this->makeFilter('direction', 'inbound');
$savedSearch = $this->makeSavedSearch([$filter]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-5']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-5'], $result);
}
public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$capturedCriteria = null;
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {
$capturedCriteria = $criteria;
return $filterSet;
});
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->method('info');
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertNotNull($capturedCriteria);
$this->assertFalse($capturedCriteria->isFirstRequest());
}
public function testGetActivityIdsLogsWithCorrectContext(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['a', 'b']);
$this->logger->expects($this->once())
->method('info')
->with(
'[AskJiminnyReport] Fetched activity IDs for saved search',
$this->callback(fn ($context) => $context['saved_search_id'] === 42
&& $context['user_id'] === 1
&& $context['activity_count'] === 2)
);
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
15
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Repositories;
use Carbon\CarbonImmutable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\DB;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\Kiosk\AutomatedReports\ReportSort;
use Jiminny\Services\Kiosk\AutomatedReports\ReportSortDirection;
class AutomatedReportsRepository
{
/**
* Create a new automated report
*
* @param array $data
*
* @return AutomatedReport
*/
public function create(array $data): AutomatedReport
{
return AutomatedReport::create($data);
}
/**
* Find an automated report by UUID
*
* @param string $uuid
*
* @return AutomatedReport|null
*/
public function findByUuid(string $uuid): ?AutomatedReport
{
return AutomatedReport::where('uuid', AutomatedReport::toOptimized($uuid))->first();
}
public function findByIdOrUuid(string $idOrUuid): ?AutomatedReport
{
if (is_numeric($idOrUuid)) {
return AutomatedReport::find((int) $idOrUuid);
}
return AutomatedReport::where('uuid', AutomatedReport::toOptimized($idOrUuid))->first();
}
/**
* Retrieve all standard (non-Ask Jiminny) automated reports.
*
* @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.
* @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.
*
* @return Collection<AutomatedReport>
*/
public function getAllStandardReports(
string $sortColumn = 'created_at',
string $sortDirection = 'desc'
): Collection {
return $this->buildSortedQuery($sortColumn, $sortDirection)
->whereNot('type', AutomatedReportsService::TYPE_ASK_JIMINNY)
->get();
}
/**
* Retrieve all Ask Jiminny reports created by the given user.
*
* @param User $user The user whose reports to retrieve.
* @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.
* @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.
*
* @return Collection<AutomatedReport>
*/
public function getAskJiminnyReportsByUser(
User $user,
string $sortColumn = 'created_at',
string $sortDirection = 'desc'
): Collection {
return $this->buildSortedQuery($sortColumn, $sortDirection)
->where('type', AutomatedReportsService::TYPE_ASK_JIMINNY)
->where('created_by', $user->getId())
->get();
}
private function buildSortedQuery(string $sortColumn, string $sortDirection): \Illuminate\Database\Eloquent\Builder
{
$allowedColumns = ['created_by', 'created_at'];
if (! in_array($sortColumn, $allowedColumns)) {
$sortColumn = 'created_at';
}
$sortDirection = strtolower($sortDirection) === 'asc' ? 'asc' : 'desc';
$query = AutomatedReport::query()->with(['creator', 'team']);
if ($sortColumn === 'created_by') {
$query->leftJoin('users', 'users.id', '=', 'automated_reports.created_by')
->orderByRaw("users.name COLLATE utf8mb4_unicode_ci {$sortDirection}")
->select('automated_reports.*');
} else {
$query->orderBy($sortColumn, $sortDirection);
}
return $query;
}
/**
* Get all active and enabled reports with active teams for the specified frequency.
*
* @param string $frequency
*
* @return Collection<AutomatedReport>
*/
public function getActiveReportsByFrequency(string $frequency): Collection
{
return AutomatedReport::where('automated_reports.status', true)
->where('automated_reports.frequency', $frequency)
->join('teams', 'automated_reports.team_id', '=', 'teams.id')
->where('teams.status', Team::STATUS_ACTIVE)
->where(function ($query) {
$query->whereNull('automated_reports.expires_at')
->orWhere('automated_reports.expires_at', '>=', now()->toDateString());
})
->select('automated_reports.*')
->get();
}
/**
* Update an automated report
*
* @param AutomatedReport $report
* @param array $data
*
* @return AutomatedReport
*/
public function update(AutomatedReport $report, array $data): AutomatedReport
{
$report->update($data);
return $report;
}
/**
* Create a new automated report result.
*
* @param array $data The data to create the automated report result with.
*
* @return AutomatedReportResult The newly created automated report result.
*/
public function createResult(array $data): AutomatedReportResult
{
return AutomatedReportResult::create($data);
}
/**
* Find an automated report result by UUID.
*
* @param string $uuid The UUID to find the automated report result with.
*
* @return AutomatedReportResult|null The automated report result if found, otherwise null.
*/
public function findResultByUuid(string $uuid): ?AutomatedReportResult
{
return AutomatedReportResult::where('uuid', AutomatedReportResult::toOptimized($uuid))->first();
}
public function findResultByUuidForUser(string $uuid, User $user): ?AutomatedReportResult
{
return AutomatedReportResult::query()
->where('uuid', AutomatedReportResult::toOptimized($uuid))
->whereHas('report', static function ($query) use ($user): void {
$query->where('team_id', $user->getTeamId())
->where('created_by', $user->getId());
})
->first();
}
public function findChildResult(AutomatedReportResult $result, string $type): ?AutomatedReportResult
{
return AutomatedReportResult::query()
->where('parent_id', $result->getId())
->where('media_type', $type)
->first();
}
public function getGeneratedNotSentResults(): Collection
{
return AutomatedReportResult::query()
->whereNotNull('generated_at')
->whereNull('sent_at')
->where('status', AutomatedReportResult::STATUS_GENERATED)
->whereHas('report')
->with('report')
->get();
}
public function getPaginatedUserReports(
User $user,
ReportSort $sort,
ReportSortDirection $sortDirection,
int $resultsPerPage,
int $page,
?Carbon $fromDate,
?Carbon $toDate,
array $teamIds,
array $reportTypes,
?string $name,
): LengthAwarePaginator {
$query = AutomatedReportResult::query()
->whereNotNull('automated_report_results.generated_at')
->join('automated_reports', 'automated_report_results.report_id', '=', 'automated_reports.id')
->where('automated_reports.team_id', $user->getTeamId())
->whereJsonContains('automated_reports.recipients->users', $user->getId())
->orderByRaw("$sort->value COLLATE utf8mb4_unicode_ci {$sortDirection->value}")
->select('automated_report_results.*')
->with('report.team');
if ($fromDate !== null && $toDate !== null) {
$query->whereBetween('generated_at', [$fromDate, $toDate]);
}
if (! empty($teamIds)) {
$query->where(function ($q) use ($teamIds) {
foreach ($teamIds as $id) {
$q->orWhereJsonContains('automated_reports.groups', $id);
}
});
}
if (! empty($reportTypes)) {
$query->whereIn('automated_reports.type', $reportTypes);
}
if (! empty($name)) {
$query->whereLike('name', "%$name%");
}
return $query->paginate($resultsPerPage, ['*'], 'page', $page);
}
public function countUserReports(User $user): int
{
return AutomatedReportResult::query()
->whereNotNull('generated_at')
->whereNotNull('sent_at')
->whereHas('report', function ($q) use ($user) {
$q->where('team_id', $user->getTeamId())
->whereJsonContains('recipients->users', $user->getId());
})
->count();
}
/**
* Get report IDs for a specific team
*
* @param Team $team
*
* @return \Illuminate\Support\Collection
*/
public function getReportIdsByTeam(Team $team): \Illuminate\Support\Collection
{
return AutomatedReport::where('team_id', $team->getId())->pluck('id');
}
/**
* Get all reports for a specific team
*
* @param Team $team
*
* @return Collection
*/
public function getReportsByTeam(Team $team): Collection
{
return AutomatedReport::where('team_id', $team->getId())->get();
}
/**
* Get all report results for a specific report
*
* @param AutomatedReport $report
*
* @return Collection
*/
public function getResultsByReport(AutomatedReport $report): Collection
{
return $this->getResultsByReportQuery($report)->get();
}
public function getResultsByReportQuery(AutomatedReport $report): Builder
{
return AutomatedReportResult::where('report_id', $report->getId());
}
public function getReportResultsQueryForRetention(Team $team, CarbonImmutable $retentionDate): Builder
{
$reportIds = $this->getReportIdsByTeam($team);
return AutomatedReportResult::query()->whereIn('report_id', $reportIds)
->whereRaw('IFNULL(generated_at, created_at) <= ?', [$retentionDate]);
}
/**
* @param int|null $teamId Optional team ID to filter results
*
* @return \Illuminate\Support\Collection<int, int> Collection of team IDs
*/
public function getTeamIdsWithReportsResults(?int $teamId = null): \Illuminate\Support\Collection
{
$query = DB::table('automated_reports')
->join('teams', 'automated_reports.team_id', '=', 'teams.id')
->select('teams.id')
->distinct();
if ($teamId !== null) {
$query->where('teams.id', $teamId);
}
return $query->pluck('teams.id');
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app
.circleci
.cursor
.github
.sonarlint
.vscode
.windsurf
app, sources root
Actions
Component
Configuration
Console
Commands
Activities
Analytics
Calendars
Crm
Hubspot
IntegrationApp
AddLayoutEntities.php, class
AutologDelayedCommand.php, class
BullhornCommandAbstract.php, abstract class
BullhornPingCommand.php, class
BullhornSearchCommand.php, class
BullhornSessionCommand.php, class
CheckActivityLoggableCommand.php, final class
CleanDuplicateFieldDataCommand.php, class
FullSyncOpportunityCommand.php, class
LogActivitiesCommand.php, final class
ManageSyncStrategyCommand.php, class
MatchCrmObjectsCommand.php, class
MatchOpportunityActivitiesCommand.php, class
MigrateProvider.php, class
ProcessHubspotObjectsSyncBatches.php, class
PurgeDeletedOpportunitiesCommand.php, class
ResetGovernorLimits.php, class
SendNotLogged.php, class
SetupActivityTypeForFollowUp.php, final class
SetupCloseCrm.php, class
SetupCopperCrm.php, class
SetupCrmCommand.php, abstract class
SetupLayouts.php, class
SyncAccount.php, class
SyncContact.php, class
SyncFieldMetadata.php, class
SyncHubspotActiveDeals.php, class
SyncLead.php, class
SyncObjects.php, class
SyncOpportunitiesMissingFieldDataCommand.php, class
SyncOpportunity.php, class
SyncProfileMetadata.php, class
SyncTeamMetadata.php, class
UpdateOpportunitySpecifications.php, class
DealInsights
Dev
Dialers
DTOs
Elasticsearch
EngagementStats
GeckoExport
Livestream
Mailboxes
Migrate
PlaybackThemes
Playbooks
Playlists
Postmark
ProphetAi
Reports
AutomatedReportsCommand.php, class...
|
10923
|
|
10925
|
216
|
6
|
2026-04-14T09:04:16.062050+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157456062_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 56 mTue 14 Apr 12:04:15+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
-7733045099787448532
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMSActivityFilesLater..•MoreFileEditVi +SlackEDHomeDMSActivityFilesLater..•MoreFileEditViewGoHistoryWindow→HelplalolSupport Daily - in 2h 56 mTue 14 Apr 12:04:15+Jiminny ...# Starredplatform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..• Direct messagesAneliya Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea DimitravoSearch Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+Phooa да тестоan АРусротораmone nunpomопределен когато тествамеNikolay Yankov 10:41 AMможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMготовосьщотоCompetitive pitches беше втория нали такаMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa100% <478Fuune 4Today ~New...
|
NULL
|
|
10926
|
217
|
10
|
2026-04-14T09:04:16.081290+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157456081_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.php= custom.lo9= laravel.logL SF (iminny@localhostD Unit_ ActionsComponentConfigurationM ConsoleM ContractsM7 DomainD DTO• Enums_ Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobTcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTest→I Listeners→]Mal> MModelsM Notifications› M ObserversPoliciesProvidersRepositories> D Rules• _ Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c) AutomatedRenonAulomaleakeporissendcommand.ongC AddLayoutEntities.phpC Team.phpC) AutomatedReportsRepository.php XHs local liminnyalocalnostconsole PRODL console [EUl© AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?roviderinstalled-vent.ono¿ consoe STAGINGI© AskJiminnyReportActivityService.phpC ActivityLogged.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpsrong© AutomatedReportResult.php© AutomatedReport.phpdeclare(strict_types=1);class AutomatedReportsrepos1toryA15 V4namespace Tests Unit\Services K1OSK\AutomatedReports:* dreturn AutomatedReportuse...public function create(array $data): AutomatedReport...1s estuase• Run 'AskJiminnyReportActi... (PHPUnit)":8: Debua 'AskJiminnvReportActi... (PHPUnit)'* Find an automated report by UUID* dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReportRun 'AskJiminnyReportActi... (PHPUnit) with Coverageiearch;Modify Run Configuration..private ElasticActivityRepository&Mock0bject SelasticRepository:1o usagesprivate LoggerinterfacexMock0bject slogger9 usagesprivate AskJ1minnykeporcAculVityservice sservice;return AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:29 GT>protected function setUp: voidt...hTusdyeIl usagespublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReportprivate function makeFilter(string $key. ?string $value): SearchFiltif (is numeric(sidorluid)) "o usaeesprivate function makeUserO: User&Mock0bjecti...h8 usagesreturn AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;private function makesavedsearch(array sf1lters): SearchxMockobjectpubLic tunction tescbecAculvityLasrorsavedsearchkecurnstas: voldt* Retrieve all standard (non-Ask Jaminny) automated reports.100 M ›public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoRd* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 118 % >* dparam string SsortDirection The sort direction. Allowed values:"asc, "desc". veraults to "des-oe157 % >public function testGetActivityldsFilters0utDateFiltersO: void..public function testGetActivityldsFilters0utClosingPeriodDateFilter.* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc': Collection 1...185 VA Npublic function testGetActiv1tyldsHandLesArrayr1lters: vo1di.206 D >-224225puDLic tunction tescbecAculvltylashandlesscalarrilters: voldt.**pubtao runctaontestGetActivitvIdsPassesNonZeroSequenceNumberToDisarpuser - ochis->makeusert,SsavedSearch = sthis->makeSavedSearch(u.D:* Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam usersuserIne user wnose reporus to retrieve.*oparan scring esortho lunnThe column to sort by. Allowed values: 'created_by', 'created_at'. 232* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'dez 233* dreturn Collection<AutomatedReport>229230231234255256sfilterset = Sthis->createMock originalClassName: FilterDefinitioncsthis->activitysearch->method constraint: 'getArrayr1lterKeys')->w14 usagesScapturedcriteria = null;ninn S->acu v Vsearch-sexoersth S=>oncelu.ui→>iecno constragetOnDemandPageFilterSet')1 eall-›il ~ Accept File *+ k (X Reject file (Griterta 2orätilesia) use ($filWinasun ch00 2.12.21: A new version is avallable. View chancelod loday 10:33., 0labl: Support Daily • in 2h 56 m100% [2Tue 14 Apr 12:04:15• RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Ma© Automated Report !+D ..nand.php#L211 and add validation with logs insideohu Lolla Leunevot tscomlahus pnorL409-419Let me read the current state of the command file first.kead Automareakeporscommand.ongIcan see the user's approach - processsing LeReport already exists trom my earlier work but getReportByld iswhat's being used in processReports. Ineed to implement getReportById properly with validation + logs, and addthe reposilory method. Let me also check the Illuminate Support collection impon situation:Searched use Illuminate (Support Collection in app/Console/Commands/Reports/AutomatedReportsCommand.ph.Now implement both changes - the repository method and the getReportByld method with proper validation:trror while editing automacedkeportscommand. pnpkead Automateakeportscommana.ongThe file is now only 140 lines - the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now "l implement oot changes:AutomatedReportsCommand.php+57-1Now add findByldorUuid to the repository:• AutomatedReportsRepository.phpAlso fix the import order Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1-1Done. summary or changes:AutomatedReportsRepository::findByld0rUuid() (AutomatedReportsRepository-php:47-54):• Numeric string → find() by int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand.php:135-194) - checks all conditions that getActiveReportsByFrequency entorces, loceine a warnine to the loe channel ane orintne a warn lo the terminal tor eaeh violation,out stlll returns the revort so orocessina continuesCheckBehaviour on failNot toundwarnino oo + terminal warn. returns emory collection skios processino))nactive statuswarning log + terminal warn, continuesTeam not activewarnind llod + terminal warn. continuesExoiredwarning log + terminal warn, continuesrrecuency woulentrun toodyinfo log + terminal warn, continuesWGAl mAsk anything (&+L)+ <› Code.Claude Sonnet 4.6winasun leams225:1uir-oia 4 spaces...
|
NULL
|
-4312757663376816869
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.php= custom.lo9= laravel.logL SF (iminny@localhostD Unit_ ActionsComponentConfigurationM ConsoleM ContractsM7 DomainD DTO• Enums_ Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobTcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTest→I Listeners→]Mal> MModelsM Notifications› M ObserversPoliciesProvidersRepositories> D Rules• _ Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c) AutomatedRenonAulomaleakeporissendcommand.ongC AddLayoutEntities.phpC Team.phpC) AutomatedReportsRepository.php XHs local liminnyalocalnostconsole PRODL console [EUl© AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?roviderinstalled-vent.ono¿ consoe STAGINGI© AskJiminnyReportActivityService.phpC ActivityLogged.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpsrong© AutomatedReportResult.php© AutomatedReport.phpdeclare(strict_types=1);class AutomatedReportsrepos1toryA15 V4namespace Tests Unit\Services K1OSK\AutomatedReports:* dreturn AutomatedReportuse...public function create(array $data): AutomatedReport...1s estuase• Run 'AskJiminnyReportActi... (PHPUnit)":8: Debua 'AskJiminnvReportActi... (PHPUnit)'* Find an automated report by UUID* dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReportRun 'AskJiminnyReportActi... (PHPUnit) with Coverageiearch;Modify Run Configuration..private ElasticActivityRepository&Mock0bject SelasticRepository:1o usagesprivate LoggerinterfacexMock0bject slogger9 usagesprivate AskJ1minnykeporcAculVityservice sservice;return AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:29 GT>protected function setUp: voidt...hTusdyeIl usagespublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReportprivate function makeFilter(string $key. ?string $value): SearchFiltif (is numeric(sidorluid)) "o usaeesprivate function makeUserO: User&Mock0bjecti...h8 usagesreturn AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;private function makesavedsearch(array sf1lters): SearchxMockobjectpubLic tunction tescbecAculvityLasrorsavedsearchkecurnstas: voldt* Retrieve all standard (non-Ask Jaminny) automated reports.100 M ›public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoRd* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 118 % >* dparam string SsortDirection The sort direction. Allowed values:"asc, "desc". veraults to "des-oe157 % >public function testGetActivityldsFilters0utDateFiltersO: void..public function testGetActivityldsFilters0utClosingPeriodDateFilter.* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc': Collection 1...185 VA Npublic function testGetActiv1tyldsHandLesArrayr1lters: vo1di.206 D >-224225puDLic tunction tescbecAculvltylashandlesscalarrilters: voldt.**pubtao runctaontestGetActivitvIdsPassesNonZeroSequenceNumberToDisarpuser - ochis->makeusert,SsavedSearch = sthis->makeSavedSearch(u.D:* Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam usersuserIne user wnose reporus to retrieve.*oparan scring esortho lunnThe column to sort by. Allowed values: 'created_by', 'created_at'. 232* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'dez 233* dreturn Collection<AutomatedReport>229230231234255256sfilterset = Sthis->createMock originalClassName: FilterDefinitioncsthis->activitysearch->method constraint: 'getArrayr1lterKeys')->w14 usagesScapturedcriteria = null;ninn S->acu v Vsearch-sexoersth S=>oncelu.ui→>iecno constragetOnDemandPageFilterSet')1 eall-›il ~ Accept File *+ k (X Reject file (Griterta 2orätilesia) use ($filWinasun ch00 2.12.21: A new version is avallable. View chancelod loday 10:33., 0labl: Support Daily • in 2h 56 m100% [2Tue 14 Apr 12:04:15• RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Ma© Automated Report !+D ..nand.php#L211 and add validation with logs insideohu Lolla Leunevot tscomlahus pnorL409-419Let me read the current state of the command file first.kead Automareakeporscommand.ongIcan see the user's approach - processsing LeReport already exists trom my earlier work but getReportByld iswhat's being used in processReports. Ineed to implement getReportById properly with validation + logs, and addthe reposilory method. Let me also check the Illuminate Support collection impon situation:Searched use Illuminate (Support Collection in app/Console/Commands/Reports/AutomatedReportsCommand.ph.Now implement both changes - the repository method and the getReportByld method with proper validation:trror while editing automacedkeportscommand. pnpkead Automateakeportscommana.ongThe file is now only 140 lines - the user removed the processSingleReport/warnIfNotApplicableForSchedulemetnoas. Now "l implement oot changes:AutomatedReportsCommand.php+57-1Now add findByldorUuid to the repository:• AutomatedReportsRepository.phpAlso fix the import order Collection should be before the models alphabetically):• AutomatedReportsCommand.php+1 -1• AutomatedReportsCommand.php+1-1Done. summary or changes:AutomatedReportsRepository::findByld0rUuid() (AutomatedReportsRepository-php:47-54):• Numeric string → find() by int ID• Non-numeric → UUID lookup via toOptimized()Both use withTrashed() so soft-deleted reports are findable manuallygetReportById() (AutomatedReportsCommand.php:135-194) - checks all conditions that getActiveReportsByFrequency entorces, loceine a warnine to the loe channel ane orintne a warn lo the terminal tor eaeh violation,out stlll returns the revort so orocessina continuesCheckBehaviour on failNot toundwarnino oo + terminal warn. returns emory collection skios processino))nactive statuswarning log + terminal warn, continuesTeam not activewarnind llod + terminal warn. continuesExoiredwarning log + terminal warn, continuesrrecuency woulentrun toodyinfo log + terminal warn, continuesWGAl mAsk anything (&+L)+ <› Code.Claude Sonnet 4.6winasun leams225:1uir-oia 4 spaces...
|
NULL
|
|
10927
|
217
|
11
|
2026-04-14T09:04:18.121929+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157458121_m2.jpg...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityServiceTest.ph faVsco.js – AskJiminnyReportActivityServiceTest.php...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Services\Kiosk\AutomatedReports;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityActualDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityUpdatedDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\DealInsights\ClosingPeriodFilter;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\ActivitySearch\Service\ActivitySearch;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\User;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
class AskJiminnyReportActivityServiceTest extends TestCase
{
private ActivitySearch&MockObject $activitySearch;
private ElasticActivityRepository&MockObject $elasticRepository;
private LoggerInterface&MockObject $logger;
private AskJiminnyReportActivityService $service;
protected function setUp(): void
{
$this->activitySearch = $this->createMock(ActivitySearch::class);
$this->elasticRepository = $this->createMock(ElasticActivityRepository::class);
$this->logger = $this->createMock(LoggerInterface::class);
$this->service = new AskJiminnyReportActivityService(
$this->activitySearch,
$this->elasticRepository,
$this->logger,
);
}
private function makeFilter(string $key, ?string $value): SearchFilter&MockObject
{
$filter = $this->createMock(SearchFilter::class);
$filter->method('getFilterProperty')->willReturn($key);
$filter->method('getFilterValue')->willReturn($value);
return $filter;
}
private function makeUser(): User&MockObject
{
$tz = new \DateTimeZone('UTC');
$user = $this->createMock(User::class);
$user->method('getTimezone')->willReturn($tz);
$user->method('getId')->willReturn(1);
$user->method('getUuid')->willReturn('user-uuid');
return $user;
}
private function makeSavedSearch(array $filters): Search&MockObject
{
$savedSearch = $this->createMock(Search::class);
$savedSearch->method('getId')->willReturn(42);
$savedSearch->method('getFilters')->willReturn(new \Illuminate\Support\LazyCollection($filters));
return $savedSearch;
}
public function testGetActivityIdsForSavedSearchReturnsIds(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->expects($this->once())
->method('getArrayFilterKeys')
->with($user)
->willReturn([]);
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturn($filterSet);
$this->elasticRepository->expects($this->once())
->method('onDemandSearchIdsOnly')
->willReturn(['id-1', 'id-2', 'id-3']);
$this->logger->expects($this->once())
->method('info')
->with('[AskJiminnyReport] Fetched activity IDs for saved search');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1', 'id-2', 'id-3'], $result);
}
public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->expects($this->once())->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEmpty($result);
}
public function testGetActivityIdsFiltersOutDateFilters(): void
{
$user = $this->makeUser();
$nonDateFilter = $this->makeFilter('owner_id', '123');
$startDateFilter = $this->makeFilter(ActivityActualDate::PARAM_START_DATE, '2025-01-01 00:00:00');
$endDateFilter = $this->makeFilter(ActivityActualDate::PARAM_END_DATE, '2025-01-31 23:59:59');
$updatedFromFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_FROM, '2025-01-01 00:00:00');
$updatedToFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_TO, '2025-01-31 23:59:59');
$savedSearch = $this->makeSavedSearch([
$nonDateFilter,
$startDateFilter,
$endDateFilter,
$updatedFromFilter,
$updatedToFilter,
]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$capturedCriteria = null;
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {
$capturedCriteria = $criteria;
return $filterSet;
});
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->method('info');
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertNotNull($capturedCriteria);
}
public function testGetActivityIdsFiltersOutClosingPeriodDateFilters(): void
{
$user = $this->makeUser();
$closingStartFilter = $this->makeFilter(ClosingPeriodFilter::KEY_START_DATE, '2025-01-01');
$closingEndFilter = $this->makeFilter(ClosingPeriodFilter::KEY_END_DATE, '2025-03-31');
$regularFilter = $this->makeFilter('rep_id', '99');
$savedSearch = $this->makeSavedSearch([
$closingStartFilter,
$closingEndFilter,
$regularFilter,
]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1'], $result);
}
public function testGetActivityIdsHandlesArrayFilters(): void
{
$user = $this->makeUser();
$filter1 = $this->makeFilter('outcome', 'positive');
$filter2 = $this->makeFilter('outcome', 'negative');
$savedSearch = $this->makeSavedSearch([$filter1, $filter2]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn(['outcome']);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1'], $result);
}
public function testGetActivityIdsHandlesScalarFilters(): void
{
$user = $this->makeUser();
$filter = $this->makeFilter('direction', 'inbound');
$savedSearch = $this->makeSavedSearch([$filter]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-5']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-5'], $result);
}
public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$capturedCriteria = null;
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {
$capturedCriteria = $criteria;
return $filterSet;
});
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->method('info');
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertNotNull($capturedCriteria);
$this->assertFalse($capturedCriteria->isFirstRequest());
}
public function testGetActivityIdsLogsWithCorrectContext(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['a', 'b']);
$this->logger->expects($this->once())
->method('info')
->with(
'[AskJiminnyReport] Fetched activity IDs for saved search',
$this->callback(fn ($context) => $context['saved_search_id'] === 42
&& $context['user_id'] === 1
&& $context['activity_count'] === 2)
);
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
15
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Repositories;
use Carbon\CarbonImmutable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\DB;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\Kiosk\AutomatedReports\ReportSort;
use Jiminny\Services\Kiosk\AutomatedReports\ReportSortDirection;
class AutomatedReportsRepository
{
/**
* Create a new automated report
*
* @param array $data
*
* @return AutomatedReport
*/
public function create(array $data): AutomatedReport
{
return AutomatedReport::create($data);
}
/**
* Find an automated report by UUID
*
* @param string $uuid
*
* @return AutomatedReport|null
*/
public function findByUuid(string $uuid): ?AutomatedReport
{
return AutomatedReport::where('uuid', AutomatedReport::toOptimized($uuid))->first();
}
public function findByIdOrUuid(string $idOrUuid): ?AutomatedReport
{
if (is_numeric($idOrUuid)) {
return AutomatedReport::find((int) $idOrUuid);
}
return AutomatedReport::where('uuid', AutomatedReport::toOptimized($idOrUuid))->first();
}
/**
* Retrieve all standard (non-Ask Jiminny) automated reports.
*
* @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.
* @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.
*
* @return Collection<AutomatedReport>
*/
public function getAllStandardReports(
string $sortColumn = 'created_at',
string $sortDirection = 'desc'
): Collection {
return $this->buildSortedQuery($sortColumn, $sortDirection)
->whereNot('type', AutomatedReportsService::TYPE_ASK_JIMINNY)
->get();
}
/**
* Retrieve all Ask Jiminny reports created by the given user.
*
* @param User $user The user whose reports to retrieve.
* @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.
* @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.
*
* @return Collection<AutomatedReport>
*/
public function getAskJiminnyReportsByUser(
User $user,
string $sortColumn = 'created_at',
string $sortDirection = 'desc'
): Collection {
return $this->buildSortedQuery($sortColumn, $sortDirection)
->where('type', AutomatedReportsService::TYPE_ASK_JIMINNY)
->where('created_by', $user->getId())
->get();
}
private function buildSortedQuery(string $sortColumn, string $sortDirection): \Illuminate\Database\Eloquent\Builder
{
$allowedColumns = ['created_by', 'created_at'];
if (! in_array($sortColumn, $allowedColumns)) {
$sortColumn = 'created_at';
}
$sortDirection = strtolower($sortDirection) === 'asc' ? 'asc' : 'desc';
$query = AutomatedReport::query()->with(['creator', 'team']);
if ($sortColumn === 'created_by') {
$query->leftJoin('users', 'users.id', '=', 'automated_reports.created_by')
->orderByRaw("users.name COLLATE utf8mb4_unicode_ci {$sortDirection}")
->select('automated_reports.*');
} else {
$query->orderBy($sortColumn, $sortDirection);
}
return $query;
}
/**
* Get all active and enabled reports with active teams for the specified frequency.
*
* @param string $frequency
*
* @return Collection<AutomatedReport>
*/
public function getActiveReportsByFrequency(string $frequency): Collection
{
return AutomatedReport::where('automated_reports.status', true)
->where('automated_reports.frequency', $frequency)
->join('teams', 'automated_reports.team_id', '=', 'teams.id')
->where('teams.status', Team::STATUS_ACTIVE)
->where(function ($query) {
$query->whereNull('automated_reports.expires_at')
->orWhere('automated_reports.expires_at', '>=', now()->toDateString());
})
->select('automated_reports.*')
->get();
}
/**
* Update an automated report
*
* @param AutomatedReport $report
* @param array $data
*
* @return AutomatedReport
*/
public function update(AutomatedReport $report, array $data): AutomatedReport
{
$report->update($data);
return $report;
}
/**
* Create a new automated report result.
*
* @param array $data The data to create the automated report result with.
*
* @return AutomatedReportResult The newly created automated report result.
*/
public function createResult(array $data): AutomatedReportResult
{
return AutomatedReportResult::create($data);
}
/**
* Find an automated report result by UUID.
*
* @param string $uuid The UUID to find the automated report result with.
*
* @return AutomatedReportResult|null The automated report result if found, otherwise null.
*/
public function findResultByUuid(string $uuid): ?AutomatedReportResult
{
return AutomatedReportResult::where('uuid', AutomatedReportResult::toOptimized($uuid))->first();
}
public function findResultByUuidForUser(string $uuid, User $user): ?AutomatedReportResult
{
return AutomatedReportResult::query()
->where('uuid', AutomatedReportResult::toOptimized($uuid))
->whereHas('report', static function ($query) use ($user): void {
$query->where('team_id', $user->getTeamId())
->where('created_by', $user->getId());
})
->first();
}
public function findChildResult(AutomatedReportResult $result, string $type): ?AutomatedReportResult
{
return AutomatedReportResult::query()
->where('parent_id', $result->getId())
->where('media_type', $type)
->first();
}
public function getGeneratedNotSentResults(): Collection
{
return AutomatedReportResult::query()
->whereNotNull('generated_at')
->whereNull('sent_at')
->where('status', AutomatedReportResult::STATUS_GENERATED)
->whereHas('report')
->with('report')
->get();
}
public function getPaginatedUserReports(
User $user,
ReportSort $sort,
ReportSortDirection $sortDirection,
int $resultsPerPage,
int $page,
?Carbon $fromDate,
?Carbon $toDate,
array $teamIds,
array $reportTypes,
?string $name,
): LengthAwarePaginator {
$query = AutomatedReportResult::query()
->whereNotNull('automated_report_results.generated_at')
->join('automated_reports', 'automated_report_results.report_id', '=', 'automated_reports.id')
->where('automated_reports.team_id', $user->getTeamId())
->whereJsonContains('automated_reports.recipients->users', $user->getId())
->orderByRaw("$sort->value COLLATE utf8mb4_unicode_ci {$sortDirection->value}")
->select('automated_report_results.*')
->with('report.team');
if ($fromDate !== null && $toDate !== null) {
$query->whereBetween('generated_at', [$fromDate, $toDate]);
}
if (! empty($teamIds)) {
$query->where(function ($q) use ($teamIds) {
foreach ($teamIds as $id) {
$q->orWhereJsonContains('automated_reports.groups', $id);
}
});
}
if (! empty($reportTypes)) {
$query->whereIn('automated_reports.type', $reportTypes);
}
if (! empty($name)) {
$query->whereLike('name', "%$name%");
}
return $query->paginate($resultsPerPage, ['*'], 'page', $page);
}
public function countUserReports(User $user): int
{
return AutomatedReportResult::query()
->whereNotNull('generated_at')
->whereNotNull('sent_at')
->whereHas('report', function ($q) use ($user) {
$q->where('team_id', $user->getTeamId())
->whereJsonContains('recipients->users', $user->getId());
})
->count();
}
/**
* Get report IDs for a specific team
*
* @param Team $team
*
* @return \Illuminate\Support\Collection
*/
public function getReportIdsByTeam(Team $team): \Illuminate\Support\Collection
{
return AutomatedReport::where('team_id', $team->getId())->pluck('id');
}
/**
* Get all reports for a specific team
*
* @param Team $team
*
* @return Collection
*/
public function getReportsByTeam(Team $team): Collection
{
return AutomatedReport::where('team_id', $team->getId())->get();
}
/**
* Get all report results for a specific report
*
* @param AutomatedReport $report
*
* @return Collection
*/
public function getResultsByReport(AutomatedReport $report): Collection
{
return $this->getResultsByReportQuery($report)->get();
}
public function getResultsByReportQuery(AutomatedReport $report): Builder
{
return AutomatedReportResult::where('report_id', $report->getId());
}
public function getReportResultsQueryForRetention(Team $team, CarbonImmutable $retentionDate): Builder
{
$reportIds = $this->getReportIdsByTeam($team);
return AutomatedReportResult::query()->whereIn('report_id', $reportIds)
->whereRaw('IFNULL(generated_at, created_at) <= ?', [$retentionDate]);
}
/**
* @param int|null $teamId Optional team ID to filter results
*
* @return \Illuminate\Support\Collection<int, int> Collection of team IDs
*/
public function getTeamIdsWithReportsResults(?int $teamId = null): \Illuminate\Support\Collection
{
$query = DB::table('automated_reports')
->join('teams', 'automated_reports.team_id', '=', 'teams.id')
->select('teams.id')
->distinct();
if ($teamId !== null) {
$query->where('teams.id', $teamId);
}
return $query->pluck('teams.id');
}
}
Project
Project
New File or Directory…
Expand Selected...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.76171875,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"RequestGenerateAskJiminnyReportJobTest","depth":6,"bounds":{"left":0.7796875,"top":0.017361112,"width":0.12109375,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'RequestGenerateAskJiminnyReportJobTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.009375,"height":0.0},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.009375,"height":0.0},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.008203125,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Services\\Kiosk\\AutomatedReports;\n\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityActualDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityUpdatedDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\DealInsights\\ClosingPeriodFilter;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\ActivitySearch\\Service\\ActivitySearch;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Log\\LoggerInterface;\n\nclass AskJiminnyReportActivityServiceTest extends TestCase\n{\n private ActivitySearch&MockObject $activitySearch;\n private ElasticActivityRepository&MockObject $elasticRepository;\n private LoggerInterface&MockObject $logger;\n private AskJiminnyReportActivityService $service;\n\n protected function setUp(): void\n {\n $this->activitySearch = $this->createMock(ActivitySearch::class);\n $this->elasticRepository = $this->createMock(ElasticActivityRepository::class);\n $this->logger = $this->createMock(LoggerInterface::class);\n\n $this->service = new AskJiminnyReportActivityService(\n $this->activitySearch,\n $this->elasticRepository,\n $this->logger,\n );\n }\n\n private function makeFilter(string $key, ?string $value): SearchFilter&MockObject\n {\n $filter = $this->createMock(SearchFilter::class);\n $filter->method('getFilterProperty')->willReturn($key);\n $filter->method('getFilterValue')->willReturn($value);\n\n return $filter;\n }\n\n private function makeUser(): User&MockObject\n {\n $tz = new \\DateTimeZone('UTC');\n $user = $this->createMock(User::class);\n $user->method('getTimezone')->willReturn($tz);\n $user->method('getId')->willReturn(1);\n $user->method('getUuid')->willReturn('user-uuid');\n\n return $user;\n }\n\n private function makeSavedSearch(array $filters): Search&MockObject\n {\n $savedSearch = $this->createMock(Search::class);\n $savedSearch->method('getId')->willReturn(42);\n $savedSearch->method('getFilters')->willReturn(new \\Illuminate\\Support\\LazyCollection($filters));\n\n return $savedSearch;\n }\n\n public function testGetActivityIdsForSavedSearchReturnsIds(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->expects($this->once())\n ->method('getArrayFilterKeys')\n ->with($user)\n ->willReturn([]);\n\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturn($filterSet);\n\n $this->elasticRepository->expects($this->once())\n ->method('onDemandSearchIdsOnly')\n ->willReturn(['id-1', 'id-2', 'id-3']);\n\n $this->logger->expects($this->once())\n ->method('info')\n ->with('[AskJiminnyReport] Fetched activity IDs for saved search');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1', 'id-2', 'id-3'], $result);\n }\n\n public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n\n $this->logger->expects($this->once())->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEmpty($result);\n }\n\n public function testGetActivityIdsFiltersOutDateFilters(): void\n {\n $user = $this->makeUser();\n\n $nonDateFilter = $this->makeFilter('owner_id', '123');\n $startDateFilter = $this->makeFilter(ActivityActualDate::PARAM_START_DATE, '2025-01-01 00:00:00');\n $endDateFilter = $this->makeFilter(ActivityActualDate::PARAM_END_DATE, '2025-01-31 23:59:59');\n $updatedFromFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_FROM, '2025-01-01 00:00:00');\n $updatedToFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_TO, '2025-01-31 23:59:59');\n\n $savedSearch = $this->makeSavedSearch([\n $nonDateFilter,\n $startDateFilter,\n $endDateFilter,\n $updatedFromFilter,\n $updatedToFilter,\n ]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n\n $capturedCriteria = null;\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {\n $capturedCriteria = $criteria;\n\n return $filterSet;\n });\n\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n $this->logger->method('info');\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertNotNull($capturedCriteria);\n }\n\n public function testGetActivityIdsFiltersOutClosingPeriodDateFilters(): void\n {\n $user = $this->makeUser();\n\n $closingStartFilter = $this->makeFilter(ClosingPeriodFilter::KEY_START_DATE, '2025-01-01');\n $closingEndFilter = $this->makeFilter(ClosingPeriodFilter::KEY_END_DATE, '2025-03-31');\n $regularFilter = $this->makeFilter('rep_id', '99');\n\n $savedSearch = $this->makeSavedSearch([\n $closingStartFilter,\n $closingEndFilter,\n $regularFilter,\n ]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1'], $result);\n }\n\n public function testGetActivityIdsHandlesArrayFilters(): void\n {\n $user = $this->makeUser();\n\n $filter1 = $this->makeFilter('outcome', 'positive');\n $filter2 = $this->makeFilter('outcome', 'negative');\n\n $savedSearch = $this->makeSavedSearch([$filter1, $filter2]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn(['outcome']);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1'], $result);\n }\n\n public function testGetActivityIdsHandlesScalarFilters(): void\n {\n $user = $this->makeUser();\n\n $filter = $this->makeFilter('direction', 'inbound');\n $savedSearch = $this->makeSavedSearch([$filter]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-5']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-5'], $result);\n }\n\n public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n\n $capturedCriteria = null;\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {\n $capturedCriteria = $criteria;\n\n return $filterSet;\n });\n\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n $this->logger->method('info');\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertNotNull($capturedCriteria);\n $this->assertFalse($capturedCriteria->isFirstRequest());\n }\n\n public function testGetActivityIdsLogsWithCorrectContext(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['a', 'b']);\n\n $this->logger->expects($this->once())\n ->method('info')\n ->with(\n '[AskJiminnyReport] Fetched activity IDs for saved search',\n $this->callback(fn ($context) => $context['saved_search_id'] === 42\n && $context['user_id'] === 1\n && $context['activity_count'] === 2)\n );\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n }\n}","depth":4,"bounds":{"left":0.490625,"top":0.12777779,"width":0.3347656,"height":0.8722222},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Unit\\Services\\Kiosk\\AutomatedReports;\n\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityActualDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\ActivityUpdatedDate;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinition\\DealInsights\\ClosingPeriodFilter;\nuse Jiminny\\Component\\ActivitySearch\\FilterDefinitionCollection;\nuse Jiminny\\Component\\ActivitySearch\\Service\\ActivitySearch;\nuse Jiminny\\Models\\Activity\\Search;\nuse Jiminny\\Models\\Activity\\SearchFilter;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\ElasticActivityRepository;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AskJiminnyReportActivityService;\nuse Jiminny\\VO\\Repository\\OnDemandActivitySearch\\Criteria;\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Log\\LoggerInterface;\n\nclass AskJiminnyReportActivityServiceTest extends TestCase\n{\n private ActivitySearch&MockObject $activitySearch;\n private ElasticActivityRepository&MockObject $elasticRepository;\n private LoggerInterface&MockObject $logger;\n private AskJiminnyReportActivityService $service;\n\n protected function setUp(): void\n {\n $this->activitySearch = $this->createMock(ActivitySearch::class);\n $this->elasticRepository = $this->createMock(ElasticActivityRepository::class);\n $this->logger = $this->createMock(LoggerInterface::class);\n\n $this->service = new AskJiminnyReportActivityService(\n $this->activitySearch,\n $this->elasticRepository,\n $this->logger,\n );\n }\n\n private function makeFilter(string $key, ?string $value): SearchFilter&MockObject\n {\n $filter = $this->createMock(SearchFilter::class);\n $filter->method('getFilterProperty')->willReturn($key);\n $filter->method('getFilterValue')->willReturn($value);\n\n return $filter;\n }\n\n private function makeUser(): User&MockObject\n {\n $tz = new \\DateTimeZone('UTC');\n $user = $this->createMock(User::class);\n $user->method('getTimezone')->willReturn($tz);\n $user->method('getId')->willReturn(1);\n $user->method('getUuid')->willReturn('user-uuid');\n\n return $user;\n }\n\n private function makeSavedSearch(array $filters): Search&MockObject\n {\n $savedSearch = $this->createMock(Search::class);\n $savedSearch->method('getId')->willReturn(42);\n $savedSearch->method('getFilters')->willReturn(new \\Illuminate\\Support\\LazyCollection($filters));\n\n return $savedSearch;\n }\n\n public function testGetActivityIdsForSavedSearchReturnsIds(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->expects($this->once())\n ->method('getArrayFilterKeys')\n ->with($user)\n ->willReturn([]);\n\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturn($filterSet);\n\n $this->elasticRepository->expects($this->once())\n ->method('onDemandSearchIdsOnly')\n ->willReturn(['id-1', 'id-2', 'id-3']);\n\n $this->logger->expects($this->once())\n ->method('info')\n ->with('[AskJiminnyReport] Fetched activity IDs for saved search');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1', 'id-2', 'id-3'], $result);\n }\n\n public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n\n $this->logger->expects($this->once())->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEmpty($result);\n }\n\n public function testGetActivityIdsFiltersOutDateFilters(): void\n {\n $user = $this->makeUser();\n\n $nonDateFilter = $this->makeFilter('owner_id', '123');\n $startDateFilter = $this->makeFilter(ActivityActualDate::PARAM_START_DATE, '2025-01-01 00:00:00');\n $endDateFilter = $this->makeFilter(ActivityActualDate::PARAM_END_DATE, '2025-01-31 23:59:59');\n $updatedFromFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_FROM, '2025-01-01 00:00:00');\n $updatedToFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_TO, '2025-01-31 23:59:59');\n\n $savedSearch = $this->makeSavedSearch([\n $nonDateFilter,\n $startDateFilter,\n $endDateFilter,\n $updatedFromFilter,\n $updatedToFilter,\n ]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n\n $capturedCriteria = null;\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {\n $capturedCriteria = $criteria;\n\n return $filterSet;\n });\n\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n $this->logger->method('info');\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertNotNull($capturedCriteria);\n }\n\n public function testGetActivityIdsFiltersOutClosingPeriodDateFilters(): void\n {\n $user = $this->makeUser();\n\n $closingStartFilter = $this->makeFilter(ClosingPeriodFilter::KEY_START_DATE, '2025-01-01');\n $closingEndFilter = $this->makeFilter(ClosingPeriodFilter::KEY_END_DATE, '2025-03-31');\n $regularFilter = $this->makeFilter('rep_id', '99');\n\n $savedSearch = $this->makeSavedSearch([\n $closingStartFilter,\n $closingEndFilter,\n $regularFilter,\n ]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1'], $result);\n }\n\n public function testGetActivityIdsHandlesArrayFilters(): void\n {\n $user = $this->makeUser();\n\n $filter1 = $this->makeFilter('outcome', 'positive');\n $filter2 = $this->makeFilter('outcome', 'negative');\n\n $savedSearch = $this->makeSavedSearch([$filter1, $filter2]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn(['outcome']);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-1'], $result);\n }\n\n public function testGetActivityIdsHandlesScalarFilters(): void\n {\n $user = $this->makeUser();\n\n $filter = $this->makeFilter('direction', 'inbound');\n $savedSearch = $this->makeSavedSearch([$filter]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-5']);\n $this->logger->method('info');\n\n $result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertEquals(['id-5'], $result);\n }\n\n public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n\n $capturedCriteria = null;\n $this->activitySearch->expects($this->once())\n ->method('getOnDemandPageFilterSet')\n ->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {\n $capturedCriteria = $criteria;\n\n return $filterSet;\n });\n\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);\n $this->logger->method('info');\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n\n $this->assertNotNull($capturedCriteria);\n $this->assertFalse($capturedCriteria->isFirstRequest());\n }\n\n public function testGetActivityIdsLogsWithCorrectContext(): void\n {\n $user = $this->makeUser();\n $savedSearch = $this->makeSavedSearch([]);\n\n $filterSet = $this->createMock(FilterDefinitionCollection::class);\n\n $this->activitySearch->method('getArrayFilterKeys')->willReturn([]);\n $this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);\n $this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['a', 'b']);\n\n $this->logger->expects($this->once())\n ->method('info')\n ->with(\n '[AskJiminnyReport] Fetched activity IDs for saved search',\n $this->callback(fn ($context) => $context['saved_search_id'] === 42\n && $context['user_id'] === 1\n && $context['activity_count'] === 2)\n );\n\n $this->service->getActivityIdsForSavedSearch($savedSearch, $user);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15","depth":4,"bounds":{"left":0.4234375,"top":0.1736111,"width":0.011328125,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.43710938,"top":0.1736111,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.4484375,"top":0.17222223,"width":0.00859375,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.45703125,"top":0.17222223,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Repositories;\n\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Facades\\DB;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\ReportSort;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\ReportSortDirection;\n\nclass AutomatedReportsRepository\n{\n /**\n * Create a new automated report\n *\n * @param array $data\n *\n * @return AutomatedReport\n */\n public function create(array $data): AutomatedReport\n {\n return AutomatedReport::create($data);\n }\n\n /**\n * Find an automated report by UUID\n *\n * @param string $uuid\n *\n * @return AutomatedReport|null\n */\n public function findByUuid(string $uuid): ?AutomatedReport\n {\n return AutomatedReport::where('uuid', AutomatedReport::toOptimized($uuid))->first();\n }\n\n public function findByIdOrUuid(string $idOrUuid): ?AutomatedReport\n {\n if (is_numeric($idOrUuid)) {\n return AutomatedReport::find((int) $idOrUuid);\n }\n\n return AutomatedReport::where('uuid', AutomatedReport::toOptimized($idOrUuid))->first();\n }\n\n /**\n * Retrieve all standard (non-Ask Jiminny) automated reports.\n *\n * @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.\n * @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.\n *\n * @return Collection<AutomatedReport>\n */\n public function getAllStandardReports(\n string $sortColumn = 'created_at',\n string $sortDirection = 'desc'\n ): Collection {\n return $this->buildSortedQuery($sortColumn, $sortDirection)\n ->whereNot('type', AutomatedReportsService::TYPE_ASK_JIMINNY)\n ->get();\n }\n\n /**\n * Retrieve all Ask Jiminny reports created by the given user.\n *\n * @param User $user The user whose reports to retrieve.\n * @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.\n * @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.\n *\n * @return Collection<AutomatedReport>\n */\n public function getAskJiminnyReportsByUser(\n User $user,\n string $sortColumn = 'created_at',\n string $sortDirection = 'desc'\n ): Collection {\n return $this->buildSortedQuery($sortColumn, $sortDirection)\n ->where('type', AutomatedReportsService::TYPE_ASK_JIMINNY)\n ->where('created_by', $user->getId())\n ->get();\n }\n\n private function buildSortedQuery(string $sortColumn, string $sortDirection): \\Illuminate\\Database\\Eloquent\\Builder\n {\n $allowedColumns = ['created_by', 'created_at'];\n if (! in_array($sortColumn, $allowedColumns)) {\n $sortColumn = 'created_at';\n }\n\n $sortDirection = strtolower($sortDirection) === 'asc' ? 'asc' : 'desc';\n\n $query = AutomatedReport::query()->with(['creator', 'team']);\n\n if ($sortColumn === 'created_by') {\n $query->leftJoin('users', 'users.id', '=', 'automated_reports.created_by')\n ->orderByRaw(\"users.name COLLATE utf8mb4_unicode_ci {$sortDirection}\")\n ->select('automated_reports.*');\n } else {\n $query->orderBy($sortColumn, $sortDirection);\n }\n\n return $query;\n }\n\n /**\n * Get all active and enabled reports with active teams for the specified frequency.\n *\n * @param string $frequency\n *\n * @return Collection<AutomatedReport>\n */\n public function getActiveReportsByFrequency(string $frequency): Collection\n {\n return AutomatedReport::where('automated_reports.status', true)\n ->where('automated_reports.frequency', $frequency)\n ->join('teams', 'automated_reports.team_id', '=', 'teams.id')\n ->where('teams.status', Team::STATUS_ACTIVE)\n ->where(function ($query) {\n $query->whereNull('automated_reports.expires_at')\n ->orWhere('automated_reports.expires_at', '>=', now()->toDateString());\n })\n ->select('automated_reports.*')\n ->get();\n }\n\n /**\n * Update an automated report\n *\n * @param AutomatedReport $report\n * @param array $data\n *\n * @return AutomatedReport\n */\n public function update(AutomatedReport $report, array $data): AutomatedReport\n {\n $report->update($data);\n\n return $report;\n }\n\n /**\n * Create a new automated report result.\n *\n * @param array $data The data to create the automated report result with.\n *\n * @return AutomatedReportResult The newly created automated report result.\n */\n public function createResult(array $data): AutomatedReportResult\n {\n return AutomatedReportResult::create($data);\n }\n\n /**\n * Find an automated report result by UUID.\n *\n * @param string $uuid The UUID to find the automated report result with.\n *\n * @return AutomatedReportResult|null The automated report result if found, otherwise null.\n */\n public function findResultByUuid(string $uuid): ?AutomatedReportResult\n {\n return AutomatedReportResult::where('uuid', AutomatedReportResult::toOptimized($uuid))->first();\n }\n\n public function findResultByUuidForUser(string $uuid, User $user): ?AutomatedReportResult\n {\n return AutomatedReportResult::query()\n ->where('uuid', AutomatedReportResult::toOptimized($uuid))\n ->whereHas('report', static function ($query) use ($user): void {\n $query->where('team_id', $user->getTeamId())\n ->where('created_by', $user->getId());\n })\n ->first();\n }\n\n public function findChildResult(AutomatedReportResult $result, string $type): ?AutomatedReportResult\n {\n return AutomatedReportResult::query()\n ->where('parent_id', $result->getId())\n ->where('media_type', $type)\n ->first();\n }\n\n public function getGeneratedNotSentResults(): Collection\n {\n return AutomatedReportResult::query()\n ->whereNotNull('generated_at')\n ->whereNull('sent_at')\n ->where('status', AutomatedReportResult::STATUS_GENERATED)\n ->whereHas('report')\n ->with('report')\n ->get();\n }\n\n public function getPaginatedUserReports(\n User $user,\n ReportSort $sort,\n ReportSortDirection $sortDirection,\n int $resultsPerPage,\n int $page,\n ?Carbon $fromDate,\n ?Carbon $toDate,\n array $teamIds,\n array $reportTypes,\n ?string $name,\n ): LengthAwarePaginator {\n $query = AutomatedReportResult::query()\n ->whereNotNull('automated_report_results.generated_at')\n ->join('automated_reports', 'automated_report_results.report_id', '=', 'automated_reports.id')\n ->where('automated_reports.team_id', $user->getTeamId())\n ->whereJsonContains('automated_reports.recipients->users', $user->getId())\n ->orderByRaw(\"$sort->value COLLATE utf8mb4_unicode_ci {$sortDirection->value}\")\n ->select('automated_report_results.*')\n ->with('report.team');\n\n if ($fromDate !== null && $toDate !== null) {\n $query->whereBetween('generated_at', [$fromDate, $toDate]);\n }\n\n if (! empty($teamIds)) {\n $query->where(function ($q) use ($teamIds) {\n foreach ($teamIds as $id) {\n $q->orWhereJsonContains('automated_reports.groups', $id);\n }\n });\n }\n\n if (! empty($reportTypes)) {\n $query->whereIn('automated_reports.type', $reportTypes);\n }\n\n if (! empty($name)) {\n $query->whereLike('name', \"%$name%\");\n }\n\n return $query->paginate($resultsPerPage, ['*'], 'page', $page);\n }\n\n public function countUserReports(User $user): int\n {\n return AutomatedReportResult::query()\n ->whereNotNull('generated_at')\n ->whereNotNull('sent_at')\n ->whereHas('report', function ($q) use ($user) {\n $q->where('team_id', $user->getTeamId())\n ->whereJsonContains('recipients->users', $user->getId());\n })\n ->count();\n }\n\n /**\n * Get report IDs for a specific team\n *\n * @param Team $team\n *\n * @return \\Illuminate\\Support\\Collection\n */\n public function getReportIdsByTeam(Team $team): \\Illuminate\\Support\\Collection\n {\n return AutomatedReport::where('team_id', $team->getId())->pluck('id');\n }\n\n /**\n * Get all reports for a specific team\n *\n * @param Team $team\n *\n * @return Collection\n */\n public function getReportsByTeam(Team $team): Collection\n {\n return AutomatedReport::where('team_id', $team->getId())->get();\n }\n\n /**\n * Get all report results for a specific report\n *\n * @param AutomatedReport $report\n *\n * @return Collection\n */\n public function getResultsByReport(AutomatedReport $report): Collection\n {\n return $this->getResultsByReportQuery($report)->get();\n }\n\n public function getResultsByReportQuery(AutomatedReport $report): Builder\n {\n return AutomatedReportResult::where('report_id', $report->getId());\n }\n\n public function getReportResultsQueryForRetention(Team $team, CarbonImmutable $retentionDate): Builder\n {\n $reportIds = $this->getReportIdsByTeam($team);\n\n return AutomatedReportResult::query()->whereIn('report_id', $reportIds)\n ->whereRaw('IFNULL(generated_at, created_at) <= ?', [$retentionDate]);\n }\n\n /**\n * @param int|null $teamId Optional team ID to filter results\n *\n * @return \\Illuminate\\Support\\Collection<int, int> Collection of team IDs\n */\n public function getTeamIdsWithReportsResults(?int $teamId = null): \\Illuminate\\Support\\Collection\n {\n $query = DB::table('automated_reports')\n ->join('teams', 'automated_reports.team_id', '=', 'teams.id')\n ->select('teams.id')\n ->distinct();\n\n if ($teamId !== null) {\n $query->where('teams.id', $teamId);\n }\n\n return $query->pluck('teams.id');\n }\n}","depth":4,"bounds":{"left":0.15234375,"top":0.0,"width":0.39882812,"height":1.0},"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Repositories;\n\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Facades\\DB;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\ReportSort;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\ReportSortDirection;\n\nclass AutomatedReportsRepository\n{\n /**\n * Create a new automated report\n *\n * @param array $data\n *\n * @return AutomatedReport\n */\n public function create(array $data): AutomatedReport\n {\n return AutomatedReport::create($data);\n }\n\n /**\n * Find an automated report by UUID\n *\n * @param string $uuid\n *\n * @return AutomatedReport|null\n */\n public function findByUuid(string $uuid): ?AutomatedReport\n {\n return AutomatedReport::where('uuid', AutomatedReport::toOptimized($uuid))->first();\n }\n\n public function findByIdOrUuid(string $idOrUuid): ?AutomatedReport\n {\n if (is_numeric($idOrUuid)) {\n return AutomatedReport::find((int) $idOrUuid);\n }\n\n return AutomatedReport::where('uuid', AutomatedReport::toOptimized($idOrUuid))->first();\n }\n\n /**\n * Retrieve all standard (non-Ask Jiminny) automated reports.\n *\n * @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.\n * @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.\n *\n * @return Collection<AutomatedReport>\n */\n public function getAllStandardReports(\n string $sortColumn = 'created_at',\n string $sortDirection = 'desc'\n ): Collection {\n return $this->buildSortedQuery($sortColumn, $sortDirection)\n ->whereNot('type', AutomatedReportsService::TYPE_ASK_JIMINNY)\n ->get();\n }\n\n /**\n * Retrieve all Ask Jiminny reports created by the given user.\n *\n * @param User $user The user whose reports to retrieve.\n * @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.\n * @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.\n *\n * @return Collection<AutomatedReport>\n */\n public function getAskJiminnyReportsByUser(\n User $user,\n string $sortColumn = 'created_at',\n string $sortDirection = 'desc'\n ): Collection {\n return $this->buildSortedQuery($sortColumn, $sortDirection)\n ->where('type', AutomatedReportsService::TYPE_ASK_JIMINNY)\n ->where('created_by', $user->getId())\n ->get();\n }\n\n private function buildSortedQuery(string $sortColumn, string $sortDirection): \\Illuminate\\Database\\Eloquent\\Builder\n {\n $allowedColumns = ['created_by', 'created_at'];\n if (! in_array($sortColumn, $allowedColumns)) {\n $sortColumn = 'created_at';\n }\n\n $sortDirection = strtolower($sortDirection) === 'asc' ? 'asc' : 'desc';\n\n $query = AutomatedReport::query()->with(['creator', 'team']);\n\n if ($sortColumn === 'created_by') {\n $query->leftJoin('users', 'users.id', '=', 'automated_reports.created_by')\n ->orderByRaw(\"users.name COLLATE utf8mb4_unicode_ci {$sortDirection}\")\n ->select('automated_reports.*');\n } else {\n $query->orderBy($sortColumn, $sortDirection);\n }\n\n return $query;\n }\n\n /**\n * Get all active and enabled reports with active teams for the specified frequency.\n *\n * @param string $frequency\n *\n * @return Collection<AutomatedReport>\n */\n public function getActiveReportsByFrequency(string $frequency): Collection\n {\n return AutomatedReport::where('automated_reports.status', true)\n ->where('automated_reports.frequency', $frequency)\n ->join('teams', 'automated_reports.team_id', '=', 'teams.id')\n ->where('teams.status', Team::STATUS_ACTIVE)\n ->where(function ($query) {\n $query->whereNull('automated_reports.expires_at')\n ->orWhere('automated_reports.expires_at', '>=', now()->toDateString());\n })\n ->select('automated_reports.*')\n ->get();\n }\n\n /**\n * Update an automated report\n *\n * @param AutomatedReport $report\n * @param array $data\n *\n * @return AutomatedReport\n */\n public function update(AutomatedReport $report, array $data): AutomatedReport\n {\n $report->update($data);\n\n return $report;\n }\n\n /**\n * Create a new automated report result.\n *\n * @param array $data The data to create the automated report result with.\n *\n * @return AutomatedReportResult The newly created automated report result.\n */\n public function createResult(array $data): AutomatedReportResult\n {\n return AutomatedReportResult::create($data);\n }\n\n /**\n * Find an automated report result by UUID.\n *\n * @param string $uuid The UUID to find the automated report result with.\n *\n * @return AutomatedReportResult|null The automated report result if found, otherwise null.\n */\n public function findResultByUuid(string $uuid): ?AutomatedReportResult\n {\n return AutomatedReportResult::where('uuid', AutomatedReportResult::toOptimized($uuid))->first();\n }\n\n public function findResultByUuidForUser(string $uuid, User $user): ?AutomatedReportResult\n {\n return AutomatedReportResult::query()\n ->where('uuid', AutomatedReportResult::toOptimized($uuid))\n ->whereHas('report', static function ($query) use ($user): void {\n $query->where('team_id', $user->getTeamId())\n ->where('created_by', $user->getId());\n })\n ->first();\n }\n\n public function findChildResult(AutomatedReportResult $result, string $type): ?AutomatedReportResult\n {\n return AutomatedReportResult::query()\n ->where('parent_id', $result->getId())\n ->where('media_type', $type)\n ->first();\n }\n\n public function getGeneratedNotSentResults(): Collection\n {\n return AutomatedReportResult::query()\n ->whereNotNull('generated_at')\n ->whereNull('sent_at')\n ->where('status', AutomatedReportResult::STATUS_GENERATED)\n ->whereHas('report')\n ->with('report')\n ->get();\n }\n\n public function getPaginatedUserReports(\n User $user,\n ReportSort $sort,\n ReportSortDirection $sortDirection,\n int $resultsPerPage,\n int $page,\n ?Carbon $fromDate,\n ?Carbon $toDate,\n array $teamIds,\n array $reportTypes,\n ?string $name,\n ): LengthAwarePaginator {\n $query = AutomatedReportResult::query()\n ->whereNotNull('automated_report_results.generated_at')\n ->join('automated_reports', 'automated_report_results.report_id', '=', 'automated_reports.id')\n ->where('automated_reports.team_id', $user->getTeamId())\n ->whereJsonContains('automated_reports.recipients->users', $user->getId())\n ->orderByRaw(\"$sort->value COLLATE utf8mb4_unicode_ci {$sortDirection->value}\")\n ->select('automated_report_results.*')\n ->with('report.team');\n\n if ($fromDate !== null && $toDate !== null) {\n $query->whereBetween('generated_at', [$fromDate, $toDate]);\n }\n\n if (! empty($teamIds)) {\n $query->where(function ($q) use ($teamIds) {\n foreach ($teamIds as $id) {\n $q->orWhereJsonContains('automated_reports.groups', $id);\n }\n });\n }\n\n if (! empty($reportTypes)) {\n $query->whereIn('automated_reports.type', $reportTypes);\n }\n\n if (! empty($name)) {\n $query->whereLike('name', \"%$name%\");\n }\n\n return $query->paginate($resultsPerPage, ['*'], 'page', $page);\n }\n\n public function countUserReports(User $user): int\n {\n return AutomatedReportResult::query()\n ->whereNotNull('generated_at')\n ->whereNotNull('sent_at')\n ->whereHas('report', function ($q) use ($user) {\n $q->where('team_id', $user->getTeamId())\n ->whereJsonContains('recipients->users', $user->getId());\n })\n ->count();\n }\n\n /**\n * Get report IDs for a specific team\n *\n * @param Team $team\n *\n * @return \\Illuminate\\Support\\Collection\n */\n public function getReportIdsByTeam(Team $team): \\Illuminate\\Support\\Collection\n {\n return AutomatedReport::where('team_id', $team->getId())->pluck('id');\n }\n\n /**\n * Get all reports for a specific team\n *\n * @param Team $team\n *\n * @return Collection\n */\n public function getReportsByTeam(Team $team): Collection\n {\n return AutomatedReport::where('team_id', $team->getId())->get();\n }\n\n /**\n * Get all report results for a specific report\n *\n * @param AutomatedReport $report\n *\n * @return Collection\n */\n public function getResultsByReport(AutomatedReport $report): Collection\n {\n return $this->getResultsByReportQuery($report)->get();\n }\n\n public function getResultsByReportQuery(AutomatedReport $report): Builder\n {\n return AutomatedReportResult::where('report_id', $report->getId());\n }\n\n public function getReportResultsQueryForRetention(Team $team, CarbonImmutable $retentionDate): Builder\n {\n $reportIds = $this->getReportIdsByTeam($team);\n\n return AutomatedReportResult::query()->whereIn('report_id', $reportIds)\n ->whereRaw('IFNULL(generated_at, created_at) <= ?', [$retentionDate]);\n }\n\n /**\n * @param int|null $teamId Optional team ID to filter results\n *\n * @return \\Illuminate\\Support\\Collection<int, int> Collection of team IDs\n */\n public function getTeamIdsWithReportsResults(?int $teamId = null): \\Illuminate\\Support\\Collection\n {\n $query = DB::table('automated_reports')\n ->join('teams', 'automated_reports.team_id', '=', 'teams.id')\n ->select('teams.id')\n ->distinct();\n\n if ($teamId !== null) {\n $query->where('teams.id', $teamId);\n }\n\n return $query->pluck('teams.id');\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.0140625,"top":0.041666668,"width":0.028515626,"height":0.021527778},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
710421231581632929
|
-8276790037575160396
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
RequestGenerateAskJiminnyReportJobTest
Run 'RequestGenerateAskJiminnyReportJobTest'
Debug 'RequestGenerateAskJiminnyReportJobTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
3
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Tests\Unit\Services\Kiosk\AutomatedReports;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityActualDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\ActivityUpdatedDate;
use Jiminny\Component\ActivitySearch\FilterDefinition\DealInsights\ClosingPeriodFilter;
use Jiminny\Component\ActivitySearch\FilterDefinitionCollection;
use Jiminny\Component\ActivitySearch\Service\ActivitySearch;
use Jiminny\Models\Activity\Search;
use Jiminny\Models\Activity\SearchFilter;
use Jiminny\Models\User;
use Jiminny\Repositories\ElasticActivityRepository;
use Jiminny\Services\Kiosk\AutomatedReports\AskJiminnyReportActivityService;
use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
class AskJiminnyReportActivityServiceTest extends TestCase
{
private ActivitySearch&MockObject $activitySearch;
private ElasticActivityRepository&MockObject $elasticRepository;
private LoggerInterface&MockObject $logger;
private AskJiminnyReportActivityService $service;
protected function setUp(): void
{
$this->activitySearch = $this->createMock(ActivitySearch::class);
$this->elasticRepository = $this->createMock(ElasticActivityRepository::class);
$this->logger = $this->createMock(LoggerInterface::class);
$this->service = new AskJiminnyReportActivityService(
$this->activitySearch,
$this->elasticRepository,
$this->logger,
);
}
private function makeFilter(string $key, ?string $value): SearchFilter&MockObject
{
$filter = $this->createMock(SearchFilter::class);
$filter->method('getFilterProperty')->willReturn($key);
$filter->method('getFilterValue')->willReturn($value);
return $filter;
}
private function makeUser(): User&MockObject
{
$tz = new \DateTimeZone('UTC');
$user = $this->createMock(User::class);
$user->method('getTimezone')->willReturn($tz);
$user->method('getId')->willReturn(1);
$user->method('getUuid')->willReturn('user-uuid');
return $user;
}
private function makeSavedSearch(array $filters): Search&MockObject
{
$savedSearch = $this->createMock(Search::class);
$savedSearch->method('getId')->willReturn(42);
$savedSearch->method('getFilters')->willReturn(new \Illuminate\Support\LazyCollection($filters));
return $savedSearch;
}
public function testGetActivityIdsForSavedSearchReturnsIds(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->expects($this->once())
->method('getArrayFilterKeys')
->with($user)
->willReturn([]);
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturn($filterSet);
$this->elasticRepository->expects($this->once())
->method('onDemandSearchIdsOnly')
->willReturn(['id-1', 'id-2', 'id-3']);
$this->logger->expects($this->once())
->method('info')
->with('[AskJiminnyReport] Fetched activity IDs for saved search');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1', 'id-2', 'id-3'], $result);
}
public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->expects($this->once())->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEmpty($result);
}
public function testGetActivityIdsFiltersOutDateFilters(): void
{
$user = $this->makeUser();
$nonDateFilter = $this->makeFilter('owner_id', '123');
$startDateFilter = $this->makeFilter(ActivityActualDate::PARAM_START_DATE, '2025-01-01 00:00:00');
$endDateFilter = $this->makeFilter(ActivityActualDate::PARAM_END_DATE, '2025-01-31 23:59:59');
$updatedFromFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_FROM, '2025-01-01 00:00:00');
$updatedToFilter = $this->makeFilter(ActivityUpdatedDate::PARAM_UPDATED_TO, '2025-01-31 23:59:59');
$savedSearch = $this->makeSavedSearch([
$nonDateFilter,
$startDateFilter,
$endDateFilter,
$updatedFromFilter,
$updatedToFilter,
]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$capturedCriteria = null;
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {
$capturedCriteria = $criteria;
return $filterSet;
});
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->method('info');
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertNotNull($capturedCriteria);
}
public function testGetActivityIdsFiltersOutClosingPeriodDateFilters(): void
{
$user = $this->makeUser();
$closingStartFilter = $this->makeFilter(ClosingPeriodFilter::KEY_START_DATE, '2025-01-01');
$closingEndFilter = $this->makeFilter(ClosingPeriodFilter::KEY_END_DATE, '2025-03-31');
$regularFilter = $this->makeFilter('rep_id', '99');
$savedSearch = $this->makeSavedSearch([
$closingStartFilter,
$closingEndFilter,
$regularFilter,
]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1'], $result);
}
public function testGetActivityIdsHandlesArrayFilters(): void
{
$user = $this->makeUser();
$filter1 = $this->makeFilter('outcome', 'positive');
$filter2 = $this->makeFilter('outcome', 'negative');
$savedSearch = $this->makeSavedSearch([$filter1, $filter2]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn(['outcome']);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-1']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-1'], $result);
}
public function testGetActivityIdsHandlesScalarFilters(): void
{
$user = $this->makeUser();
$filter = $this->makeFilter('direction', 'inbound');
$savedSearch = $this->makeSavedSearch([$filter]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['id-5']);
$this->logger->method('info');
$result = $this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertEquals(['id-5'], $result);
}
public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$capturedCriteria = null;
$this->activitySearch->expects($this->once())
->method('getOnDemandPageFilterSet')
->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) {
$capturedCriteria = $criteria;
return $filterSet;
});
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn([]);
$this->logger->method('info');
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
$this->assertNotNull($capturedCriteria);
$this->assertFalse($capturedCriteria->isFirstRequest());
}
public function testGetActivityIdsLogsWithCorrectContext(): void
{
$user = $this->makeUser();
$savedSearch = $this->makeSavedSearch([]);
$filterSet = $this->createMock(FilterDefinitionCollection::class);
$this->activitySearch->method('getArrayFilterKeys')->willReturn([]);
$this->activitySearch->method('getOnDemandPageFilterSet')->willReturn($filterSet);
$this->elasticRepository->method('onDemandSearchIdsOnly')->willReturn(['a', 'b']);
$this->logger->expects($this->once())
->method('info')
->with(
'[AskJiminnyReport] Fetched activity IDs for saved search',
$this->callback(fn ($context) => $context['saved_search_id'] === 42
&& $context['user_id'] === 1
&& $context['activity_count'] === 2)
);
$this->service->getActivityIdsForSavedSearch($savedSearch, $user);
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
15
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Repositories;
use Carbon\CarbonImmutable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\DB;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\Kiosk\AutomatedReports\ReportSort;
use Jiminny\Services\Kiosk\AutomatedReports\ReportSortDirection;
class AutomatedReportsRepository
{
/**
* Create a new automated report
*
* @param array $data
*
* @return AutomatedReport
*/
public function create(array $data): AutomatedReport
{
return AutomatedReport::create($data);
}
/**
* Find an automated report by UUID
*
* @param string $uuid
*
* @return AutomatedReport|null
*/
public function findByUuid(string $uuid): ?AutomatedReport
{
return AutomatedReport::where('uuid', AutomatedReport::toOptimized($uuid))->first();
}
public function findByIdOrUuid(string $idOrUuid): ?AutomatedReport
{
if (is_numeric($idOrUuid)) {
return AutomatedReport::find((int) $idOrUuid);
}
return AutomatedReport::where('uuid', AutomatedReport::toOptimized($idOrUuid))->first();
}
/**
* Retrieve all standard (non-Ask Jiminny) automated reports.
*
* @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.
* @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.
*
* @return Collection<AutomatedReport>
*/
public function getAllStandardReports(
string $sortColumn = 'created_at',
string $sortDirection = 'desc'
): Collection {
return $this->buildSortedQuery($sortColumn, $sortDirection)
->whereNot('type', AutomatedReportsService::TYPE_ASK_JIMINNY)
->get();
}
/**
* Retrieve all Ask Jiminny reports created by the given user.
*
* @param User $user The user whose reports to retrieve.
* @param string $sortColumn The column to sort by. Allowed values: 'created_by', 'created_at'. Defaults to 'created_at'.
* @param string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'desc'.
*
* @return Collection<AutomatedReport>
*/
public function getAskJiminnyReportsByUser(
User $user,
string $sortColumn = 'created_at',
string $sortDirection = 'desc'
): Collection {
return $this->buildSortedQuery($sortColumn, $sortDirection)
->where('type', AutomatedReportsService::TYPE_ASK_JIMINNY)
->where('created_by', $user->getId())
->get();
}
private function buildSortedQuery(string $sortColumn, string $sortDirection): \Illuminate\Database\Eloquent\Builder
{
$allowedColumns = ['created_by', 'created_at'];
if (! in_array($sortColumn, $allowedColumns)) {
$sortColumn = 'created_at';
}
$sortDirection = strtolower($sortDirection) === 'asc' ? 'asc' : 'desc';
$query = AutomatedReport::query()->with(['creator', 'team']);
if ($sortColumn === 'created_by') {
$query->leftJoin('users', 'users.id', '=', 'automated_reports.created_by')
->orderByRaw("users.name COLLATE utf8mb4_unicode_ci {$sortDirection}")
->select('automated_reports.*');
} else {
$query->orderBy($sortColumn, $sortDirection);
}
return $query;
}
/**
* Get all active and enabled reports with active teams for the specified frequency.
*
* @param string $frequency
*
* @return Collection<AutomatedReport>
*/
public function getActiveReportsByFrequency(string $frequency): Collection
{
return AutomatedReport::where('automated_reports.status', true)
->where('automated_reports.frequency', $frequency)
->join('teams', 'automated_reports.team_id', '=', 'teams.id')
->where('teams.status', Team::STATUS_ACTIVE)
->where(function ($query) {
$query->whereNull('automated_reports.expires_at')
->orWhere('automated_reports.expires_at', '>=', now()->toDateString());
})
->select('automated_reports.*')
->get();
}
/**
* Update an automated report
*
* @param AutomatedReport $report
* @param array $data
*
* @return AutomatedReport
*/
public function update(AutomatedReport $report, array $data): AutomatedReport
{
$report->update($data);
return $report;
}
/**
* Create a new automated report result.
*
* @param array $data The data to create the automated report result with.
*
* @return AutomatedReportResult The newly created automated report result.
*/
public function createResult(array $data): AutomatedReportResult
{
return AutomatedReportResult::create($data);
}
/**
* Find an automated report result by UUID.
*
* @param string $uuid The UUID to find the automated report result with.
*
* @return AutomatedReportResult|null The automated report result if found, otherwise null.
*/
public function findResultByUuid(string $uuid): ?AutomatedReportResult
{
return AutomatedReportResult::where('uuid', AutomatedReportResult::toOptimized($uuid))->first();
}
public function findResultByUuidForUser(string $uuid, User $user): ?AutomatedReportResult
{
return AutomatedReportResult::query()
->where('uuid', AutomatedReportResult::toOptimized($uuid))
->whereHas('report', static function ($query) use ($user): void {
$query->where('team_id', $user->getTeamId())
->where('created_by', $user->getId());
})
->first();
}
public function findChildResult(AutomatedReportResult $result, string $type): ?AutomatedReportResult
{
return AutomatedReportResult::query()
->where('parent_id', $result->getId())
->where('media_type', $type)
->first();
}
public function getGeneratedNotSentResults(): Collection
{
return AutomatedReportResult::query()
->whereNotNull('generated_at')
->whereNull('sent_at')
->where('status', AutomatedReportResult::STATUS_GENERATED)
->whereHas('report')
->with('report')
->get();
}
public function getPaginatedUserReports(
User $user,
ReportSort $sort,
ReportSortDirection $sortDirection,
int $resultsPerPage,
int $page,
?Carbon $fromDate,
?Carbon $toDate,
array $teamIds,
array $reportTypes,
?string $name,
): LengthAwarePaginator {
$query = AutomatedReportResult::query()
->whereNotNull('automated_report_results.generated_at')
->join('automated_reports', 'automated_report_results.report_id', '=', 'automated_reports.id')
->where('automated_reports.team_id', $user->getTeamId())
->whereJsonContains('automated_reports.recipients->users', $user->getId())
->orderByRaw("$sort->value COLLATE utf8mb4_unicode_ci {$sortDirection->value}")
->select('automated_report_results.*')
->with('report.team');
if ($fromDate !== null && $toDate !== null) {
$query->whereBetween('generated_at', [$fromDate, $toDate]);
}
if (! empty($teamIds)) {
$query->where(function ($q) use ($teamIds) {
foreach ($teamIds as $id) {
$q->orWhereJsonContains('automated_reports.groups', $id);
}
});
}
if (! empty($reportTypes)) {
$query->whereIn('automated_reports.type', $reportTypes);
}
if (! empty($name)) {
$query->whereLike('name', "%$name%");
}
return $query->paginate($resultsPerPage, ['*'], 'page', $page);
}
public function countUserReports(User $user): int
{
return AutomatedReportResult::query()
->whereNotNull('generated_at')
->whereNotNull('sent_at')
->whereHas('report', function ($q) use ($user) {
$q->where('team_id', $user->getTeamId())
->whereJsonContains('recipients->users', $user->getId());
})
->count();
}
/**
* Get report IDs for a specific team
*
* @param Team $team
*
* @return \Illuminate\Support\Collection
*/
public function getReportIdsByTeam(Team $team): \Illuminate\Support\Collection
{
return AutomatedReport::where('team_id', $team->getId())->pluck('id');
}
/**
* Get all reports for a specific team
*
* @param Team $team
*
* @return Collection
*/
public function getReportsByTeam(Team $team): Collection
{
return AutomatedReport::where('team_id', $team->getId())->get();
}
/**
* Get all report results for a specific report
*
* @param AutomatedReport $report
*
* @return Collection
*/
public function getResultsByReport(AutomatedReport $report): Collection
{
return $this->getResultsByReportQuery($report)->get();
}
public function getResultsByReportQuery(AutomatedReport $report): Builder
{
return AutomatedReportResult::where('report_id', $report->getId());
}
public function getReportResultsQueryForRetention(Team $team, CarbonImmutable $retentionDate): Builder
{
$reportIds = $this->getReportIdsByTeam($team);
return AutomatedReportResult::query()->whereIn('report_id', $reportIds)
->whereRaw('IFNULL(generated_at, created_at) <= ?', [$retentionDate]);
}
/**
* @param int|null $teamId Optional team ID to filter results
*
* @return \Illuminate\Support\Collection<int, int> Collection of team IDs
*/
public function getTeamIdsWithReportsResults(?int $teamId = null): \Illuminate\Support\Collection
{
$query = DB::table('automated_reports')
->join('teams', 'automated_reports.team_id', '=', 'teams.id')
->select('teams.id')
->distinct();
if ($teamId !== null) {
$query->where('teams.id', $teamId);
}
return $query->pluck('teams.id');
}
}
Project
Project
New File or Directory…
Expand Selected...
|
10926
|
|
10928
|
217
|
12
|
2026-04-14T09:04:36.333117+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157476333_m2.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
app.staging.jiminny.com/ondemand?topic_id[]=e02f09 app.staging.jiminny.com/ondemand?topic_id[]=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 869720
28
28
14
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Topics:
Competitors
Show internal and external activities:
Show internal only
Save Search
Clear all
Saved searches Saved searches
Saved searches
Saved searches
Team
Search teams Search teams
Search teams
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant
Participant
Search team members Search team members
Search team members
Search team members
Customer
Customer
Transcript
Search transcript
Select option Said by
Select option
Said by
Select option Anyone
Select option
Anyone
Period
All time
Topics
Competitors × Search topics
Competitors
×
Search topics
Activity type
Search activity types Search activity types
Search activity types
Search activity types
Duration
Min (minutes)
Max (minutes)
AI call score
Select AI call score Select AI call score
Select AI call score
Select AI call score
Automated call score
Select automated call score Select automated call score
Select automated call score
Select automated call score
Coaching score
Select coaching score Select coaching score
Select coaching score
Select coaching score
Coach
Search coaches Search coaches
Search coaches
Search coaches
Stage at call
Search stages Search stages
Search stages
Search stages
Current stage
Search stages Search stages
Search stages
Search stages
Language
Search language Search language
Search language
Search language
Playlist
Search playlists Search playlists
Search playlists
Search playlists
Pending CRM notes
Not logged to CRM
Recorded
Search recorded Search recorded
Search recorded
Search recorded
Show internal and external activities
Select option Show internal only
Select option
Show internal only
Platform
Search platforms Search platforms
Search platforms
Search platforms
Call type
Search channels Search channels
Search channels
Search channels
Outcome
Search CRM Outcome Search CRM Outcome
Search CRM Outcome
Search CRM Outcome
Deal value
Min (amount)
Max (amount)
Deal close date
All time
Deal age
0
1359d
2717d+
Talking speed
0
177 wpm
252 wpm+
Talk ratio
0%
40%
60%
100%
Patience
0s
1s
2s
3s+
Longest monologue
0
5m
10m+
Longest customer story
0
5m
10m+
Rep questions
0
25
50+
Engaging questions
0
25
50+
Insightful questions
0
25
50+
Customer questions
0
25
50+
Comments
0
1
2
5
10
20+
Host
Activity
Contact
Activity Type
Current Stage
Stats
Duration
Date
Jiminny Web SA Jiminny Salesforce App Training Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 4 47m11/07/2024, 2:28 PM
Jiminny
Salesforce App Training
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
4
47m
11/07/2024, 2:28 PM
Bekkie Wetz Jiminny Bekkie/ Jules - renewals and ContractBook Number of favorites 1 Number of shares 0 Number of comments 0 Number of plays 3 44m25/06/2024, 3:09 PM
Jiminny
Bekkie/ Jules - renewals and ContractBook
Number of favorites
1
Number of shares
0
Number of comments
0...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.14930555,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Console Home | Console Home | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Console Home | Console Home | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.08671875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SecurityGroup | EC2 | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SecurityGroup | EC2 | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.06484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.225,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.23472223,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.2534722,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.26319444,"width":0.23476562,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.28194445,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.29166666,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31041667,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.015625,"top":0.3201389,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.31666666,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.33888888,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.34861112,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.3673611,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.015625,"top":0.37708333,"width":0.12617187,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.39583334,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.40555555,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.42430556,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.4340278,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.45277777,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.4625,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.48125,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.015625,"top":0.49097222,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.50972223,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.51944447,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.5395833,"width":0.08710937,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny ■ 869720","depth":9,"bounds":{"left":0.09453125,"top":0.9875,"width":0.11796875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"28","depth":12,"bounds":{"left":0.096875,"top":0.925,"width":0.01875,"height":0.030555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"28","depth":14,"bounds":{"left":0.10664062,"top":0.9284722,"width":0.00546875,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14","depth":14,"bounds":{"left":0.2421875,"top":0.061805554,"width":0.0109375,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activities","depth":14,"bounds":{"left":0.253125,"top":0.061805554,"width":0.031640626,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Get Notified","depth":13,"bounds":{"left":0.55078125,"top":0.058333334,"width":0.051171876,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Sort by Sort by: Most recent","depth":13,"bounds":{"left":0.36171874,"top":0.057638887,"width":0.091796875,"height":0.025694445},"value":"Sort by Sort by: Most recent","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Sort by","depth":14,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sort by:","depth":15,"bounds":{"left":0.3660156,"top":0.06458333,"width":0.019921875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Most recent","depth":15,"bounds":{"left":0.3859375,"top":0.06458333,"width":0.030078124,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Recording","depth":13,"bounds":{"left":0.4910156,"top":0.058333334,"width":0.056640625,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"common.ai-icon-alt","depth":14,"bounds":{"left":0.6050781,"top":0.05625,"width":0.0140625,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Topics:","depth":15,"bounds":{"left":0.24570313,"top":0.10069445,"width":0.014453125,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Competitors","depth":15,"bounds":{"left":0.26210937,"top":0.10069445,"width":0.0265625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal and external activities:","depth":15,"bounds":{"left":0.30546874,"top":0.10069445,"width":0.07695313,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal only","depth":15,"bounds":{"left":0.384375,"top":0.10069445,"width":0.0390625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Save Search","depth":14,"bounds":{"left":0.440625,"top":0.09861111,"width":0.0390625,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Clear all","depth":14,"bounds":{"left":0.48359376,"top":0.09861111,"width":0.030078124,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Saved searches Saved searches","depth":13,"bounds":{"left":0.1265625,"top":0.05486111,"width":0.095703125,"height":0.025},"value":"Saved searches Saved searches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Saved searches","depth":15,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Saved searches","depth":16,"bounds":{"left":0.13085938,"top":0.06111111,"width":0.037109375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Team","depth":13,"bounds":{"left":0.1265625,"top":0.099305555,"width":0.012890625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search teams Search teams","depth":12,"bounds":{"left":0.1265625,"top":0.115277775,"width":0.095703125,"height":0.025},"value":"Search teams Search teams","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search teams","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search teams","depth":14,"bounds":{"left":0.13085938,"top":0.12222222,"width":0.032421876,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Host","depth":13,"bounds":{"left":0.1265625,"top":0.15,"width":0.01171875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.1265625,"top":0.16944444,"width":0.095703125,"height":0.025},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.13085938,"top":0.17638889,"width":0.05390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Also search as participant","depth":13,"bounds":{"left":0.1265625,"top":0.19930555,"width":0.062109374,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Participant","depth":13,"bounds":{"left":0.1265625,"top":0.225,"width":0.026953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.1265625,"top":0.24097222,"width":0.095703125,"height":0.025},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.13085938,"top":0.24791667,"width":0.05390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer","depth":13,"bounds":{"left":0.1265625,"top":0.27569443,"width":0.025390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Customer","depth":12,"bounds":{"left":0.14140625,"top":0.2923611,"width":0.065625,"height":0.025},"help_text":"","placeholder":"Customer or Subject","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transcript","depth":13,"bounds":{"left":0.1265625,"top":0.32777777,"width":0.02578125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search transcript","depth":12,"bounds":{"left":0.14140625,"top":0.34791666,"width":0.065625,"height":0.025},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Select option Said by","depth":12,"bounds":{"left":0.1265625,"top":0.37708333,"width":0.095703125,"height":0.025694445},"value":"Select option Said by","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Said by","depth":14,"bounds":{"left":0.13085938,"top":0.38402778,"width":0.0171875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Anyone","depth":12,"bounds":{"left":0.1265625,"top":0.40625,"width":0.095703125,"height":0.025694445},"value":"Select option Anyone","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone","depth":14,"bounds":{"left":0.13085938,"top":0.41319445,"width":0.01875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Period","depth":13,"bounds":{"left":0.1265625,"top":0.44166666,"width":0.016015625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All time","depth":14,"bounds":{"left":0.13203125,"top":0.46458334,"width":0.017578125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Topics","depth":13,"bounds":{"left":0.1265625,"top":0.4923611,"width":0.015234375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Competitors × Search topics","depth":12,"bounds":{"left":0.1265625,"top":0.5083333,"width":0.095703125,"height":0.02638889},"value":"Competitors × Search topics","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Competitors","depth":15,"bounds":{"left":0.13359375,"top":0.5159722,"width":0.030859375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"×","depth":16,"bounds":{"left":0.1671875,"top":0.5152778,"width":0.003125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search topics","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity type","depth":13,"bounds":{"left":0.1265625,"top":0.54444444,"width":0.03125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search activity types Search activity types","depth":12,"bounds":{"left":0.1265625,"top":0.56041664,"width":0.095703125,"height":0.025},"value":"Search activity types Search activity types","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search activity types","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search activity types","depth":14,"bounds":{"left":0.13085938,"top":0.5673611,"width":0.050390624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":13,"bounds":{"left":0.1265625,"top":0.5951389,"width":0.023046875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Min (minutes)","depth":13,"bounds":{"left":0.1265625,"top":0.6125,"width":0.03359375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Max (minutes)","depth":13,"bounds":{"left":0.16875,"top":0.6125,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI call score","depth":13,"bounds":{"left":0.1265625,"top":0.6597222,"width":0.029296875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select AI call score Select AI call score","depth":12,"bounds":{"left":0.1265625,"top":0.67569447,"width":0.095703125,"height":0.025},"value":"Select AI call score Select AI call score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select AI call score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select AI call score","depth":14,"bounds":{"left":0.13085938,"top":0.6826389,"width":0.0453125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Automated call score","depth":13,"bounds":{"left":0.1265625,"top":0.7104167,"width":0.0515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select automated call score Select automated call score","depth":12,"bounds":{"left":0.1265625,"top":0.7263889,"width":0.095703125,"height":0.036111113},"value":"Select automated call score Select automated call score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select automated call score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select automated call score","depth":14,"bounds":{"left":0.13085938,"top":0.73194444,"width":0.051953126,"height":0.025694445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coaching score","depth":13,"bounds":{"left":0.1265625,"top":0.7722222,"width":0.037109375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select coaching score Select coaching score","depth":12,"bounds":{"left":0.1265625,"top":0.7881944,"width":0.095703125,"height":0.025},"value":"Select coaching score Select coaching score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select coaching score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select coaching score","depth":14,"bounds":{"left":0.13085938,"top":0.7951389,"width":0.051953126,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coach","depth":13,"bounds":{"left":0.1265625,"top":0.8229167,"width":0.01640625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search coaches Search coaches","depth":12,"bounds":{"left":0.1265625,"top":0.8388889,"width":0.095703125,"height":0.025},"value":"Search coaches Search coaches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search coaches","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search coaches","depth":14,"bounds":{"left":0.13085938,"top":0.84583336,"width":0.0375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stage at call","depth":13,"bounds":{"left":0.1265625,"top":0.8736111,"width":0.02890625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search stages Search stages","depth":12,"bounds":{"left":0.1265625,"top":0.88958335,"width":0.095703125,"height":0.025},"value":"Search stages Search stages","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search stages","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search stages","depth":14,"bounds":{"left":0.13085938,"top":0.89652777,"width":0.033203125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current stage","depth":13,"bounds":{"left":0.1265625,"top":0.92430556,"width":0.03359375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search stages Search stages","depth":12,"bounds":{"left":0.1265625,"top":0.94027776,"width":0.095703125,"height":0.025},"value":"Search stages Search stages","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search stages","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search stages","depth":14,"bounds":{"left":0.13085938,"top":0.94722223,"width":0.033203125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Language","depth":13,"bounds":{"left":0.1265625,"top":0.975,"width":0.0234375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search language Search language","depth":12,"bounds":{"left":0.1265625,"top":0.9909722,"width":0.095703125,"height":0.009027779},"value":"Search language Search language","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search language","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search language","depth":14,"bounds":{"left":0.13085938,"top":0.99791664,"width":0.03984375,"height":0.0020833611},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Playlist","depth":13,"bounds":{"left":0.1265625,"top":1.0,"width":0.01796875,"height":-0.02569449},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search playlists Search playlists","depth":12,"bounds":{"left":0.1265625,"top":1.0,"width":0.095703125,"height":-0.041666627},"value":"Search playlists Search playlists","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search playlists","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search playlists","depth":14,"bounds":{"left":0.13085938,"top":1.0,"width":0.037890624,"height":-0.048611164},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pending CRM notes","depth":13,"bounds":{"left":0.1265625,"top":1.0,"width":0.048046876,"height":-0.076388836},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Not logged to CRM","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recorded","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search recorded Search recorded","depth":12,"value":"Search recorded Search recorded","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search recorded","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search recorded","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal and external activities","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Show internal only","depth":12,"value":"Select option Show internal only","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show internal only","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Platform","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search platforms Search platforms","depth":12,"value":"Search platforms Search platforms","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search platforms","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search platforms","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Call type","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search channels Search channels","depth":12,"value":"Search channels Search channels","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search channels","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search channels","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Outcome","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search CRM Outcome Search CRM Outcome","depth":12,"value":"Search CRM Outcome Search CRM Outcome","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search CRM Outcome","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search CRM Outcome","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal value","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Min (amount)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Max (amount)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal close date","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All time","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal age","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1359d","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2717d+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Talking speed","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"177 wpm","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"252 wpm+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Talk ratio","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"40%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"60%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Patience","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Longest monologue","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5m","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10m+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Longest customer story","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5m","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10m+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Rep questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Engaging questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Insightful questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comments","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Host","depth":15,"bounds":{"left":0.2511719,"top":0.14097223,"width":0.0109375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":15,"bounds":{"left":0.28632814,"top":0.14097223,"width":0.01796875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Contact","depth":15,"bounds":{"left":0.3839844,"top":0.14097223,"width":0.018359374,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity Type","depth":15,"bounds":{"left":0.4152344,"top":0.14097223,"width":0.01796875,"height":0.025},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current Stage","depth":15,"bounds":{"left":0.44921875,"top":0.14097223,"width":0.03203125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stats","depth":15,"bounds":{"left":0.49179688,"top":0.14097223,"width":0.011328125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":15,"bounds":{"left":0.53085935,"top":0.14097223,"width":0.0203125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date","depth":15,"bounds":{"left":0.5589844,"top":0.14097223,"width":0.011328125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny Web SA Jiminny Salesforce App Training Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 4 47m11/07/2024, 2:28 PM","depth":14,"bounds":{"left":0.24179688,"top":0.17847222,"width":0.37773436,"height":0.050694443},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.28632814,"top":0.19166666,"width":0.017578125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Salesforce App Training","depth":17,"bounds":{"left":0.28632814,"top":0.20555556,"width":0.053125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.49257812,"top":0.19027779,"width":0.0203125,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.5015625,"top":0.19097222,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.49257812,"top":0.19027779,"width":0.01875,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.51875,"top":0.19097222,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.49257812,"top":0.19027779,"width":0.023828125,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.5015625,"top":0.2048611,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of plays","depth":18,"bounds":{"left":0.49257812,"top":0.19027779,"width":0.01875,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":18,"bounds":{"left":0.51875,"top":0.2048611,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47m","depth":16,"bounds":{"left":0.53085935,"top":0.19791667,"width":0.01015625,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11/07/2024, 2:28 PM","depth":16,"bounds":{"left":0.5589844,"top":0.19791667,"width":0.04921875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Bekkie Wetz Jiminny Bekkie/ Jules - renewals and ContractBook Number of favorites 1 Number of shares 0 Number of comments 0 Number of plays 3 44m25/06/2024, 3:09 PM","depth":14,"bounds":{"left":0.24179688,"top":0.22916667,"width":0.37773436,"height":0.050694443},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.28632814,"top":0.24236111,"width":0.017578125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bekkie/ Jules - renewals and ContractBook","depth":17,"bounds":{"left":0.28632814,"top":0.25625,"width":0.096875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.49257812,"top":0.24097222,"width":0.0203125,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"bounds":{"left":0.5015625,"top":0.24166666,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.49257812,"top":0.24097222,"width":0.01875,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.51875,"top":0.24166666,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.49257812,"top":0.24097222,"width":0.023828125,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.5015625,"top":0.25555557,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-7858395721120215887
|
4256266838360126146
|
visual_change
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 869720
28
28
14
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Topics:
Competitors
Show internal and external activities:
Show internal only
Save Search
Clear all
Saved searches Saved searches
Saved searches
Saved searches
Team
Search teams Search teams
Search teams
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant
Participant
Search team members Search team members
Search team members
Search team members
Customer
Customer
Transcript
Search transcript
Select option Said by
Select option
Said by
Select option Anyone
Select option
Anyone
Period
All time
Topics
Competitors × Search topics
Competitors
×
Search topics
Activity type
Search activity types Search activity types
Search activity types
Search activity types
Duration
Min (minutes)
Max (minutes)
AI call score
Select AI call score Select AI call score
Select AI call score
Select AI call score
Automated call score
Select automated call score Select automated call score
Select automated call score
Select automated call score
Coaching score
Select coaching score Select coaching score
Select coaching score
Select coaching score
Coach
Search coaches Search coaches
Search coaches
Search coaches
Stage at call
Search stages Search stages
Search stages
Search stages
Current stage
Search stages Search stages
Search stages
Search stages
Language
Search language Search language
Search language
Search language
Playlist
Search playlists Search playlists
Search playlists
Search playlists
Pending CRM notes
Not logged to CRM
Recorded
Search recorded Search recorded
Search recorded
Search recorded
Show internal and external activities
Select option Show internal only
Select option
Show internal only
Platform
Search platforms Search platforms
Search platforms
Search platforms
Call type
Search channels Search channels
Search channels
Search channels
Outcome
Search CRM Outcome Search CRM Outcome
Search CRM Outcome
Search CRM Outcome
Deal value
Min (amount)
Max (amount)
Deal close date
All time
Deal age
0
1359d
2717d+
Talking speed
0
177 wpm
252 wpm+
Talk ratio
0%
40%
60%
100%
Patience
0s
1s
2s
3s+
Longest monologue
0
5m
10m+
Longest customer story
0
5m
10m+
Rep questions
0
25
50+
Engaging questions
0
25
50+
Insightful questions
0
25
50+
Customer questions
0
25
50+
Comments
0
1
2
5
10
20+
Host
Activity
Contact
Activity Type
Current Stage
Stats
Duration
Date
Jiminny Web SA Jiminny Salesforce App Training Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 4 47m11/07/2024, 2:28 PM
Jiminny
Salesforce App Training
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
4
47m
11/07/2024, 2:28 PM
Bekkie Wetz Jiminny Bekkie/ Jules - renewals and ContractBook Number of favorites 1 Number of shares 0 Number of comments 0 Number of plays 3 44m25/06/2024, 3:09 PM
Jiminny
Bekkie/ Jules - renewals and ContractBook
Number of favorites
1
Number of shares
0
Number of comments
0...
|
NULL
|
|
10929
|
216
|
7
|
2026-04-14T09:04:39.502758+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157479502_m1.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
app.staging.jiminny.com/ondemand?topic_id[]=e02f09 app.staging.jiminny.com/ondemand?topic_id[]=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Console Home | Console Home | us-east-2","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Console Home | Console Home | us-east-2","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SecurityGroup | EC2 | us-east-2","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SecurityGroup | EC2 | us-east-2","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-7804606825308024379
|
1231542785787164910
|
click
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab...
|
10925
|
|
10930
|
217
|
13
|
2026-04-14T09:04:39.335055+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157479335_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpapp.staging.jiminny.com/ondemand?topic_id[J=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=3You are currently impersonating Nikolay Yankov <)Saved searches14 activitiesSort by: Most recent* Add RecordingF: Get NotifiedPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloleamSearch teamsiTopics: Competitors XShow internal and external activities: Show internal only *)HostIActivityZ Configure SSH access to multipleHost@ Console Home | Console Home | usSearch team membersiSecurityGroup | EC2 |us-east-210Mise searen as DarticloanuJY-20543 add AJ reports User pilcSRD-6779 | JY-20632 | Unable toJy 19798 evaluation for ai activity8 Jiminny7 Ask Jiminny test report - 8 Aor 201Service-Desk - Queues - PlatfornJY-20543 add AJ reports User pilc& Configure SSH access to multiple eCa CloudWatch | us-east-2New TabCa CloudWatch | us-east-2+ New TabParuicipantsearcn leam membersCustomer ©Customer or SubjectTranscript ©• Search transcript |Said byMnyonePeriodAll timeTopicsCompetitors *)Activity typeSearch activity typesDuration ©Min (minutes)Max (minutes)Al call scoreSelect Al call scoreMulomalea call scoreSelect automated calliCoaching scoreSelect coaching scoreCoach ®Search coaches.Stage at callSearch stagesCurrent stageSearch stagesJiminny MSalestorce App IrainingJiminny MBekkie/ Jules - renewals and Contract..Jiminny MHandover training part 1Unknown Customer M2 8 Deal Insights playbook 2 €Exclaimer MExclaimer handoverUnknown Customer MHow to run an Intro CallTom Lavery at Plamen enterprise MJiminny & - All-hands meeting i%Unknown Customer MAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @04:01Unknown Customer played MTraining 8 - Jiminny Apo for Salesfor….Unknown Customer MAll-hands - Thank Yous, What Went, L...Unknown Customer (played MAll-hands - Nov /thUnknown Customer 1All Hands - October 31st ©Unknown Customer MDeal Insights Referesher/Training w/T...JY-18909-automated-reports-ask-iiminny = 869720Save Search @ Clear allContactActivityTypeCurrent StagestatsDurationDateTomLaveryUnlikely toRenew$42,12647ml90 D444mĐ0 D3Đ0 D234mW0 %000D 2$0 228.DO DO17m$1 %0ĐO DO1hsim'90 D 4{0&2DOD643mĐ0 D428m2 151m{003Đ0D325m3ym0 82Đ0 D133m22.D0 D 1141m11/0//2024.2:28 PM25/06/2024, 3:09 PM10/06/2024, 12:02 PM18/05/9014. 19.56 PM13/03/2024, 11:28 AM26/02 9024.2:30 PM116/01/2024, 11:43 AM09/01/2024, 11:45 AM28/11/2023, 11:30 AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM0//1100/3.11:42 AMI31/10/2023, 11:35 AM25/10/2023, 11:46 AMf Support Daily • in 2h 56mA100% C•Tue 14 Apr 12:04:39Q InspectorFilter URLs• ConsoleD DebuggerN Network( PerformanceAlIHMLeSS290 PA200 P...206 P.200 P...200 P.200 G.200 G.200 G..200 G..296G200 P..200 G.A0...A0...A app.A aр...A aрp...A app.A app...А aрp.A find...A r.lo...200P.A r.lo...200 P...Ar.lo..1200 P.A r...200 P..A r.lo...200 P..A r.lo...200 P...a r.lo...200 P...A r.lo...200 P...A r.lo..200 P...A r.lo...206 P..Ar.o...200 P...A r.lo...200 P...A r.l...200 P...A r.o...200 P..A r.l...200 P...Ar.lo..200 P...A r.lo...200) P...A r.lo...200 P..A r.lo...206 P..r.lo.200 P...Ar.o..1200 P.A r.lo..200 P...A r.o...200P.A r.l...200 P...A r....200 P...A r.lo...200 P...A r.lo..200 P..A r.lo...200 P...A r.lo...200 P...A r.l...200 P...A r.lo...200 P...A r.o...200 P...A r.lo..200 P...Ar.lo...200 P...Ar.o...200 P...A r.lo...Me: Domain FileMrlo.Tasoonxat o attorm-stac xhiA8.../api/5627310/envelope/2: fetch/api/5627310/envelope/2: fetch/api/5627310/envelope/?: fetch/api/5627310/envelope/?; fetchH Xhisaved-searchintegrationson-demand?topic_id•A xhr•A xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platformi?a=ponxaf/platform-stag xhriPa=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhriza=ponxaf/platform-stag xhri?a=ponxaf/platform xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhriPa=ponxaf/platform-stag xhriPa=ponxaf/platform-staç xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhrÔ 48 requests{) Style EditorO: MemoryE Storage0 99+No Throttling :HeadersCookiesRequestResponseTimingsSecurity5,59 KB1Block Resend500 B 2BgET nttos:laoostacing.lminnv.com/aoi/v/oage/on-demanertooic 10=e0210934-c0/0-4106003 285-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4500 B 2 B200500 B 2BHTTP/36.28 kB 2...55.54 kB (196.87 kB size)5.65 kB 1no-referrer-when-downgradesystem3.62 kB 1...3.83 kB 5..55.54 .3.11 kB 9..cached 6...slalusVersionTransferredReferrer PolicyDNS Resolutionkesponse Headers (2.900 Kb)alt-svc: h3=":443"; ma=86400cache-control: no-cache, onivatecontent-encoalng: oziocontent-language: encontent-secuntv-policv-revort-onv: scriot-src 'self 'unsate-inine' 'unsate-eval" • oo: hit.kawe307.701./4 Mb U.2.47 kB 0...4.91 kB 0.10.11 kB O...2.48 kB 0...2.43 kB 0...2.49 kB 0..2.48 kB O...2.73 kB O...2.43 kB 0...2.48 kB 0...2.48 kB 0...ucncio, slyto sie soll unsare mme mepencuttslasmebmimamcon mapedlonto yooMeaois.com nuos.cons.clouatare.com.me-sre sellmos.con.stagmg.tminy.com/nttes... nutos:S.intercomcan.com; connect-s/cnuos.apo.stacine.lminny.comnutos./meala.aoo.staging.liminnv.com [URL_WITH_CREDENTIALS] 4.61 min...
|
NULL
|
8660773583342473762
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpapp.staging.jiminny.com/ondemand?topic_id[J=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=3You are currently impersonating Nikolay Yankov <)Saved searches14 activitiesSort by: Most recent* Add RecordingF: Get NotifiedPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloleamSearch teamsiTopics: Competitors XShow internal and external activities: Show internal only *)HostIActivityZ Configure SSH access to multipleHost@ Console Home | Console Home | usSearch team membersiSecurityGroup | EC2 |us-east-210Mise searen as DarticloanuJY-20543 add AJ reports User pilcSRD-6779 | JY-20632 | Unable toJy 19798 evaluation for ai activity8 Jiminny7 Ask Jiminny test report - 8 Aor 201Service-Desk - Queues - PlatfornJY-20543 add AJ reports User pilc& Configure SSH access to multiple eCa CloudWatch | us-east-2New TabCa CloudWatch | us-east-2+ New TabParuicipantsearcn leam membersCustomer ©Customer or SubjectTranscript ©• Search transcript |Said byMnyonePeriodAll timeTopicsCompetitors *)Activity typeSearch activity typesDuration ©Min (minutes)Max (minutes)Al call scoreSelect Al call scoreMulomalea call scoreSelect automated calliCoaching scoreSelect coaching scoreCoach ®Search coaches.Stage at callSearch stagesCurrent stageSearch stagesJiminny MSalestorce App IrainingJiminny MBekkie/ Jules - renewals and Contract..Jiminny MHandover training part 1Unknown Customer M2 8 Deal Insights playbook 2 €Exclaimer MExclaimer handoverUnknown Customer MHow to run an Intro CallTom Lavery at Plamen enterprise MJiminny & - All-hands meeting i%Unknown Customer MAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @04:01Unknown Customer played MTraining 8 - Jiminny Apo for Salesfor….Unknown Customer MAll-hands - Thank Yous, What Went, L...Unknown Customer (played MAll-hands - Nov /thUnknown Customer 1All Hands - October 31st ©Unknown Customer MDeal Insights Referesher/Training w/T...JY-18909-automated-reports-ask-iiminny = 869720Save Search @ Clear allContactActivityTypeCurrent StagestatsDurationDateTomLaveryUnlikely toRenew$42,12647ml90 D444mĐ0 D3Đ0 D234mW0 %000D 2$0 228.DO DO17m$1 %0ĐO DO1hsim'90 D 4{0&2DOD643mĐ0 D428m2 151m{003Đ0D325m3ym0 82Đ0 D133m22.D0 D 1141m11/0//2024.2:28 PM25/06/2024, 3:09 PM10/06/2024, 12:02 PM18/05/9014. 19.56 PM13/03/2024, 11:28 AM26/02 9024.2:30 PM116/01/2024, 11:43 AM09/01/2024, 11:45 AM28/11/2023, 11:30 AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM0//1100/3.11:42 AMI31/10/2023, 11:35 AM25/10/2023, 11:46 AMf Support Daily • in 2h 56mA100% C•Tue 14 Apr 12:04:39Q InspectorFilter URLs• ConsoleD DebuggerN Network( PerformanceAlIHMLeSS290 PA200 P...206 P.200 P...200 P.200 G.200 G.200 G..200 G..296G200 P..200 G.A0...A0...A app.A aр...A aрp...A app.A app...А aрp.A find...A r.lo...200P.A r.lo...200 P...Ar.lo..1200 P.A r...200 P..A r.lo...200 P..A r.lo...200 P...a r.lo...200 P...A r.lo...200 P...A r.lo..200 P...A r.lo...206 P..Ar.o...200 P...A r.lo...200 P...A r.l...200 P...A r.o...200 P..A r.l...200 P...Ar.lo..200 P...A r.lo...200) P...A r.lo...200 P..A r.lo...206 P..r.lo.200 P...Ar.o..1200 P.A r.lo..200 P...A r.o...200P.A r.l...200 P...A r....200 P...A r.lo...200 P...A r.lo..200 P..A r.lo...200 P...A r.lo...200 P...A r.l...200 P...A r.lo...200 P...A r.o...200 P...A r.lo..200 P...Ar.lo...200 P...Ar.o...200 P...A r.lo...Me: Domain FileMrlo.Tasoonxat o attorm-stac xhiA8.../api/5627310/envelope/2: fetch/api/5627310/envelope/2: fetch/api/5627310/envelope/?: fetch/api/5627310/envelope/?; fetchH Xhisaved-searchintegrationson-demand?topic_id•A xhr•A xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platformi?a=ponxaf/platform-stag xhriPa=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhriza=ponxaf/platform-stag xhri?a=ponxaf/platform xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhriPa=ponxaf/platform-stag xhriPa=ponxaf/platform-staç xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhri?a=ponxaf/platform-stag xhrÔ 48 requests{) Style EditorO: MemoryE Storage0 99+No Throttling :HeadersCookiesRequestResponseTimingsSecurity5,59 KB1Block Resend500 B 2BgET nttos:laoostacing.lminnv.com/aoi/v/oage/on-demanertooic 10=e0210934-c0/0-4106003 285-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4500 B 2 B200500 B 2BHTTP/36.28 kB 2...55.54 kB (196.87 kB size)5.65 kB 1no-referrer-when-downgradesystem3.62 kB 1...3.83 kB 5..55.54 .3.11 kB 9..cached 6...slalusVersionTransferredReferrer PolicyDNS Resolutionkesponse Headers (2.900 Kb)alt-svc: h3=":443"; ma=86400cache-control: no-cache, onivatecontent-encoalng: oziocontent-language: encontent-secuntv-policv-revort-onv: scriot-src 'self 'unsate-inine' 'unsate-eval" • oo: hit.kawe307.701./4 Mb U.2.47 kB 0...4.91 kB 0.10.11 kB O...2.48 kB 0...2.43 kB 0...2.49 kB 0..2.48 kB O...2.73 kB O...2.43 kB 0...2.48 kB 0...2.48 kB 0...ucncio, slyto sie soll unsare mme mepencuttslasmebmimamcon mapedlonto yooMeaois.com nuos.cons.clouatare.com.me-sre sellmos.con.stagmg.tminy.com/nttes... nutos:S.intercomcan.com; connect-s/cnuos.apo.stacine.lminny.comnutos./meala.aoo.staging.liminnv.com [URL_WITH_CREDENTIALS] 4.61 min...
|
10928
|
|
10931
|
216
|
8
|
2026-04-14T09:04:40.065727+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157480065_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackEDHomeDMsActivityFilesLater..•More+FileEditV +SlackEDHomeDMsActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# Starred8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..Direct messagesAneliya Angelo...Steliyan GeorgievAdelina Petrova, Ili.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan Georgiev• MessagesAdd canvas+minoiwnunneможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMГОТОВОсьщотоCompetitive pitches беше втория нали такаNikolay Yankov 12:04 PMДа, там има 14 активитита, защо не сработи този път?Message Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaallSupport Daily - in 2h 56 m100% <47Tue 14 Apr 12:04:398J 5 new messagesXNew...
|
NULL
|
7240546258103929050
|
NULL
|
click
|
ocr
|
NULL
|
+SlackEDHomeDMsActivityFilesLater..•More+FileEditV +SlackEDHomeDMsActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# Starred8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi…..Direct messagesAneliya Angelo...Steliyan GeorgievAdelina Petrova, Ili.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan Georgiev• MessagesAdd canvas+minoiwnunneможеш ли да я рьннеш ти командатаLukas Kovalik 10:43 AMдаNikolay Yankov 10:45 AMпиши кат оя рьннешLukas Kovalik 10:52 AMзабавих се че ми се разбазикаха settings за средипуснах и мина и fail-наима result но e failedзначиREASON_NOT_ENOUGH_ACTIVITIESвиж дали има нещо в OD със този филтьрNikolay Yankov 11:01 AMДобреNikolay Yankov 11:39 AMя рьнни пак LukasLukas Kovalik 11:43 AMГОТОВОсьщотоCompetitive pitches беше втория нали такаNikolay Yankov 12:04 PMДа, там има 14 активитита, защо не сработи този път?Message Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+AaallSupport Daily - in 2h 56 m100% <47Tue 14 Apr 12:04:398J 5 new messagesXNew...
|
NULL
|
|
10932
|
217
|
14
|
2026-04-14T09:04:42.339569+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157482339_m2.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
https://app.staging.jiminny.com/ondemand?topic_id[
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 869720
28
28
14
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Topics:
Competitors
Show internal and external activities:
Show internal only
Save Search
Clear all
Saved searches Saved searches
Saved searches
Saved searches
Team
Search teams Search teams
Search teams
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant
Participant
Search team members Search team members
Search team members
Search team members
Customer
Customer
Transcript
Search transcript
Select option Said by
Select option
Said by
Select option Anyone
Select option
Anyone
Period
All time
Topics
Competitors × Search topics
Competitors
×
Search topics
Activity type
Search activity types Search activity types
Search activity types
Search activity types
Duration
Min (minutes)
Max (minutes)
AI call score
Select AI call score Select AI call score
Select AI call score
Select AI call score
Automated call score
Select automated call score Select automated call score
Select automated call score
Select automated call score
Coaching score
Select coaching score Select coaching score
Select coaching score
Select coaching score
Coach
Search coaches Search coaches
Search coaches
Search coaches
Stage at call
Search stages Search stages
Search stages
Search stages
Current stage
Search stages Search stages
Search stages
Search stages
Language
Search language Search language
Search language
Search language
Playlist
Search playlists Search playlists
Search playlists
Search playlists
Pending CRM notes
Not logged to CRM
Recorded
Search recorded Search recorded
Search recorded
Search recorded
Show internal and external activities
Select option Show internal only
Select option
Show internal only
Platform
Search platforms Search platforms
Search platforms
Search platforms
Call type
Search channels Search channels
Search channels
Search channels
Outcome
Search CRM Outcome Search CRM Outcome
Search CRM Outcome
Search CRM Outcome
Deal value
Min (amount)
Max (amount)
Deal close date
All time
Deal age
0
1359d
2717d+
Talking speed
0
177 wpm
252 wpm+
Talk ratio
0%
40%
60%
100%
Patience
0s
1s
2s
3s+
Longest monologue
0
5m
10m+
Longest customer story
0
5m
10m+
Rep questions
0
25
50+
Engaging questions
0
25
50+
Insightful questions
0
25
50+
Customer questions
0
25
50+
Comments
0
1
2
5
10
20+
Host
Activity
Contact
Activity Type
Current Stage
Stats
Duration
Date
Jiminny Web SA Jiminny Salesforce App Training Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 4 47m11/07/2024, 2:28 PM
Jiminny
Salesforce App Training
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
4
47m
11/07/2024, 2:28 PM
Bekkie Wetz Jiminny Bekkie/ Jules - renewals and ContractBook Number of favorites 1 Number of shares 0 Number of comments 0 Number of plays 3 44m25/06/2024, 3:09 PM
Jiminny
Bekkie/ Jules - renewals and ContractBook...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.14930555,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Console Home | Console Home | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Console Home | Console Home | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.08671875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SecurityGroup | EC2 | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SecurityGroup | EC2 | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.06484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.225,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.23472223,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.2534722,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.26319444,"width":0.23476562,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.28194445,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.29166666,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31041667,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.015625,"top":0.3201389,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.31666666,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.33888888,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.34861112,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.3673611,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.015625,"top":0.37708333,"width":0.12617187,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.39583334,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.40555555,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.42430556,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.4340278,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.45277777,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.4625,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.48125,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.015625,"top":0.49097222,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.50972223,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.51944447,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.5395833,"width":0.08710937,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny ■ 869720","depth":9,"bounds":{"left":0.09453125,"top":0.9875,"width":0.11796875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"28","depth":12,"bounds":{"left":0.096875,"top":0.925,"width":0.01875,"height":0.030555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"28","depth":14,"bounds":{"left":0.10664062,"top":0.9284722,"width":0.00546875,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14","depth":14,"bounds":{"left":0.2421875,"top":0.061805554,"width":0.0109375,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activities","depth":14,"bounds":{"left":0.253125,"top":0.061805554,"width":0.031640626,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Get Notified","depth":13,"bounds":{"left":0.55078125,"top":0.058333334,"width":0.051171876,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Sort by Sort by: Most recent","depth":13,"bounds":{"left":0.36171874,"top":0.057638887,"width":0.091796875,"height":0.025694445},"value":"Sort by Sort by: Most recent","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Sort by","depth":14,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sort by:","depth":15,"bounds":{"left":0.3660156,"top":0.06458333,"width":0.019921875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Most recent","depth":15,"bounds":{"left":0.3859375,"top":0.06458333,"width":0.030078124,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Recording","depth":13,"bounds":{"left":0.4910156,"top":0.058333334,"width":0.056640625,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"common.ai-icon-alt","depth":14,"bounds":{"left":0.6050781,"top":0.05625,"width":0.0140625,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Topics:","depth":15,"bounds":{"left":0.24570313,"top":0.10069445,"width":0.014453125,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Competitors","depth":15,"bounds":{"left":0.26210937,"top":0.10069445,"width":0.0265625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal and external activities:","depth":15,"bounds":{"left":0.30546874,"top":0.10069445,"width":0.07695313,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal only","depth":15,"bounds":{"left":0.384375,"top":0.10069445,"width":0.0390625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Save Search","depth":14,"bounds":{"left":0.440625,"top":0.09861111,"width":0.0390625,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Clear all","depth":14,"bounds":{"left":0.48359376,"top":0.09861111,"width":0.030078124,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Saved searches Saved searches","depth":13,"bounds":{"left":0.1265625,"top":0.05486111,"width":0.095703125,"height":0.025},"value":"Saved searches Saved searches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Saved searches","depth":15,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Saved searches","depth":16,"bounds":{"left":0.13085938,"top":0.06111111,"width":0.037109375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Team","depth":13,"bounds":{"left":0.1265625,"top":0.099305555,"width":0.012890625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search teams Search teams","depth":12,"bounds":{"left":0.1265625,"top":0.115277775,"width":0.095703125,"height":0.025},"value":"Search teams Search teams","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search teams","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search teams","depth":14,"bounds":{"left":0.13085938,"top":0.12222222,"width":0.032421876,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Host","depth":13,"bounds":{"left":0.1265625,"top":0.15,"width":0.01171875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.1265625,"top":0.16944444,"width":0.095703125,"height":0.025},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.13085938,"top":0.17638889,"width":0.05390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Also search as participant","depth":13,"bounds":{"left":0.1265625,"top":0.19930555,"width":0.062109374,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Participant","depth":13,"bounds":{"left":0.1265625,"top":0.225,"width":0.026953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.1265625,"top":0.24097222,"width":0.095703125,"height":0.025},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.13085938,"top":0.24791667,"width":0.05390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer","depth":13,"bounds":{"left":0.1265625,"top":0.27569443,"width":0.025390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Customer","depth":12,"bounds":{"left":0.14140625,"top":0.2923611,"width":0.065625,"height":0.025},"help_text":"","placeholder":"Customer or Subject","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transcript","depth":13,"bounds":{"left":0.1265625,"top":0.32777777,"width":0.02578125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search transcript","depth":12,"bounds":{"left":0.14140625,"top":0.34791666,"width":0.065625,"height":0.025},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Select option Said by","depth":12,"bounds":{"left":0.1265625,"top":0.37708333,"width":0.095703125,"height":0.025694445},"value":"Select option Said by","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Said by","depth":14,"bounds":{"left":0.13085938,"top":0.38402778,"width":0.0171875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Anyone","depth":12,"bounds":{"left":0.1265625,"top":0.40625,"width":0.095703125,"height":0.025694445},"value":"Select option Anyone","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone","depth":14,"bounds":{"left":0.13085938,"top":0.41319445,"width":0.01875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Period","depth":13,"bounds":{"left":0.1265625,"top":0.44166666,"width":0.016015625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All time","depth":14,"bounds":{"left":0.13203125,"top":0.46458334,"width":0.017578125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Topics","depth":13,"bounds":{"left":0.1265625,"top":0.4923611,"width":0.015234375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Competitors × Search topics","depth":12,"bounds":{"left":0.1265625,"top":0.5083333,"width":0.095703125,"height":0.02638889},"value":"Competitors × Search topics","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Competitors","depth":15,"bounds":{"left":0.13359375,"top":0.5159722,"width":0.030859375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"×","depth":16,"bounds":{"left":0.1671875,"top":0.5152778,"width":0.003125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search topics","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity type","depth":13,"bounds":{"left":0.1265625,"top":0.54444444,"width":0.03125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search activity types Search activity types","depth":12,"bounds":{"left":0.1265625,"top":0.56041664,"width":0.095703125,"height":0.025},"value":"Search activity types Search activity types","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search activity types","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search activity types","depth":14,"bounds":{"left":0.13085938,"top":0.5673611,"width":0.050390624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":13,"bounds":{"left":0.1265625,"top":0.5951389,"width":0.023046875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Min (minutes)","depth":13,"bounds":{"left":0.1265625,"top":0.6125,"width":0.03359375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Max (minutes)","depth":13,"bounds":{"left":0.16875,"top":0.6125,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI call score","depth":13,"bounds":{"left":0.1265625,"top":0.6597222,"width":0.029296875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select AI call score Select AI call score","depth":12,"bounds":{"left":0.1265625,"top":0.67569447,"width":0.095703125,"height":0.025},"value":"Select AI call score Select AI call score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select AI call score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select AI call score","depth":14,"bounds":{"left":0.13085938,"top":0.6826389,"width":0.0453125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Automated call score","depth":13,"bounds":{"left":0.1265625,"top":0.7104167,"width":0.0515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select automated call score Select automated call score","depth":12,"bounds":{"left":0.1265625,"top":0.7263889,"width":0.095703125,"height":0.036111113},"value":"Select automated call score Select automated call score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select automated call score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select automated call score","depth":14,"bounds":{"left":0.13085938,"top":0.73194444,"width":0.051953126,"height":0.025694445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coaching score","depth":13,"bounds":{"left":0.1265625,"top":0.7722222,"width":0.037109375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select coaching score Select coaching score","depth":12,"bounds":{"left":0.1265625,"top":0.7881944,"width":0.095703125,"height":0.025},"value":"Select coaching score Select coaching score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select coaching score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select coaching score","depth":14,"bounds":{"left":0.13085938,"top":0.7951389,"width":0.051953126,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coach","depth":13,"bounds":{"left":0.1265625,"top":0.8229167,"width":0.01640625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search coaches Search coaches","depth":12,"bounds":{"left":0.1265625,"top":0.8388889,"width":0.095703125,"height":0.025},"value":"Search coaches Search coaches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search coaches","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search coaches","depth":14,"bounds":{"left":0.13085938,"top":0.84583336,"width":0.0375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stage at call","depth":13,"bounds":{"left":0.1265625,"top":0.8736111,"width":0.02890625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search stages Search stages","depth":12,"bounds":{"left":0.1265625,"top":0.88958335,"width":0.095703125,"height":0.025},"value":"Search stages Search stages","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search stages","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search stages","depth":14,"bounds":{"left":0.13085938,"top":0.89652777,"width":0.033203125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current stage","depth":13,"bounds":{"left":0.1265625,"top":0.92430556,"width":0.03359375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search stages Search stages","depth":12,"bounds":{"left":0.1265625,"top":0.94027776,"width":0.095703125,"height":0.025},"value":"Search stages Search stages","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search stages","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search stages","depth":14,"bounds":{"left":0.13085938,"top":0.94722223,"width":0.033203125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Language","depth":13,"bounds":{"left":0.1265625,"top":0.975,"width":0.0234375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search language Search language","depth":12,"bounds":{"left":0.1265625,"top":0.9909722,"width":0.095703125,"height":0.009027779},"value":"Search language Search language","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search language","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search language","depth":14,"bounds":{"left":0.13085938,"top":0.99791664,"width":0.03984375,"height":0.0020833611},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Playlist","depth":13,"bounds":{"left":0.1265625,"top":1.0,"width":0.01796875,"height":-0.02569449},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search playlists Search playlists","depth":12,"bounds":{"left":0.1265625,"top":1.0,"width":0.095703125,"height":-0.041666627},"value":"Search playlists Search playlists","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search playlists","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search playlists","depth":14,"bounds":{"left":0.13085938,"top":1.0,"width":0.037890624,"height":-0.048611164},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pending CRM notes","depth":13,"bounds":{"left":0.1265625,"top":1.0,"width":0.048046876,"height":-0.076388836},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Not logged to CRM","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recorded","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search recorded Search recorded","depth":12,"value":"Search recorded Search recorded","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search recorded","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search recorded","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal and external activities","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Show internal only","depth":12,"value":"Select option Show internal only","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show internal only","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Platform","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search platforms Search platforms","depth":12,"value":"Search platforms Search platforms","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search platforms","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search platforms","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Call type","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search channels Search channels","depth":12,"value":"Search channels Search channels","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search channels","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search channels","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Outcome","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search CRM Outcome Search CRM Outcome","depth":12,"value":"Search CRM Outcome Search CRM Outcome","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search CRM Outcome","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search CRM Outcome","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal value","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Min (amount)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Max (amount)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal close date","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All time","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal age","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1359d","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2717d+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Talking speed","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"177 wpm","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"252 wpm+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Talk ratio","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"40%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"60%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Patience","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Longest monologue","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5m","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10m+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Longest customer story","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5m","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10m+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Rep questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Engaging questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Insightful questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comments","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Host","depth":15,"bounds":{"left":0.2511719,"top":0.14097223,"width":0.0109375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":15,"bounds":{"left":0.28632814,"top":0.14097223,"width":0.01796875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Contact","depth":15,"bounds":{"left":0.3839844,"top":0.14097223,"width":0.018359374,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity Type","depth":15,"bounds":{"left":0.4152344,"top":0.14097223,"width":0.01796875,"height":0.025},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current Stage","depth":15,"bounds":{"left":0.44921875,"top":0.14097223,"width":0.03203125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stats","depth":15,"bounds":{"left":0.49179688,"top":0.14097223,"width":0.011328125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":15,"bounds":{"left":0.53085935,"top":0.14097223,"width":0.0203125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date","depth":15,"bounds":{"left":0.5589844,"top":0.14097223,"width":0.011328125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny Web SA Jiminny Salesforce App Training Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 4 47m11/07/2024, 2:28 PM","depth":14,"bounds":{"left":0.24179688,"top":0.17847222,"width":0.37773436,"height":0.050694443},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.28632814,"top":0.19166666,"width":0.017578125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Salesforce App Training","depth":17,"bounds":{"left":0.28632814,"top":0.20555556,"width":0.053125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.49257812,"top":0.19027779,"width":0.0203125,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.5015625,"top":0.19097222,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.49257812,"top":0.19027779,"width":0.01875,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.51875,"top":0.19097222,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.49257812,"top":0.19027779,"width":0.023828125,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.5015625,"top":0.2048611,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of plays","depth":18,"bounds":{"left":0.49257812,"top":0.19027779,"width":0.01875,"height":0.03888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":18,"bounds":{"left":0.51875,"top":0.2048611,"width":0.002734375,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"47m","depth":16,"bounds":{"left":0.53085935,"top":0.19791667,"width":0.01015625,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11/07/2024, 2:28 PM","depth":16,"bounds":{"left":0.5589844,"top":0.19791667,"width":0.04921875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Bekkie Wetz Jiminny Bekkie/ Jules - renewals and ContractBook Number of favorites 1 Number of shares 0 Number of comments 0 Number of plays 3 44m25/06/2024, 3:09 PM","depth":14,"bounds":{"left":0.24179688,"top":0.22916667,"width":0.37773436,"height":0.050694443},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.28632814,"top":0.24236111,"width":0.017578125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bekkie/ Jules - renewals and ContractBook","depth":17,"bounds":{"left":0.28632814,"top":0.25625,"width":0.096875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-7551692132713273702
|
4256266838224859842
|
visual_change
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 869720
28
28
14
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Topics:
Competitors
Show internal and external activities:
Show internal only
Save Search
Clear all
Saved searches Saved searches
Saved searches
Saved searches
Team
Search teams Search teams
Search teams
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant
Participant
Search team members Search team members
Search team members
Search team members
Customer
Customer
Transcript
Search transcript
Select option Said by
Select option
Said by
Select option Anyone
Select option
Anyone
Period
All time
Topics
Competitors × Search topics
Competitors
×
Search topics
Activity type
Search activity types Search activity types
Search activity types
Search activity types
Duration
Min (minutes)
Max (minutes)
AI call score
Select AI call score Select AI call score
Select AI call score
Select AI call score
Automated call score
Select automated call score Select automated call score
Select automated call score
Select automated call score
Coaching score
Select coaching score Select coaching score
Select coaching score
Select coaching score
Coach
Search coaches Search coaches
Search coaches
Search coaches
Stage at call
Search stages Search stages
Search stages
Search stages
Current stage
Search stages Search stages
Search stages
Search stages
Language
Search language Search language
Search language
Search language
Playlist
Search playlists Search playlists
Search playlists
Search playlists
Pending CRM notes
Not logged to CRM
Recorded
Search recorded Search recorded
Search recorded
Search recorded
Show internal and external activities
Select option Show internal only
Select option
Show internal only
Platform
Search platforms Search platforms
Search platforms
Search platforms
Call type
Search channels Search channels
Search channels
Search channels
Outcome
Search CRM Outcome Search CRM Outcome
Search CRM Outcome
Search CRM Outcome
Deal value
Min (amount)
Max (amount)
Deal close date
All time
Deal age
0
1359d
2717d+
Talking speed
0
177 wpm
252 wpm+
Talk ratio
0%
40%
60%
100%
Patience
0s
1s
2s
3s+
Longest monologue
0
5m
10m+
Longest customer story
0
5m
10m+
Rep questions
0
25
50+
Engaging questions
0
25
50+
Insightful questions
0
25
50+
Customer questions
0
25
50+
Comments
0
1
2
5
10
20+
Host
Activity
Contact
Activity Type
Current Stage
Stats
Duration
Date
Jiminny Web SA Jiminny Salesforce App Training Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 4 47m11/07/2024, 2:28 PM
Jiminny
Salesforce App Training
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
4
47m
11/07/2024, 2:28 PM
Bekkie Wetz Jiminny Bekkie/ Jules - renewals and ContractBook Number of favorites 1 Number of shares 0 Number of comments 0 Number of plays 3 44m25/06/2024, 3:09 PM
Jiminny
Bekkie/ Jules - renewals and ContractBook...
|
NULL
|
|
10933
|
217
|
15
|
2026-04-14T09:04:45.367220+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157485367_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelphttps://app.staging.jiminny.com/ondemand?topic_id[]=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1|[URL_WITH_CREDENTIALS] 49 requestspeL-nuobMororoXr oo-xAblolylerosreceg meoe IrmoNCHICOLOJgKOlAZUT IMISSYUROeMeJb@qNlax-ebkay1Nt_luaGiUarFrtaz1/hrvgrDr-SBrUsupbs/Bclmcvbmhx8KplJfmK59243.45 KB 2.24 MB transterredFinish: 4.6/ min...
|
NULL
|
-4333485181252438742
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelphttps://app.staging.jiminny.com/ondemand?topic_id[]=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1|[URL_WITH_CREDENTIALS] 49 requestspeL-nuobMororoXr oo-xAblolylerosreceg meoe IrmoNCHICOLOJgKOlAZUT IMISSYUROeMeJb@qNlax-ebkay1Nt_luaGiUarFrtaz1/hrvgrDr-SBrUsupbs/Bclmcvbmhx8KplJfmK59243.45 KB 2.24 MB transterredFinish: 4.6/ min...
|
10932
|
|
10934
|
217
|
16
|
2026-04-14T09:04:48.407831+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-14/1776 /Users/lukas/.screenpipe/data/data/2026-04-14/1776157488407_m2.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
app.staging.jiminny.com/ondemand?topic_id[]=e02f09 app.staging.jiminny.com/ondemand?topic_id[]=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 869720
28
28
0
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Team:
Product
Topics:
Competitors
Duration:
1m and above
Recorded:
Only Recorded
Show internal and external activities:
Show internal only
Save Search
Clear all
Saved searches Saved searches
Saved searches
Saved searches
Team
Product × Search teams
Product
×
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant
Participant
Search team members Search team members
Search team members
Search team members
Customer
Customer
Transcript
Search transcript
Select option Said by
Select option
Said by
Select option Anyone
Select option
Anyone
Period
All time
Topics
Competitors × Search topics
Competitors
×
Search topics
Activity type
Search activity types Search activity types
Search activity types
Search activity types
Duration
Min (minutes)
1
Max (minutes)
AI call score
Select AI call score Select AI call score
Select AI call score
Select AI call score
Automated call score
Select automated call score Select automated call score
Select automated call score
Select automated call score
Coaching score
Select coaching score Select coaching score
Select coaching score
Select coaching score
Coach
Search coaches Search coaches
Search coaches
Search coaches
Stage at call
Search stages Search stages
Search stages
Search stages
Current stage
Search stages Search stages
Search stages
Search stages
Language
Search language Search language
Search language
Search language
Playlist
Search playlists Search playlists
Search playlists
Search playlists
Pending CRM notes
Not logged to CRM
Recorded
Search recorded Only Recorded
Search recorded
Only Recorded
Show internal and external activities
Select option Show internal only
Select option
Show internal only
Platform
Search platforms Search platforms
Search platforms
Search platforms
Call type
Search channels Search channels
Search channels
Search channels
Outcome
Search CRM Outcome Search CRM Outcome
Search CRM Outcome
Search CRM Outcome
Deal value
Min (amount)
Max (amount)
Deal close date
All time
Deal age
0
1359d
2717d+
Talking speed
0
177 wpm
252 wpm+
Talk ratio
0%
40%
60%
100%
Patience
0s
1s
2s
3s+
Longest monologue
0
5m
10m+
Longest customer story
0
5m
10m+
Rep questions
0
25
50+
Engaging questions
0
25
50+
Insightful questions
0
25
50+
Customer questions
0
25
50+...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.0890625,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.11796875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.14930555,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Console Home | Console Home | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Console Home | Console Home | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.08671875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SecurityGroup | EC2 | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SecurityGroup | EC2 | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.06484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.225,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.23472223,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.2534722,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.26319444,"width":0.23476562,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":4,"bounds":{"left":0.0,"top":0.28194445,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet","depth":5,"bounds":{"left":0.015625,"top":0.29166666,"width":0.1984375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31041667,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.015625,"top":0.3201389,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.07890625,"top":0.31666666,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":4,"bounds":{"left":0.0,"top":0.33888888,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf","depth":5,"bounds":{"left":0.015625,"top":0.34861112,"width":0.1640625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.3673611,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.015625,"top":0.37708333,"width":0.12617187,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.39583334,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app","depth":5,"bounds":{"left":0.015625,"top":0.40555555,"width":0.18710938,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.42430556,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":5,"bounds":{"left":0.015625,"top":0.4340278,"width":0.1515625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.45277777,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.4625,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.48125,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.015625,"top":0.49097222,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.50972223,"width":0.09375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015625,"top":0.51944447,"width":0.0484375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.5395833,"width":0.08710937,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny ■ 869720","depth":9,"bounds":{"left":0.09453125,"top":0.9875,"width":0.11796875,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"28","depth":12,"bounds":{"left":0.096875,"top":0.925,"width":0.01875,"height":0.030555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"28","depth":14,"bounds":{"left":0.10664062,"top":0.9284722,"width":0.00546875,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":14,"bounds":{"left":0.2421875,"top":0.061805554,"width":0.00625,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activities","depth":14,"bounds":{"left":0.2484375,"top":0.061805554,"width":0.031640626,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Get Notified","depth":13,"bounds":{"left":0.55078125,"top":0.058333334,"width":0.051171876,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Sort by Sort by: Most recent","depth":13,"bounds":{"left":0.36171874,"top":0.057638887,"width":0.091796875,"height":0.025694445},"value":"Sort by Sort by: Most recent","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Sort by","depth":14,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sort by:","depth":15,"bounds":{"left":0.3660156,"top":0.06458333,"width":0.019921875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Most recent","depth":15,"bounds":{"left":0.3859375,"top":0.06458333,"width":0.030078124,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Recording","depth":13,"bounds":{"left":0.4910156,"top":0.058333334,"width":0.056640625,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"common.ai-icon-alt","depth":14,"bounds":{"left":0.6050781,"top":0.05625,"width":0.0140625,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Team:","depth":15,"bounds":{"left":0.24570313,"top":0.09652778,"width":0.0125,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Product","depth":15,"bounds":{"left":0.26015624,"top":0.09652778,"width":0.016796876,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Topics:","depth":15,"bounds":{"left":0.29375,"top":0.09652778,"width":0.014453125,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Competitors","depth":15,"bounds":{"left":0.31015626,"top":0.09652778,"width":0.0265625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration:","depth":15,"bounds":{"left":0.35351562,"top":0.09652778,"width":0.019921875,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1m and above","depth":15,"bounds":{"left":0.37539062,"top":0.09652778,"width":0.02890625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recorded:","depth":15,"bounds":{"left":0.42109376,"top":0.09652778,"width":0.021484375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only Recorded","depth":15,"bounds":{"left":0.44453126,"top":0.09652778,"width":0.031640626,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal and external activities:","depth":15,"bounds":{"left":0.24570313,"top":0.121527776,"width":0.07734375,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal only","depth":15,"bounds":{"left":0.325,"top":0.121527776,"width":0.038671874,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Save Search","depth":14,"bounds":{"left":0.2421875,"top":0.14930555,"width":0.0390625,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Clear all","depth":14,"bounds":{"left":0.28515625,"top":0.14930555,"width":0.030078124,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Saved searches Saved searches","depth":13,"bounds":{"left":0.1265625,"top":0.05486111,"width":0.095703125,"height":0.025},"value":"Saved searches Saved searches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Saved searches","depth":15,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Saved searches","depth":16,"bounds":{"left":0.13085938,"top":0.06111111,"width":0.037109375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Team","depth":13,"bounds":{"left":0.1265625,"top":0.099305555,"width":0.012890625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Product × Search teams","depth":12,"bounds":{"left":0.1265625,"top":0.115277775,"width":0.095703125,"height":0.02638889},"value":"Product × Search teams","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Product","depth":15,"bounds":{"left":0.13359375,"top":0.12291667,"width":0.01953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"×","depth":16,"bounds":{"left":0.15585938,"top":0.12222222,"width":0.003125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search teams","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Host","depth":13,"bounds":{"left":0.1265625,"top":0.15138888,"width":0.01171875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.1265625,"top":0.17083333,"width":0.095703125,"height":0.025},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.13085938,"top":0.17777778,"width":0.05390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Also search as participant","depth":13,"bounds":{"left":0.1265625,"top":0.20069444,"width":0.062109374,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Participant","depth":13,"bounds":{"left":0.1265625,"top":0.22638889,"width":0.026953125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.1265625,"top":0.24236111,"width":0.095703125,"height":0.025},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.13085938,"top":0.24930556,"width":0.05390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer","depth":13,"bounds":{"left":0.1265625,"top":0.27708334,"width":0.025390625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Customer","depth":12,"bounds":{"left":0.14140625,"top":0.29375,"width":0.065625,"height":0.025},"help_text":"","placeholder":"Customer or Subject","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transcript","depth":13,"bounds":{"left":0.1265625,"top":0.32916668,"width":0.02578125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search transcript","depth":12,"bounds":{"left":0.14140625,"top":0.34930557,"width":0.065625,"height":0.025},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Select option Said by","depth":12,"bounds":{"left":0.1265625,"top":0.3784722,"width":0.095703125,"height":0.025694445},"value":"Select option Said by","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Said by","depth":14,"bounds":{"left":0.13085938,"top":0.38541666,"width":0.0171875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Anyone","depth":12,"bounds":{"left":0.1265625,"top":0.40763888,"width":0.095703125,"height":0.025694445},"value":"Select option Anyone","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone","depth":14,"bounds":{"left":0.13085938,"top":0.41458333,"width":0.01875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Period","depth":13,"bounds":{"left":0.1265625,"top":0.44305557,"width":0.016015625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All time","depth":14,"bounds":{"left":0.13203125,"top":0.46597221,"width":0.017578125,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Topics","depth":13,"bounds":{"left":0.1265625,"top":0.49375,"width":0.015234375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Competitors × Search topics","depth":12,"bounds":{"left":0.1265625,"top":0.50972223,"width":0.095703125,"height":0.02638889},"value":"Competitors × Search topics","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Competitors","depth":15,"bounds":{"left":0.13359375,"top":0.5173611,"width":0.030859375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"×","depth":16,"bounds":{"left":0.1671875,"top":0.51666665,"width":0.003125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search topics","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity type","depth":13,"bounds":{"left":0.1265625,"top":0.54583335,"width":0.03125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search activity types Search activity types","depth":12,"bounds":{"left":0.1265625,"top":0.56180555,"width":0.095703125,"height":0.025},"value":"Search activity types Search activity types","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search activity types","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search activity types","depth":14,"bounds":{"left":0.13085938,"top":0.56875,"width":0.050390624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":13,"bounds":{"left":0.1265625,"top":0.59652776,"width":0.023046875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Min (minutes)","depth":13,"bounds":{"left":0.1265625,"top":0.61388886,"width":0.03359375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":13,"bounds":{"left":0.13203125,"top":0.6333333,"width":0.003125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Max (minutes)","depth":13,"bounds":{"left":0.16875,"top":0.61388886,"width":0.034765624,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI call score","depth":13,"bounds":{"left":0.1265625,"top":0.6611111,"width":0.029296875,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select AI call score Select AI call score","depth":12,"bounds":{"left":0.1265625,"top":0.6770833,"width":0.095703125,"height":0.025},"value":"Select AI call score Select AI call score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select AI call score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select AI call score","depth":14,"bounds":{"left":0.13085938,"top":0.6840278,"width":0.0453125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Automated call score","depth":13,"bounds":{"left":0.1265625,"top":0.7118056,"width":0.0515625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select automated call score Select automated call score","depth":12,"bounds":{"left":0.1265625,"top":0.7277778,"width":0.095703125,"height":0.036111113},"value":"Select automated call score Select automated call score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select automated call score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select automated call score","depth":14,"bounds":{"left":0.13085938,"top":0.73333335,"width":0.051953126,"height":0.025694445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coaching score","depth":13,"bounds":{"left":0.1265625,"top":0.7736111,"width":0.037109375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select coaching score Select coaching score","depth":12,"bounds":{"left":0.1265625,"top":0.7895833,"width":0.095703125,"height":0.025},"value":"Select coaching score Select coaching score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select coaching score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select coaching score","depth":14,"bounds":{"left":0.13085938,"top":0.7965278,"width":0.051953126,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coach","depth":13,"bounds":{"left":0.1265625,"top":0.82430553,"width":0.01640625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search coaches Search coaches","depth":12,"bounds":{"left":0.1265625,"top":0.8402778,"width":0.095703125,"height":0.025},"value":"Search coaches Search coaches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search coaches","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search coaches","depth":14,"bounds":{"left":0.13085938,"top":0.8472222,"width":0.0375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stage at call","depth":13,"bounds":{"left":0.1265625,"top":0.875,"width":0.02890625,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search stages Search stages","depth":12,"bounds":{"left":0.1265625,"top":0.8909722,"width":0.095703125,"height":0.025},"value":"Search stages Search stages","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search stages","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search stages","depth":14,"bounds":{"left":0.13085938,"top":0.8979167,"width":0.033203125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current stage","depth":13,"bounds":{"left":0.1265625,"top":0.92569447,"width":0.03359375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search stages Search stages","depth":12,"bounds":{"left":0.1265625,"top":0.94166666,"width":0.095703125,"height":0.025},"value":"Search stages Search stages","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search stages","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search stages","depth":14,"bounds":{"left":0.13085938,"top":0.94861114,"width":0.033203125,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Language","depth":13,"bounds":{"left":0.1265625,"top":0.9763889,"width":0.0234375,"height":0.011805556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search language Search language","depth":12,"bounds":{"left":0.1265625,"top":0.9923611,"width":0.095703125,"height":0.0076388717},"value":"Search language Search language","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search language","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search language","depth":14,"bounds":{"left":0.13085938,"top":0.99930555,"width":0.03984375,"height":0.0006944537},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Playlist","depth":13,"bounds":{"left":0.1265625,"top":1.0,"width":0.01796875,"height":-0.027083278},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search playlists Search playlists","depth":12,"bounds":{"left":0.1265625,"top":1.0,"width":0.095703125,"height":-0.043055534},"value":"Search playlists Search playlists","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search playlists","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search playlists","depth":14,"bounds":{"left":0.13085938,"top":1.0,"width":0.037890624,"height":-0.049999952},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pending CRM notes","depth":13,"bounds":{"left":0.1265625,"top":1.0,"width":0.048046876,"height":-0.07777774},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Not logged to CRM","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recorded","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search recorded Only Recorded","depth":12,"value":"Search recorded Only Recorded","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search recorded","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Only Recorded","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal and external activities","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Show internal only","depth":12,"value":"Select option Show internal only","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show internal only","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Platform","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search platforms Search platforms","depth":12,"value":"Search platforms Search platforms","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search platforms","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search platforms","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Call type","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search channels Search channels","depth":12,"value":"Search channels Search channels","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search channels","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search channels","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Outcome","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search CRM Outcome Search CRM Outcome","depth":12,"value":"Search CRM Outcome Search CRM Outcome","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search CRM Outcome","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search CRM Outcome","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal value","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Min (amount)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Max (amount)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal close date","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All time","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal age","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1359d","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2717d+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Talking speed","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"177 wpm","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"252 wpm+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Talk ratio","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"40%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"60%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Patience","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Longest monologue","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5m","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10m+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Longest customer story","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5m","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10m+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Rep questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Engaging questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Insightful questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4131468604803394450
|
1369459477212459242
|
visual_change
|
accessibility
|
NULL
|
JY-20543 add AJ reports User pilot tracking by Lak JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
Console Home | Console Home | us-east-2
Console Home | Console Home | us-east-2
SecurityGroup | EC2 | us-east-2
SecurityGroup | EC2 | us-east-2
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
SRD-6779 | JY-20632 | Unable to log in to Sidekick with SSO by yalokin-jiminny · Pull Request #11935 · jiminny/app
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jy 19798 evaluation for ai activity types by nikolaybiaivanov · Pull Request #468 · jiminny/prophet
Jiminny
Jiminny
Close tab
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Ask Jiminny test report - 8 Apr 2026 - Ask Jiminny test report - 13 Apr 2026.pdf
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
JY-20543 add AJ reports User pilot tracking by LakyLak · Pull Request #11932 · jiminny/app
Configure SSH access to multiple environment - Engineering - Confluence
Configure SSH access to multiple environment - Engineering - Confluence
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
New Tab
CloudWatch | us-east-2
CloudWatch | us-east-2
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 869720
28
28
0
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Team:
Product
Topics:
Competitors
Duration:
1m and above
Recorded:
Only Recorded
Show internal and external activities:
Show internal only
Save Search
Clear all
Saved searches Saved searches
Saved searches
Saved searches
Team
Product × Search teams
Product
×
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant
Participant
Search team members Search team members
Search team members
Search team members
Customer
Customer
Transcript
Search transcript
Select option Said by
Select option
Said by
Select option Anyone
Select option
Anyone
Period
All time
Topics
Competitors × Search topics
Competitors
×
Search topics
Activity type
Search activity types Search activity types
Search activity types
Search activity types
Duration
Min (minutes)
1
Max (minutes)
AI call score
Select AI call score Select AI call score
Select AI call score
Select AI call score
Automated call score
Select automated call score Select automated call score
Select automated call score
Select automated call score
Coaching score
Select coaching score Select coaching score
Select coaching score
Select coaching score
Coach
Search coaches Search coaches
Search coaches
Search coaches
Stage at call
Search stages Search stages
Search stages
Search stages
Current stage
Search stages Search stages
Search stages
Search stages
Language
Search language Search language
Search language
Search language
Playlist
Search playlists Search playlists
Search playlists
Search playlists
Pending CRM notes
Not logged to CRM
Recorded
Search recorded Only Recorded
Search recorded
Only Recorded
Show internal and external activities
Select option Show internal only
Select option
Show internal only
Platform
Search platforms Search platforms
Search platforms
Search platforms
Call type
Search channels Search channels
Search channels
Search channels
Outcome
Search CRM Outcome Search CRM Outcome
Search CRM Outcome
Search CRM Outcome
Deal value
Min (amount)
Max (amount)
Deal close date
All time
Deal age
0
1359d
2717d+
Talking speed
0
177 wpm
252 wpm+
Talk ratio
0%
40%
60%
100%
Patience
0s
1s
2s
3s+
Longest monologue
0
5m
10m+
Longest customer story
0
5m
10m+
Rep questions
0
25
50+
Engaging questions
0
25
50+
Insightful questions
0
25
50+
Customer questions
0
25
50+...
|
NULL
|