|
11003
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-liminny k vProject v• Unit> Actions› D Component› D Configuration> MConsoleM ContractsD DomainDDTO• EnumsD Events• ExceptionsO fixtures• HelpersD Http> D Integrations> Minteractions~ D Jobs> M Activitv> D AiAutomation>_ Audiov D AutomatedReports© CreateResultsTest.pl© RequestGenerateAskC RequestGenerateRerC SendReportJobTest.© SendReportMailJobTcallendar!1CrmDeak sks• MailboxD StreamingD Team• TelephonyD User© ImportRecallAlRecording© SqsVisibilityControlTestMListeners→]Mal> MModelsNotifications› M Observers[ PoliciesO ProvidersD RepositoriesC RulesServicesC Activity[ ActivityProvidersDJ AvatarcallendarConference! Cinmi[ InternalD Kioskv _ AutomatedReports© ActivityTypeServi© AskJiminnyRepori© AskJiminnyReport© AutomatedReport© ReportController.phpAutomatedReportsCommand.phpAddLayoutEntities.php© JiminnyDebugCommand.phpC AutomatedReportsSendCommand.php© Team.php© AutomatedReportsRepository.php x© CreateHeldActivityEvent.phpC CreateActivityLoggedEvent.php© ActivityLogged.phpc) AutomatedRenorscalloackoelvice.onv© RequestGenerateAskJiminnyReportJob.php(©) RequestGenerateReportJob.phpAuLomaleakeportkesult.ono© AutomatedReport.phpclass AutomatedReportsRepositoryA15 X4 ^* dreturn AutomatedReportpublic function create(array $data): AutomatedReportf..}71 8 >/*** Find an automated report by UUID* @param string $uvid100 % >-1171118 ₽ >* @return AutomatedReport/null157 8 >public function findByUuid(string $uvid): ?AutomatedReport185 % >return AutomatedReport::where('uvid', AutomatedReport:: toOptim206 8 >225 DTusdyepublic function findBy[dOruuid(string $idoruuid): PAutomatedReport 226if (is_numeric($idOrUuid)) €return AutomatedReport::find((int) $id0rUvid);228229230return AutomatedReport: :where('uvid', AutomatedReport:: toOptim/*** Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed vaz 242* @param string $sortDirection The sort direction. Allowed values* drerurn cocuectonsaurondredredor»12 usagespublic function getAllStandardReports(string $sortColumn ='created_at',string $sortDirection = 'desc'): Collection {.247248-249250-251252 Ф >/*** Retrieve all Ask Ziminny reports created by the given user.* Oparam UserThe user whose reports to retrieve*oodrdl sarno osorccocuminIne cocuin co sorc ou. Accowed vou* dparam string SsortDirection The sort direction. Allowed valuesWinasur chз. // View Changelog (today 10:33)= custom.logE laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]Al console [PROD]A console [EU]AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php x © RequestGenerateAskJiminnyReportJobTest.phpclass AskJiminnyReportActivityServiceTest extends TestCaseprivate LoggerIntertace&Mock0bject $logger;9 usagesAl console [STAGING]j Support Daily • in 2h 52mAL AskJiminnyReportActivityServiceT...DefaultsCascadetControlleAutomated Report Mar100% C•Tue 14 Apr 12:08:03O Fixing Ask Jiminny R+D ..42 X3 ^orVare AskunlunnvredortActultvservlce servcet29 6t >protected function setUp(): void{...}11 usagesprivate function makeFilter(string $key, ?string $value): SearchFilter&Mock0bject{...}8 usagesprivate function makeUser(): User&MockObjectf..78 usagesprivate function makeSavedSearch(array $filters): Search&MockObjectf...}public function testGetActivityIdsForSavedSearchReturnsIds(): voidf...}public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): voidf...}public function testGetActivityIdsFiltersOutDateFilters(): voidf...}public function testGetActivityIdsFilters0utClosingPeriodDateFilters(): void{...}public function testGetActivityIdsHandLesArrayFilters(): voidf...}public function testGetActivityIdsHandLesScalarFilters(): voidf...}•public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void$user = $this->makeUser();$savedSearch = $this->makeSavedSearch([]);$filterSet = $this->createMock( originalClassName: FilterDefinitionCollection::class);$this-›activitySearch-›method ( constraint: 'getArrayFilterKeys')->willReturn([]);$capturedCriteria = null;nanu so>acu vvsearch-sexdectsti s-sonce->neuno constraint'getOnDemandPageFilterSet')->wil1ReturnCallback(function (Criteria $criteria) use ($FilterSet, &$capturedCriteria) (..3);$this->elasticRepository->method( constraint: 'onDemandSearchIdsOnly')->willReturn([I);$this->logger->method( constraint:'info');$this->service->getActivityIdsForSavedSearch($savedSearch, $user);$this->assertNotNull($capturedCriteria);$this->assertFalse($capturedCriteria->isFirstRequestO));public function testGetActivitvIdsLoqsWithCorrectContext@: voidf....mkequest deraunsiuto o ane isrirsthequesel returs true when empyvsequenceumber ===The frontend URL has sequence_number=4 - meaning it's not a firstreouest. Ine service doesn't setlt, so te crlterla tninks il's a tirst reouest.When uspurstRequest = true.nese mollcttitersareadole. tnararen't in the saved search.1. ActivityDurationRange - applies min_duration = 1 (INITIAL_MIN)- Tlters out o-secone calls2. ActivityRecorded - applies only_recorded = 1 (DEFAULT_VALUE =OPTION_RECORDED) - filters to recorded-only3. OrganiserGroupIn - applies user's default group filterBut the frontend with sequence_number=4 skips all of these defaults, so itreturs more resuitsThe fix should be in bui ldrequestParamsFromsearch - it needs to pass sequence_number in the built params to signal "not a first request", so theImplicit deraults dont apoly. or alternatively, always pass a non-zero sequence number In the meroe in detactivitviidsForsaverSearch.Read AskJiminnyReportActivityService.php #L44-93Now let me verify my understanchtg of isFirstRequest:Read criteria.nnoConfirmed. The fix is clear and minimal. The getActivityIdsForSavedSearch metnoe neeas to pass sequence number with a non-zero value so that 1srurstrequestl rerurns false anc nomolcrcecursarea..leo• AskJiminnyReportActivityService.php+1 -1Now let me check if there's an existing test for AskJiminnyReportActivityservice to updale.Explored AskJiminnvReoortActivtvServicelest.onv and searched Ask.h.I need to add a test that verifies sequence_number=1 is passed to Criteria(so isFirstRequest() returns false). Let me add it to the existing test• AskJiminnyReportActivityServiceTest.phpNow let's run the test to verify:rtActivityServiceTest.phpCould not open input file: /var/www/html/artisanartisanieportes AskJiminnyRepoCould not open input file: /app/artisanItlle wiun changesvView all.../Kiosk/AutomatedReports/DAskJiminnyReportActivityService.php+1 -1Reject allAccept allAsk anything (20L)+ <> CodeClaude Sonnet 4.6225:103uir-o( 4 spaces...
|
NULL
|
NULL
|
NULL
|
11003
|
|
11002
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-liminny k vProject v• Unit> Actions› D Component› D Configuration> MConsoleM ContractsD DomainODTO• EnumsD Events• ExceptionsO fixtures• HelpersD Http> D Integrations> Minteractions~ D Jobs> M Activitv> D AiAutomation>_ Audiov D AutomatedReports© CreateResultsTest.pl© RequestGenerateAskC RequestGenerateRerC SendReportJobTest.© SendReportMailJobTcallendar!1CrmDeaksks• MailboxD StreamingD Team• TelephonyD User© ImportRecallAlRecording© SqsVisibilityControlTestMListeners→]Mal> MModelsNotifications› M Observers[ PoliciesO ProvidersD RepositoriesC RulesServicesC Activity[ ActivityProvidersDJ AvatarcallendarConference! Cinmi[ InternalD Kioskv _ AutomatedReports© ActivityTypeServi© AskJiminnyRepori© AskJiminnyReport© AutomatedReport© ReportController.phpAutomatedReportsCommand.phpAddLayoutEntities.php© JiminnyDebugCommand.phpC AutomatedReportsSendCommand.php© Team.php© AutomatedReportsRepository.php x© CreateHeldActivityEvent.phpC CreateActivityLoggedEvent.php© ActivityLogged.phpc) AutomatedRenorscalloackoerwce.onv© RequestGenerateAskJiminnyReportJob.php(©) RequestGenerateReportJob.phpAuLomaleakeportkesult.ono© AutomatedReport.phpclass AutomatedReportsRepositoryA15 X4 ^* dreturn AutomatedReportpublic function create(array $data): AutomatedReportf..}71 8 >/*** Find an automated report by UUID* @param string $uvid100 % >-1171118 ₽ >* @return AutomatedReport/nulz157 8 >public function findByUuid(string $uvid): ?AutomatedReport185 % >return AutomatedReport::where('uvid', AutomatedReport:: toOptim206 8 >225 DTusdyepublic function findBy[dOruuid(string $idoruuid): PAutomatedReport 226if (is_numeric($idOrUuid)) €return AutomatedReport::find((int) $id0rUvid);229230return AutomatedReport: :where('uvid', AutomatedReport:: toOptim/*** Retrieve all standard (non-Ask Jiminny) automated reports.* @param string $sortColumnThe column to sort by. Allowed vaz 242.* @param string $sortDirection The sort direction. Allowed values* drerurn cocuectonsaurondredredor»12 usagespublic function getAllStandardReports(string $sortColumn ='created_at',string $sortDirection = 'desc'): Collection {.247248-249250-251252 Ф >/*** Retrieve all Ask Ziminny reports created by the given user.* Oparam UserThe user whose reports to retrieve*oodrdl sarno osorccocuminIne cocuin co sorc ou. Accowed vou* dparam string SsortDirection The sort direction. Allowed valuesWinasun chз. // View Changelog (today 10:33)= custom.log= laravel.logA SF [jiminny@localhost]A HS_local [jiminny@localhost]E console (PROD]A console [EU]AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php x © RequestGenerateAskJiminnyReportJobTest.phpclass AskJiminnyReportActivityServiceTest extends TestCaseorivate Logger interracexmockobnect slodder9 usagesAl console [STAGING]42 X3 ^orVare AskunlunnvredortActultvservlce servcet29 6t >protected function setUp(): void{...}11 usagesprivate function makeFilter(string $key, ?string $value): SearchFilter&Mock0bject{...}8 usagesprivate function makeUser(): User&MockObjectf..78 usagesprivate function makeSavedSearch(array $filters): Search&MockObjectf...}public function testGetActivityIdsForSavedSearchReturnsIds(): voidf...}public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(): voidf...}public function testGetActivityIdsFiltersOutDateFilters(): voidf…..}public function testGetActivityIdsFilters0utClosingPeriodDateFilters(): void{...}public function testGetActivityIdsHandLesArrayFilters(): voidf...}public function testGetActivityIdsHandLesScalarFilters(): voidf...}•public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaults(): void$user = $this->makeUser();$savedSearch = $this->makeSavedSearch([]);$filterSet = $this->createMock( originalClassName: FilterDefinitionCollection::class);$this-›activitySearch-›method ( constraint: 'getArrayFilterKeys')->willReturn([]);$capturedCriteria = null;nanu so>acu vvsearch-sexdectsti s-sonce->necno constraind'getOnDemandPageFilterSet')->wil1ReturnCallback(function (Criteria $criteria) use ($FilterSet, &$capturedCriteria) (..3);$this->elasticRepository->method( constraint: 'onDemandSearchIdsOnly')->willReturn([I);$this->logger->method( constraint:'info');$this->service->getActivityIdsForSavedSearch($savedSearch, $user);$this->assertNotNull($capturedCriteria);$this->assertFalse($capturedCriteria->isFirstRequestO));public function testGetActivitvIdsLoqsWithCorrectContext@: voidf....j Support Daily • in 2h 53 mA100% C•Tue 14 Apr 12:08:00L AskJiminnyReportActivityServiceT...DefaultsCascadetControlleAutomated Report Mar© Fixing Ask Jiminny R+D ..When sequence_number is not in requestParams, the Criteria::createFromkequest ceraunsilo o, ane isrirstrequest returs true when empuy sequenceNumber === 0The frontend URL has sequence_number=4 — meaning it's not a firstrequest. Ine service doesn't serit, so the criteria thinks il's a tirst recuest.wWhen isFirstRequest() = true, these implicit filters are applied thataren tin the saved searen.1. ActivityDurationRange - applies min_duration = 1 (INITIAL_MIN)- ters ouro-secono calls2. ActivityRecorded - applies only_recorded = 1 (DEFAULT_VALUE =UrloN KecOrDcD — titers to recoraea-onlyOroanzsercroupin — aoolles user's ceaur orouo titerBut the frontend with sequence_number=4 skips all of these defaults, so itreturns more resuitsThe fix should be in buildRequestParamsFromSearch - it needs to pass sequence_number in the built params to signal "not a first request", so theImol lcir cerauls con'taoov Oralernarvev alwavs oass a non-zero sequence number in the merge in getActivityIdsForSavedSearch.Now let me verify my understanding of isFirstRequest :Read Criteria.nhoConfirmed. The fix is clear and minimal. The getActivityIdsForSavedSearch metnoe neeas lo oass sequence number witn a non-zero value so tnat 1sFirstRequest() returns false and no implicit defaults are applied.D AskNow let me check if there's an existing test for AskJiminnyReportActivityservice lo upaale.Explored AskJiminnyReportActivityServiceTest.php and searched AskJi...>I need to add a test that verifies sequence _number=1 is passed to Criteria(so isFirstRequest() returns false). Let me add it to the existing test• AskJiminnyReportActivityServiceTest.phpNow let's run the test to verify:ortS/ ASKJ1mInnyKeDortActivityServiceTest.phpCould not open input file: /var/www/html/artisancommana aockeldoste/ tt/ dovkces/k2o5k/ANPO/app/artisan testomatedReports/AskJiminnyReportActivityServiceTest.phpSkipItlle wiun changesvView all.../Kiosk/AutomatedReports/DAskJiminnyReportActivityService.php+1 -1Reject allAccept allAsk anything (2*L)+ <> CodeClaude Sonnet 4.6winasun leamsZ25:10Suir-o( 4 spaces...
|
NULL
|
NULL
|
NULL
|
11002
|
|
11001
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa> 0ladl= Support Daily • in 2h 53 m100% <47Tue 14 Apr 12:08:008Today ~...
|
NULL
|
NULL
|
NULL
|
11001
|
|
11000
|
PhpStormFileFditViewNavigateCodelaravePetactonTool PhpStormFileFditViewNavigateCodelaravePetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.php© JiminnyDebugCommand.phpD Unit>DActions> Component› Configuration> MConsoleM ContractsM DomainD DTO• Enums© AutomatedReportsCommand.phpC AutomatedReportsSendCommand.phpAddLayoutentities.php(C) Team.nho© AutomatedReportsRepository.php X© CreateHeldActivityEvent.phpC CreateActivityLoggedEvent.php(C) Activtv odded.nnrc) AutomatedRenorscalloackoerwce.onvC RequestGenerateAskJiminnyReportJob.php(©) RequestGenerateReportJob.phpAulomaleakeportkesuit.ono_ Events© AutomatedReport.php_ Exceptions→ fixturesclass AutomatedReportsrepos1toryA15 У 4 л_ 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) SqsVisibilityControlTestMListeners→]Mal> MModelsM Notifications› M ObserversPoliciesProvidersRepositoriesD Rules• _ Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenor* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...71 M >* Find an automated report by UUID100 M ›* dparam string $uu1dAM9 MAY*dreturn AutomatedReportnul7157 A>public function findByUuid(string Suuid): ?AutomatedReport185 ₴)return AutomatedReport::where('uuid', AutomatedReport::toOptim.206 6)Tusdye225public function findById0rUuid(string $idOrUuid): ?AutomatedReport 226if (is_numeric($id0rUuid)) {return AutomatedReport::find((int) $id0rUuid);229236return AutomatedReport::where('uvid', AutomatedReport::to0ptim./*** Retrieve all standard (non-Ask Jaminny) automated reports.* dparam string ssortcolumnThe column to sort by. Allowed vaz 242243* dparam string ssortuireccion ine sort cireccion. ALlowea values244245* drerurn cocuectonsaurondredredor»12 usagespublic function getAllStandardReports247248string SsortColumn ="created_at',string SsortDirection =desc250): Collection 1.252 M >/*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam userThe user whose reports to retrieve*oodrdl sarno osorccocuminIne cocuin co sorc ou. Accowed vou* dparam string SsortDirection The sort direction. Allowed valuesWinasun ch. // View Changelog (today 10:33)E custom.loc= laravel.logL SF liminny@localhostc HS_local fiminny@localhostconcole DPOlbllL console (EU]L console (STAGINGC) AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php x C RequestGenerateAskJiminnyReportJobTest.phpclass AskuaminnvreoortAcovlrvservcelest extenos estuastorivate Logger interracexmockobnect slodger9 usagesorivate AskJiminnvRenortActivitvService Sservice:29 GT>protected function setUpO: voidk...?11 usagesprivate function makeFilter(string Skey. ?string $value): SearchFilter&Mock0bject...hprivate function makeUser(): User&Mock0bject{...}orivate function makeSavedSearch(arnav Sfilters): Search&MockObiect..?public function testGetActivitvIdsForSavedSearchReturnsIds@: voidl...}public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(: voidf...}public function testGetActivityIdsFilters0utDateFiltersO: void{...}public function testGetActivityIdsFilters0utClosingPeriodDateFilters(): void{...}public function testGetActivityIdsHandlesArrayFilters(): void{...}public function testGetActivityIdsHandlesScalarFilters(: void{...}public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaultsQ: voidAccept$user = $this->makeUserO):$savedSearch = $this->makeSavedSearch([]D;$filterSet = $this->createMock( originalClassName: FilterDefinitionCollection::class);sth1s->activitysearch->method( constraint: |'getArrayr1lterkeys')->w1LLReturn(LJDHScanturedCriteria = null:sthis->activitvSearch->expects(sthis->once@)→>iecno constraind'getOnDemandPageFilterSet')->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) (...F);$this-›elasticRepository->method( constraint: "onDemandSearchldsonly")->willReturn(LJD:sthis->Loggen->method constraint: "info'D:sthis->service->getAct1v1tyldsForsavedsearch(ssavedsearch, suser):sthis->assertNotnull(scapturedcr1ter1a)hsthis->assertFalse(ScapturedCriteria->1sF1rstrequest0.hpublic function testGetActivitvIdsLogsWithCorrectContext@: voidf...}Accept File 8+X Reject File 1 38 @+ 2 of 2 files →Renect• Support Daily • in 2 h 53 m100% |45]Tue 14 Apr 12:07:58L AskJiminnyReportActivityServiceT..DefaultsCascade*ControlleAutomated Report Ma© Fixing Ask Jiminny Fmrequest eauisiro d ano 1sFirstreovesto reurs true when emotyseouencenunbetThe frontend URL has sequence number=4 — meaning it's not a firstreduest, Tihe service doesn't ser lt, so the criteria thinks it's a first reduest.When isFirstRequest() = true , these implicit filters are applied thataren tin the saveo search" ACLIVILVDIationRande — applies min duration = 1 (INITIAL MIN)— flters out 0-second callls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE =OPTION_RECORDED) — filters to recorded-onlyOrganiserGroupin — applies user's default group filterbut the Trontend With sequence number=4 sklos all or these deraults, so itreturns more resultsIne tix snoule be in bus lakequestraransfrombearch — it neeas to pass sequence number In the oult oarams lo sional "nota Ttistrecuest", so the.implicit detaults don't apply. Or alternatively, always pass a non-zero sequence number in tne meree in ceractivitylasrorsavecsearchNow let me verify my understanding of isfirstRequest :keae uriterla.ono ?Contirmeo, Ine Tx s cear ano minimar Une oetActivlvlosrorsavedsearich method needs to pass sequence_number with a non-zero value so that 1sFirstRequest() returns false and no implicit defaults are applied• AskJ.Now let me check il tnere's an existine lesttor AskuiminnykeportaccivicyService to uodate.Explored AskJiminnyReportActivityServiceTest.php and searched AskJi... ›Ineed to ade a lest that vertles sequence numderet is passeeto cricerlaso 1srurstreqvestlo rerurns tallse)r ler meaco Ilo tne ex sune lestfile.• AskJiminnyReportActivityServiceTest.phpNow let's run the test to verify:rtactivityservicelest.pnpphp /var/www/html/artisan testnuon nuculld ceunerot topnonociammynewenocoverayeCould not open input file: /var/www/html/artisandockerexec docker lamp 1 php /app/artisan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyRepoTenclevelyoeivecelesteune e-norcovelayeKUnX+SkipView all.sk/AutomatedReports/@ AskJiminnvReportActivitvServiceTest.phv +27.../Kiosk/AutomatedReports/D AskJiminnyReportActivityService.php+1 -1Reject allAccept allAsk anything (&+L)+ ‹› CodeClaude Sonnet 4.6winasun leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
11000
|
|
10999
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa> 0ladl= Support Daily • in 2h 53 m100% C7Tue 14 Apr 12:07:588Today ~...
|
NULL
|
NULL
|
NULL
|
10999
|
|
10998
|
PhpStormFileFditViewNavigateCodelaravePetactonTool PhpStormFileFditViewNavigateCodelaravePetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.php© JiminnyDebugCommand.phpD Unit>DActions> Component› Configuration> MConsoleM ContractsM DomainD DTO• Enums_Events_ Exceptions© AutomatedReportsCommand.phpC AutomatedReportsSendCommand.phpAddLayoutentities.php(C) Team.nho© AutomatedReportsRepository.php X© CreateHeldActivityEvent.phpC CreateActivityLoggedEvent.php(C) Activtv odded.nnrc) AutomatedRenorscalloackoelvice.onvC RequestGenerateAskJiminnyReportJob.php(©) RequestGenerateReportJob.phpAuLomaleakeportkesult.ono© AutomatedReport.php→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitvclass AutomatedReportsrepos1toryA15 X4 ^> M 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 ObserversPoliciesProvidersRepositoriesD Rules• _ Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenor* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...71 M >* Find an automated report by UUID100 M ›* dparam string $uu1dAM9 MAY*dreturn AutomatedReportnul7157 A>public function findByUuid(string Suuid): ?AutomatedReport185 ₴)return AutomatedReport::where('uuid', AutomatedReport::toOptim.206 6)Tusdye225public function findbyldorUu1d(string s1d0rUu1d): ?Automatedreport227if (is_numeric($id0rUuid)) {return AutomatedReport::find((int) $id0rUuid);229236return AutomatedReport::where('uvid', AutomatedReport::to0ptim./*** Retrieve all standard (non-Ask Jaminny) automated reports.* dparam string ssortcolumnThe column to sort by. Allowed vaz 242* dparam string ssortuireccion ine sorc direccion. ALlowed values244245* drerurn cocuectonsaurondredredor»12 usagespublic function getAllStandardReports(247248string SsortColumn ="created_at',256string SsortDirection =desc): Collection 1.252 M >/*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam userThe user whose reports to retrieve*oodrdl sarno osorccocuminIne cocuin co sorc ou. Accowed vou* dparam string SsortDirection The sort direction. Allowed valuesWinasun ch. // View Changelog (today 10:33)E custom.loc= laravel.logL SF liminny@localhostc HS_local fiminny@localhostconcole DPOlbllL console (EU]L console (STAGINGC) AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php x C RequestGenerateAskJiminnyReportJobTest.phpclass AskuaminnvreoortAcovlrvservcelest extenos estuastorivate Logder interracexmockobnect sloggers9 usagesorivate AskJiminnvRenortActivitvService Sservice:29 GT>protected function setUpO: voidk...?11 usagesprivate function makeFilter(string Skey. ?string $value): SearchFilter&Mock0bject...hprivate function makeUser(): User&Mock0bject{...}orivate function makeSavedSearch(arnav Sfilters): Search&MockObiect..?public function testGetActivitvIdsForSavedSearchReturnsIds@: voidl...}public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(: voidt...}public function testGetActivityIdsFilters0utDateFiltersO: void{...}public function testGetActivityIdsFilters0utClosingPeriodDateFilters(): void{...}public function testGetActivityIdsHandlesArrayFilters(): void{...}public function testGetActivityIdsHandlesScalarFilters(: void{...}public function testGetActivityIdsPassesNonZeroSequenceNumberToDisableFirstRequestDefaultsQ: voidAcceot$user = $this->makeUserO):SsavedSearch = sthis->makeSavedSearch(u.D:$filterSet = $this->createMock( originalClassName: FilterDefinitionCollection::class);sthis-›activitysearch->method( constraint: 'getArrayr1lterkeys')->w1LLReturn(LJD:ScanturedCriteria = null:sthis->activitvSearch->expects(sthis->once@)→>iecno constraind'getOnDemandPageFilterSet')->willReturnCallback(function (Criteria $criteria) use ($filterSet, &$capturedCriteria) (...F);$this-›elasticRepository->method( constraint: "onDemandSearchldsonly")->willReturn(LJD:sthis->loqger->method constraint: "info'D:sthis->service->getAct1v1tyldsForsavedsearch(ssavedsearch, suser):$this->assertNotNull($capturedCriteria):sthis->assertFalse(ScapturedCriteria->1sF1rstrequest0.hpublic function testGetActivitvIdsLogsWithCorrectContext@: voidf...}Accept File 8+X Reject File 1 38 @+ 2 of 2 files →Renect• Support Daily • in 2 h 53 m100% |45]Tue 14 Apr 12:07:57L AskJiminnyReportActivityServiceT..DefaultsCascade*ControlleAutomated Report Ma© Fixing Ask Jiminny Fmrequest eauisiro d ano 1sFirstreovesto reurs true when emotyseouencenunbetThe frontend URL has sequence number=4 — meaning it's not a firstreduest, Tihe service doesn't ser lt, so the criteria thinks it's a first reduest.When isFirstRequest() = true , these implicit filters are applied thataren tin the saveo search" ACLIVILVDIationRande — applies min duration = 1 (INITIAL MIN)— flters out 0-second callls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE =OPTION_RECORDED) — filters to recorded-onlyOrganiserGroupin — applies user's default group filterbut the Trontend With sequence number=4 sklos all or these deraults, so itreturns more resultsIne tix snoule be in bus lakequestraransfrombearch — it neeas to pass sequence number In the oult oarams lo sional "nota Ttistrecuest", so the.implicit detaults don't apply. Or alternatively, always pass a non-zero sequence number in tne meree in ceractivitylasrorsavecsearchNow let me verify my understanding of isfirstRequest :keae uriterla.ono ?Contirmeo, Ine Tx s cear ano minimar Une oetActivlvlosrorsavedsearich method needs to pass sequence_number with a non-zero value so that 1sFirstRequest() returns false and no implicit defaults are applied• AskJi.Now let me check il tnere's an existine lesttor AskuiminnykeportaccivicyService to uodate.Explored AskJiminnyReportActivityServiceTest.php and searched AskJi... ›Ineed to ade a lest that vertles sequence numderet is passeeto cricerlaso 1srurstreqvestlo rerurns tallse)r ler meaco Ilo tne ex sune lestfile.• AskJiminnyReportActivityServiceTest.phpNow let's run the test to verify:rtactivityservicelest.pnpphp /var/www/html/artisan testnauon nuculld ceunerot topnonocicnmynerenocoverayeCould not open input file: /var/www/html/artisandockerexec docker lamp 1 php /app/artisan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyRepoTenclevelyoeivecelesteune e-norcovelayeKUnX+SkipView all.sk/AutomatedReports/@ AskJiminnvReportActivitvServiceTest.phv +27.../Kiosk/AutomatedReports/D AskJiminnyReportActivityService.php+1 -1Reject allAccept allAsk anything (&+L)+ ‹› CodeClaude Sonnet 4.6winasun leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10998
|
|
10997
|
PhpStormFileFditViewNavigateCodeLaravelPetactonToo PhpStormFileFditViewNavigateCodeLaravelPetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.php© JiminnyDebugCommand.php= custom.log= laravel.logL SF (iminny@localhostc HS_local fiminny@localhostL console (PROD]& console (EU]L console (STAGINGD Unit_ ActionsC Component› ConfigurationM ConsoleM ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixturesD Helpers_ Http>_Integrations> MinteractionsMJobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobTcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordin(c) SqsVisibilityControlTestMListeners© AutomatedReportsCommand.php© AutomatedReportsSendCommana.pnpC AskJiminnyReportActivityService.phpC) AskJiminnyReportActivityServiceTest.php x C) RequestGenerateAskJiminnyReportJobTest.php)AddLayoutentities.php(C) Team.nho© AutomatedReportsRepository.php x© CreateHeldActivityEvent.phpC CreateActivityLoggedEvent.phpclass AskJiminnyReportActivityServiceTest extends TestCaseprivate LoggerinterfacexMock0bject slogger:9 usagesprivate AskJ1minnykeporcAculVityservice sservice;(C) Activtv odded.nnr29 GT>protected function setUp(: voidf...c) AutomatedRenorscalloackoerwce.onvC RequestGenerateAskJiminnyReportJob.php1l usages(©) RequestGenerateReportJob.php(C) AutomatedReportResult.phpprivate function makeFilter(string Skey. ?string $value): SearchFilter&Mock0bject...h© AutomatedReport.phpo usaeesa Support Daily • in 2 h 53 m100% |45]Tue 14 Apr 12:07:55L AskJiminnyReportActivityServiceT..DefaultsCascade†ControlleAutomated Renort Mal© Fixing Ask Jiminny Fmrequest eauisirod ano 1sFirstreovesto reurs true when emotyseouencenunbelThe frontend URL has sequence number=4 — meaning it's not a firstreduest, Tihe service doesn't ser lt, so the criteria thinks it's a first reduest.When isFirstRequest() = true , these implicit filters are applied thataren tin the saveo search1. ActivitvionRanae — applies min duration = 1 (INITIAL MIN)— flters out 0-second callls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE =OPTION_RECORDED) — filters to recorded-onlyOrganiserGroupin — applies user's default group filterclass AutomatedReportsrepos1tory> MModelsM Notifications› M ObserversD PoliciesProvidersRepositories> D Rulesv Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenorA15 V4^private function makeUsero: UserxMockobject...h* dreturn AutomatedReportpublic function create(array $data): AutomatedfAAskJiminnyReportActivityServiceTest.testGetActivityldsPasse..GKOA* Find an automated report by UUID* dparam string $uu1dGGGUv *: Running tests...v v CLI Arguments> v Tests\Unit|Services\Kiosk\AutomatedReports\AsKJiminnyReportActivityServiceTest*dreturn AutomatedReportnul7public function findByUuid(string Suuid): ?Autcreturn AutomatedReport::where('uuid', Auton1 test passed 1 test total, 2 sec 80 msTusdyepublic function findbyldoruu1d(string s1d0rUulcif (is_numeric($id0rUuid)) {return Aucomacedkeport:.tznal(1nt) $1dlreturn AutomatedReport::where(('uuid'. Auton/*** Retrieve all standard (non-Ask Jaminny) autc* dparam string ssortcolumnThe column to s* dparam string ssortulreccion ine sort direct* drerurn couuectonsaurondredredor12 usagespublic function getAllStandardReports(string SsortColumn E"created_at',string SsortDirection =desc: Collection 1./*** Recrieve aLL Ask Jaminny reporus created Dy tne given user.* dparam usersuserIne user wnose reporus to retrieve*oodrdl sarno osorccocuminIne couin co sorc ou. Accowed voc* dparam string SsortDirection The sort direction. Allowed valuesbut the Trontend With sequence number=4 sklos all or these deraults, soitreturns more resultsyequestraransrrombearch — it neeas to pass soarams lo sional "nota Tist recuest", so the: Or alternatively, always pass a non-zero sequevecactivitylosrorsavecsearch4s voumsstanding of isfirstRequest:no minimar Une oetActivlvlosrorsavedseanequence_number with a non-zero value so that 1False and no implicit defaults are appliedan existine lesttor AskuiminnукeporLaccivicyMes sequence numderet is passeeto cricerlains talse)rlerme acc Tto tne ex sune lestlyservicelestongphp /var/www/html/artisan testIKlosk/AutomatedReports/AskJiminnyRepost.phpno-coverayertlle. var ww htmyartisanlamp 1 php /app/artisan test/Kiosk/AutomatedReports/AskJiminnyReposleone -no-covelayeRun 88+ SkipView allJskJiminnvReportActivitvServiceTest.phv +27./Kiosk/AutomatedReports/D AskJiminnyReportActivityService.php+1 -1Reject allAccept allAsk anything (&+L)1 eaitJ v Accept File *~ X Reject File t%@* 2 of 2 files →+ <› Code.Claude Sonnet 4.6Winasun chand. // View Changelog (today 10:33)winasun leamsZ45uir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10997
|
|
10996
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa> 0ladl= Support Daily • in 2h 53 m100% C7Tue 14 Apr 12:07:558Today ~...
|
NULL
|
NULL
|
NULL
|
10996
|
|
10995
|
PhpStormFileFditViewNavigateCodeLaravelRetactorToo PhpStormFileFditViewNavigateCodeLaravelRetactorToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.php© JiminnyDebugCommand.php= custom.log= laravel.logL SF (iminny@localhostc HS_local fiminny@localhostL console (PROD]& console (EU]L console (STAGINGD Unit_ ActionsComponent› ConfigurationM ConsoleM ContractsM DomainD DTO• Enums_ Events_ Exceptions→ fixturesD Helpers_ Http>_Integrations> MinteractionsMJobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReports©) CreateResultsTest.pl© AutomatedReportsCommand.phpC AutomatedReportsSendCommand.phpC AskJiminnyReportActivityService.phpC) AskJiminnyReportActivityServiceTest.php x C) RequestGenerateAskJiminnyReportJobTest.phpAddLayoutentities.php(C) Team.nho© AutomatedReportsRepository.php x© CreateHeldActivityEvent.phpclass AskJiminnyReportActivityServiceTest extends TestCaseprivate LoggerinterfacexMock0bect slogger9 usagesC CreateActivityLoggedEvent.phpprivate AskJ1minnykeporcAculVityservice sservice;(C) Activtv odded.nnr29 GT>protected function setUp(: voidf...c) AutomatedRenorscalloackoerwce.onvC) RequestGenerateaskJiminnykeportJob.ong1l usages(©) RequestGenerateReportJob.php(C) AutomatedReportResult.phpprivate function makeFilter(string Skey. ?string $value): SearchFilter&Mock0bject...h© AutomatedReport.phpclass AutomatedReportsrepos1toryo usaees(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobTcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordin(c) SqsVisibilityControlTestMListeners→]Mal> MModelsM Notifications› M ObserversD PoliciesProvidersRepositories> D Rulesv Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyReporA15 V4^private function makeUsero: UserxMockobject...h* dreturn AutomatedReportpublic function create(array $data): AutomatedfRunAAskJiminnyReportActivityServiceTest.testGetActivityldsPasse..GGGUGKOA* Find an automated report by UUIDv * Running tests...v *- CLI Arguments* dparam string $uu1d> * Tests(Unit(Services\Kiosk\AutomatedReports\AsKJiminnyReportActivityServiceTest*dreturn AutomatedReportnul7public function findByUuid(string Suuid): ?Autcreturn AutomatedReport::where('uuid', Auton0 test passed 0/1 testsTusdyepublic function findbyldoruu1d(string s1d0rUulcif (is_numeric($id0rUuid)) {return Aucomacedkeport:.tznal(1nt) $1dlreturn AutomatedReport::where(('uuid'. Auton/*** Retrieve all standard (non-Ask Jaminny) autc* dparam string ssortcolumnThe column to s* dparam string ssortulreccion ine sort direct* drerurn couuectonsaurondredredor12 usagespublic function getAllStandardReportsstring SsortColumn E"created_at',string SsortDirection =desc: Collection 1./*** Recrieve aLL Ask Jaminny reporus created Dy tne given user.* dparam usersuserIne user wnose reporus to retrieve*oodrdl sarno osorccocuminIne cocuin co sorc ou. Accowed vou1 eallv Accept File *~ X Reject File + 38 €* 2 of 2 files →(c AutomatedRenor* dparam string SsortDirection The sort direction. Allowed valuesWinasur change. // View Changelog (today 10:33)a Support Daily • in 2 h 53 m100% |45]Tue 14 Apr 12:07:50L AskJiminnyReportActivityServiceT..DefaultsCascade*ControlleAutomated Renort Mal© Fixing Ask Jiminny Fmrequest eauisirod ano 1sFirstreovesto reurs true when emotyseouencenunbelThe frontend URL has sequence number=4 — meaning it's not a firstreduest, Tihe service doesn't ser lt, so the criteria thinks it's a first reduest.When isFirstRequest() = true , these implicit filters are applied thataren tin the saveo search1. ActivityionRanae — applies min duration = 1 (INITIAL MIN)— Tllters out 0-second calls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE =OPTION_RECORDED) — filters to recorded-onlyOrganiserGroupin — applies user's default group filterbut the Trontend With sequence number=4 sklos all or these deraults, soitreturns more resultsyequestraransrrombearch — it neeas to pass soarams lo sional "nota Tistrecuest", so the: Or alternatively, always pass a non-zero sequevecactivitylosrorsavecsearchstanding of isfirstRequest:no minimar Une oetActivlvlosrorsavedseanequence_number with a non-zero value so that 1False and no implicit defaults are appliedan existine lesttor AskuiminnукeporLaccivicyMes sequence numderet is passeeto cricerlains talse)rlerme acc Tto tne ex sune lestlyservicelestongphp /var/www/html/artisan test/Kiosk/AutomatedReports/AskJiminnyRepost.phpno-coverayertlle. var ww htmyartisanlamp 1 php /app/artisan test/Kiosk/AutomatedReports/AskJiminnyReposleone -no-covelayeRun 88+ SkipView allJskJiminnvReportActivitvServiceTest.phv +27./Kiosk/AutomatedReports/D AskJiminnyReportActivityService.php+1 -1Reject allAccept allAsk anything (&+L)+ <› Code.Claude Sonnet 4.6winasun leamsZ45uir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10995
|
|
10994
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa> 0ladl= Support Daily • in 2h 53 m100% <47Tue 14 Apr 12:07:458Today ~...
|
NULL
|
NULL
|
NULL
|
10994
|
|
10993
|
PhpStormFileFditViewNavigateCodelaravePetactonTool PhpStormFileFditViewNavigateCodelaravePetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.php© JiminnyDebugCommand.php= custom.lod= laravel.logL SF (iminny@localhostc HS_local fiminny@localhostL console (PROD]& console (EU]L console (STAGINGD Unit>DActions> Component› 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) SqsVisibilityControlTestMListenersC AutomatedReportsCommand.phpC AutomatedReportsSendCommand.phpC) AskJiminnyReportActivityService.phpC) AskJiminnyReportActivityServiceTest.php x C) RequestGenerateAskJiminnyReportJobTest.phpAddLayoutentities.php(C) Team.nho© AutomatedReportsRepository.php X© CreateHeldActivityEvent.phpclass AskJiminnyReportActivityServiceTest extends TestCaseprivate LoggerinterfacexMock0bect slogger9 usagesC CreateActivityLoggedEvent.phpprivate AskJ1minnykeporcAculVityservice sservice;(C) Activtv odded.nnr29 GT>protected function setUp(: voidf...c) AutomatedRenorscalloackoerwce.onvC) RequestGenerateaskJiminnykeportJob.ono1l usages(©) RequestGenerateReportJob.phpAuLomaleakeportkesult.onoprivate function makeFilter(string Skey. ?string $value): SearchFilter&Mock0bject...h© AutomatedReport.phpclass AutomatedReportsrepos1toryo usaees> MModelsM Notifications› M ObserversPoliciesProvidersRepositoriesD Rules• _ Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c AutomatedRenorA15 V4 ^private function makeUsero: UserxMockobject...h* dreturn AutomatedReport8 usagesprivate runcuion makesavedsearcn(array prilters): searchomockudjeccl...spublic function create(array $data): AutomatedReport...71 M >public function testGetActivityIdsForSavedSearchReturnsIds: voidf...}* Find an automated report by UUID100 M >public function testGetActivityIdsForSavedSearchReturnsEmptyWhenNoResults(: voidt...}* dparam string $uu1d118 M >public function testGetActivityldsFilters0utDateFiltersO: voidk...h*dreturn AutomatedReportnul7public function findByUuid(string Suuid): ?AutomatedReport157 % >184185 ₽ >public function testGetActivityIdsFilters0utClosingPeriodDateFilters(): void{...}public function testGetActivityIdsHandlesArrayFilters(): void{...}return AutomatedReport::where('uuid', AutomatedReport::toOptim.206 6)public function testGetActivityIdsHandlesScalarFilters(: void{...}Tusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReportif (is_numeric($id0rUuid)) {225 h Pun 'testGetActivitvldsPaO- Debug 'testGetActivityldsPa...'( Run 'testGetActivitvidsPa...' with CoverageModify Run Configuration….PassesNonZeroSequenceNumberToDisableFirstRequestDefaultsQ: void228229230edSearch([]) ;sfilterSet = sthis-›createMock( originalClassName: FilterDefinitionCollection::class):sthis->activitysearch->method( constraint:'getArrayr1lterKeys')->w1LLReturn(LJD:lreturn AutomatedReport::where('uvid', AutomatedReport::to0ptim.Ncaoruredtrtertae nuuu/*** Retrieve all standard (non-Ask Jiminny) automated reports.ani S->acuwVsearch-sexdectsiun S->once u→>iecno constraind'getOnDemandPageFilterSet')-LurerurnlacLoacku runculon(Criteria $criteria) use ($filterSet, &$capturedCriteria) {...F);* dparam string ssortcolumnThe column to sort by. Allowed vaz 242* dparam string ssortuireccion ine sorc direccion. ALlowed values* drerurn cocuectonsaurondredredor»12 usagespublic function getAllStandardReportsstring SsortColumn ="created_at',string SsortDirection =desc: Collection 1.245245— 246247248— 249250_231252 M >$this-›elasticRepository->method( constraint:'onDemandSearchldsonly')->willReturn(LJD:sthis->Loggen->method constraint: "info'D:sthis->service->getActiv1tyudsForsavedsearch(ssavedsearch,suser);sthis->assertNotnulu(scapturedcriter1a)punis->assercralsel.capcureacriter1a->1srirsckequescoohpublic function testGetActivitvIdsLogsWithCorrectContext@: voidf..../*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam userIne user wnose reporus to retrieve*oodrdl sarno osorccocuminIne couin co sorc ou. Accowed vou* dparam string SsortDirection The sort direction. Allowed values1 eal/ Accept File &+X Reject File 1%g+ 2 of 2 files →Winasun ch. // View Changelog (today 10:33)AcceotRenect: Support Daily • in 2 h 53 m100% [2Tue 14 Apr 12:07:44RequestGenerateAskJiminnyReportJobTest vCascade†ControlleAutomated Renort Mal© Fixing Ask Jiminny FNow I nave the complele root cause picture. Inis is criucal:Poot calce SallndlIne ous lokequestraranst romsearch metnoe in Askudminnykeportactiv.tyService passes sequence number=" Implicitv not in params. whichimeals esrerstnequestly retums trueWhen sequence number Is notin requestParams, the criteria:: createrromRequest detaults itto 0, and isFirstRequest() returns true when emptysequencenumberThe frontend URL has sequence number=4 — meanina it's not a firstrequest. The service doesn't set it, so the criteria thinks it's a first request.wnen 1srirstkeouest = chue, tnese lmpllcit tlters are agglled tnalaren 't in the saved search1. ActivityDurationRange — applies min_duration = 1 (INITIAL_MIN)- filters out 0-second calls%AcIIvlivrecorded — adoles only recorded = 1 D--AULI VALUE=OPTION_RECORDED) - filters to recorded-onlyOrganiserGroupIn — applies user's default group filterburthe Tronteno Wiun sequence numberza skiosalll ortnese ceaulis. soitretums more resullsIne tix snoule oe in bur lakequestraranstrombearch - lneeas lo pass sequence number in the oult params to sicnal "not a first recuest" so theimplicit defaults don't apply. Or alternatively, always pass a non-zero sequence number in the merge in gecactivitylasrorsavedsearch.Read As.Now let me verify my understanding of isFirstRequest :reao crieraoneContirmed. The fix is clear and minimal. Tine detActivirvidsForsavedSearich method needs to pass sequence number with a non-zero value so that 1srirstrequesc returns talse ane no imolicit aeraults are apollea1 ASkJInNow let me check ir there's an existing test for AskJiminnykeportActivityService to update:Explorea AskJiminnykepor Activilyservicelest.ono and searched ASkJl..Ineed lo add a lest thau verities sequence number=l is passed to criceriaso 1sFirstRequestlo returns false ). Ler me add It to the existine testi• AskJiminnyReportActivityServiceTest.phpNow ler's run the lestto verity.docker exec docker lamp 1 php /var/www/html/artisan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyRepo"enceevalyoet veccteotephrTurcovelayeCould not open input file: /var/www/html/artisanCommand docken•docker exec aockerdocker_Lamp_1 php /app/artisanView all.sk/AutomatedReports/@ AskJiminnvReportActivitvServiceTest.phv +27.../Kiosk/AutomatedReports/D AskJiminnyReportActivityService.phpReject allAccept allAsk anything (&+L)+ ‹› CodeClaude Sonnet 4.6winasun leamsuir-oia 4 spacesW...
|
NULL
|
NULL
|
NULL
|
10993
|
|
10992
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa> 0ladl= Support Daily • in 2h 53 m100% C48Tue 14 Apr 12:07:44Today ~...
|
NULL
|
NULL
|
NULL
|
10992
|
|
10991
|
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
PhpStormFileFditViewNavigateCodelaravelRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject vv _ AutomatedReports(C) ActivityTypeService.(C AskJiminnyReportAc(C) AutomatedReportse(C) AutomatedReportsS© DealStagesService.p© Recipientsservice.pr@ Reportsort.php(e) Reporisonbirection.Kloskservice.php> M Mail› MeetingGenerator› Notification> D0Auth2RecallAl_ Security_ StrategyStreamingM TeamTelephonyM UserPilot>MWebhook© AbstractService.php© ActivityProviderFactory.ph(©) ActivityService.phpC ApiResponseService.php(C) ConferenceService.php© InsightSeatService.php© InstantMeetingService.phpC IntercomService.php© IpapiClient.phpC) IpapiService.phpC) ParticioantShareService.phC PlanhatService.ohp(C) PlaybackService.phpPlaybackVideoOnlyService(C) PlaybookCategoryService.C PlaylistGeneratorinterface.(C) ResolveTeamCrmConnectiC SimpleThrottleService.php© SlackService.php© SocialAccountService.phpC) SoftPhoneService.phpC) TeamDeactivatedService.p© TeamOwnerService.php(C) TeamService.phpC) TranscodeParameterResolC UserService.phpC) Uuid.php› D Traits• → UseCases> D UserDUtils• I validation•IV0pnp nelpers.png(C InitialFrontendState.php(©) Jiminny.php(C) Plan.php(©) ReportController.php© JiminnyDebugCommand.php© AutomatedReportsCommand.phpC AutomatedReportsSendCommand.phpAddLayoutentities.php(C) Team.nho© AutomatedReportsRepository.php X© CreateHeldActivityEvent.phpC CreateActivityLoggedEvent.php(C) User?llorActvtvuistener.ono(C) Activtv odded.nnrc) AutomatedRenorscalloackoerwce.onvC) RequestGenerateaskJiminnykeportJob.ono(©) RequestGenerateReportJob.phpAuLomaleakeportkesult.ono© AutomatedReport.phpclass AutomatedReportsrepos1toryA15 У4 л515354647576* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...Д26* Find an automated report by UUID* dparam string suuld.30*dreturn AutomatedReportnul7public function findByUuid(string Suuid): ?AutomatedReportreturn AutomatedReport::where('uuid', AutomatedReport::to0ptim37-39Tusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReport 41— 42if (is_numeric($id0rUuid)) {return Automacedkeport..tznal(1nt) s1auruu1a);return AutomatedReport::where('uvid', AutomatedReport::to0ptim.46/*** Retrieve all standard (non-Ask Jaminny) automated reports._5€* dparam string ssortcolumnThe column to sort by. Allowed val* dparam string ssortuireccion ine sorc direccion. ALlowed values*dreturn coLLectlon<Aucomacedkeport>12 usagespublic function getAllStandardReportsstring $sortColumn = 'created_at",string SsortDirection =desc— 5/: Collection 1..\ 59/*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dodran UsensuserIne user whose reports to retrieve 64*oodrdl sarno osorccocumintne column to sort by. Allowed val 6s* Oparam string $sortDirection The sort direction. Allowed values 66Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logL SF (iminny@localhostc HS_local fiminny@localhostL console (PROD]& console (EU]L console (STAGINGC AskJiminnyReportActivityservice.pnp x© AskJiminnyReportActivityService lest.pnp *C RequestGenerateAskJiminnyReportJobTest.phpuse Psr\Log Loggerincertace:8 usagesclass asкудmадукерorcaccvicyserviceprivate const int DEFAULT TOP_ACTIVITIES COUNT = 100:Tusdyeprivate const array [ENV_SECRET],ACEIVALEVACTUALDATE.-PAKAN ENUWANEAculvityupdaceduace:.PARAN_UPDATEU_FRUN,ACINLTVUDOaLeODaTe.:PAKAN UPDAIEU U.ClosingPeriodFilter::KEY START DATE.ClosingPeriodFilter::KEY_END_DATE]:public function __constructlprivate readonly ActivitySearch Sactivitysearch,private readonly Elast1cActiv1tyRepos1tory selasticrepos1tory.privace readonly Loggerintertace slogger.) 1...3* 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 getContextForAskAnuthingByfilter.* Oreturn string[] Activity IDs*/14 usagespublic function getActivityIdsForSavedSearch(Search SsavedSearch,user puser,D: arraySrequestParams = Sthis->buildRequestParamsFromSearchSsavedSearch. Suser):$criteria = Criteria::createFromRequestmarree ($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),array_merge(srequestParams, L'Lim1t => self::DEFAULT_TOP_ACTIVITIES_COUNI,|'page' => 1, 'sequence_number' => 110.puser-›geclinezonel)SfilterSet = Sthis->activitySearch->getonbemandPager1lcersec(scruterta, suser):Sactivitylds = $this->elasticRepository->onDemandSearchIds0nly($user, $criteria, $filterSet);sthis->logger->info(lAskJiminnyReport Fetched activity IDs for saved search','saved_search_1d => ssavedsearch->getid).'user_1d => Suser->getid),'actvity counti=> count(sactivitylds),J:return sactvitvlos.Accept File 8+X Reject File 138&€ 1 of 2 files →: Support Daily • in 2 h 53 m100% [2Tue 14 Apr 12:07:42RequestGenerateAskJiminnyReportJobTest vCascade†ControlleAutomated Renort Mal© Fixing Ask Jiminny FNow I nave the complele root cause picture. Inis is criucal:Poot calce SallndlIne ous lokequestraranst romsearch metnoe in Askudminnykeportactlv1tyService passes sequence number=" Implicitv not in params. whichimeals esrerstnequestly retums trueWhen sequence number Is notin requestParams, the criteria:: createrromRequest detaults itto 0, and isFirstRequest() returns true when emptysequencenunber ===0The frontend URL has sequence number=4 — meaning it's not a firstrequest. The service doesn t set it, so the criteria thinks it's a first request.wnen 1srirstkeouest = chue, tnese lmpllcit tlters are agglled tnalaren 't in the saved search1. ActivityDurationRange — applies min_duration = 1 (INITIAL_MIN)- filters out 0-second calls%AcIIvlivrecorded — adoles only recorded = 1 D--AULI VALUE=OPTION_RECORDED) - filters to recorded-only3. OrganiserGroupIn - applies user's default group filterburthe Tronteno Wiun sequence numberza skiosalll ortnese ceaulis. soitvetums more resullsIne tix snoule oe in bur lakequestraranstrombearch - lneeas lo pass sequence number in the oult params to sicnal "not a first recuest" so theimplicit defaults don't apply. Or alternatively, always pass a non-zero sequence number in the merge in gecactivitylasrorsavedsearch.Now let me verify my understanding of isFirstRequest :reao crieraronoContirmed. The fix is clear and minimal. Tine detActivirvidsForsavedsearich method needs to pass sequence number with a non-zero value so that 1srirstrequesc returns talse ane no imolicit aeraults are apollea1 ASkJInNow let me check ir there's an existing test for AskJiminnykeportActivityService to update:Explorea AskJiminnykepor Activilyservicelest.ono and searched ASkJl..Ineed lo add a lest thau verities sequence number=l is passed to criceriaso 1sFirstRequestlo returns false ). Ler me add It to the existine testi• AskJiminnyReportActivityServiceTest.phpNow ler's run the lestto verity.docker exec docker lamp 1 php /var/www/html/artisan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyRepo"enceevalyoet veccteotephrTurcovelayeCould not open input file: /var/www/html/artisanCommand docken•docker exec aockerdocker_Lamp_1 php /app/artisan2 files with chandes.sk/AutomatedReports/@ AskJiminnvReportActivitvServiceTest.phv +27View all.../Kiosk/AutomatedReports/D AskJiminnyReportActivityService.php+1 -1Reject allAccept allAsk anything (&+L)+ ‹› CodeClaude Sonnet 4.6Winasun leams42:31uir-oia 4 spacesW...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityServiceTest.ph faVsco.js – AskJiminnyReportActivityServiceTest.php...
|
NULL
|
10991
|
|
10990
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa> 0ladl= Support Daily • in 2h 53 m100% C7Tue 14 Apr 12:07:428Today ~...
|
NULL
|
NULL
|
NULL
|
10990
|
|
10989
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aa> 0ladl= Support Daily • in 2h 53 m100% <47Tue 14 Apr 12:07:338Today ~...
|
NULL
|
NULL
|
NULL
|
10989
|
|
10988
|
+SlackFileEditViewGoHistoryWindowHelpEDHomeDMsActi +SlackFileEditViewGoHistoryWindowHelpEDHomeDMsActivityFilesLater..•More+Jiminny ...sos# 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. Cala Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievAa>0 lhl§ Support Daily • in 2h 53 m100% <*Tue 14 Apr 12:07:3084Today ~New...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityService.php
|
NULL
|
10988
|
|
10987
|
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, 'sequence_number' => 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;
}
}
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...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityService.php
|
NULL
|
10987
|
|
10986
|
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, 'sequence_number' => 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;
}
}
Sync Changes
Hide This Notification
Code changed:...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityService.php
|
NULL
|
10986
|
|
10985
|
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, 'sequence_number' => 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;
}
}
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...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityService.php
|
NULL
|
10985
|
|
10984
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aalal]Support Daily - in 2h 54 m100% <47Tue 14 Apr 12:06:408Today ~...
|
NULL
|
NULL
|
NULL
|
10984
|
|
10983
|
PhpStormFileEditViewNavigateCodeLaravelRefactorFV PhpStormFileEditViewNavigateCodeLaravelRefactorFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vToolsWindowHelpProject vD AutomatedReports© ActivityTypeService.© AskJiminnyReportAc© AutomatedReportsCi© AutomatedReportsSt© DealStagesService.p© RecipientsService.ph® ReportSort.php(e) Reporisonbirection.Kloskservice.php> M Mail• MeetingGenerator> D NotificationD OAuth2D RecallAl[ SecurityC StrategyStreamingD TeamTelephonyUserPilotM Webhook© AbstractService.php© ActivityProviderFactory.ph|©ActivityService.php© ApiResponseService.php© ConferenceService.php© InsightSeatService.php© InstantMeetingService.php©IntercomService.php©IpapiClient.phpIpapiService.php© ParticipantShareService.ph© PlanhatService.php© PlaybackService.phpPlaybackVideoOnlyService©PlaybookCategoryService./© PlaylistGeneratorInterface.© ResolveTeamCrmConnecti© SimpleThrottleService.php© SlackService.php© SocialAccountService.php© SoftPhoneService.phpC) TeamDeactivatedService.p© TeamOwnerService.php©TeamService.php© TranscodeParameterResol© UserService.php© Uuid.php› C Traits› D UseCases> D User→IUTIS• I validation> D VOphp helpers.php© InitialFrontendState.php© Jiminny.php© Plan.php© ReportController.php© AutomatedReportsCommand.phpAddLayoutEntities.php© JiminnyDebugCommand.php© AutomatedReportsSendCommana.pnp• Team.php© AutomatedReportsRepository.php x© CreateHeldActivityEvent.phpC CreateActivityLoggedEvent.php(C) User?llorActiviv.istener.oho© ActivityLogged.php(©) AutomatedReportsCallbackService.php• RequestGenerateAskJiminnyReportJob.php© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsRepository(C) RequestGenerateReportJob.phpA15 V4^475152535456646574* dreturn AutomatedReportpublic function create(array $data): AutomatedReportf./*** Find an automated report by UUID* @param string $uvid* @return AutomatedReport/nullpublic function findByUuid(string $uuid): ?AUtomatedRep(33return AutomatedReport:: where('uuid', AutomatedRepor 3637-381 usagepublic function findById0rUuid(string $id0rUuid): ?Autonif (is_numeric($idOrUuid)) €return Automacedkeport..tznal(1nt) s1auruu1a);return AutomatedReport: :where('uvid', AutomatedRepor/*** Retrieve all standard (non-ASk Liminny) automated retso* @param string $sortColumnThe column to sort by. A* Oparam string $sortDirection The sort direction. AllC51* Oreturn Collection<AutomatedReport>12 usagespublic function getAllStandardReports(string $sortColumn = 'created_at',string $sortDirection = 'desc'): Collection {...}/*** Retrieve all Ask Ziminny reports created by the giver 62* @param UsersusenThe user whose reports 164*oodrdl sarno osorccocuminIne cocumn co sorc Dy. ·65* Oparam string $sortDirection The sort direction. AllC66Windsurf changelog 2.12.21: A new version is available. // View Changelog (today 10:33)= custom.log= laravel.logA SF [jiminny@localhost]L console [STAGING]© AskJiminnyReportActivityService.php xRequestGenerateAskJiminnyReportJobTest.phpuse Jiminny\Models\Activity\Search;useJiminny\Models \User;use Jiminny\Repositories\ElasticActivityRepository;use Jiminny\VO\Repository\OnDemandActivitySearch\Criteria;usePsr\Log\LoggerInterface;A HS_local [jiminny@localhost]Al console [PROD]© AskJiminnyReportActivityServiceTest.phpA console (EU]class asкуладукерorcaccvicyserviceprivate const int DEFAULT_TOP_ACTIVITIES_COUNT = 100;private const array [ENV_SECRET],ActivityActualDate: :PARAM_END_DATE,ActivityUpdatedDate: :PARAM_UPDATED_FROM,ActivityUpdatedDate::PARAM_UPDATED_TO,ClosingPeriodFilter::KEY_START_DATE,closingrer1odrilter..KEY_ENU_bAlE,public function __construct(private readonly ActivitySearch $activitySearch,private readonly ElasticActivityRepository $elasticRepository,private readonly LoggerInterface $logger,0 {...3/*** 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.* Oreturn string[] Activity IDspublic function getActivityIdsForSavedSearchCSearch $savedSearch,User $user,): array {$requestParams = $this->buildRequestParamsFromSearch($savedSearch, $user);$criteria = Criteria::createFromRequest(Acceptmagze ($requestParams, ['limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => 1]),array_merge($requestParams, ['Limit' => self::DEFAULT_TOP_ACTIVITIES_COUNT, 'page' => A,'sequence_numb$user->getTimezone()$filterSet = $this-›activitySearch->getOnDemandPageFilterSet($criteria, $user);$activityIds = $this->elasticRepository->onDemandSearchIds0nly($user, $criteria, $filterSet);nunus-> looder>info('lAskJiminnxRepont] Fetched activity IDsfor saved search'.→> $savedSearch->getId(),'user id' => Suser->qetIdo.'activity_count' => count($activityIds),ID:return SactivityIds;V Accept File *+X Reject File 0 38@€ 1 of 2 files →, 0lablSupport Daily - in 2h 54mA100% |45]Tue 14 Apr 12:06:37RequestGenerateAsk.liminnvRenort.lob TestCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny R+D ...Now see tne Tul o clure, Lerme also check Activitvlurat ionkande ano Actwvitvkecorded ceauis or 1sFirstRwequeseuy.Reao Acuiviyburauonkance ono ano Actvivrecorcec.onoNow Inave tne comolere roo, cause o cture. nis s crucarRoot Cause Foundne oua lokequestraramsrromsearch mernocin Ask aminnvredortActvl vservice vasses sequence number=implicitly (not in params), which means isFirstRequest() returns true.When sequence number Is notin requestParams, the criteria:: createrromkequest delaulsitlo o, and 1sr1rstRequest() returns true when empty || sequenceNumber === 0.The frontend URL has sequence_number=4 — meaning it's not a first request. The service doesn't set it, so thecriera thinks iu's atistrecuestWhen isFirstRequest() = true, these implicit filters are applied that aren't in the saved search:1. Activityburationkange — applies min_duration = 1 (INITIAL_MIN) - Tllters out U-second calls2. ActivityRecorded - applies only_recorded = 1 (DEFAULT_VALUE = OPTION_RECORDED) - filters torecorded-ohly3. OrganiserGroupIn - applies user's default group filterbut the Trontend With sequence number=4 sklos all or these derauls, so it returns more resuits.The fix should be in buildRequestParamsFromSearch - it needs to pass sequence_number in the built params tosignal "not a first request", so the implicit defaults don't apply. Or alternatively, always pass a non-zero sequence_number In tne merce in derAcuivlivlostorsaveNow let me verify my understanding of isFirstRequest:reao criera,onoConirmeo, Ine rixis cear ano minimar Une oetActivlvlosrorsavedsearch menoo neeos o oass sequence nurber with a non-zero value so that isFirstRequest() returns false and no implicit defaults are applied.• Ask.Now let me check if there's an existing test for AskJiminnyReportActivityService to update:Explored AskJiminnyReportActivityServiceTest.php and searched AskJiminnyReportActivity*I need to add a test that verifies sequence_number=1 is passed to Criteria (so isFirstRequest() returns false ).Let me add it to the existing test file:• AskJ.RACIViLyoervicelestoneNow ler's tun tne lestto verity.exeddocker_lamp_pnp /var/www/ncml/drc1san lesytests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServicelest.php --no-covelayeCould not open input file: /var/www/html/artisanCommand dockeno cocker execoocker lano " ono aoparusan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServiceTest.php --no-coverrageRun a8+ (Skip2 files with changestests/Unit/services/Klosk AutomateckeporisAsk.iminnvrenortActivivservicellest.onoapp/Services/Kiosk/AutomatedReports/ [ AskJiminnyReportActivityService.php +1 -1View allReject allAccept allAsk anything (2*L)+ <> CodeClaude Sonnet 4.6winasur leamsuir-o( 4 spaces...
|
NULL
|
NULL
|
NULL
|
10983
|
|
10982
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aalal]Support Daily - in 2h 54 m100% <47Tue 14 Apr 12:06:388Today ~...
|
NULL
|
NULL
|
NULL
|
10982
|
|
10981
|
PhpStormFileFditViewNavigateCodeLaravelRetactonToo PhpStormFileFditViewNavigateCodeLaravelRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject vv _ AutomatedReports(C) ActivityTypeService.(C AskJiminnyReportAc(C) AutomatedReportse(C) AutomatedReportsS© DealStagesService.p© Recipientsservice.pr@ Reportsort.php(e) Reporisonbirection.Kloskservice.php> M Mail_ MeetingGenerator› NotificationD 0Auth2RecallAl_ Security_ StrategyStreamingM TeamTelephonyM UserPilotM Webhook© AbstractService.php© ActivityProviderFactory.phC) ActivityService.phpC ApiResponseService.php(C) ConferenceService.php© InsightSeatService.php© InstantMeetingService.php© Intercomservice.php© IpapiClient.phpC) IpapiService.phpC) ParticioantShareService.phC PlanhatService.ohp(C) PlaybackService.php(C PlaybackVideoOnlyService(C) PlaybookCategoryService.lC PlaylistGeneratorinterface.(C) ResolveTeamCrmConnectiC SimpleThrottleService.php© slackservice.php© SocialAccountService.php© SoftPhoneService.phpC) TeamDeactivatedService.p© TeamOwnerService.php(C) TeamService.phpC) TranscodeParameterResolC UserService.php© Uuid.php> C Traits• → UseCases> D UserDUtils• I validation•IV0pnp nelpers.png(C InitialFrontendState.php(©) Jiminny.php(C) Plan.php(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.php© AutomatedReportsSendCommand.phpC AddLayoutEntities.phpC) Team.phpC) AutomatedReportsRepository.php X) AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?rovidernstalled-vent.onoC ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsrepos1tory62A15 V4 ^* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...* Find an automated report by UUID*dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReportreturn AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:Tusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReportif (is numeric(sidorluid)) "return Automacedkeport..tznal(1nt) s1auruu1a);return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by", 'created_at'. 46* dparam string SsortDirection The sort direction. Allowed values:"asc","desc". befaults to "des47* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created_at',string SsortDirection = 'desc': Collection 1...*** Recrieve aLL Ask Jaminny reporus created Dy the given user.—57* dparam usersuserIne user wnose reporus to retrieve.*oparan scring esortho lunnIne cocumn co sorc oy. Accowed values. creacea_by!creaced_ar".xoocran saino osorcutreccion lne sorc anreccion. Accoyeo vocues.'asc'.'desc'. Defaults to 'dex 6e* dreturn Collection<AutomatedReport>14 usagesWinasurt changelog 2.12.21: A new version is avallable. |/ View Changelog (today 10:33)= custom.log= laravel.logL SF (iminny@localhostHs local liminnyalocalnostconsole PRODL console [EUl¿ consoe STAGINGI© AskJiminnyReportActivityService.php x©) AskJiminnyReportActivityServiceTest.phpC) RequestGenerateAskJiminnyReportJobTest.phpuseJlninny Models Acclvity seareh,useJiminny Models User:use Jiminny Repositories ElasticActivityRepository:-14use Jiminny VO Repository OnDemandActivitySearch\Criteria;use Psr\Log Loggerinterface;17!class ASkJ1minnyReportAct1v1tyServiceonvare const nt UEFAULI UP ACILEES CUUN = 100private const arrav DATE FILTER KEYS =AccIvLcyAccuaLbace..PARAM_SIAKI_UAlE.ActivityActualDate:: PARAM END DATE.ActivityUpdatedDate::PARAM_UPDATED_FROMActivityUpdatedDate::PARAM_UPDATED_TO.ClosingPer1odF1lter::KEY_START_DATE,ClosingPer1odF1lter::KEY_END_DATE,pubuic tunction __conscructlprivace readonly Aculviltysearch saccivitysearch,privace readonty clascicactiviсукeposicory selasucкepository.private readonty Loggerincertace +logger,Df...r*** Fetch activity IDs for a saved search, passing 1ts filters as-1s* Date filters stored on the saved search are excluded; 1f no othen* no date constraint 1s applied - matching the behaviour of getcont.* Oreturn string[] Activity IDspublic function getActivitvIdsForSavedSearchdSearch SsavedSearch.User suser,): array 1SrequestParams = Sthis->buildRequestParamsFromSearchSsavedSearc.scriteria = criteria::createrromrequestlAcceptmreet$requestParams, l'limit' => self::DEFAULT_TOP_AC1array_mergelsrequestrarams, L'Limlu => seLt::UEFAULI_10P_ACnuser-poernezone$filterSet = Sthis-›activitySearch->qetOnDemandPageFilterSet(ScriSactivityIds = sthis->elasticRepository->onDemandSearchlds0nly(Ssth1s->Logger->1nfolLAskJ1minnyReport) Fetched activity IDs fon=> ssavedSearch->getid)."user_1d = suser->gecia).=> count(SactivitvIds).1):Accept rlle ao+X Reject File 40 38 @* 1 of 2 files →, 0lablSupport Daily • in 2 h 54m100% |45]Tue 14 Apr 12:06:34RequestGenerateAsk.liminnvRenort.lob TestCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny FNow see tne Tul o clure, Lerme also check Activitvlurat ionkande ano Actwvitvkecorded ceauis or 1sFirstRequeseureReao Acuviyburauonkance ono ano Acrivivrecorcec.onoNow Inave tne comolere roo, cause o cture. nis s crucarKoot cause rounene oua lokequestraramsrromsearch mernocin Ask aminnvredortActvl vservice vasses sequence number=implicitly (not in params), which means isFirstRequest() returns true.When sequence number Is notin requestParams, the criteria:: createrromkequest delaulsitlo o, and 1sr1rstRequest() returns true when empty sequenceNumber == 0.The frontend URL has sequence number=4 - meaning it's not a first request. The service doesn't set it, so thecriera thinks iu's atrstrecuestWhen isFirstRequest() = true, these implicit filters are applied that aren't in the saved search:1. Activityburationkange — applies min_duration = 1 (INITIAL_MIN) - Tllters out U-second calls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE = OPTION RECORDED) - filters torecorded-ohly3. OrganiserGroupln - applies user's detault group filterbut the Trontend With sequence number=4 sklos all or these derauls, so it returns more resuits.The fix should be in bui ldRequestParamsFromsearch - it needs to pass sequence_number in the built params tosignal "not a first request", so the implicit defaults don't apply. Or alternatively, always pass a non-zero sequence number In tne merce in derAcuivlivlostorsaveNow let me verify my understanding of isFirstRequest :reao criera,onoConirmeo, Ine rixis cear ano minimar Une oetActivlvlosrorsavedsearch menoo neeos o oass sequence nurber with a non-zero value so that isFirstRequest() returns false and no implicit defaults are applied.• Ask.Now let me check if there's an existing test for AskJiminnyReportActivityService to update:Explored AskJiminnyReportActivityServiceTest.php and searched AskJiminnyReportActivity*need to add a test that verifies sequence number=1 IS passed to Criteria (so 1sFirstRequest( returns false )Let me add it to the existing test file:• AskJ.LACIVILyoervicelestongNow ler's tun tne lestto verity.aосker Lamplpnp /var/www/ncml/drc1san lesytests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServicelest.php -=no-covelayeCould not open input file: /var/www/html/artisanCommand dockenO cocker exec vocker lano i ono aoparusan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServiceTest.php -=no-coverrageRun &+ Skip2 files with changestests/Unit/services/Klosk Automatedkenoris/AskJiminnvrenortActivivservicellest.onoView allapp/Services/Kiosk/AutomatedReports/D AskJiminnyReportActivityService.php +1 -1Reject allAccept allAsk anything (&+L)+ <> CodeClaude Sennet 4.6Wwinasur leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10981
|
|
10980
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aalal]Support Daily - in 2h 54 m100% <47Tue 14 Apr 12:06:348Today ~...
|
NULL
|
NULL
|
NULL
|
10980
|
|
10979
|
PhpStormFileFditViewNavigateCodeLaravelRetactonToo PhpStormFileFditViewNavigateCodeLaravelRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject vv _ AutomatedReports(C) ActivityTypeService.(C AskJiminnyReportAc(C) AutomatedReportse(C) AutomatedReportsS© DealStagesService.p© Recipientsservice.pr@ Reportsort.php(e) Reporisonbirection.Kloskservice.php> M Mail_ MeetingGenerator> NotificationD 0Auth2RecallAl_ Security_ StrategyStreamingM TeamTelephonyM UserPilotM Webhook© AbstractService.php© ActivityProviderFactory.phC) ActivityService.phpC ApiResponseService.php(C) ConferenceService.php© InsightSeatService.php© InstantMeetingService.php© Intercomservice.php© IpapiClient.phpC) IpapiService.phpC) ParticioantShareService.phC PlanhatService.ohp(C) PlaybackService.php(C PlaybackVideoOnlyService(C) PlaybookCategoryService.lC PlaylistGeneratorinterface.(C) ResolveTeamCrmConnectiC SimpleThrottleService.php© slackservice.php© SocialAccountService.php© SoftPhoneService.phpC) TeamDeactivatedService.p© TeamOwnerService.php(C) TeamService.phpC) TranscodeParameterResolC UserService.phpC) Uuid.php› C Traits• → UseCases> D UserDUtils• I validation•IV0pnp nelpers.png(C InitialFrontendState.php(©) Jiminny.php(C) Plan.php(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.php© AutomatedReportsSendCommand.phpC AddLayoutEntities.phpC) Team.phpC) AutomatedReportsRepository.php X) AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?roviderinstalled-vent.onoC ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsrepos1tory62A15 V4 ^-14* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...* Find an automated report by UUID*dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReportreturn AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:Tusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReportif (is numeric(sidorluid)) "return Automacedkeport..tznal(1nt) s1auruu1a);return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by", 'created_at'. 46* dparam string SsortDirection The sort direction. Allowed values:"asc","desc". befaults to "des47* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created_at',string SsortDirection = 'desc': Collection 1...*** Recrieve aLL Ask Jaminny reporus created Dy the given user.—57* dparam usersuserIne user wnose reporus to retrieve.*oparan scring esortho lunnIne cocumn co sorc by. Accowed vacues. createa_by!creaced_ar".xoocran saino osorcutreccion lne sorc anreccion. Accoyeo vocues.'asc'.'desc'. Defaults to 'dex 6e* dreturn Collection<AutomatedReport>14 usagesWinasurt changelog 2.12.21: A new version is avallable. |/ View Changelog (today 10:33)= custom.log= laravel.logL SF (iminny@localhostHs local liminnyalocalnostconsole PRODL console [EUl¿ consoe STAGINGI© AskJiminnyReportActivityService.php x©) AskJiminnyReportActivityServiceTest.phpC) RequestGenerateAskJiminnyReportJobTest.phpuseJlninny Models Acclvity seareh,useJiminny Models User:use Jiminny Repositories ElasticActivityRepository:use Jiminny VO Repository OnDemandActivitySearch\Criteria;use Psr\Log Loggerinterface;class ASKJ1minnyReportAct1vityserviceonvare const nt UEFAULI UP ACILEES CUUN = 100private const arrav DATE FILTER KEYS =AccIvLcyAccuaLbace..PARAM_SIAKI_UAlE.ActivityActualDate:: PARAM END DATE.ActivityUpdatedDate::PARAM_UPDATED_FROMActivityUpdatedDate::PARAM_UPDATED_TO.ClosingPer1odF1lter::KEY_START_DATE,ClosingPer1odF1lter::KEY_END_DATE,pubuic tunction __conscructlprivace readonly Aculviltysearch saccivitysearch,privace readonty clascicactiviсукeposicory selasucкepository.private readonty Loggerincertace +logger,Df...r*** Fetch activity IDs for a saved search, passing 1ts filters as-1s* Date filters stored on the saved search are excluded; 1f no othen* no date constraint 1s applied - matching the behaviour of getcont.* Oreturn string[] Activity IDspublic function getActivitvIdsForSavedSearchdSearch SsavedSearch.User suser,D: arraySrequestParams = Sthis->buildRequestParamsFromSearchSsavedSearc.scriteria = criteria::createrromrequestlAcceptmarьa-SrequestParams. "'Timit' => self::DEFAULT TOP AC1array_mergelsrequestrarams, L'Limlu => seLt::UEFAULI_10P_ACnuser-poernezone$filterSet = Sthis-›activitySearch->qetOnDemandPageFilterSet(ScriSactivityIds = sthis->elasticRepository->onDemandSearchlds0nly(Ssth1s->Logger->1nfolLAskJ1minnyReport) Fetched activity IDs fon=> ssavedSearch->getid)."user_1d = suser->gecia).=> count(SactivitvIds).1):Accept rlle ao+X Reject File 40 38 @* 1 of 2 files →, 0lablSupport Daily • in 2 h 54m100% |45]Tue 14 Apr 12:06:25RequestGenerateAsk.liminnvRenort.lob TestCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny FNow see tne Tul o clure, Lerme also check Activitvlurat ionkande ano Actwvitvkecorded ceauis or 1sFirstRequeseureReao Acuviyburauonkance ono ano Acrivivrecorcec.onoNow Inave tne comolere roo, cause o cture. nis s crucarKoot cause rounene oua lokequestraramsrromsearch mernocin Ask aminnvredortActvl vservice vasses sequence number=implicitly (not in params), which means isFirstRequest() returns true.When sequence number Is notin requestParams, the criteria:: createrromkequest delaulsitlo o, and 1sr1rstRequest() returns true when empty sequenceNumber == 0The frontend URL has sequence number=4 - meaning it's not a first request. The service doesn't set it, so thecriera thinks iu's atrstrecuestWhen isFirstRequest() = true, these implicit filters are applied that aren't in the saved search:1. Activityburationkange — applies min_duration = 1 (INITIAL_MIN) - Tllters out U-second calls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE = OPTION RECORDED) - filters torecorded-ohly3. OrganiserGroupln - applies user's detault group filterbut the Trontend With sequence number=4 sklos all or these derauls, so it returns more resuits.The fix should be in bui ldRequestParamsFromsearch - it needs to pass sequence_number in the built params tosignal "not a first request", so the implicit defaults don't apply. Or alternatively, always pass a non-zero sequence number In tne merce in derAcuivlivlostorsaveNow let me verify my understanding of isFirstRequest :reao criera,onoConirmeo, Ine rixis cear ano minimar Une oetActivlvlosrorsavedsearch menoo neeos o oass sequence nurber with a non-zero value so that isFirstRequest() returns false and no implicit defaults are applied.• Ask.Now let me check if there's an existing test for AskJiminnyReportActivityService to update:Explored AskJiminnyReportActivityServiceTest.php and searched AskJiminnyReportActivity*need to add a test that verifies sequence number=1 IS passed to Criteria (so 1sFirstRequest( returns false )Let me add it to the existing test file:• AskJ.LACIVILyoervicelestongNow ler's tun tne lestto verity.aосker Lamplpnp /var/www/ncml/drc1san lesytests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServicelest.php -=no-covelayeCould not open input file: /var/www/html/artisanCommand dockenO cocker exec vocker lano i ono aoparusan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServiceTest.php -=no-coverrageRun &+ Skip2 files with changestests/Unit/services/Klosk Automatedkenoris/AskJiminnvrenortActivivservicellest.onoView allapp/Services/Kiosk/AutomatedReports/D AskJiminnyReportActivityService.php +1 -1Reject allAccept allAsk anything (&+L)+ <> CodeClaude Sennet 4.6Wwinasur leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10979
|
|
10978
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.phpD Unit_ ActionsComponentConfigurationM ConsoleM ContractsM7 DomainD DTO• Enums_ Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReportsAulomaleakeporissendcommand.ongC AddLayoutEntities.phpC Team.phpC) AutomatedReportsRepository.php X© AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?rovidernstalled-vent.onoC ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsrepos1tory©) CreateResultsTest.pl(C) RequestGenerateAs'© RequestGenerateRerC SendReportJobTest.(ch SendRenortMailJobTcallendar!1CrmDeaksksM Mailbox_ Streaming→ Team_ TelephonyD User(c) ImportRecallAlRecordins(c) SqsVisibilityControlTest→I Listeners> MModelsM Notifications› M ObserversPoliciesProvidersRepositories> D Rules• _ Services_ Activity_ ActivityProvidersI IAvatarcallendarConference! CinmiM InternallKioskv _ AutomatedReports©) ActivityTypeServi(c) AskJiminnyRepor(c) AskJiminnyRepor(c) AutomatedRenonA15 /4 л* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...* Find an automated report by UUID*dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReport118 M >return AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:157 Y185 MTusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReport206 >if (is numeric(sidorluid)) "225 D226227return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.250LOJ232- 233* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 235* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "0ex236* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc': Collection 1...*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam usersuserIne user wnose reporus to retrieve.2421243144245240247248249|250_251|252 0 >274*oparan scring esortho lunnIne cocumn co sorc oy. Accowed vacues. created_oy, "creaced_ac". 275)* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'dez* dreturn Collection<AutomatedReport>14 usagesWinasun ch00 2.12.21: A new version is avallable." View Chancelod loday 10:33.= custom.lo9= laravel.logL SF (iminny@localhostHs local liminnyalocalnostconsole PRODL console [EUl¿ consoe STAGING© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpclass AskuLminnyкeporcActIviLyservicelest extenas lesclase290>procecced tunccion secupl: voldt...s11 usagesprivate function makeFilter(string $key, ?string $value): SearchFil1o usagesprivate function makeUserO: User&MockObject...8 usagesprivate function makesavedsearch(array sfilters): SearchxMock0bjectpublic function testGetActivityldsForsavedsearchReturnsuds(): vo1dtpubLic tunction tescbecAculvityLasrorsavedsearchkecurnsemptywnennokououc Tuncmion testcerAcewrosruersuurvatertuerstur voglonearipublic function testGetActivityldsFilters0utClosingPeriodDateFiltenpublic function testGetActivityldsHandlesArrayFiltersO: void..public function testGetActiv1tyldsHandlesscalarr1lters: vo1di...fo ae runecion, testoelactava y easressesnonderoseavencen men louasaesuser = schis->makeuseru;SsavedSearch = Sthis->nakeSavedSearchdiD:$filterSet = Sthis->createMock( originalClassName: FilterDefinitionCsthis->activitySearch->method( constraint:getArrayFilterKeys )->uscapturedcriteria = nului$this->activitySearch->expects ($this->onceO)DemandPageFilterSet')->willReturnCallback(function (Criteria $criteria) use ($fiSthis-›elasticRepository->methodd constraint: "onDemandSearchIdsOnlSthis->logger->method constraint: "info'):sthis-›service->getActivityldsForSavedSearch($savedSearch. suse.sthis->assertNotNull(ScapturedCriteria)isthis->assertralse(scapturedCr1ter1a->1sF1rstRequest0J:pubLic tunction testbetactivitytasLogswichcorrectcontexto: volar.1 eailAcceot rlle do+X Reject File 4 %@+ 2 of 2 files →, 0lablSupport Daily • in 2 h 54m100% |45]Tue 14 Apr 12:06:22RequestGenerateAsk.liminnvRenort.lob TestCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny F+D ..Now see tne Tul o clure, Lerme also check Activitvlurat ionkande ano Actwvitvkecorded ceauis or 1sFirstRequeseuy.Reao Acuviyburauonkance ono ano Acrivivrecorcec.onoNow Inave tne comolere roo, cause o cture. nis s crucarRoot Cause Foundne oua lokequestraramsrromsearch mernocin Ask aminnvredortActvl vservice vasses sequence number=implicitly (not in params), which means isFirstRequest() returns true.When sequence number Is notin requestParams, the criteria:: createrromkequest delaulsitlo o, and 1sr1rstRequest() returns true when empty sequenceNumber == 0The frontend URL has sequence number=4 - meaning it's not a first request. The service doesn't set it, so thecriera thinks iu's atrstrecuestWhen isFirstRequest() = true, these implicit filters are applied that aren't in the saved search:1. ActivityburationKange — applies min_duration = 1 (INITIAL_MIN) - tliters out J-second calls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE = OPTION RECORDED) - filters torecorded-ohly3. OrganiserGroupln - applies user's detault group filterbut the Trontend With sequence number=4 sklos all or these derauls, so it returns more resuits.The fix should be in bui ldRequestParamsFromsearch - it needs to pass sequence_number in the built params tosignal "not a first request", so the implicit defaults don't apply. Or alternatively, always pass a non-zero sequence number In tne merce in derAcuivlivlostorsaveNow let me verify my understanding of isFirstRequest :reac criera,onoConirmeo, Ine rixis cear ano minimar Une oetActivlvlosrorsavedsearch menoo neeos o oass sequence nurber with a non-zero value so that isFirstRequest() returns false and no implicit defaults are applied.• AskNow let me check if there's an existing test for AskJiminnyReportActivityService to update:Explored AskJiminnyReportActivityServiceTest.php and searched AskJiminnyReportActivity*need to add a test that verifies sequence number=1 IS passed to Criteria (so 1sFirstRequest( returns false )Let me add it to the existing test file:• AskJ.LACIIVILyoervicelestongNow ler's tun tne lestto verity.aocker Lame/var/www/html/artisan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServiceTest.php --no-covelayeCould not open input file: /var/www/html/artisanCommand dockeno cocker execoocker lano " ono aoparusan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServiceTest.php --no-coverrageRun &+ Skip2 files with changestests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyRep/ytActivityservicelest.phpann/Services/Kiosk/AutomatedRenorts/MAsk.liminnvRenortActivitvService.ohnt1View allReject allAccept allAsk anything (&+L)+ ‹> CodeClaude Sennet 4.6wwinasun leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10978
|
|
10977
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aalal]Support Daily - in 2h 54 m100% <47Tue 14 Apr 12:06:228Today ~...
|
NULL
|
NULL
|
NULL
|
10977
|
|
10976
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.phpD Unit_ ActionsComponentConfigurationM ConsoleM ContractsM7 DomainD DTO• Enums_Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReportsAulomaleakeporissendcommand.ongC AddLayoutEntities.phpC Team.phpC) AutomatedReportsRepository.php X© AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?rovidernstalled-vent.onoC ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsrepos1tory©) 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) AutomatedRenonA15 V4 ^* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...* Find an automated report by UUID* dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReport118 M >return AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:157 Y185 MTusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReport206 >if (is numeric(sidorluid)) "225 D226227return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.250LOJ232- 233* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 235* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "0ex236* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc'): Collection i...r*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam usersuserIne user wnose reporus to retrieve.2421243144245240247248249250_251252 0 >274*oparan scring esorceocunnIne cocumn co sorc oy. Accowed vacues. created_oy, "creaced_ac". 275)* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'dez* dreturn Collection<AutomatedReport>14 usagesWinasur ch00 2.12.21: A new version is avallable. View chancelod loday 10:33.= custom.lo9= laravel.logL SF (iminny@localhostHs local liminnyalocalnostconsole PRODL console (EUl& consoe STAGING© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpclass AskuLminnyкeporcActIviLyservicelest extenas lescuase290>procecced tunccion secupl: voldt...s11 usagesprivate function makeFilter(string $key, ?string $value): SearchFil1o usagesprivate function makeUserO: User&MockObject...8 usagesprivate function makesavedsearch(array sfilters): SearchxMock0bjectpublic function testGetActivityldsrorSavedSearchReturnsids(: vo1dpubLic tunction tescbecAculvityLasrorsavedsearchkecurnsemptywnennokououc Tuncmion testceracewvosruersuurvatertuersur voglog ...ipublic function testGetActivityldsFilters0utClosingPeriodDateFiltenpublic function testGetActivityldsHandlesArrayFiltersO: void..public function testGetActiv1tyldsHandlesscalarr1lters: vo1di...fo ae runecion, testoelactava y easressesnonderoseavencen men louasaesuser = schis->makeuseru;SsavedSearch = Sthis->makeSavedSearchdiD:$filterSet = Sthis->createMock( originalClassName: FilterDefinitionCsthis->activitySearch->method( constraint:getArrayFilterKeys )->uscapturedcriteria = nului$this->activitySearch->expects ($this->onceO)DemandPageFilterSet')->willReturnCallback(function (Criteria $criteria) use ($filSthis-›elasticRepository->methodd constraint: "onDemandSearchIdsOnlSthis->loggen->methodc constraint: "info'):sthis-›service->getActivityldsForSavedSearch($savedSearch. suse.sthis->assertNotNull(ScapturedCriteria)isthis->assertralse(scapturedCr1ter1a->1sF1rstRequest0J:pubLic tunction tescbecAculvitylasLogswichcorrectconcextl: vold.1 eailAcceot rlle do+X Reject File 4 %@+ 2 of 2 files →, 0lablSupport Daily • in 2 h 54m100% |45]Tue 14 Apr 12:06:20RequestGenerateAsk.liminnvRenort.lob TestCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny F+D ..Now see tne Tul o clure, Lerme also check Activitvlurat ionkande ano Actwvitvkecorded ceauis or 1sFirstRequeseureReao Acuviyburauonkance ono ano Acrivivrecorcec.onoNow Inave tne comolere roo, cause o cture. nis s crucarRoot Cause Foundne oua lokequestraramsrromsearch mernocin Ask aminnvredortActvl vservice vasses sequence number=implicitly (not in params), which means isFirstRequest() returns true.When sequence number Is notin requestParams, the criteria:: createrromkequest delaulsitlo o, and 1sr1rstRequest() returns true when empty sequenceNumber == 0.The frontend URL has sequence number=4 - meaning it's not a first request. The service doesn't set it, so thecriera thinks iu's atrstrecuestWhen isFirstRequest() = true, these implicit filters are applied that aren't in the saved search:1. Activityburationkange — applies min_duration = 1 (INITIAL_MIN) - tllters out J-second calls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE = OPTION RECORDED) - filters torecorded-ohly3. OrganiserGroupln - applies user's detault group filterbut the Trontend With sequence number=4 sklos all or these derauls, so it returns more resuits.The fix should be in bui ldRequestParamsFromsearch - it needs to pass sequence_number in the built params tosignal "not a first request", so the implicit defaults don't apply. Or alternatively, always pass a non-zero sequence number In tne merce in derAcuivlivlostorsaveNow let me verify my understanding of isFirstRequest :reac criera,onoConirmeo, Ine rixis cear ano minimar Une oetActivlvlosrorsavedsearch menoo neeos o oass sequence nurber with a non-zero value so that isFirstRequest() returns false and no implicit defaults are applied.• Ask.Now let me check if there's an existing test for AskJiminnyReportActivityService to update:Explored AskJiminnyReportActivityServiceTest.php and searched AskJiminnyReportActivity*I need to add a test that verifies sequence_number=1 is passed to Criteria (so isFirstRequest() returns false).Let me add it to the existing test file:• AskJ.LACIIVILyoervicelestongNow ler's tun tne lestto verity.aocker Lame/var/www/html/artisan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServiceTest.php --no-covelayeCould not open input file: /var/www/html/artisanCommand dockenO cocker exedcoverrageoocker lano i ono aoparusan testtests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServiceTest.pho --no-Run &+ Skip2 files +28 -1 >Reject allAccept allAsk anything (&+L)+ ‹> CodeClaude Sennet 4.6winasun leamsuir-oia 4 spacesw...
|
NULL
|
NULL
|
NULL
|
10976
|
|
10975
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aalal]Support Daily - in 2h 54 m100% <47Tue 14 Apr 12:06:208Today ~...
|
NULL
|
NULL
|
NULL
|
10975
|
|
10974
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.phpD Unit_ ActionsComponentConfigurationM ConsoleM ContractsM7 DomainD DTO• Enums_ Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReportsAulomaleakeporissendcommand.ongC AddLayoutEntities.phpC Team.phpC) AutomatedReportsRepository.php X© AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?rovidernstalled-vent.onoC ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsrepos1tory©) 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 AutomatedRenorA15 V4 ^* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...* Find an automated report by UUID*dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReport118 M >return AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:157 Y185 MTusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReport206 >if (is numeric(sidorluid)) "225 D226227return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.250LOJ232- 233* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 235* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "0ex236* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc': Collection 1...*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam usersuserIne user wnose reporus to retrieve.2421243144245240247248249250_251252 0 >274*oparan scring esortho lunnIne cocumn co sorc oy. Accowed vacues. created_oy, "creaced_ac". 275)* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'dez* dreturn Collection<AutomatedReport>14 usagesWinasun ch00 2.12.21: A new version is avallable." View Chancelod loday 10:33.= custom.lo9= laravel.logL SF (iminny@localhostHs local liminnyalocalnostconsole PRODL console [EUl& consoe STAGING© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpclass AskuLminnyкeporcActIviLyservicelest extenas lesclase29@>procecced tunccion secupl: voldt...s11 usagesprivate function makeFilter(string $key, ?string $value): SearchFilto usagesprivate function makeUserO: User&MockObject...8 usagesprivate function makesavedsearch(array sfilters): SearchxMock0bjectpublic function testGetActivityldsrorSavedSearchReturnsids(: vo1dpubLic tunction tescbecAculvityLasrorsavedsearchkecurnsemptywnennokpublic function testGetActivitvIdsFiltersOutDateFilters@: void...public function testGetActivityldsFilters0utClosingPeriodDateFiltenpublic function testGetActivityldsHandlesArrayFiltersO: void..public function testGetActiv1tyldsHandlesscalarr1lters: vo1di...fo ae runecion, testoelactava y easressesnonderoseavencen men louasaesuser = schis->makeuseru;SsavedSearch = Sthis->makeSavedSearchdiD:$filterSet = Sthis->createMock( originalClassName: FilterDefinitionCsthis->activitySearch->method( constraint:getArrayFilterKeys )->uscapturedcriteria = nului$this->activitySearch->expects ($this->onceO)iDemandPageF1lterset')->willReturnCallback(function (Criteria $criteria) use ($filSthis-›elasticRepository->methodd constraint: "onDemandSearchIdsOnlSthis->logger->method constraint: "info'):sthis-›service->getActivityldsForSavedSearch($savedSearch. suse.sthis->assertNotNull(ScapturedCriteria)isthis->assertralse(scapturedCr1ter1a->1sF1rstRequest0J:pubLic tunction testbetactivity-asLogswchcorrectcontexto: volar.1 eailAcceot rlle do+X Reject File 4 %@+ 2 of 2 files →, 0lablSupport Daily • in 2 h 54m100% |45]Tue 14 Apr 12:06:18RequestGenerateAsk.liminnvRenort.lob TestCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny F+0 .Now nave tne root cause. Letme look al sequence nunber Tier soecitically.searcneo seduence numoer secuencenumoer ano venormeo z other ouerles»Now l have the key insight. Let me check what sequence_number does in the context of isFirstRequest() :Inis is tne root cause. Let me check AcClvityActualDace in celall.Now I see the full picture. Let me also check ActivityDurationRange and ActivityRecorded detaults for isFirstRequestRead ActivityDurationRange.php and ActivityRecorded.phpNow |have the comolete root cause picture. This is critica.koor cause rounoThe bur dRequestPanarch method in AskJiminnyReportActivityService passes sequence_number=0implcitiy not in params, whieh means 1srir Stkequest rerums true.When sequence_number Is notin requestparams, the criteria:: createrromkequest deraultsitto o, and isrirstRequest() returns true when empty |l sequenceNumber == 0.Ine trontend UkL has sequence number=4 — meaning il's not a tirst reouest. Ine service doesh't ser it, so thecriteria thinks it's a first request.When isFirstRequest() = true, these implicit filters are applied that aren't in the saved search:1. ActivityDurationRange — applies min duration = 1 (INITIAL_MIN) - filters out 0-second calls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE = OPTION RECORDED) - filters torecorded-only3. OrganiserGroupIn - applies user's default group filterBut the trontend with sequence_number=4 skips all of these defaults, so it returns more results.The fix should be in buildRequestParamsFromSearch - it needs to pass sequence number in the built params tosignal "not a tirst recuest" so the implicit derauls con t apoly. or alternatively, always pass a non-zero sequence number in the merge in getActivityldsForSavedSearch.Now let me verify my understanding of isFirstRequest :Read Criteria.phpContirmed. The fix is clear and minimal. The getActivityldsForSavedSearch method needs to pass sequence_number with a non-zero value so tnat 1srirstkequestl returns Talse ane no impllclt deraults are appllea.• Ask.JNow let me check iT there's an existine lestror AskJ1minnykeportaccivicyservice lo uodare:ExploredAskJiminnvReoortActivtvServicelest.onv and searched.Ask.iminnvReoortActivitvI need to add a test that verifies sequence number=1 is passed to Criteria (so isFirstRequest() hiturns false).Letme ade lulo tne existine lesttlle.• AskJ.Now let's run the test to veriry:aocker execinnyReportActivityServiceTest.php --no-Could not open input file: /var/www/html/artisanCommand dockeno dests/nxe/sdrvkces/K105k/Automate/aeports/A5kJiminnyReportActivityserviceTest.php -no-2 files +28-1%Reject allAccent allAsk anything (&+L)+ & CodeClaude Sonnet 4.6winasun leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10974
|
|
10973
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.phpD Unit_ ActionsComponentConfigurationM ConsoleM ContractsM7 DomainD DTO• Enums_ Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReportsAulomaleakeporissendcommand.ongC AddLayoutEntities.phpC Team.phpC) AutomatedReportsRepository.php X© AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?rovidernstalled-vent.onoC ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsrepos1tory©) 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 AutomatedRenorA15 V4 ^* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...* Find an automated report by UUID* dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReport118 M >return AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:157 Y185 MTusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReport206 >if (is numeric(sidorluid)) "225 D226227return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.250LOJ232- 233* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by", 'created_at'. 239* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "0ex236* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc': Collection 1...*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam usersuserIne user wnose reporus to retrieve.2421243144245240247248249250_251252 0 >274*oparan scring esortho lunnIne cocumn co sorc oy. Accowed values. creaced_oy, creaced_ar". 275)* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'dez* dreturn Collection<AutomatedReport>14 usagesWinasur ch00 2.12.21: A new version is avallable. View chancelod loday 10:33.= custom.lo9= laravel.logL SF (iminny@localhostHs local liminnyalocalnostconsole PRODL console (EUl¿ consoe STAGINGI© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpclass AskuLminnyкeporcActIviLyservicelest extenas lescuase290>procecced tunccion secupl: voldt...s11 usagesprivate function makeFilter(string $key, ?string $value): SearchFil1o usagesprivate function makeUserO: User&MockObject...8 usagesprivate function makesavedsearch(array sfilters): SearchxMock0bjectpublic function testGetActivityldsForsavedsearchReturnsuds(): vo1dtpubLic tunction tescbecAculvityLasrorsavedsearchkecurnsemptywnennokououc Tuncmion testcerAcewrosruersuurvatertuerstur voglonrapublic function testGetActivityldsFilters0utClosingPeriodDateFiltenpublic function testGetActivityldsHandlesArrayFiltersO: void.public function testGetActiv1tyldsHandlesscalarr1lters: vo1di...fo ae runecion, testoelactava y easressesnonderoseavencen men louasaesuser = schis->makeuseru;SsavedSearch = Sthis->nakeSavedSearchdiD:$filterSet = Sthis->createMock( originalClassName: FilterDefinitionCsthis->activitySearch->method( constraint:getArrayFilterKeys )->nscapturedcriteria = nului$this->activitySearch->expects ($this->onceO)iDemandPageF1lterset')->willReturnCallback(function (Criteria $criteria) use ($fiSthis-›elasticRepository->methodd constraint: "onDemandSearchIdsOnlSthis->loggen->methodc constraint: "info'):sthis-›service->getActivityldsForSavedSearch($savedSearch. suse.sthis->assertNotNull(ScapturedCriteria)isthis->assertralse(scapturedCriter1a->1sF1rstRequestOJhpubLic tunction tescbecAculvitylasLogswichcorrectconcextl: voldt..1 eailAcceot rlle do+X Reject File 4 %@+ 2 of 2 files →, 0labl: Support Daily • in 2 h 54 m100% |45]Tue 14 Apr 12:06:16RequestGenerateAskJiminnyReportJobTest vCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny F+D ..• php#L211 and add validation with logs inside@AutomatedReportsCommand. php#L209-213Let 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. pnpPoad AutomatedReoorscommana.ong /The 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, continuesrrecuency woulentrun toodyinfo log + terminal warn, continuesGAl mAsk anything (&+L)+ < CodeClaude Sennet 4.6winasun leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10973
|
|
10972
|
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...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityServiceTest.ph faVsco.js – AskJiminnyReportActivityServiceTest.php...
|
NULL
|
10972
|
|
10971
|
PhpStormFileFditViewNavigateCodelaraveRetactonTool PhpStormFileFditViewNavigateCodelaraveRetactonToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-iminny K vProject v(©) ReportController.phpJiminnybeouecommana.ongAutomatedReportsCommand.phpD Unit_ ActionsComponentConfigurationM ConsoleM ContractsM7 DomainD DTO• Enums_ Events_ Exceptions→ fixtures_ HelpersD Http>_Integrations> Minteractions• D Jobs> M Activitv> M AiAutomation>_ Audiov _ AutomatedReportsAulomaleakeporissendcommand.ongC AddLayoutEntities.phpC Team.phpC) AutomatedReportsRepository.php X© AutomatedReportsService.php© CreateHeldActivityEvent.phpe) Track?rovidernstalled-vent.onoC ActivityLogged.phpC RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.php© AutomatedReport.phpclass AutomatedReportsrepos1tory©) 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 AutomatedRenorA15 V4 ^* dreturn AutomatedReportpublic function create(array $data): AutomatedReport...* Find an automated report by UUID*dparam string suuld* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReport118 M >return AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:157 Y185 M >Tusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReport206 >if (is numeric(sidorluid)) "225 D226227return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.250LOJ232- 233* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by", 'created_at'. 239* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "0ex236* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc': Collection 1...*** Recrieve aLL Ask Jaminny reporus created Dy the given user.* dparam usersuserIne user wnose reporus to retrieve.242124512441245246247248249250_251252 0 >274*oparan scring esortho lunnIne cocumn co sorc oy. Accowed values. creaced_oy, creaced_ar". 275)* Oparam string $sortDirection The sort direction. Allowed values: 'asc', 'desc'. Defaults to 'dez* dreturn Collection<AutomatedReport>14 usagesWinasur ch00 2.12.21: A new version is avallable. View chancelod loday 10:33.= custom.lo9= laravel.logL SF (iminny@localhostHs local liminnyalocalnostconsole PRODL console (EUl¿ consoe STAGINGI© AskJiminnyReportActivityService.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpclass AskuLminnyкeporcActIviLyservicelest extenas lescuase290>procecced tunccion secupl: voldt...s11 usagesprivate function makeFilter(string $key, ?string $value): SearchFil1o usagesprivate function makeUserO: User&MockObject...8 usagesprivate function makesavedsearch(array sfilters): SearchxMock0bjectpublic function testGetActivityldsForsavedsearchReturnsuds(): vo1dtpubLic tunction tescbecAculvityLasrorsavedsearchkecurnsemptywnennokououc Tuncmion testcerAcewrosruersuurvatertuerstur voglonrapublic function testGetActivityldsFilters0utClosingPeriodDateFiltenpublic function testGetActivityldsHandlesArrayFiltersO: void.public function testGetActiv1tyldsHandlesscalarr1lters: vo1di...fo ae runecion, testoelactava y easressesnonderoseavencen men louasaesuser = schis->makeuseru;SsavedSearch = Sthis->nakeSavedSearchdiD:$filterSet = Sthis->createMock( originalClassName: FilterDefinitionCsthis->activitySearch->method( constraint:getArrayFilterKeys )->nscapturedcriteria = nului$this->activitySearch->expects ($this->onceO)getonDemandPagerilterset")->willReturnCallback(function (Criteria $criteria) use ($fiSthis-›elasticRepository->methodd constraint: "onDemandSearchIdsOnlSthis->loggen->methodc constraint: "info'):sthis-›service->getActivityldsForSavedSearch($savedSearch. suse.sthis->assertNotNull(ScapturedCriteria):sthis->assertralse(scapturedCriter1a->1sF1rstRequestOJhpubLic tunction tescbecAculvitylasLogswichcorrectconcextl: voldt..1 eailAcceot rlle do+X Reject File 4 %@+ 2 of 2 files →, 0labl: Support Daily • in 2 h 54 m100% |45]Tue 14 Apr 12:06:15RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny F+D ..nd.php#L211 and add validation with logs inside@AutomatedReportsCommand. php#L209-213Let 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. pnpPoad AutomatedReoorscommana.ong /The 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, continuesrrecuency woulentrun toodyinfo log + terminal warn, continueswGAl mAsk anything (&+L)+ < CodeClaude Sennet 4.6winasun leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10971
|
|
10970
|
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...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityServiceTest.ph faVsco.js – AskJiminnyReportActivityServiceTest.php...
|
NULL
|
10970
|
|
10969
|
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 UnitActionsComponentConfigurationM 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) TrackProviderinstallled-vent.ono¿ consoe STAGING© AskJiminnyReportActivityService.phpC ActivityLogged.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpsrong© AutomatedReportResult.php© AutomatedReport.phpdeclare(strict_types=1);class AutomatedReportsrepos1toryA15 V4namesnace liests Unit Services Klosk AutomatedRenorts:* dreturn AutomatedReportuse...public function create(array $data): AutomatedReport...class AskaminnyReportActivityServicelest extends TestCase* Find an automated report by UUID*dparam string suuld25* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReportreturn AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:2729 GT>Tusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReportif (is numeric(sidorluid)) "return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.100 M ›* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 118 %% >* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "des-oe157 % >* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc': Collection 1...185 VA N206 D >-2242251*** 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>22923023123425525614 usagesWinasun ch00 2.12.21: A new version is avallable. View chancelod loday 10:33.ls usadeslo usaces1o usages9 usagesprivate ActivitySearch&Mock0bject $activitySearch;private ElasticActivityRepository&Mock0bject SelasticRepository:private LoggerinterfacexMock0bject sloggerprivate AskJ1minnykeporcAculVityservice sservice;protected function setUp: voidt...hIl usagesprivate function makeFilter(string $key. ?string $value): SearchFilto usaeesprivate function makeUserO: User&Mock0bjecti...h8 usagesprivate function makesavedsearch(array sf1lters): SearchxMockobjectpubLic tunction tescbecAculvityLasrorsavedsearchkecurnstas: voldtpublic function testGetActivityIdsForSavedSearchReturnsEmptvWhenNoRdpublic function testGetActivityldsFilters0utDateFiltersO: void...public function testGetActivityldsFilters0utClosingPeriodDateFilter:public function testGetActiv1tyldsHandLesArrayF1lters: vo1di..pubLic tunction tescbecAculvltylashandlesscalarrilters: voldt..pubtao runctaontestGetActivitvIdsPassesNonZeroSequenceNumberToDisarpuser - ochis->makeusert,SsavedSearch = sthis->makeSavedSearch(u.D:sfilterset = Sthis->createMock originalClassName: FilterDefinitioncsthis->activitysearch->method constraint: 'getArrayr1lterKeys')->wScapturedcriteria = null;ninnS->acu vVsearch-sexdecsim s-sonce ui→>iecno constragetOnDemandPageFilterSet')1 eall-›il ~ Accept File *+ k (X Reject file (Griterta 2orätilesia) use ($fil, 0labl: Support Daily • in 2 h 54 m100% |45]Tue 14 Apr 12:06:06RequestGenerateAskJiminnyReportJobTestCascadeFixing ReportControlleAutomated Report Ma XFixing Ask Jiminny F+D ..ha RNow l have the key insight. Let me check what sequence_number does in the context of isFirstRequest() :searched ishlch wonp/Inis is tne root cause. Let me check AcCIVItyActualDace In delallNow I see the full picture. Let me also check ActivityDurationRange and ActivityRecorded defaults for isFirstRequestNow lhave the comnlete root cause nicture. iTihis is criticaikoor cause rounolThe bui ldRequestParamsFromSearch method in AskJiminnyReportActivityservice passes sequence_number=0implcitiy not in params, which means 1srir stkequest rerums true .When sequence_number Is notin requestparams, the criteria:: createrromkequest deraultsitto o, and isFirstRequesel letums true when elply seguencenunber ==0Ine trontend UkL has sequence number=4 — meaning il's not a tirst request. Ine service doesh't set it, so thecriteria thinks it's a first redlest.wnen isrirstkequestl) = true, these Impllcht tllters are apolled that aren tin tne savee seareh:1. ActivityDurationRange— applies min duration = 1 (INITIAL_MIN) - filters out 0-second calls2. ActivityRecorded - applies only recorded = 1 (DEFAULT VALUE = OPTION RECORDED) - filters torecorded-only3. OrganiserGroupIn - applies user's default group filterBut the trontend with sequence number=4 skios alll of these deraults, so It returns more resultsThe fix should be in buildRequestParamsFromSearch - it needs to pass sequence number in the built params tosignal "not a tirst recuest", so tne implicit derauls con t apoly. or alternatively, always pass a non-zero sequence number in the merge in getActivityldsForSavedSearch.Road Ack.liminnvRenortActivitService nhn " 44.02Now let me verty my understanalne or isrirstkequest.Read Criteria.nhoContirmed. The fix is clear and minimal. The getActivityldsForSavedSearch method needs to pass sequence_number with a non-zero value so that isFirstRequest() returns false and no implicit defaults are applied.• AskJiminnvReportActivitvService.phpNow let me check t there's an existine lesttor AskJ1minnykeportaccivicyservice lo updaleI need to add a test that verifies sequence number=1 is passed to Criteria (so isFirstRequest() returns false).Letme ade Iulo tne existine lesttlle.• AskJiminnyReportActivityServiceTest.phpNowers run the esto vertv.• aоскer еxесcovel dgedocker lamp 1onp varwwwncnl arulsan cesttests/Unit/Services/Kiosk/AutomatedReports/AskJiminnyReportActivityServiceTest.php ==no-Could not open input file: /var/www/html/artisan2 files +28-1%Reject allAccent alllAsk anything (&+L)+ ‹› CodeClaude Sonnet 4.6winasun leamsuir-oia 4 spacesw...
|
NULL
|
NULL
|
NULL
|
10969
|
|
10968
|
+SlackEDHomeDMSActivityFilesLater..•More+FileEditV +SlackEDHomeDMSActivityFilesLater..•More+FileEditViewGoHistoryWindowHelpJiminny ...# 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.... Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev+Aalal]Support Daily - in 2h 54 m100% <47Tue 14 Apr 12:06:068Today ~...
|
NULL
|
NULL
|
NULL
|
10968
|
|
10967
|
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 UnitActionsComponentConfigurationM 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) TrackProviderinstallled-vent.ono¿ consoe STAGING© AskJiminnyReportActivityService.phpC ActivityLogged.php© AskJiminnyReportActivityServiceTest.php XC) RequestGenerateAskJiminnyReportJobTest.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpsrong© AutomatedReportResult.php© AutomatedReport.phpdeclare(strict_types=1);class AutomatedReportsrepos1toryA15 V4namesnace liests Unit Services Klosk AutomatedRenorts:* dreturn AutomatedReportuse...public function create(array $data): AutomatedReport...class AskaminnyReportActivityServicelest extends TestCase* Find an automated report by UUID* dparam string suuld25* drecurn Aurondredkeoorcnuupublic function findByUuid(string Suuid): ?AutomatedReportreturn AutomatedReport::where('uuid', AutomatedReport:: to0ptimized(Suuid))->firstO:2729 GT>Tusdyepublic function findByldorUu1d(string s1d0rUu1d): ?AutomatedReportif (is numeric(sidorluid)) "return AutomatedReport::where('uvid', AutomatedReport::to0ptimized(Sid0rUuid))->firstO;* Retrieve all standard (non-Ask Jiminny) automated reports.100 M ›* dparam string ssortcolumnThe column to sort by. Allowed values: 'created_by', 'created_at'. 118 %% >* @param string $sortDirection The sort direction. Allowed values:"asc, "desc". veraults to "des-oe157 % >* drerurn couuectonsaurondredredor*/12 usagespublic function getAllStandardReportsstring SsortColumn ="created at',string SsortDirection = 'desc': Collection 1...185 VA N206 D >-224225*** 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>22923023123425525614 usages244Winasun ch00 2.12.21: A new version is avallable." View Chancelod loday 10:33.ls usadeslo usaces1o usages9 usagesprivate ActivitySearch&Mock0bject $activitySearch;private ElasticActivityRepository&Mock0bject SelasticRepository:private LoggerinterfacexMock0bject sloggerprivate AskJ1minnykeporcAculVityservice sservice;protected function setUp: voidt...hIl usagesprivate function makeFilter(string $key. ?string $value): SearchFilto usaeesprivate function makeUserO: User&Mock0bjecti...h8 usagesprivate function makesavedsearch(array sf1lters): SearchxMockobjectpubLic tunction tescbecAculvityLasrorsavedsearchkecurnstas: vo1dpublic function testGetActivityIdsForSavedSearchReturnsEmptvWhenNoRdpublic function testGetActivityldsFilters0utDateFiltersO: void..public function testGetActivityldsFilters0utClosingPeriodDateFilter.public function testGetActiv1tyldsHandLesArrayF1lters(: vo1di..puDLic tunction tescbecAculvltylashandlesscalarrilters: voldt..pubtao runctaontestGetActivitvIdsPassesNonZeroSequenceNumberToDisalpuser - ochis->makeusert,SsavedSearch = sthis->makeSavedSearch(u.D:sfilterset = Sthis->createMock originalClassName: FilterDefinitioncsthis->activitysearch->method constraint: 'getArrayr1lterKeys')->wScapturedcriteria = 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 ($fil, 0lablSupport Daily • in 2 h 54m100%Tue 14 Apr 12:06:03RequestGenerateAsk.liminnvRenort.lob TestCascadeFixing ReportControlleAutomated Report Ma© Fixing Ask Jiminny F+0 .met opeulibally.Searched sequence_number SequenceNumber and performed 2 other queriesNow nave tne key insionu Let me check what sequence nundel coes in tne context or isrirstkequest .This is the root cause. Ler me check ActivitvActualbate In cerailINowi see tne tuil olcture. Let me also check Accivityburacionkance ano Aculvitykecorded derauls tor 1SFirStKequest():keaа Acuivityburaulonkance.ono ane Acuivilykecoraea.ongNow l have the complete root cause picture. This is critical:Root Cause FoundIne bu1 lakequestraramstromsearch method in AskJ1minnykeportactivicyservice passes sequence number=0implicitly (not in params), which means isFirstRequest() returns truewnen sequencmber is notin requestParams, the Criteria::createFromRequest defaultsitto 0, and isFirstRequest() returns true when empty sequenceNumber == 0The frontend URL has sequence_number=4 - meaning it's not a first request. The service doesn't set it, so thecriterla tninks Iu's a TilstrecuestWnen 1sFirstRequest() = true, these Implicht tilters are applied that aren t in the saved search:1. ActivityDurationRange — applies min duration = 1 (INITIAL MIN) - filters out O-second calls2. ActivityRecorded - applies only_recorded = 1 (DEFAULT_VALUE = OPTION_RECORDED) - filters torecorded-only3, Orcannsergroupin — aoolles user's ceaur crouo TilerBut the frontend with sequence number=4 skips all of these defaults, so it returns more results.nerx snoule oe m our lorequestraranstromsearch- uneeos lo oass sequence number intne ouluoalams losignal "not a first request", so the implicit detaults don't apply. Or alternatively, always pass a non-zero sequence_nunber in tne meree in ceraccivitylasrorsaveasearch.Now let me verity my understanding of isFirstRequest :keac uriterla.onecontirmea. Ine Tix is clear ane minimal. Ine cetaculvicylasrorsaveasearch metnoe neeas lo pass sequence nutber with a non-zero value so that isFirstRequest() returns false and no implicit detaults are applied.U As!Now let me check if there's an existing test for AskJiminnyReportActivityService to update:Eynlored Ack.liminnvPenortActivitvServiceTect nhn and coarched Ack. liminnvPenortActivityksIneed lo add a lest thau verities sequence number=l is passedlo uricerla so 1srirstkequesco rerurns talse ).et me add it to the existind test flle:• AskJi;Tyoelvicelesbone+27Now let's run the test to verify:Command dockero dests/unxe/ srvkees/Kosk/ Auf /ar/w/rts/sKtamannyReportActivityServicetest.php --no-coverageRunae2 files +28 -1 >Reject allAccept allAsk anything (&+L)+ <> CodeClaude Sonnet 4.6winasun leamsuir-oia 4 spaces...
|
NULL
|
NULL
|
NULL
|
10967
|
|
10966
|
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...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityServiceTest.ph faVsco.js – AskJiminnyReportActivityServiceTest.php...
|
NULL
|
10966
|
|
10965
|
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...
|
PhpStorm
|
faVsco.js – AskJiminnyReportActivityServiceTest.ph faVsco.js – AskJiminnyReportActivityServiceTest.php...
|
NULL
|
10965
|
|
10964
|
FirefoxFileEditViewHistoryBookmarks)ProfilesToolsW FirefoxFileEditViewHistoryBookmarks)ProfilesToolsWindowHelpSaved 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 recent+ Add RecordingPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloleamSearch teamsiTopics: Competitors XShow internal and external activities: Show internal only X)Save SearchClear allZ Configure SSH access to multipleHostIActivityHostContactActivityCurrent StagestatsType@ Console Home | Console Home | usSearch team membersiSecurityGroup | EC2 |us-east-2niso searen as DarticloanuJWJiminny MSalestorce App IrainingJY-20543 add AJ reports User pilcParuicipant5 SRD-6779 | JY-20632 | Unable to$searcn leam memdersJy 19798 evaluation for ai activity& JiminnyAsk Jiminny test report - 8 Aor 20Service-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 stagesJiminny WBekkie/ Jules - renewals and Contract…Jiminny MHandover training part 1Unknown Customer Md 6 Deal Insights playbook d $Exclaimer MExclaimer handoverPSrneolornAll -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 /thiUnknown Customer MpAll Hands - October 31st ©Unknown Customer MDeal Insights Referesher/Training w/T...JY-18909-automated-reports-ask-iiminny = 869720unlikelv toRenew$42,126$I00 D 4I 19 0D300D 2$0 228.DO DO0D6$0 92•0 D 42 1ĐOD7{0 83Đ0 D35092Đ0 D4$092Đ0 D1S1 c 2D11Duration4/m44m34m17m43m28m51m25m39m41mA Get NotifiedDate11/0/2024.2:28 PMI25/06/2024, 3:09 PM10/06/2024, 12:02 PM18/05/9014. 19.96 PMI13/03/2024, 11:28 AM09/01/2024, 11:45 AM9911099 11•0AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM0/119O/3.11:42 AMI31/10/2023, 11:35 AM25/10/2023, 11:46 AMloblSupport Daily - in 2 h 54 m(БГ)Tue 14 Apr 12:06:01Q InspectorP Filter URLsConsoleD DebuggerN Network{} Style Editor( PerformanceO: Memory© 99+MediaotheStatus200200206200200200200200200200200200200200200200200200200HlMLOSSMethodPosPOSTPOSTPOSTGETGETGETGETGETGETPOSTPOSTPOSTPoslPOSTPOSTPOSTPOSTPOSTDomainInitiatorA D 036719.ing...ao1b02S0envelode/"sentry versionssentry xe tetchA Y 036719.ing.../api/5627310/envelope/?sentry_version=7&sentry_ke fetch036/19.ing..ap1/562/310/envelope/?sentryversion=/&sentry_ke tetchA B 036719.ing.../api/5627310/envelope/?sentry_version=7&sentry_ke fetchapo.stagino.l..search?statusl|=completed&sort_by=dateHeld& * xhrA app.staging.ji...recentA app. staging.j...saved-searchA xhrA app.stagingji...integrationsA app.stagingji...on-demand?topic_idll=e02f0932-cb76-41b6-ac +a xhrttind, userollot.loNX-0940e17A app.stagingji...authenticateA xhrYa=ponxat plattorm-staging&r=b-019d8b28-3eft-/c xhrAr.logr-in.comr.locl-in.comAr.logr-in.comrlocl-in.comAr.logr-in.comrlogt-in.comAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhrNE Storage_ Disable Cache No Throttling + 50:TypeTransferredjsonIsonb008843 ms500 B2 B | 43 msb00 B2 B 44 ms500 B2 B | 43 ms6.28 kB24.21 kB | 1537 ms5.65 kB15.26 kB | 211 ms3.62 kB1.42 kB | 1508 ms3.83 kB5.53 kB | 1253 ms55.53 kB 196.86...| 2299 mscacheo3.12 kB96 B | 620 ms126.39 KB7.89 kB6.41 kB3.48 kB|158 ms153 ms| 150 ms2.96 kB3.45 kB3.45 kB2.95 kBOBOBOB2.98 kB3.46 kBо в3.47 kB| 151 ms157 ms1155 ms| 159 ms| 176 ms| 155 ms3.47 kB2.96 kB| 148 ms24 requests243.44 KB 253.36 KB transterredFinish: 1.01 min DOMContentLoaded: 42 ms load: 195 ms...
|
NULL
|
NULL
|
NULL
|
10964
|
|
10963
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
platform-inner-team
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_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Yankov
Nikolay Yankov
Jira Cloud
Toast
Google Calendar
Messages
Messages
Add canvas
Add canvas
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Today at 10:35:08 AM
10:35
php artisan automated-reports
Nikolay Yankov
Today at 10:35:39 AM
10:35 AM
значи не създава веднага по принцип, в някакъв час на деня ли стъздава?
Lukas Kovalik
Today at 10:36:11 AM
10:36 AM
това ще гледа всичко applicable за днес (ако не понедлник или начало на месец е само daily)
Today at 10:36:27 AM
10:36
крон го пуска през нощ
Today at 10:37:19 AM
10:37
така че мануално пусни при тестване
Today at 10:38:26 AM
10:38
ако трябва да тестваме други репорти може да променя команда за тестване да приема параметър за report template и д си пускаме определен когато тестваме
Nikolay Yankov
Today at 10:41:03 AM
10:41 AM
можеш ли да я ръннеш ти командата
Lukas Kovalik
Today at 10:43:05 AM
10:43 AM
да
Nikolay Yankov
Today at 10:45:52 AM
10:45 AM
пиши кат оя ръннеш
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:52:52 AM
10:52 AM
забавих се че ми се разбазикаха settings за среди
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:53:07 AM
10:53
пуснах и мина и fail-на
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:53:20 AM
10:53
има result но е failed
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:58:08 AM
10:58
значи
REASON_NOT_ENOUGH_ACTIVITIES
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:58:57 AM
10:58
виж дали има нещо в OD със този филтър
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 11:01:28 AM
11:01 AM
Добре
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 11:39:27 AM
11:39 AM
я рънни пак
Lukas
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 11:43:00 AM
11:43 AM
готово
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 11:44:24 AM
11:44
същото
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 11:47:25 AM
11:47
Competitive pitches беше втория нали така
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
New
Nikolay Yankov
Today at 12:04:33 PM
12:04 PM
Да, там има 14 активитита, защо не сработи този път?
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 12:05:31 PM
+SlackEDHomeDMsActivityFilesLater..•More+FileEditViewGoHistoryWindowHelp‹ >0 llJiminny ...# 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. Cala Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievAa§ Support Daily • in 2h 54 m100% <7*Tue 14 Apr 12:06:0184Today ~New...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 1 new item - Slack...
|
NULL
|
10963
|
|
10962
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
platform-inner-team
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_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Yankov
Nikolay Yankov
Jira Cloud
Toast
Google Calendar
Messages
Messages
Add canvas
Add canvas
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Today at 10:35:08 AM
10:35
php artisan automated-reports
Nikolay Yankov
Today at 10:35:39 AM
10:35 AM
значи не създава веднага по принцип, в някакъв час на деня ли стъздава?
Lukas Kovalik
Today at 10:36:11 AM
10:36 AM
това ще гледа всичко applicable за днес (ако не понедлник или начало на месец е само daily)
Today at 10:36:27 AM
10:36
крон го пуска през нощ
Today at 10:37:19 AM
10:37
така че мануално пусни при тестване
Today at 10:38:26 AM
10:38
ако трябва да тестваме други репорти може да променя команда за тестване да приема параметър за report template и д си пускаме определен когато тестваме
Nikolay Yankov
Today at 10:41:03 AM
10:41 AM
можеш ли да я ръннеш ти командата
Lukas Kovalik
Today at 10:43:05 AM
10:43 AM
да
Nikolay Yankov
Today at 10:45:52 AM
10:45 AM
пиши кат оя ръннеш
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:52:52 AM
10:52 AM
забавих се че ми се разбазикаха settings за среди
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:53:07 AM
10:53
пуснах и мина и fail-на
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:53:20 AM
10:53
има result но е failed
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:58:08 AM
10:58
значи
REASON_NOT_ENOUGH_ACTIVITIES
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:58:57 AM
10:58
виж дали има нещо в OD със този филтър
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 11:01:28 AM
11:01 AM
Добре
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 11:39:27 AM
11:39 AM
я рънни пак
Lukas
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 11:43:00 AM
11:43 AM
готово
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 11:44:24 AM
11:44
същото
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 11:47:25 AM
11:47
Competitive pitches беше втория нали така
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
FirefoxFileEditViewHistoryBookmarks)ProfilesToolsWindowHelpSaved 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-2niso searen as particioantJY-20543 add AJ reports User pilcParuicipantSRD-6779 | JY-20632 | Unable to$searcn leam memdersJy 19798 evaluation for ai activity& JiminnyAsk Jiminny test report - 8 Aor 20Service-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 byAnyonePeriodAll 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 allHostIActivityContactActivityCurrent StagestatsTypeJWJiminny MSalestorce App IrainingFirefoxJY-18909-automated-reports-ask-iiminny = 869720Jiminny MBekkie/ Jules - renewals and Contract…Jiminny MHandover training part 1Unknown Customer Md 6 Deal Insights playbook d $Exclaimer MExclaimer handoverPSAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @ 04:01Unknown Customer played MTraining ? - Jiminny App for Salesfor….8)Unknown Customer MAll-hands - Thank Yous, What Went, L...Unknown Customer (played MAll-hands - Nov /thiUnknown Customer 1All Hands - October 31st ©Unknown Customer MDeal Insights Referesher/Training w/T...unlikelv toRenew$42,126$I00 D 4I 19 0D300D 2$0 228.DO DO0D6$0 92•0 D 42 1ĐOD7{0 83Đ0 D350920 D4$092Đ0 D1S1 c 2D11Duration4/m44m34m17m43m28m51m25m39m41mA Get NotifiedDate11/0/2024.2:28 PMI25/06/2024, 3:09 PM10/06/2024, 12:02 PM18/05/9014. 19.96 PMI13/03/2024, 11:28 AMSupport Daily • in 2h 55 m(БГ)Tue 14 Apr 12:05:59Q InspectorP Filter URLsConsoleD DebuggerN Network{} Style Editor( PerformanceO: Memory© 99+ImagesMediaotheStatus200200206200200200200200200200200200200200200200200200200HlMLOSSMethodPosPOSTPOSTPOSTGETGETGETGETGETGETPOSTPOSTPOSTPoslPOSTPOSTPOSTPOSTPOSTDomainInitiatorA D 036719.ing...ao1b02S0envelode/"sentry versionssentry xe tetchA Y 036719.ing.../api/5627310/envelope/?sentry_version=7&sentry_ke fetch036/19.ing..ap1/562/310/envelope/?sentryversion=/&sentry_ke tetchA B 036719.ing.../api/5627310/envelope/?sentry_version=7&sentry_ke fetchapo.stagino.l..search?statusl|=completed&sort_by=dateHeld& * xhrA app.staging.ji...recentA app. staging.j...saved-searchA xhrA app.stagingji...integrationsA app.stagingji...on-demand?topic_idll=e02f0932-cb76-41b6-ac +a xhrttind, userollot.loNX-0940e17A app.stagingji...authenticateA xhrYa=ponxat plattorm-staging&r=b-019d8b28-3eft-/c xhrAr.logr-in.comr.locl-in.comAr.logr-in.comrlocl-in.comAr.logr-in.comrlogt-in.comAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/olatform-stagina&r=6-019d8b28-3eff-7c xhnE Storage_ Disable Cache No Throttling + 50:TypeTransferredjsonIsonb008843 ms500 B2 B | 43 msb00 B2 B 44 ms500 B2 B | 43 ms6.28 kB24.21 kB | 1537 ms5.65 kB15.26 kB | 211 ms3.62 kB1.42 kB | 1508 ms3.83 kB5.53 kB | 1253 ms55.53 kB 196.86...| 2299 mscacheo3.12 kB96 B | 620 ms126.39 KB7.89 kB6.41 kB3.48 kB|158 ms153 ms| 150 ms2.96 kB3.45 kB3.45 kB2.95 kBOBOBOB2.98 kB3.46 kBо в3.47 kB| 151 ms157 ms1155 ms| 159 ms| 176 ms| 155 ms3.47 kB2.96 kB| 148 ms09/01/2024, 11:45 AM9911099 11•0AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM0/119O/3.11:42 AMI31/10/2023, 11:35 AM25/10/2023, 11:46 AM24 requests243.44 KB 253.36 KB transterredFinish: 1.01 min DOMContentLoaded: 42 ms load: 195 ms...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 1 new item - Slack...
|
NULL
|
10962
|
|
10961
|
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...
|
Firefox
|
Jiminny — Work
|
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...
|
10961
|
|
10960
|
+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 Angelova, ...Steliyan GeorgievAdelina Petrova, Ili...R. Adelina PetrovaO. Calea Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievAa> 0ladolSupport Daily - in 2h 55 m100% C7Tue 14 Apr 12:05:4886 0Today ~...
|
NULL
|
NULL
|
NULL
|
10960
|
|
10959
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelpapp.staging.jiminny.com/ondemand?topic_idfl=e02f0932-cb76-41b6-ac4f-6b8db1392146&include_internal_conversations=1&sequence_number=4 JPlatform Sprint 1 Q2 - Platform Team - Scrum Board - Jira — jiminny.atlassian.net/jira/software/c/projects/JY/boards/37JY-20543 add AJ reports User pilot tracking by LakyLak • Pull Request #11932 • jiminny/app (CJ Switch to TabPlatform Sprint 1 Q2 - Platform TeaJiminny - app.staging.jiminny.com/ai-reportsJY-20543 add AJ reports User piloInbox (1,540) - [EMAIL] - Jiminny Mail - mail.google.com/mail/u/0/#inboxZ Configure SSH access to multipleCloudWatch | us-east-2 Switch to Tab@ Console Home | Console Home | usMeet - Daily - Platform - meet.google.com/mie-gawc-dsiSecurityGroup | EC2 |us-east-210AISOwikipeala - wikipedia.orgJY-20543 add AJ reports User pilcParSRD-6779 | JY-20632 | Unable to$Recent SearchesgmailTrending on GoogleJy 19798 evaluation for ai activity8 Jiminny7 Ask Jiminny test report - 8 Aor 201Service-Desk - Queues - PlatformJY-20543 add AJ reports User pilc& Configure SSH access to multiple eCa CloudWatch | us-east-2New TabCa CloudWatch | us-east-2+ New TabCusTrarман юнаитед соешу лииде• Search transcript |Said byAnyonePeriodAll 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 stagesJY-18909-automated-reports-ask-iiminny = 8697202 8 Deal Insights playbook 2 €Exclaimer MExclaimer handoverUnknown Customer MHow to run an Intro CallTom Lavery at Plamen enterprise MJiminny & - All-hands meeting %Unknown Customer MAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @04:01Unknown Customer played) 1Training P - Jiminny App 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...TomLaveryUnlikely toRenew$42,12650 02$0 828DODO17m801n.31m43m$0 82ĐO D428m51m25m39m33m$1 82ĐO D 1141m18/05/9014. 19.56 PM13/03/2024, 11:28 AM26/02/2024, 2:30 PM16/01/2024, 11:43 AM09/01/2024, 11:45 AM28/11/2023, 11:30 AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM07/11/2023, 11:42 AM31/10/2023, 11:35 AM25/10/2023, 11:46 AMj Support Daily • in 2h 55 m200200[PHONE]00200POSTPOSTPOSTPOSTPOSTPOSTPOSTAr.logr-in.com@ r.logr-in.comAr.logr-in.comrlogt-in.comAr.logr-in.comAr.logr-in.comAr.logr-in.comi?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhra=oonxar/platrorm-stacinear=b-01500020-3e1-/c Xhii?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhrTasponxat/olattorm-staginaxr=b-01908028-3eft-/c xhni?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhrTasponxat/olattorm-staginaxr=b-01908028-3eft-/c xhnjsonsonjsonjson100% C•Tue 14 Apr 12:05:47E Storage0 99+_ Disable Cache No Throttling + 50:Transferredb008843 ms500 B2 B | 43 msb00 B2 B 44 ms500 B2 B | 43 ms6.28 kB24.21 kB 1537 ms5.65 kB15.26 kB | 211 ms3.62 kB1.42 Kb 1508 ms3.83 kB5.53 kB | 1253 ms55.53 kB 196.86... | 2299 mscacheo0 ms3.12 kB96 B|620 ms126.39 KB7.89 kB6.41 kB3.48 kB|158 ms153 ms1150 ms2.96 kB3.45 kB3.45 kBOB29o KB2.98 kB3,40 KB| 151 msI 157 ms1155 ms159 ms176 ms21 requests| 243.44 kB / 243.45 kB transferredFinish: 44.49 s DOMContentLoaded: 42 msload: 195 ms...
|
NULL
|
NULL
|
NULL
|
10959
|
|
10958
|
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
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHeldSaved searchesapp.staging.jiminny.com/ondemand/toplc_lab=e02l09s2-00/0-4100-d641-000001592140@inCidde_Ihternal_Conversatlons=ldsequence_numDer=hYou are currently impersonating Nikolay Yankov <)14 activitiesSort by: Most recent* Add RecordingA Get NotifiedPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloleamSearch teamsiTopics: Competitors XShow internal and external activities: Show internal only * )Save Search @ Clear allHostIActivityZ Configure SSH access to multipleHost@ Console Home | Console Home | usSearch team membersiSecurityGroup | EC2 |us-east-210nise searen as particioanuJY-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 - PlatformJY-20543 add AJ reports User pilc(x) Configure SSH access to multipleCa CloudWatch | us-east-2New TabCa CloudWatch | us-east-2+ New TabParuicipantSearch team 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 stagesContactActivityCurrent StagestatsTypeDurationDateJiminny 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%TomLaveryUnknown Customer MAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @04:01Unknown Customer played) 1Training P - Jiminny App 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 = 86972000 D 44/m0.44m34mĐ0 D2.00D 2Unlikelv ToRenew$42,126$0 228.DODO17m0 82@0 D431m43m$0 92ĐOD428m51m25m39m33m$1 82ĐO D 1141m11/0/2024.2:28 PMI25/06/2024, 3:09 PM10/06/2024, 12:02 PM18/05/9014. 19.96 PMI13/03/2024, 11:28 AM26/02/2024, 2:30 PM16/01/2024, 11:43 AM09/01/2024, 11:45 AM28/11/2023, 11:30 AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM07/11/2023, 11:42 AM31/10/2023, 11:35 AM25/10/2023, 11:46 AMSupport Daily - in 2h 55 mTue 14 Aor 17:05:46Q InspectorP Filter URLsConsoleD Debugger{) Style Editor( PerformanceELE Memory© 99+AlIHMLeSSrontsCtatucMethod200Pos200POST20620020020020020020020020020012002001200200]200200200200POsIPOSTGETGETGETGETGETGETPOSTPOSTPOSTPUSIPOSTPOSTPOSTPOSTPOSTPOSTPOSTDomainA g 036719.ing...A Y 036719.ing...036/19.ing..A B 036719.ing...apo.stagino.l..A app.staging.ji...A app.staging.ji.A app.stagingji...A app.stagingji...ttind, userollot.loA app.stagingji...Ar.logr-in.comr.locl-in.comAr.logr-in.comr.locl-in.comAr.logr-in.comrlogt-in.comAr.logr-in.comAr.logr-in.com@ r.logr-in.comN NetworkE Storage_ Disable Cache No Throttling + 50:ImagesMediaotheInitiatorTypeTransferredap1b0 /310 envelode/"sentry versions sentrv xe tetch/api/5627310/envelope/?sentry_version=7&sentry_ke fetchap1/562/310/envelope/?sentryversion=/&sentry_ke tetch/api/5627310/envelope/?sentry_version=7&sentry_ke fetchsearch?statusl|=completed&sort_by=dateHeld& * xhrrecentsaved-search" Xhiintegrationson-demand?topic_idll=e02f0932-cb76-41b6-ac +a xhrNX-0940e17authenticateA xhrYa=ponxat plattorm-staging&r=b-019d8b28-3eft-/c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhra=oonxar/platrorm-stacinear=b-01500020-3e1-/c Xhii?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhrTasponxat/olattorm-staginaxr=b-01908028-3eft-/c xhni?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhrTasponxat/olattorm-staginaxr=b-01908028-3eft-/c xhnisonsonjsonjsonb008843 ms500 B2 B | 43 msb00 B23 44 ms500 B2 B | 43 ms6.28 kB24.21 kB 1537 ms5.65 kB15.26 kB | 211 ms3.62 kB1.42 kB | 1508 ms3.83 kB5.53 kB | 1253 ms55.53 kB 196.86...| 2299 mscacheo0 ms3.12 kB96 B | 620 ms126.39 KB7.89 kB6.41 kB3.48 kB2.96 kB3.45 kB3.45 kBOB|158 ms153 ms1150 ms166 ms|151 ms157 ms29o KB1155 ms2.98 kB159 ms3,40 KB176 ms21 requests| 243.44 kB / 243.45 kB transferredFinish: 44.49s DOMContentLoaded: 42 ms•load: 195 ms...
|
Firefox
|
Jiminny — Work
|
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...
|
10958
|
|
10957
|
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...
|
Firefox
|
Jiminny — Work
|
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...
|
10957
|
|
10956
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHeldSaved searches14 activitiesYou are currently impersonating Nikolay Yankov <)Sort by: Most recentPlatform Sprint 1 Q2 - Platform TealeamTopics: Competitors XShow internal and external activities: Show internal only xJY-20543 add AJ reports User piloSearch teamsiHostIActivityZ 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 - PlatformC JY-20543 add AJ reports User pilc(x) Configure SSH access to multipleCa CloudWatch | us-east-2New TabCa CloudWatch | us-east-2+ New TabParuicipantSearch team membersCustomer ®Customer or SubjectTranscript ©• Search transcript |Said byMnyonePeriodAll timeTopicsCompetitors *)Activity typeSearch activity typesDuration ©Min (minutes)Max (minutes)Al call scoreSelect Al call scoreMulomaled call scoreSelect automated calliCoaching scoreSelect coaching scoreCoach ®Search coaches.Stage at callSearch stagesCurrent stageSearch stagesContactActivityTypeJiminny 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%TomLaveryUnknown Customer MAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @04:01Unknown Customer played) 1Training P - Jiminny App 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 = 869720* Add RecordingA Get NotifiedSave Search @ Clear allCurrent Stagestats00 D 40.Đ0 D2.00D 2Duration4/m44m34mUnlikelv ToRenew$42,126$0 228.DODO17mD0D431m43m$0 92ĐOD428m51m25m39m33m53122ĐO D 1141mDate11/0/2024.2:28 PMI25/06/2024, 3:09 PM10/06/2024, 12:02 PM18/05/9014. 19.96 PMI13/03/2024, 11:28 AM26/02/2024, 2:30 PM16/01/2024, 11:43 AM09/01/2024, 11:45 AM28/11/2023, 11:30 AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM07/11/2023, 11:42 AM31/10/2023, 11:35 AM25/10/2023, 11:46 AMSupport Daily - in 2h 55 mTue 14 Aor 17:05:43Q InspectorFilter URLsConsoleD Debugger{) Style Editor( PerformanceELE Memory© 99+AlIHMLeSSStatus200200206200200200200200200MethodPosPOSTPOsIPOSTGETGETGETGETGETGET2002002002002001200200200200200200POSTPOSTPOSTPUSIPOSTPOSTPOSTPOSTPOSTPOSTPOSTrontsDomainA g 036719.ing...A Y 036719.ing...036/19.ing..A B 036719.ing...apo.stagino.l..A app.staging.ji...A app.staging.ji.A app.stagingji...A app.stagingji...ttind, userollot.loA app.stagingji...Ar.logr-in.comr.locl-in.comAr.logr-in.comr.locl-in.comAr.logr-in.comrlogt-in.comAr.logr-in.comAr.logr-in.com@ r.logr-in.comN NetworkE Storage_ Disable Cache No Throttling 50.ImagesMediaotheInitiatorap1b0 310 envelode/"sentry versions sentrv xe tetch/api/5627310/envelope/?sentry_version=7&sentry_ke fetchap1/562/310/envelope/?sentryversion=/&sentry_ke tetch/api/5627310/envelope/?sentry_version=7&sentry_ke fetchsearch?statusl|=completed&sort_by=dateHeld& * xhrrecentsaved-search" Xhiintegrationson-demand?topic_idll=e02f0932-cb76-41b6-ac +a xhrNX-0940e17authenticateA xhrYa=ponxat plattorm-staging&r=b-019d8b28-3eft-/c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhra=oonxar/platrorm-stacinear=b-01500020-3e1-/c Xhii?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhrTasponxat/olattorm-staginaxr=b-01908028-3eft-/c xhni?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhrTasponxat/olattorm-staginaxr=b-01908028-3eft-/c xhnTypeTransferredisonsonjsonjsonb008843 ms500 B2 B | 43 msb00 B23 44 ms500 B2 B | 43 ms6.28 kB24.21 kB 1537 ms5.65 kB15.26 kB | 211 ms3.62 kB1.42 kB | 1508 ms3.83 kB5.53 kB | 1253 ms55.53 kB 196.86...| 2299 mscacheo0 ms3.12 kB96 B | 620 ms126.39 KB7.89 kB6.41 kB3.48 kB2.96 kB3.45 kB3.45 kBOB29o KB2.98 kB3,40 KB|158 ms153 ms1150 ms166 ms|151 ms157 ms1155 ms159 ms176 msÓ 21 requests |243.44 KB 243.45 KB transterredFinish: 44.49 s DOMContentLoaded: 42 ms•load: 195 ms...
|
NULL
|
NULL
|
NULL
|
10956
|
|
10955
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
platform-inner-team
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_jiminny
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Yankov
Nikolay Yankov
Jira Cloud
Toast
Google Calendar
Messages
Messages
Add canvas
Add canvas
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Today at 10:35:08 AM
10:35
php artisan automated-reports
Nikolay Yankov
Today at 10:35:39 AM
10:35 AM
значи не създава веднага по принцип, в някакъв час на деня ли стъздава?
Lukas Kovalik
Today at 10:36:11 AM
10:36 AM
това ще гледа всичко applicable за днес (ако не понедлник или начало на месец е само daily)
Today at 10:36:27 AM
10:36
крон го пуска през нощ
Today at 10:37:19 AM
10:37
така че мануално пусни при тестване
Today at 10:38:26 AM
10:38
ако трябва да тестваме други репорти може да променя команда за тестване да приема параметър за report template и д си пускаме определен когато тестваме
Nikolay Yankov
Today at 10:41:03 AM
10:41 AM
можеш ли да я ръннеш ти командата
Lukas Kovalik
Today at 10:43:05 AM
10:43 AM
да
Nikolay Yankov
Today at 10:45:52 AM
10:45 AM
пиши кат оя ръннеш
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 10:52:52 AM
10:52 AM
забавих се че ми се разбазикаха settings за среди
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:53:07 AM
10:53
пуснах и мина и fail-на
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:53:20 AM
10:53
има result но е failed
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:58:08 AM
10:58
значи
REASON_NOT_ENOUGH_ACTIVITIES
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 10:58:57 AM
10:58
виж дали има нещо в OD със този филтър
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 11:01:28 AM
11:01 AM
Добре
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Nikolay Yankov
Today at 11:39:27 AM
11:39 AM
я рънни пак
Lukas
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Lukas Kovalik
Today at 11:43:00 AM
11:43 AM
готово
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 11:44:24 AM
11:44
същото
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
Save for later
More actions
Today at 11:47:25 AM
11:47
Competitive pitches беше втория нали така
React with white_check_mark
React with eyes
React with raised_hands
Add reaction…
Reply in thread
Forward message…
+SlackFileEditViewGoHistoryWindowHelpEDHomeDMsActivityFilesLater..•More+Jiminny ...sos# 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. Cala Dimitravo→Search Jiminny IncAneliya Angelova, Nikolay Yankov, Steliyan GeorgievMessagesAdd canvas+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 активитита, защо не сработи този пьт?Lukas Kovalik 12:05 PMпак изглежда sequenceгледам гоMessage Aneliya Angelova, Nikolay Yankov, Steliyan GeorgievAa>0 lhl§ Support Daily • in 2h 55 m100% <*Tue 14 Apr 12:05:4284Today ~New...
|
Slack
|
Aneliya Angelova, Nikolay Yankov, Steliyan Georgie Aneliya Angelova, Nikolay Yankov, Steliyan Georgiev (DM) - Jiminny Inc - 1 new item - Slack...
|
NULL
|
10955
|
|
10954
|
FirefoxFileEditViewHistoryBookmarks)ProfilesToolsW FirefoxFileEditViewHistoryBookmarks)ProfilesToolsWindowHeldPlatform Sprint 1 Q2 - Platform TeaJY-20543 add AJ reports User piloZ Configure SSH access to multiple@ Console Home | Console Home | usSecurityGroup | EC2 |us-east-2JY-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 - PlatformJY-20543 add AJ reports User pilc(x) Configure SSH access to multipleCa CloudWatch | us-east-2New TabCa CloudWatch | us-east-2+ New TabSaved 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 recent* Add RecordingA Get NotifiedleamSearch teamsiTopics: Competitors XShow internal and external activities: Show internal only *)Save Search @ Clear allHostIActivityCurrent StagestatsHostSearch team membersinise searen as particioanuParuicipantSearch team membersCustomer ®Customer or SubjectTranscript ©• Search transcript |Said byMnyonePeriodAll timeTopicsCompetitors *)Activity typeSearch 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 stagesContactActivityTypeDurationDateJiminny 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 enterpriseMJiminny & - All-hands meeting i%TomLaveryUnknown Customer MAll -hands Jan 9thUnknown Customer MNotetaker added on 11-28-23 @04:01Unknown Customer played) 1Training P - Jiminny App for Salesfor..Unknown Customer MAll-hands - Thank Yous, What Went, L...Unknown Customer played 1All-hands - Nov /thUnknown Customer 1All Hands - October 31st ©Unknown Customer MDeal Insights Referesher/Training w/T...JY-18909-automated-reports-ask-iiminny = 869720unlikelv toRenew$42,1264/mĐ0 D444mĐ0 D3Đ0D234m00D 2$0 228.DODO17m31m43m28mD0 E1 sim25m39m33m5122ĐO D 1141m11/0/2024.2:28 PMI25/06/2024, 3:09 PM10/06/2024, 12:02 PM18/05/9014. 19.96 PMI13/03/2024, 11:28 AM26/02/2024, 2:30 PM16/01/2024, 11:43 AM09/01/2024, 11:45 AM28/11/2023, 11:30 AM22/11/2023, 11:56 AM14/11/2023, 11:27 AM07/11/2023, 11:42 AM31/10/2023, 11:35 AM25/10/2023, 11:46 AMSupport Daily • in 2h 55 mTue 14 Apr 12:05:25Q InspectorConsoleD DebuggerN Network{) Style Editor( PerformanceELE MemoryE Storage© 99+Filter URLs_ Disable Cache No Throttling 50.AlIHMLeSSImagesMediaotheCtatucMethod200200206PosPOSTInitiatorTypeTransferred40.80 $200200200200200200200200200POsIPOSTGETGETGETGETGETGETPOSTPOSTPOSTPOSTPOSTPoslPOSTDomainA D 036719.ing...A Y 036719.ing...036/19.ing..A B 036719.ing...apo.stagino.l..A app.staging.ji...A app.stagingji...A app.stagingji...A app.stagingji...ttind, userollot.loA app.stagingji...ap1b0 310 envelodelsentry versionssentrv xe tetch/api/5627310/envelope/?sentry_version=7&sentry_ke fetchap1/562/310/envelope/?sentryversion=/&sentry_ke tetch/api/5627310/envelope/?sentry_version=7&sentry_ke fetchsearch?statusl|=completed&sort_by=dateHeld& * xhrrecentsaved-search" Xhiintegrationson-demand?topic_idll=e02f0932-cb76-41b6-ac +a xhrNX-0940e17authenticateA xhrjsonAr.logr-in.comrlocl-in.comAr.logr-in.comrlocl-in.comYa=ponxat plattorm-staging&r=b-019d8b28-3eft-/c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhri?a=ponxaf/platform-staging&r=6-019d8b28-3eff-7c xhra=oonxar/platrorm-stacinear=b-01500020-3e1-/c Xhiatrloar-in.comMa=ponxaf/o atform-staging&r=6-019d8628-3ef-7c xhnb008843 mg500 B2 B | 43 msb00 B2 B 44 mg500 B2 B | 43 ms6.28 kB24.21 kB 1537ms5.65 kB15.26 kB | 211 ms3.62 kB1.42 kB | 1508 ms3.83 kB5.53 kB | 1253 ms55.53 kB 196.86...2293 mscacheo3.12 kB96 B | 620 ms126.39 KB7.89 kB158 ms6.41 kB348kR153 ms| 150 ms2.96 kB3.45 kB166 ms| 151 ms17 requests| 243.44 kB / 230.60 kB transferredFinish: 24.15s DOMContentLoaded: 42 ms load: 195 ms...
|
NULL
|
NULL
|
NULL
|
10954
|