|
45512
|
1628
|
29
|
2026-05-14T14:40:40.196167+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769640196_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Jiminny... ~ActivityFilesLater@ jiminny-x-integrat Jiminny... ~ActivityFilesLater@ jiminny-x-integrati• plattorm-inner-teamE Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity lab# engineering# general#jiminny-bgac nlattorm-nckets# product launches# random# releases# sofia-officed sunport# thank-yous# the people of iimi... Direct messages• 8la 62% Galya Dimitrovavasil VasilevM Stefka StovanovaSg: Todor StamatovMario GeorgievNiudlay lanay. James Graham "* Stoyan Tanevo Stelivan Georgiev( Petko Kashinski*. Lukas Kovali...::: AnnsToastS lira Gloud6d Huddle with Aneliva Angelova* Aneliya Angelova &• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някъде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preuiew in sact[HubSpotl Optimise CRM rematct(7 OpenRosdy for OA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira* SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle (LIVE 4:06 PMAneliva Angelova is here toolAneliva Angelova 4:44 PN11512582Lukas Kovalik M 5.16 PNcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-vne' annlication/ison'--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIr7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIđ 0Pmv Q SearchDate ModifiedYesterday at 13.3Yesterday at 13:36Yesterday at 13:36Yesterday at 13.30Yesterdav at 13:35Yesterday at 13:34Yesterday at 13:34Yesterdav at 13:3kYesterday at 13:33Yesterday at 13.32Yesterdav at 13:31resterday at 15:30Yesterdav at 13:30Yesterday at 13:29Yesterday at 13:29Yesterday at 13:28Yecterdav at 12:28resterday at 13-21Yesterdav at 13:26Yesterday at 13:26Yesterday at 13:25Yesterday at 13:25Voctorday at 12:01Yesterday at 13.23Yesterdav at 13:22resterady al 15.clYesterday at 13:20Yesterday at 13.19Yecterdav at 12:19Yesterdav at 13:18Yesterday at 13-1/Yesterdav at 13:17Yesterday at 13:16Yesterday at 13:15Yecterdav at 12:15Yesterday at 13.14Yecterdav at 13:10Yesterday at 13:13Yesterday at 13:12Yoctorday at 12:11Yesterday at 13.10Yecterdav at 12:10Yesterdav at 13:09Yesterdav at 13:08v Size23 KB9 KB13 Kb16 KE17 KB29 KB16 K:12 KB9 KEIKBn8 KBI37 KB10 KB7 KE8 KB9 KB8 KB172 KR14 KB13 KB9 KE18 KB12 KB10 KBI16 KB6 KB6KB12 KE23 KB8 KB16 K:11 KB20 KP34 KB10 KB7 K:5 KB11 KB26 KBMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMPE0"4 movieMDSG-A movieMP2G-4 movieMPEG-4 movieMPEG"4 movieMPEG-4 movieMoEeh movioMPEG-4 movieMPEG-1 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMDEG.A movicMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMDEC A movidMPEG-4 movieMDEG-A movieMPEG-4 movieMPEG-4 movieMDEC.A moviaMPEG-4 movie111 KC102 KB88 KBMDEG-A moviaMPEG-4 movie59 KB1MPEG-A movie98 KB MPEG-4 movie97 KB66 K3MPEG-4 movieMDEG.A movioAAKP93 KB/8 KBMPEG-4 movie50 KгMDEG-A movid58 KBMPEG-4 movie27 KB7KBMPEG-4 movieAl Notes: OffLeave• • CFavourites• jiminny• Recents* ApplicationsiCloud• iCloud Drive992 Svnc tolde0 DXP4800PLUS-B5F49 Networl• CRMI• Orange• Red|• Yellow• Green• Purple•) All lags..IhlDownloadsNameLoom.pkgAlfred copv.alfredoreterences=KeychronAssist-1.0.2 (1).dmeKeychronAssist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zip• Transcript.pd→mage U.loge1 Orioninstaller.dma_image.jpg- image (2).1pc• ПO-22221726037035-004-001_ORGES.pdf%D0%9F%D0%9E-22221726037035-004-001 archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterencesСE 060209С О000000026571172 CWICT 0Р70501260015900 ndt= 27022026_0000000026574472_ SWIFT_ [IBAN].pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001reportxmmi=pdt.odiB pdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonlKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst aid_notes_complete.docxrenortl2).esv1 config.vmlIteration run Search HS.postman_collection.jsonm licence bettertouchtoalMariusHosting Config.isonnokc.901a6502.6667.A62h-062 ccu•AlfredwPmazanoko.imnaoc.YWIfана Ковалик.jpg•искане даниел Ковалик..pg• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик iро• Dhotac 2.001Q SearchKind00,4 MD55.9 MBinstdlle..dckageAlfred...ferences10,1 MB10,1 MBIL MBDisk ImageDisk ImageLiP archive6.6 MBZIp archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDE Document140 KbZIP archive148 KВ148 KB122 KBZIP archivelZIP archiveXML document111 KBAlfred...ferences94 KBDDE Documont92 KBPDr DocumentK:PDF Document91 KB91 KBXML document30 KBn0kpDDE Nocumont28 KBPDF Document28 KRPDE Document28 KB27 KBDocument14 KB11 KB6 KB6KBJSONINCV NacumontZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBVAMI dosumon1 KB029 buteccSV Documenthttlicence183 bytesZero butesJSONAlfrod foronso!Zero bytesFolde1.9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.43 GB availabld• Inu 14 Mау 1/.40.34Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 ,Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3712 Goh 2006 9t 11:5 A1Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nau 2025 г+ 17:506 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0419 Mar 2026 at 11:55|10 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:362616 Oct 2025 aт 16:0122 Aar 2026 at 12:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
2013561469663870144
|
NULL
|
click
|
ocr
|
NULL
|
Jiminny... ~ActivityFilesLater@ jiminny-x-integrat Jiminny... ~ActivityFilesLater@ jiminny-x-integrati• plattorm-inner-teamE Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity lab# engineering# general#jiminny-bgac nlattorm-nckets# product launches# random# releases# sofia-officed sunport# thank-yous# the people of iimi... Direct messages• 8la 62% Galya Dimitrovavasil VasilevM Stefka StovanovaSg: Todor StamatovMario GeorgievNiudlay lanay. James Graham "* Stoyan Tanevo Stelivan Georgiev( Petko Kashinski*. Lukas Kovali...::: AnnsToastS lira Gloud6d Huddle with Aneliva Angelova* Aneliya Angelova &• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някъде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preuiew in sact[HubSpotl Optimise CRM rematct(7 OpenRosdy for OA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira* SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle (LIVE 4:06 PMAneliva Angelova is here toolAneliva Angelova 4:44 PN11512582Lukas Kovalik M 5.16 PNcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-vne' annlication/ison'--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIr7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIđ 0Pmv Q SearchDate ModifiedYesterday at 13.3Yesterday at 13:36Yesterday at 13:36Yesterday at 13.30Yesterdav at 13:35Yesterday at 13:34Yesterday at 13:34Yesterdav at 13:3kYesterday at 13:33Yesterday at 13.32Yesterdav at 13:31resterday at 15:30Yesterdav at 13:30Yesterday at 13:29Yesterday at 13:29Yesterday at 13:28Yecterdav at 12:28resterday at 13-21Yesterdav at 13:26Yesterday at 13:26Yesterday at 13:25Yesterday at 13:25Voctorday at 12:01Yesterday at 13.23Yesterdav at 13:22resterady al 15.clYesterday at 13:20Yesterday at 13.19Yecterdav at 12:19Yesterdav at 13:18Yesterday at 13-1/Yesterdav at 13:17Yesterday at 13:16Yesterday at 13:15Yecterdav at 12:15Yesterday at 13.14Yecterdav at 13:10Yesterday at 13:13Yesterday at 13:12Yoctorday at 12:11Yesterday at 13.10Yecterdav at 12:10Yesterdav at 13:09Yesterdav at 13:08v Size23 KB9 KB13 Kb16 KE17 KB29 KB16 K:12 KB9 KEIKBn8 KBI37 KB10 KB7 KE8 KB9 KB8 KB172 KR14 KB13 KB9 KE18 KB12 KB10 KBI16 KB6 KB6KB12 KE23 KB8 KB16 K:11 KB20 KP34 KB10 KB7 K:5 KB11 KB26 KBMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMPE0"4 movieMDSG-A movieMP2G-4 movieMPEG-4 movieMPEG"4 movieMPEG-4 movieMoEeh movioMPEG-4 movieMPEG-1 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMDEG.A movicMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMDEC A movidMPEG-4 movieMDEG-A movieMPEG-4 movieMPEG-4 movieMDEC.A moviaMPEG-4 movie111 KC102 KB88 KBMDEG-A moviaMPEG-4 movie59 KB1MPEG-A movie98 KB MPEG-4 movie97 KB66 K3MPEG-4 movieMDEG.A movioAAKP93 KB/8 KBMPEG-4 movie50 KгMDEG-A movid58 KBMPEG-4 movie27 KB7KBMPEG-4 movieAl Notes: OffLeave• • CFavourites• jiminny• Recents* ApplicationsiCloud• iCloud Drive992 Svnc tolde0 DXP4800PLUS-B5F49 Networl• CRMI• Orange• Red|• Yellow• Green• Purple•) All lags..IhlDownloadsNameLoom.pkgAlfred copv.alfredoreterences=KeychronAssist-1.0.2 (1).dmeKeychronAssist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zip• Transcript.pd→mage U.loge1 Orioninstaller.dma_image.jpg- image (2).1pc• ПO-22221726037035-004-001_ORGES.pdf%D0%9F%D0%9E-22221726037035-004-001 archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterencesСE 060209С О000000026571172 CWICT 0Р70501260015900 ndt= 27022026_0000000026574472_ SWIFT_ [IBAN].pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001reportxmmi=pdt.odiB pdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonlKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst aid_notes_complete.docxrenortl2).esv1 config.vmlIteration run Search HS.postman_collection.jsonm licence bettertouchtoalMariusHosting Config.isonnokc.901a6502.6667.A62h-062 ccu•AlfredwPmazanoko.imnaoc.YWIfана Ковалик.jpg•искане даниел Ковалик..pg• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик iро• Dhotac 2.001Q SearchKind00,4 MD55.9 MBinstdlle..dckageAlfred...ferences10,1 MB10,1 MBIL MBDisk ImageDisk ImageLiP archive6.6 MBZIp archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDE Document140 KbZIP archive148 KВ148 KB122 KBZIP archivelZIP archiveXML document111 KBAlfred...ferences94 KBDDE Documont92 KBPDr DocumentK:PDF Document91 KB91 KBXML document30 KBn0kpDDE Nocumont28 KBPDF Document28 KRPDE Document28 KB27 KBDocument14 KB11 KB6 KB6KBJSONINCV NacumontZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBVAMI dosumon1 KB029 buteccSV Documenthttlicence183 bytesZero butesJSONAlfrod foronso!Zero bytesFolde1.9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.43 GB availabld• Inu 14 Mау 1/.40.34Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 ,Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3712 Goh 2006 9t 11:5 A1Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nau 2025 г+ 17:506 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0419 Mar 2026 at 11:55|10 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:362616 Oct 2025 aт 16:0122 Aar 2026 at 12:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
45510
|
NULL
|
NULL
|
NULL
|
|
45513
|
1628
|
30
|
2026-05-14T14:40:45.958269+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769645958_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"}]...
|
346921556458431101
|
6534586157453425628
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45514
|
1627
|
39
|
2026-05-14T14:40:45.961571+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769645961_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6814957943380363182
|
-8708761519200826421
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
PhpStorm•FileFV faVsco.jsvEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelplhl100% C#12066 on JY-20725-handle-HS-search-rate-limit K vHandleHubspotRateLimitTestvProject vTrackAutomatedReportGeneratedEvent.phpAutomatedReportResult.php© SendReportJob.phpDeleteCrmEntityTrait.php:© FieldTypeConverter.phpDeleteAccountJob.phpImportActivitylypes.phpT WriteCrmTrait.phpDecorateActivity.phpIntegrationAppServiceTrait.php• HubspotClientinterface.php© HubspotTokenManager.php© IntegrationApp/Service.php X© Activity.php© Salesforce/Service.phpT LogActivityTrait.php© Playbook.php© PayloadBuilder.phpPipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.php© RemoteCrmObjectManipulatoi© ActivityPlaybookTrait.php© CrmHelperRepository.php© AccountController.php=.env.staging=.env18© ResponseNormalize.php© Service.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.php© SyncFieldAction.php© SyncRelatedActivityManager.|55© WebhookSyncBatchProcessol413v D IntegrationApp> D Accessors419• Арі420Config4211© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extends BaseService implementspublic function saveMeeting(Activity $activity): array'Start_DateTime' => $activity->getActualStartTime()->toIs08601String(,'End_DateTime' => $activity->getActualEndTime()->toIs08601String(),'ownerId' => $this->getActivity0wnerId(Sactivity),A 16 × 2O DTO422]:D Filters423v D Jobs424$payload = array_merge($meetingPayload, $this->attachToProspect(Sactivity));© CrmEntitiesFullSyncJob.ph425© DeleteRemoteTeamJob.ph426T IntegrationAppService Trait427© SubscribeForEventsJob.ph428if ($activity->hasCrmProviderIdO) {$crmId =Sactivity->getCrmProviderId;Smeeting = $this->client->getMeeting(Scrmid):© TeamInitialSyncJob.php429© UnsubscribeForEventsJob.430© UpdateProfileRelatedEntiti431$oldDescription = $meeting['fields']['Description'] ?? null;$payload['Description'] = $decorateActivity->generateUpdatedDescription(SoldDescription, $activity 227© ValidateTeamActiveConne432> C ProspectSearchStrategy433> D ServiceTraits434© DataClient.php435© DecorateActivity.php436$this->logger-›info('[integration-app] CRM update meeting', ['activity' => $activity->getUvid(),'crm_id' => $crmId,'payload' => Spayload,© LocalSearch.php4371):• LocalSearchlnterface.php438C RemoteSearch.php439return $this->client->updateMeeting($crmId, $payload);© Service.php440v • Listeners441C ConvertLeadActivities.php442$payload['Description'] = $decorateActivity->generateDescription(Sactivity);© Purnel onkunCache nhn443Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)8• Thu 14 May 17:40:45* :Q=custom.log= laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;_220-221222-223224id THEN '(own=225226228229230hubspot':-Д231.2327233V= 11512582;234W Windsurf Teams427:16UTF-8Ca 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45515
|
1627
|
40
|
2026-05-14T14:40:51.925647+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769651925_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8043719072324535154
|
-8628527368849355612
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
PhpStormFileEditViewNavig Project: faVsco.js, menu
PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vlhlU HandleHubspotRateLimitTest ~100% C8• Thu 14 May 17:40:51* :QProjectvTrackAutomatedReportGeneratedEvent.phpSendReportJob.phpDeleteCrmEntity Trait.phpDeleteAccountJob.php:© FieldTypeConverter.phpImportActivityTypes.php€ WriteCrmTrait.phpHubspot/DecorateActivity.phpIntegrationAppServiceTrait.php• HubspotClientinterface.php© HubspotTokenManager.php© IntegrationApp/Service.php X© IntegrationApp/DecorateActivity.phpActivity-php© Salesforce/Service.php© LogActivityTrait.php© PayloadBuilder.php© Playbook.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.php© RemoteCrmObjectManipulatoi© PlainTextDecorateActivity.phpT ActivityPlaybookTrait.php© CrmHelperRepository.phpAccountController.php=.env.staging18© ResponseNormalize.php© Service.phpE.envDetachActivityObject.phpRematchActivityOnCrmObjectDetach.php© MatchActivityCrmData.phpClient.php© SyncFieldAction.php© SyncRelatedActivityManager.|55© WebhookSyncBatchProcessol413v D IntegrationApp426> D Accessors427• Арі428© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic function saveMeeting(Activity $activity): arrayif ($activity->hasCrmProviderIdO) {$crmId =Sactivity->getCrmProviderIdO;$meeting = $this->client->getMeeting($crmId);A 16 × 2ConfigO DTO429430D Filters431v D Jobs$oldDescription = $meeting['fields']['Description'] ?? null;Spayload[ 'Description'] = $decorateActivity->generateUpdatedDescription(SoldDescription, $activity 220© CrmEntitiesFullSyncJob.ph432433© DeleteRemoteTeamJob.phT IntegrationAppService Trait434435© SubscribeForEventsJob.ph© TeamInitialSyncJob.php436$this->logger-›info('[integration-app] CRM update meeting', ['activity' => $activity->getUuidO,'crm_id' => $crmId,'payload"=> Spayload,437© UnsubscribeForEventsJob.1):438© UpdateProfileRelatedEntiti439© ValidateTeamActiveConnereturn $this->client->updateMeeting($crmId, $payload);440> ProspectSearchStrategy441> D ServiceTraits442© DataClient.php$payload['Description'] = SdecorateActivity->generateDescription(Sactivity);© DecorateActivity.php443© LocalSearch.php444• LocalSearchlnterface.php445446© RemoteSearch.php$this->logger->info('[integration-app] CRM log meeting', ['activity' => $activity->getUuid),'payload' => $payload,447© Service.php1):v • Listeners448C ConvertLeadActivities.php449return $this->client-›createMeeting($payload);© Purnel onkunCache nhn450Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=custom.log=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;-221222-223224id THEN •(own=225_226227228229230hubspot':-231-232233 V= 11512582;— 234W Windsurf Teams431:75UTF-8Ca 4 spaces...
|
45514
|
NULL
|
NULL
|
NULL
|
|
45516
|
1628
|
31
|
2026-05-14T14:40:51.925615+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769651925_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8043719072324535154
|
-8628527368849355612
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
Jiminny... ~ActivityFiles Project: faVsco.js, menu
Jiminny... ~ActivityFilesLater@ jiminny-x-integrati• plattorm-inner-teamE Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity lab# engineering# general#jiminny-bgac nlattorm-nckets# product launches# random# releases# sofia-officed sunport# thank-yous# the people of iimi... Direct messages• 8la 62% Galya Dimitrovavasil VasilevM Stefka StovanovaSg: Todor StamatovMario GeorgievNiudlay lanay. James Graham "* Stoyan Tanevo Stelivan Georgiev( Petko Kashinski*. Lukas Kovali...::: AnnsToastS lira Gloud6d Huddle with Aneliva Angelova* Aneliya Angelova &• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някъде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preuiew in sact[HubSpotl Optimise CRM rematct(7 OpenRosdy for OA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira* SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle (LIVE 4:06 PMAneliva Angelova is here toolAneliva Angelova 4:44 PN11512582Lukas Kovalik M 5.16 PNcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-vne' annlication/ison'--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIr7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeavev Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:34Yesterday at 13.33Yesterdav at 13:33Yesterday at 13:32Yesterday at 13:32Yesterday at 13:31Yesterday at 13.30Yesterdav at 13:29Yesterday at 13:29resterday at 15.2oYesterdav at 13:28Yesterday at 13:27Yesterday at 13:26Yesterdav at 13:26resterday at 13-40Yesterdav at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13.20Yesterdav at 13:20Yesterdav at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:16Yesterdav at 13:16Yesterday at 13.10Yesterdav at 13:15Yesterday at 13:14Yesterday at 13:13Yecterdav at 12:12Yesterdav at 13:12Yesterday at 13.12Yesterdav at 13:11Yesterday at 13:11Yesterday at 13:10Yoctorday at 12:00Yesterdav at 13:09Yesterday at 13.08Yocterdav at 12:08Yesterdav at 13:07Yesterdav at 13:0616 K:MPEG-4 movie17 KB29 KBMDEG-A movieMPEG-4 movieMPEG-4 movie12 KE9 KBMPE0"4 movie8 K:37 KB10 KBIKBnMDSG-A movieMP2G-4 movie8 KBI9 KB8 KB72 K:MPEG-4 movieMPEG-4 movie14 KB13 KBMoECA movieMPEG-4 movie18 KBI12 KB10 KBMPEG-1 movidMPEG-4 movie16 KEMPEG-4 movie6 KB MPEG-4 movie6 KB12 KB|MPEG-4 movie23 KBMDSG.A movicMPEG-4 movie6KE11 KBMPEG-4 movieMPEG-4 movie11 KBMPEG-4 movie20 K:MPEG-4 movie2AKR10 KB7 KBMDEGA movidMPEG-4 movie5KPMDEG-A movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 K:102 KB88 KB59 KBMPEG-4 movieMDEC.A moviaMPEG-4 movieO9 KR97 KB66 KBMDEG-A movieMPEG-4 movie44K:MPSG-A movid93 KBMPEG-4 movie78 KB50 KB59 KPMPEG-4 movieMDEG.A movio27 KBMPEG-4 movie12 K:32 KBMDEC A movid17 KB19K8MPEG-4 movie• • CFavourites• jiminny• Recents* ApplicationsiCloud• iCloud Drive992 Svnc tolde0 DXP4800PLUS-B5F49 Networl• CRMI• Orange• Red|• Yellow• Green• Purple•) All lags..IhlDownloadsNameLoom.pkgAlfred copv.alfredoreterences=KeychronAssist-1.0.2 (1).dmeKeychronAssist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zip• Transcript.pd→mage U.loge1 Orioninstaller.dma_image.jpg- image (2).1pc• ПO-22221726037035-004-001_ORGES.pdf%D0%9F%D0%9E-22221726037035-004-001 archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterencesСE 060209С О000000026571172 CWICT 0Р70501260015900 ndt= 27022026_0000000026574472_ SWIFT_ [IBAN].pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001reportxmmi=pdt.odiB pdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfP Kdf-a,k Ffmiv Tree.sebitwarden export 20251031122528.isonlKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst aid_notes_complete.docxrenortl2).esv1 config.vmlIteration run Search HS.postman_collection.jsonm licence bettertouchtoalMariusHosting Config.isonnokc.901a6502.6667.A62h-062 ccu•AlfredwPmazanoko.imnaoc.YWIfана Ковалик.jpg•искане даниел Ковалик..pg• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик iро• Dhotac 2.001Q SearchKind00,4 MD55.9 MBinstdlle..dckageAlfred...ferences10,1 MB10,1 MBIL MBDisk ImageDisk ImageLiP archive6.6 MBZIp archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDE Document140 KbZIP archive148 KВ148 KB122 KBZIP archivelZIP archiveXML document111 KBAlfred...ferences94 KBDDE Documont92 KBPDr DocumentK:PDF Document91 KB91 KBXML document30 KBn0kpDDE Nocumont28 KBPDF Document28 KRPDE Document28 KB27 KBDocument14 KB11 KB6 KB6KBJSONINCV NacumontZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBVAMI dosumon1 KB029 buteccSV Documenthttlicence183 bytesZero butesJSONAlfrod foronso!Zero bytesFolde1.9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.43 GB availabld• Inu 14 May 1/.40:0)Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 ,Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3712 Goh 2006 9t 11:5 A1Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nau 2025 4+ 17:506 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0419 Mar 2026 at 11:55|10 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:362616 Oct 2025 aт 16:0122 Aar 2026 at 12:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
45513
|
NULL
|
NULL
|
NULL
|
|
45517
|
1627
|
41
|
2026-05-14T14:40:54.904545+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769654904_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vlhlU HandleHubspotRateLimitTest ~100% C8• Thu 14 May 17:40:54* :QProjectvTrackAutomatedReportGeneratedEvent.phpSendReportJob.phpDeleteCrmEntity Trait.phpDeleteAccountJob.php:© FieldTypeConverter.phpImportActivityTypes.php€ WriteCrmTrait.phpHubspot/DecorateActivity.phpIntegrationAppServiceTrait.php• HubspotClientinterface.php© HubspotTokenManager.php© IntegrationApp/Service.php X© IntegrationApp/DecorateActivity.phpActivity-php© Salesforce/Service.php© LogActivityTrait.php© PayloadBuilder.php© Playbook.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.php© RemoteCrmObjectManipulatoi© PlainTextDecorateActivity.phpT ActivityPlaybookTrait.php© CrmHelperRepository.phpAccountController.php=.env.staging18© ResponseNormalize.php© Service.phpE.envDetachActivityObject.phpRematchActivityOnCrmObjectDetach.php© MatchActivityCrmData.phpClient.php© SyncFieldAction.php© SyncRelatedActivityManager.|55© WebhookSyncBatchProcessol413v D IntegrationApp426> D Accessors427• Арі428© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic function saveMeeting(Activity $activity): arrayif ($activity->hasCrmProviderIdO) {$crmId =Sactivity->getCrmProviderIdO;$meeting = $this->client->getMeeting($crmId);A 16 × 2ConfigO DTO429430> O Filters4311v D Jobs$oldDescription = $meeting['fields']['Description'] ?? null;Spayload[ 'Description'] = $decorateActivity->generateUpdatedDescription(SoldDescription, $activity 220© CrmEntitiesFullSyncJob.ph432433© DeleteRemoteTeamJob.phT IntegrationAppService Trait434435© SubscribeForEventsJob.ph© TeamInitialSyncJob.php436$this->logger-›info('[integration-app] CRM update meeting', ['activity' => $activity->getUuidO,'crm_id' => $crmId,'payload'=> Spayload,437© UnsubscribeForEventsJob.1):438© UpdateProfileRelatedEntiti439© ValidateTeamActiveConnereturn $this->client->updateMeeting($crmId, $payload);440> ProspectSearchStrategy441> D ServiceTraits442© DataClient.php$payload['Description'] = SdecorateActivity->generateDescription(Sactivity);© DecorateActivity.php443© LocalSearch.php444• LocalSearchlnterface.php445446© RemoteSearch.php$this->logger->info('[integration-app] CRM log meeting', ['activity' => $activity->getUuid),'payload' => $payload,447© Service.php1):v • Listeners448C ConvertLeadActivities.php449return $this->client-›createMeeting($payload);© Purnel onkunCache nhn450Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=custom.log=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;-221222-223224id THEN •(own=225_226227228229230hubspot':-231232233= 11512582;234W Windsurf Teams439:40UTF-8Ca 4 spaces...
|
NULL
|
-8953191298664258298
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vlhlU HandleHubspotRateLimitTest ~100% C8• Thu 14 May 17:40:54* :QProjectvTrackAutomatedReportGeneratedEvent.phpSendReportJob.phpDeleteCrmEntity Trait.phpDeleteAccountJob.php:© FieldTypeConverter.phpImportActivityTypes.php€ WriteCrmTrait.phpHubspot/DecorateActivity.phpIntegrationAppServiceTrait.php• HubspotClientinterface.php© HubspotTokenManager.php© IntegrationApp/Service.php X© IntegrationApp/DecorateActivity.phpActivity-php© Salesforce/Service.php© LogActivityTrait.php© PayloadBuilder.php© Playbook.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.php© RemoteCrmObjectManipulatoi© PlainTextDecorateActivity.phpT ActivityPlaybookTrait.php© CrmHelperRepository.phpAccountController.php=.env.staging18© ResponseNormalize.php© Service.phpE.envDetachActivityObject.phpRematchActivityOnCrmObjectDetach.php© MatchActivityCrmData.phpClient.php© SyncFieldAction.php© SyncRelatedActivityManager.|55© WebhookSyncBatchProcessol413v D IntegrationApp426> D Accessors427• Арі428© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic function saveMeeting(Activity $activity): arrayif ($activity->hasCrmProviderIdO) {$crmId =Sactivity->getCrmProviderIdO;$meeting = $this->client->getMeeting($crmId);A 16 × 2ConfigO DTO429430> O Filters4311v D Jobs$oldDescription = $meeting['fields']['Description'] ?? null;Spayload[ 'Description'] = $decorateActivity->generateUpdatedDescription(SoldDescription, $activity 220© CrmEntitiesFullSyncJob.ph432433© DeleteRemoteTeamJob.phT IntegrationAppService Trait434435© SubscribeForEventsJob.ph© TeamInitialSyncJob.php436$this->logger-›info('[integration-app] CRM update meeting', ['activity' => $activity->getUuidO,'crm_id' => $crmId,'payload'=> Spayload,437© UnsubscribeForEventsJob.1):438© UpdateProfileRelatedEntiti439© ValidateTeamActiveConnereturn $this->client->updateMeeting($crmId, $payload);440> ProspectSearchStrategy441> D ServiceTraits442© DataClient.php$payload['Description'] = SdecorateActivity->generateDescription(Sactivity);© DecorateActivity.php443© LocalSearch.php444• LocalSearchlnterface.php445446© RemoteSearch.php$this->logger->info('[integration-app] CRM log meeting', ['activity' => $activity->getUuid),'payload' => $payload,447© Service.php1):v • Listeners448C ConvertLeadActivities.php449return $this->client-›createMeeting($payload);© Purnel onkunCache nhn450Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=custom.log=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;-221222-223224id THEN •(own=225_226227228229230hubspot':-231232233= 11512582;234W Windsurf Teams439:40UTF-8Ca 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45518
|
1627
|
42
|
2026-05-14T14:40:57.439868+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769657439_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.25,"top":0.0,"width":0.6013889,"height":1.0},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false}]...
|
-1022731425136792045
|
5603006839268685732
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}...
|
45517
|
NULL
|
NULL
|
NULL
|
|
45519
|
1628
|
32
|
2026-05-14T14:40:54.932563+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769654932_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Jiminny... ~ActivityFilesLater@ jiminny-x-integrat Jiminny... ~ActivityFilesLater@ jiminny-x-integrati• plattorm-inner-teamE Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity lab# engineering# general#jiminny-bgac nlattorm-nckets# product launches# random# releases# sofia-officed sunport# thank-yous# the people of iimi... Direct messages• 8la 62% Galya Dimitrovavasil VasilevM Stefka StovanovaSg: Todor StamatovMario GeorgievNiudlay lanay. James Graham "* Stoyan Tanevo Stelivan Georgiev( Petko Kashinski*. Lukas Kovali...::: AnnsToastS lira Gloud6d Huddle with Aneliva Angelova* Aneliya Angelova &• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някъде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preuiew in sact[HubSpotl Optimise CRM rematct(7 OpenRosdy for OA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira* SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle (LIVE 4:06 PMAneliva Angelova is here toolAneliva Angelova 4:44 PN11512582Lukas Kovalik M 5.16 PNcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-vne' annlication/ison'--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIr7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeavev Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:34Yesterday at 13.33Yesterdav at 13:33Yesterday at 13:32Yesterday at 13:32Yesterday at 13:31Yesterday at 13.30Yesterdav at 13:29Yesterday at 13:29resterday at 15.2oYesterdav at 13:28Yesterday at 13:27Yesterday at 13:26Yesterdav at 13:26resterday at 13-40Yesterdav at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13.20Yesterdav at 13:20Yesterdav at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:16Yesterdav at 13:16Yesterday at 13.10Yesterdav at 13:15Yesterday at 13:14Yesterday at 13:13Yecterdav at 12:12Yesterdav at 13:12Yesterday at 13.12Yesterdav at 13:11Yesterday at 13:11Yesterday at 13:10Yoctorday at 12:00Yesterdav at 13:09Yesterday at 13.08Yocterdav at 12:08Yesterdav at 13:07Yesterdav at 13:0616 K:MPEG-4 movie17 KB29 KBMDEG-A movieMPEG-4 movieMPEG-4 movie12 KE9 KBMPE0"4 movie8 K:37 KB10 KBIKBnMDSG-A movieMP2G-4 movie8 KBI9 KB8 KB72 K:MPEG-4 movieMPEG-4 movie14 KB13 KBMoECA movieMPEG-4 movie18 KBI12 KB10 KBMPEG-1 movidMPEG-4 movie16 KEMPEG-4 movie6 KB MPEG-4 movie6 KB12 KB|MPEG-4 movie23 KBMDSG.A movicMPEG-4 movie6KE11 KBMPEG-4 movieMPEG-4 movie11 KBMPEG-4 movie20 K:MPEG-4 movie2AKR10 KB7 KBMDEGA movidMPEG-4 movie5KPMDEG-A movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 K:102 KB88 KB59 KBMPEG-4 movieMDEC.A moviaMPEG-4 movieO9 KR97 KB66 KBMDEG-A movieMPEG-4 movie44K:MPSG-A movid93 KBMPEG-4 movie78 KB50 KB59 KPMPEG-4 movieMDEG.A movio27 KBMPEG-4 movie12 K:32 KBMDEC A movid17 KB19K8MPEG-4 movie• • CFavourites• jiminny• Recents* ApplicationsiCloud• iCloud Drive992 Svnc tolde0 DXP4800PLUS-B5F49 Networl• CRMI• Orange• Red|• Yellow• Green• Purple•) All lags..IhlDownloadsNameLoom.pkgAlfred copv.alfredoreterences=KeychronAssist-1.0.2 (1).dmeKeychronAssist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zip• Transcript.pd→mage U.loge1 Orioninstaller.dma_image.jpg- image (2).1pc• ПO-22221726037035-004-001_ORGES.pdf%D0%9F%D0%9E-22221726037035-004-001 archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterencesСE 060209С О000000026571172 CWICT 0Р70501260015900 ndt= 27022026_0000000026574472_ SWIFT_ [IBAN].pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001reportxmmi=pdt.odiB pdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfP Kdf-a,k Ffmiv Tree.sebitwarden export 20251031122528.isonlKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst aid_notes_complete.docxrenortl2).esv1 config.vmlIteration run Search HS.postman_collection.jsonm licence bettertouchtoalMariusHosting Config.isonnokc.901a6502.6667.A62h-062 ccu•AlfredwPmazanoko.imnaoc.YWIfана Ковалик.jpg•искане даниел Ковалик..pg• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик iро• Dhotac 2.001Q SearchKind00,4 MD55.9 MBinstdlle..dckageAlfred...ferences10,1 MB10,1 MBIL MBDisk ImageDisk ImageLiP archive6.6 MBZIp archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDE Document140 KbZIP archive148 KВ148 KB122 KBZIP archivelZIP archiveXML document111 KBAlfred...ferences94 KBDDE Documont92 KBPDr DocumentK:PDF Document91 KB91 KBXML document30 KBn0kpDDE Nocumont28 KBPDF Document28 KRPDE Document28 KB27 KBDocument14 KB11 KB6 KB6KBJSONINCV NacumontZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBVAMI dosumon1 KB029 buteccSV Documenthttlicence183 bytesZero butesJSONAlfrod foronso!Zero bytesFolde1.9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.43 GB availabld• Inu 14 Mаy 1/.40:04)Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 ,Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3712 Goh 2006 9t 11:5 A1Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nau 2025 4+ 17:506 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0419 Mar 2026 at 11:55|10 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:362616 Oct 2025 aт 16:0122 Aar 2026 at 12:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
-5443114342615826628
|
NULL
|
click
|
ocr
|
NULL
|
Jiminny... ~ActivityFilesLater@ jiminny-x-integrat Jiminny... ~ActivityFilesLater@ jiminny-x-integrati• plattorm-inner-teamE Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity lab# engineering# general#jiminny-bgac nlattorm-nckets# product launches# random# releases# sofia-officed sunport# thank-yous# the people of iimi... Direct messages• 8la 62% Galya Dimitrovavasil VasilevM Stefka StovanovaSg: Todor StamatovMario GeorgievNiudlay lanay. James Graham "* Stoyan Tanevo Stelivan Georgiev( Petko Kashinski*. Lukas Kovali...::: AnnsToastS lira Gloud6d Huddle with Aneliva Angelova* Aneliya Angelova &• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някъде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preuiew in sact[HubSpotl Optimise CRM rematct(7 OpenRosdy for OA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira* SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle (LIVE 4:06 PMAneliva Angelova is here toolAneliva Angelova 4:44 PN11512582Lukas Kovalik M 5.16 PNcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-vne' annlication/ison'--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIr7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeavev Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:34Yesterday at 13.33Yesterdav at 13:33Yesterday at 13:32Yesterday at 13:32Yesterday at 13:31Yesterday at 13.30Yesterdav at 13:29Yesterday at 13:29resterday at 15.2oYesterdav at 13:28Yesterday at 13:27Yesterday at 13:26Yesterdav at 13:26resterday at 13-40Yesterdav at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13.20Yesterdav at 13:20Yesterdav at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:16Yesterdav at 13:16Yesterday at 13.10Yesterdav at 13:15Yesterday at 13:14Yesterday at 13:13Yecterdav at 12:12Yesterdav at 13:12Yesterday at 13.12Yesterdav at 13:11Yesterday at 13:11Yesterday at 13:10Yoctorday at 12:00Yesterdav at 13:09Yesterday at 13.08Yocterdav at 12:08Yesterdav at 13:07Yesterdav at 13:0616 K:MPEG-4 movie17 KB29 KBMDEG-A movieMPEG-4 movieMPEG-4 movie12 KE9 KBMPE0"4 movie8 K:37 KB10 KBIKBnMDSG-A movieMP2G-4 movie8 KBI9 KB8 KB72 K:MPEG-4 movieMPEG-4 movie14 KB13 KBMoECA movieMPEG-4 movie18 KBI12 KB10 KBMPEG-1 movidMPEG-4 movie16 KEMPEG-4 movie6 KB MPEG-4 movie6 KB12 KB|MPEG-4 movie23 KBMDSG.A movicMPEG-4 movie6KE11 KBMPEG-4 movieMPEG-4 movie11 KBMPEG-4 movie20 K:MPEG-4 movie2AKR10 KB7 KBMDEGA movidMPEG-4 movie5KPMDEG-A movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 K:102 KB88 KB59 KBMPEG-4 movieMDEC.A moviaMPEG-4 movieO9 KR97 KB66 KBMDEG-A movieMPEG-4 movie44K:MPSG-A movid93 KBMPEG-4 movie78 KB50 KB59 KPMPEG-4 movieMDEG.A movio27 KBMPEG-4 movie12 K:32 KBMDEC A movid17 KB19K8MPEG-4 movie• • CFavourites• jiminny• Recents* ApplicationsiCloud• iCloud Drive992 Svnc tolde0 DXP4800PLUS-B5F49 Networl• CRMI• Orange• Red|• Yellow• Green• Purple•) All lags..IhlDownloadsNameLoom.pkgAlfred copv.alfredoreterences=KeychronAssist-1.0.2 (1).dmeKeychronAssist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zip• Transcript.pd→mage U.loge1 Orioninstaller.dma_image.jpg- image (2).1pc• ПO-22221726037035-004-001_ORGES.pdf%D0%9F%D0%9E-22221726037035-004-001 archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterencesСE 060209С О000000026571172 CWICT 0Р70501260015900 ndt= 27022026_0000000026574472_ SWIFT_ [IBAN].pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001reportxmmi=pdt.odiB pdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfP Kdf-a,k Ffmiv Tree.sebitwarden export 20251031122528.isonlKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst aid_notes_complete.docxrenortl2).esv1 config.vmlIteration run Search HS.postman_collection.jsonm licence bettertouchtoalMariusHosting Config.isonnokc.901a6502.6667.A62h-062 ccu•AlfredwPmazanoko.imnaoc.YWIfана Ковалик.jpg•искане даниел Ковалик..pg• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик iро• Dhotac 2.001Q SearchKind00,4 MD55.9 MBinstdlle..dckageAlfred...ferences10,1 MB10,1 MBIL MBDisk ImageDisk ImageLiP archive6.6 MBZIp archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDE Document140 KbZIP archive148 KВ148 KB122 KBZIP archivelZIP archiveXML document111 KBAlfred...ferences94 KBDDE Documont92 KBPDr DocumentK:PDF Document91 KB91 KBXML document30 KBn0kpDDE Nocumont28 KBPDF Document28 KRPDE Document28 KB27 KBDocument14 KB11 KB6 KB6KBJSONINCV NacumontZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBVAMI dosumon1 KB029 buteccSV Documenthttlicence183 bytesZero butesJSONAlfrod foronso!Zero bytesFolde1.9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.43 GB availabld• Inu 14 Mаy 1/.40:04)Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 ,Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3712 Goh 2006 9t 11:5 A1Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nau 2025 4+ 17:506 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0419 Mar 2026 at 11:55|10 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:362616 Oct 2025 aт 16:0122 Aar 2026 at 12:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45520
|
1628
|
33
|
2026-05-14T14:40:59.742364+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769659742_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.3899601,"top":0.97605747,"width":0.28789893,"height":0.02394253},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.28224733,"top":1.0,"width":0.024268618,"height":-0.04788506},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app","depth":6,"on_screen":false,"role_description":"text"}]...
|
1094040200734555288
|
5533679959718179548
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide
app ~/jiminny/app...
|
45519
|
NULL
|
NULL
|
NULL
|
|
45521
|
1627
|
43
|
2026-05-14T14:41:08.435106+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769668435_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16","depth":4,"bounds":{"left":0.77708334,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.80138886,"top":0.3122222,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7748463095849305329
|
6524482065460761565
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45522
|
1627
|
44
|
2026-05-14T14:41:09.421068+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769669421_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2586234742233688171
|
-7051436856496256053
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
PhpStorm•ProjectvFileFV faVsco.jsvEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp#12066 on JY-20725-handle-HS-search-rate-limit k vlhlU HandleHubspotRateLimitTest ~100% C* :8• Thu 14 May 17:41:09Q• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivity Types.phpT WriteCrmTrait.php=custom.logSendReportJob.php> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php x( RemoteWriteAccessor.phpT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpD LogActivityTrait.phpPlaybook.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging=.env18.••© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt55• RemoteWriteAccessor.php413• SystemStateAccessor.php415© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic functionsaveMeeting(Activity $activity): array$decorateActivity = app( abstract: DecorateActivity::class):B16 × 2T UserAccessor.php416• Арi417Config418O DTO419D Filters420v D Jobs421SmeetingPayload = ['Event_Title' => SdecorateActivity->generateTitle(Sactivity),'Start_DateTime' => $activity->getActualStartTime()->toIs08601String(),'End_DateTime' => Sactivity->getActualEndTime()->toIs08601String(),'ownerId' => $this->getActivity0wnerId(Sactivity),© CrmEntitiesFullSyncJob.ph4221;© DeleteRemoteTeamJob.ph423T IntegrationAppService Trait424$payload = array_merge($meetingPayload, $this->attachToProspect($activity));© SubscribeForEventsJob.ph425© TeamInitialSyncJob.php426© UnsubscribeForEventsJob.427© UpdateProfileRelatedEntiti428if ($activity->hasCrmProviderIdO) {$crmid = Sactivity->getCrmProviderIdO;$meeting = $this->client->getMeeting($crmId);© ValidateTeamActiveConne429> ProspectSearchStrategy430> D ServiceTraits431$oldDescription = $meeting['fields']['Description'] ?? null;Spayload['Description'] = SdecorateActivity->generateUpdatedDescription(SoldDescription, Sactivith 230© DataClient.php432© DecorateActivity.php433© LocalSearch.php434• LocalSearchlnterface.php435© RemoteSearch.php436$this->logger->info('[integration-app]CRM update meeting','activity' => $activity->getUvid(),'crm_id' = $crmId,'payload' => $payload,© Service.php4371):v • Listeners438C ConvertLeadActivities.php439return $this->client->updateMeeting(ScrmId,Spayload);© Purnel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;_220—221222-223224id THEN •(own=225_226227228229hubspot':-232233V= 11512582;234W Windsurf Teams449:35UTF-8Ca 4 spaces...
|
45521
|
NULL
|
NULL
|
NULL
|
|
45523
|
1627
|
45
|
2026-05-14T14:41:11.662772+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769671662_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16","depth":4,"bounds":{"left":0.77708334,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.80138886,"top":0.3122222,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
4266403488567062772
|
6524482065460761565
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45524
|
1628
|
34
|
2026-05-14T14:41:09.413938+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769669413_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2586234742233688171
|
-7051436856496256053
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctC OpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeave~ (Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:34Yesterday at 13.33Yesterdav at 13:33Yesterday at 13:32Yesterday at 13:32Yesterday at 13:31Yesterday at 13.30Yesterday at 13:29Yesterday at 13:29resterday at 15.2oYesterdav at 13:28Yesterday at 13:27Yesterday at 13:26Yesterday at 13:26resterday at 13-40Yesterdav at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13.20Yesterdav at 13:20Yesterday at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:16Yesterday at 13:16Yesterday at 13.10Yesterdav at 13:15Yesterday at 13:14Yesterday at 13:13Yecterdav at 12:12Yesterday at 13:12Yesterday at 13.12Yesterdav at 13:11Yesterday at 13:11Yesterday at 13:10Yesterday at 13:09Yesterday at 13:09Yesterday at 13.08Yocterdav at 12:08Yesterday at 13:07Yesterdav at 13:0616 K:MPEG-4 movie17 KBMPEG-4 movie29 KBMPEG-4 movieMPEG-4 movie12 KE9 KBMPE0"4 movie8 K:37 KBMPEG-4 movie10 KBIKBnMP2G-4 movie8 KBMPEG-4 movie9 KB8 KBMPEG-4 movie72 K:14 KBMPEG-4 movie13 KBMPEG-4 movie18 KBMPEG-4 movie12 KB10 KBMPEG-4 movie16 KEMPEG-4 movie6 KB MPEG-4 movie6 KB12 KB|MPEG-4 movie23 KBMPEG-4 movieMPEG-4 movie6KEMPEG-4 movie11 KBMPEG-4 movie11 KBMPEG-4 movie20 K:MPEG-4 movie34 KBMPEG-4 movie10 KB7 KBMPEG-4 movie5KPMPEG-4 movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 K:MPEG-4 movie102 KBMPEG-4 movie88 KB59 KBO9 KRMPEG-4 movieMDEG-A movie97 KB66 KBMPEG-4 movie44K:MPSG-A movid93 KBMPEG-4 movie78 KB50 KB59 KPMPEG-4 movieMPEG-4 movie27 KBMPEG-4 movie12 K:32 KBMPEG-4 movie17 KB19K8MPEG-4 movie• 0FavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network|• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zipD Transcript.pdf→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfB Rovaix Famly Treo gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence bettertouchtoalMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•Alfredmazanoke-images-YWJ6ана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВZIP archivel148 KBZIP archive122 KBXML document111 KBAlfred...ferences94 KBPDF Document92 KBPDr DocumentK:91 KB91 KB30 KB29 KBPDF DocumentXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.42 GB availabold• Inu 14 Mау 1/.41-04Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45525
|
1627
|
46
|
2026-05-14T14:41:16.718621+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769676718_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.jsv* #12066 on JY-20725-handle-HS-search-rate-limit k vlhlU HandleHubspotRateLimitTest ~100% (C478• Thu 14 May 17:41:16* :QProjectvSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivityTypes.phpT WriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php x( RemoteWriteAccessor.php=laravel.logT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.phpActivity.php© Salesforce/Service.phpD LogActivityTrait.phpPlaybook.phpSF [jiminny@localhost]• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpA HS_local [jiminny@localho:WDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging.env4 console [QAI PROD] X18.••© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.php4 console [PROD]T MeetingAccessor.php• RegisterEventsAccessor.pt• RemoteWriteAccessor.php55413© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic function saveMeeting(Activity $activity): arrayA console (EU]A 16 × 2• SystemStateAccessor.phpT UserAccessor.php418• Арi419Config420O DTO421'Event_Title'=> SdecorateActivity->generateTitle(Sactivity),'Start_DateTime'=> $activity->getActualStartTime()->toIso8601String(),'Fnd DatoTime'=> Sactivitv->aetActualEndTime()->toIs08601StringO,ExtractSurround/OwnerId(Sactivity),D Filters422v d Jobs423© CrmEntitiesFullSyncJob.ph 424Spayload = array_merge($meetingPayload, $this->attachToProspect(Sactivity));© DeleteRemoteTeamJob.ph425T IntegrationAppService Trait 426© SubscribeForEventsJob.ph427© TeamInitialSyncJob.php428if (Sactivity->hasCrmProviderIdO) {$crmId = $activity->getCrmProviderId);Smeeting = $this->client->getMeeting(ScrmId):© UnsubscribeForEventsJob.429© UpdateProfileRelatedEntiti430|© ValidateTeamActiveConne431$oldDescription = $meeting['fields']['Description'] ?? null;$payLoad[ 'Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity228> ProspectSearchStrategy432> D ServiceTraits433© DataClient.php434© DecorateActivity.php435© LocalSearch.php436$this->logger->info('[integration-app]CRM update meeting','activity' => $activity->getUvid(),'crm_id' => $crmid,'payload' => $payload,• LocalSearchlnterface.php4371);DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;_220-221222-223224id THEN •(own=225_226227229230hubspot':231232233V= 11512582;234C RemoteSearch.php438© Service.php439return $this->client->updateMeeting(ScrmId,$payload);v • Listeners440C ConvertLeadActivities.php441© Purnel onkunCache nhn442$payload['Description'] = $decorateActivity->generateDescription(Sactivity):Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)W Windsurf Teams421:28 (252 chars, 3 line breaks)UTF-8Ca 4 spaces...
|
NULL
|
4039924033331417404
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.jsv* #12066 on JY-20725-handle-HS-search-rate-limit k vlhlU HandleHubspotRateLimitTest ~100% (C478• Thu 14 May 17:41:16* :QProjectvSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivityTypes.phpT WriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php x( RemoteWriteAccessor.php=laravel.logT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.phpActivity.php© Salesforce/Service.phpD LogActivityTrait.phpPlaybook.phpSF [jiminny@localhost]• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpA HS_local [jiminny@localho:WDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging.env4 console [QAI PROD] X18.••© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.php4 console [PROD]T MeetingAccessor.php• RegisterEventsAccessor.pt• RemoteWriteAccessor.php55413© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic function saveMeeting(Activity $activity): arrayA console (EU]A 16 × 2• SystemStateAccessor.phpT UserAccessor.php418• Арi419Config420O DTO421'Event_Title'=> SdecorateActivity->generateTitle(Sactivity),'Start_DateTime'=> $activity->getActualStartTime()->toIso8601String(),'Fnd DatoTime'=> Sactivitv->aetActualEndTime()->toIs08601StringO,ExtractSurround/OwnerId(Sactivity),D Filters422v d Jobs423© CrmEntitiesFullSyncJob.ph 424Spayload = array_merge($meetingPayload, $this->attachToProspect(Sactivity));© DeleteRemoteTeamJob.ph425T IntegrationAppService Trait 426© SubscribeForEventsJob.ph427© TeamInitialSyncJob.php428if (Sactivity->hasCrmProviderIdO) {$crmId = $activity->getCrmProviderId);Smeeting = $this->client->getMeeting(ScrmId):© UnsubscribeForEventsJob.429© UpdateProfileRelatedEntiti430|© ValidateTeamActiveConne431$oldDescription = $meeting['fields']['Description'] ?? null;$payLoad[ 'Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity228> ProspectSearchStrategy432> D ServiceTraits433© DataClient.php434© DecorateActivity.php435© LocalSearch.php436$this->logger->info('[integration-app]CRM update meeting','activity' => $activity->getUvid(),'crm_id' => $crmid,'payload' => $payload,• LocalSearchlnterface.php4371);DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;_220-221222-223224id THEN •(own=225_226227229230hubspot':231232233V= 11512582;234C RemoteSearch.php438© Service.php439return $this->client->updateMeeting(ScrmId,$payload);v • Listeners440C ConvertLeadActivities.php441© Purnel onkunCache nhn442$payload['Description'] = $decorateActivity->generateDescription(Sactivity):Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)W Windsurf Teams421:28 (252 chars, 3 line breaks)UTF-8Ca 4 spaces...
|
45523
|
NULL
|
NULL
|
NULL
|
|
45526
|
1628
|
35
|
2026-05-14T14:41:16.707402+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769676707_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ActivityFilesLaterJiminny... ~@ jiminny-x-integrat ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctC OpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeave~ (Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:35Yesterday at 13.34Yesterdav at 13:33Yesterday at 13:32Yesterdav at 13:37Yesterday at 13:31Yesterday at 13.30Yesterday at 13:30Yesterday at 13:29resterday at 15.4gYesterdav at 13:28Yesterday at 13:28Yesterday at 13:27Yesterday at 13:26resterday at 13-4oYesterdav at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13:22Yesterday at 13.21Yesterdav at 13:20Yesterday at 13:20Yesterday at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:17Yesterday at 13:16Yesterday at 13-10Yesterdav at 13:15Yesterday at 13:15Yesterday at 13:14Yecterdav at 12:12Yesterday at 13.12Yesterdav at 13:12Yesterday at 13:11Yesterday at 13:10Yoctorday at 12:10Yesterday at 13:09Yesterday at 13.09Yocterdav at 12:081Yesterday at 13:08Yesterdav at 13:071S K:MPEG-4 movie16 KBMPEG-4 movie17 KB29 Kb6 KEMPEG-4 movieMPEG-4 movie12 KB9 KBMPE0"4 movie7 K:8 KBMPEG-4 movie37 KB10 KbMP2G-4 movie7 KBMPEG-4 movie8 KBMPEG-4 movie8 K:72 KBMPEG-4 movie14 KB13 K:O KRIMPEG-4 movieMPEG-4 movie18 KB12 KBMPEG-4 movie10 KEMPEG-4 movie16 KB MPEG-4 movie6 KB6 KB1MPEG-4 movie12 KBMPEG-4 movie23 KB8 KBMPEG-4 movie6KEMPEG-4 movie6 KBMPEG-4 movie11 KB11 K:MPEG-4 movie20 KBMPEG-4 movie10 KBMPEG-4 movie7 KPMPEG-4 movie5 KBMPEG-4 movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 KBMPEG-4 movie102 KB88 KBMPEG-4 movieKO KRMDEG-A movie98 KBMPEG-4 movie97 KBMPEG-4 movie66 K:MPEG-A movie44 KB MPEG-4 movie93 KB78 KB50 kpMPEG-4 movieMPEG-4 movie58 KB27 KBMPEG-4 movie7KP12 KBMPEG-4 movie32 KB17 K8MPEG-4 movieFavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network_• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zipD Transcript.pdf→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence hettertouchtoalMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•Alfredmazanoke-images-YWJ6ана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВ148 KB122 KB111 KB94 KBZIP archivelZIP archiveXML documentAlfred...ferencesPDF Document92 KBPDr DocumentK:91 KB91 KB30 KB29 KBPDF DocumentXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.41 GB availabld• Inu 14 Mаy 1/.41-10Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
-3763497527754205776
|
NULL
|
click
|
ocr
|
NULL
|
ActivityFilesLaterJiminny... ~@ jiminny-x-integrat ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctC OpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeave~ (Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:35Yesterday at 13.34Yesterdav at 13:33Yesterday at 13:32Yesterdav at 13:37Yesterday at 13:31Yesterday at 13.30Yesterday at 13:30Yesterday at 13:29resterday at 15.4gYesterdav at 13:28Yesterday at 13:28Yesterday at 13:27Yesterday at 13:26resterday at 13-4oYesterdav at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13:22Yesterday at 13.21Yesterdav at 13:20Yesterday at 13:20Yesterday at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:17Yesterday at 13:16Yesterday at 13-10Yesterdav at 13:15Yesterday at 13:15Yesterday at 13:14Yecterdav at 12:12Yesterday at 13.12Yesterdav at 13:12Yesterday at 13:11Yesterday at 13:10Yoctorday at 12:10Yesterday at 13:09Yesterday at 13.09Yocterdav at 12:081Yesterday at 13:08Yesterdav at 13:071S K:MPEG-4 movie16 KBMPEG-4 movie17 KB29 Kb6 KEMPEG-4 movieMPEG-4 movie12 KB9 KBMPE0"4 movie7 K:8 KBMPEG-4 movie37 KB10 KbMP2G-4 movie7 KBMPEG-4 movie8 KBMPEG-4 movie8 K:72 KBMPEG-4 movie14 KB13 K:O KRIMPEG-4 movieMPEG-4 movie18 KB12 KBMPEG-4 movie10 KEMPEG-4 movie16 KB MPEG-4 movie6 KB6 KB1MPEG-4 movie12 KBMPEG-4 movie23 KB8 KBMPEG-4 movie6KEMPEG-4 movie6 KBMPEG-4 movie11 KB11 K:MPEG-4 movie20 KBMPEG-4 movie10 KBMPEG-4 movie7 KPMPEG-4 movie5 KBMPEG-4 movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 KBMPEG-4 movie102 KB88 KBMPEG-4 movieKO KRMDEG-A movie98 KBMPEG-4 movie97 KBMPEG-4 movie66 K:MPEG-A movie44 KB MPEG-4 movie93 KB78 KB50 kpMPEG-4 movieMPEG-4 movie58 KB27 KBMPEG-4 movie7KP12 KBMPEG-4 movie32 KB17 K8MPEG-4 movieFavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network_• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zipD Transcript.pdf→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence hettertouchtoalMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•Alfredmazanoke-images-YWJ6ана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВ148 KB122 KB111 KB94 KBZIP archivelZIP archiveXML documentAlfred...ferencesPDF Document92 KBPDr DocumentK:91 KB91 KB30 KB29 KBPDF DocumentXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.41 GB availabld• Inu 14 Mаy 1/.41-10Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
45524
|
NULL
|
NULL
|
NULL
|
|
45527
|
1627
|
47
|
2026-05-14T14:41:22.860846+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769682860_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vlhlU HandleHubspotRateLimitTest ~100% (C478• Thu 14 May 17:41:22* :QProjectv• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivityTypes.phpT WriteCrmTrait.php=custom.logSendReportJob.php> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php X© RemoteWriteAccessor.php=laravel.logT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpD LogActivityTrait.phpPlaybook.phpSF [jiminny@localhost]• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpA HS_local [jiminny@localho:WDealAccessor.php© ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php=.env.staging.env4 console [QAI PROD] X18.••© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.php4 console [PROD]T MeetingAccessor.phpRegisterEventsAccessor.pt• RemoteWriteAccessor.php413© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extends BaseService implementspublic function saveMeeting(Activity $activity): arrayA console (EU]55B16 × 2• SystemStateAccessor.phpT UserAccessor.php418• Арi419Config420O DTO421'Event_Title' => $decorateActivity->generateTitle(Sactivity),'Start_DateTime' => Sactivity->getActualStartTime()->toIs08601String(),'End_DateTime' => $activity->getActualEndTime()->toIso8601StringO,'ownerid' => Sthis->getActivity0wnerId(Sactivity),> O Filters422v d Jobs423© CrmEntitiesFullSyncJob.ph 424Spayload = array_merge($meetingPayload, $this->attachToProspect(Sactivity));© DeleteRemoteTeamJob.ph425T IntegrationAppService Trait 426© SubscribeForEventsJob.ph427© TeamInitialSyncJob.php428if ($activity->hasCrmProviderId)) {$crmId =Sactivity->getCrmProviderId();Smeeting = $this->client->getMeeting(ScrmId);© UnsubscribeForEventsJob.429© UpdateProfileRelatedEntiti430|© ValidateTeamActiveConne431$oldDescription = $meeting['fields']['Description'] ?? null;$payLoad[ 'Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity228> C ProspectSearchStrategy432> D ServiceTraits433© DataClient.php434© DecorateActivity.php435© LocalSearch.php436• LocalSearchlnterface.php4371):$this->logger-›info('[integration-app]CRM update meeting', l'activity' => $activity->getUuid(),'crm_id'=> $crmId,'payload' => $payload,Extract SurroundCascade 8e TlCommand 881//DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219.id = 33;_220-221222-223224id THEN '(own=225_226227229230hubspot':-231232233V= 11512582;234C RemoteSearch.php438© Service.php439retuv • Listeners440Customize Toolbar...Don't Show Toolbar1(ScrmId,Spayload);C ConvertLeadActivities.php441© Purnel onkunCache nhn442$payload['Description'] = $decorateActivity->generateDescription(Sactivity):Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)W Windsurf Teams436:25 (96 chars, 2 line breaks)UTF-8Ca 4 spaces...
|
NULL
|
-7393957048253194855
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vlhlU HandleHubspotRateLimitTest ~100% (C478• Thu 14 May 17:41:22* :QProjectv• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivityTypes.phpT WriteCrmTrait.php=custom.logSendReportJob.php> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php X© RemoteWriteAccessor.php=laravel.logT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpD LogActivityTrait.phpPlaybook.phpSF [jiminny@localhost]• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpA HS_local [jiminny@localho:WDealAccessor.php© ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php=.env.staging.env4 console [QAI PROD] X18.••© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.php4 console [PROD]T MeetingAccessor.phpRegisterEventsAccessor.pt• RemoteWriteAccessor.php413© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extends BaseService implementspublic function saveMeeting(Activity $activity): arrayA console (EU]55B16 × 2• SystemStateAccessor.phpT UserAccessor.php418• Арi419Config420O DTO421'Event_Title' => $decorateActivity->generateTitle(Sactivity),'Start_DateTime' => Sactivity->getActualStartTime()->toIs08601String(),'End_DateTime' => $activity->getActualEndTime()->toIso8601StringO,'ownerid' => Sthis->getActivity0wnerId(Sactivity),> O Filters422v d Jobs423© CrmEntitiesFullSyncJob.ph 424Spayload = array_merge($meetingPayload, $this->attachToProspect(Sactivity));© DeleteRemoteTeamJob.ph425T IntegrationAppService Trait 426© SubscribeForEventsJob.ph427© TeamInitialSyncJob.php428if ($activity->hasCrmProviderId)) {$crmId =Sactivity->getCrmProviderId();Smeeting = $this->client->getMeeting(ScrmId);© UnsubscribeForEventsJob.429© UpdateProfileRelatedEntiti430|© ValidateTeamActiveConne431$oldDescription = $meeting['fields']['Description'] ?? null;$payLoad[ 'Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity228> C ProspectSearchStrategy432> D ServiceTraits433© DataClient.php434© DecorateActivity.php435© LocalSearch.php436• LocalSearchlnterface.php4371):$this->logger-›info('[integration-app]CRM update meeting', l'activity' => $activity->getUuid(),'crm_id'=> $crmId,'payload' => $payload,Extract SurroundCascade 8e TlCommand 881//DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219.id = 33;_220-221222-223224id THEN '(own=225_226227229230hubspot':-231232233V= 11512582;234C RemoteSearch.php438© Service.php439retuv • Listeners440Customize Toolbar...Don't Show Toolbar1(ScrmId,Spayload);C ConvertLeadActivities.php441© Purnel onkunCache nhn442$payload['Description'] = $decorateActivity->generateDescription(Sactivity):Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)W Windsurf Teams436:25 (96 chars, 2 line breaks)UTF-8Ca 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45528
|
1628
|
36
|
2026-05-14T14:41:22.874094+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769682874_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ActivityFilesLaterJiminny... ~@ jiminny-x-integrat ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctC OpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeave~ (Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:35Yesterday at 13.34Yesterdav at 13:33Yesterday at 13:32Yesterdav at 13:37Yesterday at 13:31Yesterday at 13.30Yesterday at 13:30Yesterday at 13:29resterday at 15.4gYesterdav at 13:28Yesterday at 13:28Yesterday at 13:27Yesterday at 13:26resterday at 13-4oYesterdav at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13:22Yesterday at 13.21Yesterdav at 13:20Yesterday at 13:20Yesterday at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:17Yesterday at 13:16Yesterday at 13-10Yesterdav at 13:15Yesterday at 13:15Yesterday at 13:14Yecterdav at 12:12Yesterday at 13.12Yesterdav at 13:12Yesterday at 13:11Yesterday at 13:10Yoctorday at 12:10Yesterday at 13:09Yesterday at 13.09Yocterdav at 12:081Yesterday at 13:08Yesterdav at 13:071S K:MPEG-4 movie16 KBMPEG-4 movie17 KB29 Kb6 KEMPEG-4 movieMPEG-4 movie12 KB9 KBMPE0"4 movie7 K:8 KBMPEG-4 movie37 KB10 KbMP2G-4 movie7 KBMPEG-4 movie8 KBMPEG-4 movie8 K:72 KBMPEG-4 movie14 KB13 K:O KRIMPEG-4 movieMPEG-4 movie18 KB12 KBMPEG-4 movie10 KEMPEG-4 movie16 KB MPEG-4 movie6 KB6 KB1MPEG-4 movie12 KBMPEG-4 movie23 KB8 KBMPEG-4 movie6KEMPEG-4 movie6 KBMPEG-4 movie11 KB11 K:MPEG-4 movie20 KBMPEG-4 movie10 KBMPEG-4 movie7 KPMPEG-4 movie5 KBMPEG-4 movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 KBMPEG-4 movie102 KB88 KBMPEG-4 movieKO KRMDEG-A movie98 KBMPEG-4 movie97 KBMPEG-4 movie66 K:MPEG-A movie44 KB MPEG-4 movie93 KB78 KB50 kpMPEG-4 movieMPEG-4 movie58 KB27 KBMPEG-4 movie7KP12 KBMPEG-4 movie32 KB17 K8MPEG-4 movieFavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network|• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zipD Transcript.pdf→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zipD report(2) xmlAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence hettertouchtoalMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•Alfredmazanoke-images-YWJ6ана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВ148 KB122 KB111 KB94 KBZIP archivelZIP archiveXML documentAlfred...ferencesPDF Document92 KBPDr DocumentPDF Document91 KB91 KB30 KB29 KBXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.41 GB availabld• Inu 14 Mаy 1/.41-L4Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
-7567659445726155218
|
NULL
|
click
|
ocr
|
NULL
|
ActivityFilesLaterJiminny... ~@ jiminny-x-integrat ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctC OpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeave~ (Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:35Yesterday at 13.34Yesterdav at 13:33Yesterday at 13:32Yesterdav at 13:37Yesterday at 13:31Yesterday at 13.30Yesterday at 13:30Yesterday at 13:29resterday at 15.4gYesterdav at 13:28Yesterday at 13:28Yesterday at 13:27Yesterday at 13:26resterday at 13-4oYesterdav at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13:22Yesterday at 13.21Yesterdav at 13:20Yesterday at 13:20Yesterday at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:17Yesterday at 13:16Yesterday at 13-10Yesterdav at 13:15Yesterday at 13:15Yesterday at 13:14Yecterdav at 12:12Yesterday at 13.12Yesterdav at 13:12Yesterday at 13:11Yesterday at 13:10Yoctorday at 12:10Yesterday at 13:09Yesterday at 13.09Yocterdav at 12:081Yesterday at 13:08Yesterdav at 13:071S K:MPEG-4 movie16 KBMPEG-4 movie17 KB29 Kb6 KEMPEG-4 movieMPEG-4 movie12 KB9 KBMPE0"4 movie7 K:8 KBMPEG-4 movie37 KB10 KbMP2G-4 movie7 KBMPEG-4 movie8 KBMPEG-4 movie8 K:72 KBMPEG-4 movie14 KB13 K:O KRIMPEG-4 movieMPEG-4 movie18 KB12 KBMPEG-4 movie10 KEMPEG-4 movie16 KB MPEG-4 movie6 KB6 KB1MPEG-4 movie12 KBMPEG-4 movie23 KB8 KBMPEG-4 movie6KEMPEG-4 movie6 KBMPEG-4 movie11 KB11 K:MPEG-4 movie20 KBMPEG-4 movie10 KBMPEG-4 movie7 KPMPEG-4 movie5 KBMPEG-4 movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 KBMPEG-4 movie102 KB88 KBMPEG-4 movieKO KRMDEG-A movie98 KBMPEG-4 movie97 KBMPEG-4 movie66 K:MPEG-A movie44 KB MPEG-4 movie93 KB78 KB50 kpMPEG-4 movieMPEG-4 movie58 KB27 KBMPEG-4 movie7KP12 KBMPEG-4 movie32 KB17 K8MPEG-4 movieFavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network|• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zipD Transcript.pdf→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zipD report(2) xmlAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence hettertouchtoalMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•Alfredmazanoke-images-YWJ6ана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВ148 KB122 KB111 KB94 KBZIP archivelZIP archiveXML documentAlfred...ferencesPDF Document92 KBPDr DocumentPDF Document91 KB91 KB30 KB29 KBXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.41 GB availabld• Inu 14 Mаy 1/.41-L4Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45529
|
1627
|
48
|
2026-05-14T14:41:26.267907+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769686267_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.jsv* #12066 on JY-20725-handle-HS-search-rate-limit K vablU HandleHubspotRateLimitTest ~100% C* :8• Thu 14 May 17:41:25QProjectvSendReportJob.php• DeleteCrmEntityTrait.phpT WriteCrmTrait.php=custom.logDeleteAccountJob.phpImportActivityTypes.php> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpD LogActivityTrait.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php=.env.staging=.env18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpT MeetingAccessor.phpRegisterEventsAccessor.pt55• RemoteWriteAccessor.php413• SystemStateAccessor.php© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic function saveMeeting(Activity $activity): arraypaycodu→ ppaycodu,T UserAccessor.php437D:• Арi438Config439return Sthis->client->updateMeeting($crmId, Spayload);O DTO440> O Filters441v D Jobs442$payload['Description'] = $decorateActivity->generateDescription(Sactivity);© CrmEntitiesFullSyncJob.ph 443© DeleteRemoteTeamJob.ph 444T IntegrationAppService Trait 445© SubscribeForEventsJob.ph446$this->logger->info('[integration-app] CRM log meeting', ['activity' => $activity->getUvid(),'payload' => $payload,© TeamInitialSyncJob.php4471):© UnsubscribeForEventsJob.448© UpdateProfileRelatedEntiti449return $this->client->createMeeting($payload);© ValidateTeamActiveConne450> ProspectSearchStrategy451> D ServiceTraits2 usages© DataClient.php© DecorateActivity.php452491public function saveCall(Activity $activity): array{..© LocalSearch.php1 usage• LocalSearchlnterface.phpC RemoteSearch.php492500private function getCallType(Activity $activity): string{...}© Service.php3 usagesv • ListenersC ConvertLeadActivities.php501535private function attachToProspect(Activity $activity): array{...}© Purnel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)( RemoteWriteAccessor.php=laravel.logPlaybook.phpSF [jiminny@localhost]PlainTextDecorateActivity.phpA HS_local [jiminny@localho:4 console [QAI PROD] XClient.php4 console [PROD]A console (EU]B16 × 2DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;_220_221222—223224id THEN '(own=225_226227228229230hubspot':-231232233 V= 11512582;234111W Windsurf Teams433:74UTF-8Ca 4 spaces...
|
NULL
|
3921354521730133984
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.jsv* #12066 on JY-20725-handle-HS-search-rate-limit K vablU HandleHubspotRateLimitTest ~100% C* :8• Thu 14 May 17:41:25QProjectvSendReportJob.php• DeleteCrmEntityTrait.phpT WriteCrmTrait.php=custom.logDeleteAccountJob.phpImportActivityTypes.php> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpD LogActivityTrait.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php=.env.staging=.env18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpT MeetingAccessor.phpRegisterEventsAccessor.pt55• RemoteWriteAccessor.php413• SystemStateAccessor.php© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic function saveMeeting(Activity $activity): arraypaycodu→ ppaycodu,T UserAccessor.php437D:• Арi438Config439return Sthis->client->updateMeeting($crmId, Spayload);O DTO440> O Filters441v D Jobs442$payload['Description'] = $decorateActivity->generateDescription(Sactivity);© CrmEntitiesFullSyncJob.ph 443© DeleteRemoteTeamJob.ph 444T IntegrationAppService Trait 445© SubscribeForEventsJob.ph446$this->logger->info('[integration-app] CRM log meeting', ['activity' => $activity->getUvid(),'payload' => $payload,© TeamInitialSyncJob.php4471):© UnsubscribeForEventsJob.448© UpdateProfileRelatedEntiti449return $this->client->createMeeting($payload);© ValidateTeamActiveConne450> ProspectSearchStrategy451> D ServiceTraits2 usages© DataClient.php© DecorateActivity.php452491public function saveCall(Activity $activity): array{..© LocalSearch.php1 usage• LocalSearchlnterface.phpC RemoteSearch.php492500private function getCallType(Activity $activity): string{...}© Service.php3 usagesv • ListenersC ConvertLeadActivities.php501535private function attachToProspect(Activity $activity): array{...}© Purnel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)( RemoteWriteAccessor.php=laravel.logPlaybook.phpSF [jiminny@localhost]PlainTextDecorateActivity.phpA HS_local [jiminny@localho:4 console [QAI PROD] XClient.php4 console [PROD]A console (EU]B16 × 2DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;_220_221222—223224id THEN '(own=225_226227228229230hubspot':-231232233 V= 11512582;234111W Windsurf Teams433:74UTF-8Ca 4 spaces...
|
45527
|
NULL
|
NULL
|
NULL
|
|
45530
|
1627
|
49
|
2026-05-14T14:41:29.315760+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769689315_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.25,"top":0.0,"width":0.6013889,"height":1.0},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45531
|
1628
|
37
|
2026-05-14T14:41:30.838323+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769690838_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.3899601,"top":0.98723066,"width":0.28789893,"height":0.0127693415},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.28224733,"top":1.0,"width":0.024268618,"height":-0.04788506},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
45528
|
NULL
|
NULL
|
NULL
|
|
45532
|
1627
|
50
|
2026-05-14T14:41:33.748318+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769693748_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7759925082980464890
|
-7195274138718106135
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl100% CFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vU HandleHubspotRateLimitTest ~* :8• Thu 14 May 17:41:33QProject vSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.php© ImportActivityTypes.phpWriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php+ RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpD LogActivityTrait.php© Playbook.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php=.env.staging18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.php.envClient.phpT MeetingAccessor.php• RegisterEventsAccessor.pt14© HubspotPaginationService.phptrait RemoteWriteAccessor© HandleHubspotRateLimit.phpT RemoteWriteAccessor.phpA 1015• SystemStateAccessor.php3 usagesT UserAccessor.php• Арі1622public function createTask(array $taskPayload = (]): array{...}Config4 usagesO DTO23public function createNote(array $notePayload = []): array{...}D Filters29v d Jobs30public function createCall(array $callPayload = []): array{...}© CrmEntitiesFullSyncJob.ph36© DeleteRemoteTeamJob.ph 37public function createMeeting(array $meetingPayload = []): arrayT IntegrationAppService Trait38© SubscribeForEventsJob.ph39$requestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl: :CREATE_MEETING, $meetingPayload);© TeamInitialSyncJob.php40© UnsubscribeForEventsJob.41return $this->requestExecute->entity($requestBuilder);© UpdateProfileRelatedEntiti42© ValidateTeamActiveConne43> ProspectSearchStrategy44public function updateDeal(string $dealId, array $dealPayload = []): array{...}ServiceTraits51© DataClient.php4 usages© DecorateActivity.php© LocalSearch.php• LocalSearchinterface.php© RemoteSearch.php52596067public function updateLead(string $leadId, array $leadPayload = []): array{...}public function updateMeeting(string SmeetingId, array $meetingPayload = []): array{...}© Service.php3 usagesv • ListenersC ConvertLeadActivities.php6875public function updateCall(string $callId, array $callPayload = []): array{...}@ Purdel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 ^215|•m_layout_id =2162,1661,66799,66217218-219id = 33;220221222223224id THEN •(own225226.227)228*229)230hubspot':-231232233 V= 11512582;234-W Windsurf Teams39:67UTF-8Ca 4 spaces...
|
45530
|
NULL
|
NULL
|
NULL
|
|
45533
|
1628
|
38
|
2026-05-14T14:41:33.748116+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769693748_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7759925082980464890
|
-7195274138718106135
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctC OpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeave~ (Q SearchDate ModifiedYesterdav at 13.35Yesterday at 13:35Yesterday at 13.34Yesterdav at 13:33Yesterday at 13:32Yesterdav at 13:37Yesterday at 13:31Yesterday at 13.30Yesterday at 13:30Yesterday at 13:29resterday at 15.4gYesterdav at 13:28Yesterday at 13:28Yesterday at 13:27Yesterday at 13:26resterday at 13-4oYesterdav at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13:22Yesterday at 13.21Yesterdav at 13:20Yesterday at 13:20Yesterday at 13:19Yesterday at 13:19Yesterday at 13:18Yesterday at 13.17Yecterdav at 12:17Yesterday at 13:16Yesterday at 13-10Yesterdav at 13:15Yesterday at 13:15Yesterday at 13:14Yecterdav at 12:12Yesterday at 13.12Yesterdav at 13:12Yesterday at 13:11Yesterday at 13:10Yoctorday at 12:10Yesterday at 13:09Yesterday at 13.09Yocterdav at 12:081Yesterday at 13:08Yesterdav at 13:071S K:MPEG-4 movie16 KBMPEG-4 movie17 KB29 Kb6 KEMPEG-4 movieMPEG-4 movie12 KB9 KBMPE0"4 movie7 K:8 KBMPEG-4 movie37 KB10 KbMP2G-4 movie7 KBMPEG-4 movie8 KBMPEG-4 movie8 K:72 KBMPEG-4 movie14 KB13 K:O KRIMPEG-4 movieMPEG-4 movie18 KB12 KBMPEG-4 movie10 KEMPEG-4 movie16 KB MPEG-4 movie6 KB6 KB1MPEG-4 movie12 KBMPEG-4 movie23 KB8 KBMPEG-4 movie6KEMPEG-4 movie6 KBMPEG-4 movie11 KB11 K:MPEG-4 movie20 KBMPEG-4 movie10 KBMPEG-4 movie7 KPMPEG-4 movie5 KBMPEG-4 movie11 KBMPEG-4 movie26 KBMPEG-4 movie111 KBMPEG-4 movie102 KB88 KBMPEG-4 movieKO KRMDEG-A movie98 KBMPEG-4 movie97 KBMPEG-4 movie66 K:MPEG-A movie44 KB MPEG-4 movie93 KB78 KB50 kpMPEG-4 movieMPEG-4 movie58 KB27 KBMPEG-4 movie7KP12 KBMPEG-4 movie32 KB17 K8MPEG-4 movieFavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network|• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zipD Transcript.pdf→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zipD report(2) xmlAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence hettertouchtoalMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•Alfredmazanoke-images-YWJ6ана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВ148 KB122 KB111 KB94 KBZIP archivelZIP archiveXML documentAlfred...ferencesPDF Document92 KBPDr DocumentPDF Document91 KB91 KB30 KB29 KBXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.41 GB availabld• Inu 14 Mау 1/.41•33)Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45534
|
1627
|
51
|
2026-05-14T14:41:36.901920+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769696901_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl100% CFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vU HandleHubspotRateLimitTest ~* :8• Thu 14 May 17:41:36QProject vSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivity Types.phpWriteCrmTrait.php=custom.log> MetadataAccessorsT AccountAccessor.php• BaseAccessor.php• ContactAccessor.phpDealAccessor.php18© IntegrationAppAccessExce• LeadAccessor.phpT MeetingAccessor.phpRegisterEventsAccessor.pt14T RemoteWriteAccessor.php15• SystemStateAccessor.phpT UserAccessor.php• Арі1622ConfigO DTO23> O Filters29v d Jobs30© CrmEntitiesFullSyncJob.ph36© DeleteRemoteTeamJob.ph 37T IntegrationAppService Trait38© SubscribeForEventsJob.ph39© TeamInitialSyncJob.php40© UnsubscribeForEventsJob.41© UpdateProfileRelatedEntiti42© ValidateTeamActiveConne43> C ProspectSearchStrategy44> D ServiceTraits51© DataClient.php© DecorateActivity.php© LocalSearch.php• LocalSearchinterface.php© RemoteSearch.php52596067© Service.phpv • ListenersC ConvertLeadActivities.php6875© Purnel onkunCache nhnUnhandled \GuzzleHttp\Exception|GuzzleException© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php+ RemoteWriteAccessor.php x=laravel.log© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpT LogActivityTrait.php© Playbook.phpSF [jiminny@localhost]© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpA HS_local [jiminny@localho:T ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php=.env.stagingDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.php.envClient.php4 console [QAI PROD] X4 console [PROD]© HubspotPaginationService.phptrait RemoteWriteAccessor© HandleHubspotRateLimit.phpA console (EU]A 103 usagespublic function createTask(array $taskPayload = (J): array{...}4 usagespublic function createNote(array $notePayload = []): array{...}public function createCall(array $callPayload = []): array{...}public function createMeeting(array $meetingPayload = []): arraySrequestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl::CREATE_MEETING, SmeetingPayload);return $this->requestExecute-›entity($requestBuilder);public function updateDeal(string $dealId, array $dealPayload = []): array{..}4 usagespublic function updateLead(string $leadId, array $leadPayload = []): array{..DGo jiminny084143 ×4 ^215|•m_layout_id =2162,1661,66799,66217218-219id = 33;220221222223224id THEN '(own225226227228229)230hubspot':-2312322:233 V= 11512582;234public function updateMeeting(string SmeetingId, array $meetingPayload = []): array{...3 usagespublic function updateCall(string $callId, array $callPayload = []): array{...W Windsurf Teams41:43UTF-8Ca 4 spaces...
|
NULL
|
86251739625208350
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl100% CFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vU HandleHubspotRateLimitTest ~* :8• Thu 14 May 17:41:36QProject vSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivity Types.phpWriteCrmTrait.php=custom.log> MetadataAccessorsT AccountAccessor.php• BaseAccessor.php• ContactAccessor.phpDealAccessor.php18© IntegrationAppAccessExce• LeadAccessor.phpT MeetingAccessor.phpRegisterEventsAccessor.pt14T RemoteWriteAccessor.php15• SystemStateAccessor.phpT UserAccessor.php• Арі1622ConfigO DTO23> O Filters29v d Jobs30© CrmEntitiesFullSyncJob.ph36© DeleteRemoteTeamJob.ph 37T IntegrationAppService Trait38© SubscribeForEventsJob.ph39© TeamInitialSyncJob.php40© UnsubscribeForEventsJob.41© UpdateProfileRelatedEntiti42© ValidateTeamActiveConne43> C ProspectSearchStrategy44> D ServiceTraits51© DataClient.php© DecorateActivity.php© LocalSearch.php• LocalSearchinterface.php© RemoteSearch.php52596067© Service.phpv • ListenersC ConvertLeadActivities.php6875© Purnel onkunCache nhnUnhandled \GuzzleHttp\Exception|GuzzleException© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php+ RemoteWriteAccessor.php x=laravel.log© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpT LogActivityTrait.php© Playbook.phpSF [jiminny@localhost]© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpA HS_local [jiminny@localho:T ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php=.env.stagingDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.php.envClient.php4 console [QAI PROD] X4 console [PROD]© HubspotPaginationService.phptrait RemoteWriteAccessor© HandleHubspotRateLimit.phpA console (EU]A 103 usagespublic function createTask(array $taskPayload = (J): array{...}4 usagespublic function createNote(array $notePayload = []): array{...}public function createCall(array $callPayload = []): array{...}public function createMeeting(array $meetingPayload = []): arraySrequestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl::CREATE_MEETING, SmeetingPayload);return $this->requestExecute-›entity($requestBuilder);public function updateDeal(string $dealId, array $dealPayload = []): array{..}4 usagespublic function updateLead(string $leadId, array $leadPayload = []): array{..DGo jiminny084143 ×4 ^215|•m_layout_id =2162,1661,66799,66217218-219id = 33;220221222223224id THEN '(own225226227228229)230hubspot':-2312322:233 V= 11512582;234public function updateMeeting(string SmeetingId, array $meetingPayload = []): array{...3 usagespublic function updateCall(string $callId, array $callPayload = []): array{...W Windsurf Teams41:43UTF-8Ca 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45535
|
1627
|
52
|
2026-05-14T14:41:39.312806+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769699312_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.25,"top":0.0,"width":0.6013889,"height":1.0},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
45534
|
NULL
|
NULL
|
NULL
|
|
45541
|
1627
|
56
|
2026-05-14T14:41:50.786459+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769710786_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl100% СFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit K vHandleHubspotRateLimitTestThu 14 May 17:41:50QProjectvSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivity Types.phpWriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.phpt RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.phpActivity.phpSalesforce/Service.phpD LogActivityTrait.phpPlaybook.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging.env18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HandleHubspotRateLimit.php14T RemoteWriteAccessor.php• SystemStateAccessor.php23|© HubspotPaginationService.phptrait RemoteWriteAccessor4 usagespublic functioncreateNote(array $notePayload = []): array{...}A 10T UserAccessor.php29• Арi30public function createCall(array $callPayload = []): array{...}Config36O DTO37public function createMeeting(array $meetingPayload = []): arrayO Filters38v d Jobs39SrequestBuilder = Sthis->getRequestBuilder( resourceUrl: ActionUrl:: CREATE_MEETING, SmeetingPayload);© CrmEntitiesFullSyncJob.ph40© DeleteRemoteTeamJob.ph 41return Sthis->requestExecute-›entity(SrequestBuilder);T IntegrationAppService Trait42© SubscribeForEventsJob.ph43© TeamInitialSyncJob.php44public function updateDeal(string $dealId, array $dealPayload = [): array{...}© UnsubscribeForEventsJob.51© UpdateProfileRelatedEntiti4 usages© ValidateTeamActiveConne52public function updateLead(string $leadId, array $leadPayload = (]): array{...}D ProspectSearchStrategy59• ServiceTraits60public function updateMeeting(string SmeetingId, array $meetingPayload = []): arrayf...}© DataClient.php67© DecorateActivity.php3 usages© LocalSearch.php• LocalSearchinterface.php6875public function updateCall(string $callId, array $callPayload = [): array{...}© RemoteSearch.php3 usages© Service.phpv • Listeners© ConvertLeadActivities.php768283public function getMeeting(string $meetingId): array{...}public function getCall(string $callId): array{...}@ Purdel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 ^215|•m_layout_id =2162,1661,66799,66217218- 219.id = 33;220221- 222_223224id THEN '(own225226227228*229)230hubspot':231232233 V= 11512582;234W Windsurf Teams39:65UTF-8Ca 4 spaces...
|
NULL
|
1246846402794388318
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl100% СFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit K vHandleHubspotRateLimitTestThu 14 May 17:41:50QProjectvSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivity Types.phpWriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.phpt RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.phpActivity.phpSalesforce/Service.phpD LogActivityTrait.phpPlaybook.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging.env18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HandleHubspotRateLimit.php14T RemoteWriteAccessor.php• SystemStateAccessor.php23|© HubspotPaginationService.phptrait RemoteWriteAccessor4 usagespublic functioncreateNote(array $notePayload = []): array{...}A 10T UserAccessor.php29• Арi30public function createCall(array $callPayload = []): array{...}Config36O DTO37public function createMeeting(array $meetingPayload = []): arrayO Filters38v d Jobs39SrequestBuilder = Sthis->getRequestBuilder( resourceUrl: ActionUrl:: CREATE_MEETING, SmeetingPayload);© CrmEntitiesFullSyncJob.ph40© DeleteRemoteTeamJob.ph 41return Sthis->requestExecute-›entity(SrequestBuilder);T IntegrationAppService Trait42© SubscribeForEventsJob.ph43© TeamInitialSyncJob.php44public function updateDeal(string $dealId, array $dealPayload = [): array{...}© UnsubscribeForEventsJob.51© UpdateProfileRelatedEntiti4 usages© ValidateTeamActiveConne52public function updateLead(string $leadId, array $leadPayload = (]): array{...}D ProspectSearchStrategy59• ServiceTraits60public function updateMeeting(string SmeetingId, array $meetingPayload = []): arrayf...}© DataClient.php67© DecorateActivity.php3 usages© LocalSearch.php• LocalSearchinterface.php6875public function updateCall(string $callId, array $callPayload = [): array{...}© RemoteSearch.php3 usages© Service.phpv • Listeners© ConvertLeadActivities.php768283public function getMeeting(string $meetingId): array{...}public function getCall(string $callId): array{...}@ Purdel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 ^215|•m_layout_id =2162,1661,66799,66217218- 219.id = 33;220221- 222_223224id THEN '(own225226227228*229)230hubspot':231232233 V= 11512582;234W Windsurf Teams39:65UTF-8Ca 4 spaces...
|
45540
|
NULL
|
NULL
|
NULL
|
|
45542
|
1628
|
41
|
2026-05-14T14:41:57.619741+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769717619_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3854124401442490710
|
1922900134730021341
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters...
|
45538
|
NULL
|
NULL
|
NULL
|
|
45543
|
1627
|
57
|
2026-05-14T14:41:57.653591+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769717653_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4027196623176036612
|
-8132283174711358517
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.jsv* #12066 on JY-20725-handle-HS-search-rate-limit K vablU HandleHubspotRateLimitTest ~100% C* :8• Thu 14 May 17:41:57QProjectvSendReportJob.php• DeleteCrmEntityTrait.phpT WriteCrmTrait.php=custom.logDeleteAccountJob.phpImportActivityTypes.php> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.php© Activity.php© Salesforce/Service.phpD LogActivityTrait.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php=.env.staging=.env18.••© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpT MeetingAccessor.php• RegisterEventsAccessor.pt55• RemoteWriteAccessor.php413• SystemStateAccessor.php© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extendsBaseService implementspublic function saveMeeting(Activity $activity): arraypaycodu→ ppaycodu,T UserAccessor.php4371):• Арi438Config439return Sthis->client->updateMeeting($crmId, Spayload);O DTO440> O Filters441v D Jobs442$payload['Description'] = $decorateActivity->generateDescription(Sactivity);© CrmEntitiesFullSyncJob.ph 443© DeleteRemoteTeamJob.ph 444T IntegrationAppService Trait 445© SubscribeForEventsJob.ph446$this->logger->info('[integration-app] CRM log meeting', ['activity' => $activity->getUvid(),'payload' => $payload,© TeamInitialSyncJob.php4471):© UnsubscribeForEventsJob.448© UpdateProfileRelatedEntiti 449return $this->client->createMeeting($payload);© ValidateTeamActiveConne450> ProspectSearchStrategy451> D ServiceTraits2 usages© DataClient.php© DecorateActivity.php452491public function saveCall(Activity $activity): array{...}© LocalSearch.php1 usage• LocalSearchlnterface.phpC RemoteSearch.php492500private function getCallType(Activity $activity): string{...}© Service.php3 usagesv • ListenersC ConvertLeadActivities.php501535private function attachToProspect(Activity $activity): array{...}© Purnel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)( RemoteWriteAccessor.php=laravel.logPlaybook.phpSF [jiminny@localhost]PlainTextDecorateActivity.phpA HS_local [jiminny@localho:4 console [QAI PROD] XClient.php4 console [PROD]A console (EU]B16 × 2DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;_220_221222—223224id THEN '(own=225_226227228229230hubspot':-231232233 V= 11512582;T234W Windsurf Teams449:37UTF-8Ca 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45544
|
NULL
|
0
|
2026-05-14T14:42:03.567378+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769723567_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16","depth":4,"bounds":{"left":0.77708334,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.80138886,"top":0.3122222,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
4266403488567062772
|
6524482065460761565
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
45543
|
NULL
|
NULL
|
NULL
|
|
45545
|
NULL
|
0
|
2026-05-14T14:42:03.548722+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769723548_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.28224733,"top":1.0,"width":0.024268618,"height":-0.04788506},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
4266403488567062772
|
6524482065460761565
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45546
|
1629
|
0
|
2026-05-14T14:42:06.394115+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769726394_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5379003748151766147
|
5533679959718179548
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45547
|
1630
|
0
|
2026-05-14T14:42:06.358664+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769726358_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.3899601,"top":0.802075,"width":0.28789893,"height":0.19792497},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2698296226266849214
|
5602866101780329380
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:...
|
45545
|
NULL
|
NULL
|
NULL
|
|
45548
|
1629
|
1
|
2026-05-14T14:42:07.143512+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769727143_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpablFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit K vU HandleHubspotRateLimitTest ~100% С8• Thu 14 May 17:42:06QProject vSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.php© ImportActivityTypes.phpWriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.phpt RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.phpActivity.php© Salesforce/Service.phpT LogActivityTrait.php© Playbook.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging.env18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HandleHubspotRateLimit.php14T RemoteWriteAccessor.php37© HubspotPaginationService.phptrait RemoteWriteAccessorpublic function createMeeting(array $meetingPayload = []): arrayA 10• SystemStateAccessor.phpT UserAccessor.php• АріConfigO DTOD Filters404142434451return Sthis-›requestExecute->entity($requestBuilder);public function updateDeal(string $dealId, array $dealPayload = [): array{...}v d Jobs© CrmEntitiesFullSyncJob.ph4 usages52© DeleteRemoteTeamJob.phpublic function updateLead(string $leadId, array $leadPayload = []): array{...}T IntegrationAppService Trait59© SubscribeForEventsJob.ph60public function updateMeeting(string $meetingId, array $meetingPayload = []): array© TeamInitialSyncJob.php6162© UnsubscribeForEventsJob.© UpdateProfileRelatedEntiti63$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);$requestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl::UPDATE_MEETING, $requestPayload) ;© ValidateTeamActiveConne64> C ProspectSearchStrategy65return $this->requestExecute-›entity($requestBuilder);66ServiceTraits67© DataClient.php© DecorateActivity.php3 usages© LocalSearch.php6875public function updateCall(string $callId, array $callPayload = []): array{...}• LocalSearchinterface.php3 usages© RemoteSearch.php© Service.php76public function getMeeting(string $meetingId): array{..v • Listeners82C ConvertLeadActivities.php83public function getCall(string $callId): array{...}@ Purdel onkunCache nhn89Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218-219id = 33;220- 221_222— 223224id THEN •(own225226227228229230hubspot':231232233 V= 11512582;234W Windsurf Teams62:33UTF-8Ca 4 spaces...
|
NULL
|
4110988535261936451
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpablFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit K vU HandleHubspotRateLimitTest ~100% С8• Thu 14 May 17:42:06QProject vSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.php© ImportActivityTypes.phpWriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.phpt RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.phpActivity.php© Salesforce/Service.phpT LogActivityTrait.php© Playbook.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging.env18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HandleHubspotRateLimit.php14T RemoteWriteAccessor.php37© HubspotPaginationService.phptrait RemoteWriteAccessorpublic function createMeeting(array $meetingPayload = []): arrayA 10• SystemStateAccessor.phpT UserAccessor.php• АріConfigO DTOD Filters404142434451return Sthis-›requestExecute->entity($requestBuilder);public function updateDeal(string $dealId, array $dealPayload = [): array{...}v d Jobs© CrmEntitiesFullSyncJob.ph4 usages52© DeleteRemoteTeamJob.phpublic function updateLead(string $leadId, array $leadPayload = []): array{...}T IntegrationAppService Trait59© SubscribeForEventsJob.ph60public function updateMeeting(string $meetingId, array $meetingPayload = []): array© TeamInitialSyncJob.php6162© UnsubscribeForEventsJob.© UpdateProfileRelatedEntiti63$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);$requestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl::UPDATE_MEETING, $requestPayload) ;© ValidateTeamActiveConne64> C ProspectSearchStrategy65return $this->requestExecute-›entity($requestBuilder);66ServiceTraits67© DataClient.php© DecorateActivity.php3 usages© LocalSearch.php6875public function updateCall(string $callId, array $callPayload = []): array{...}• LocalSearchinterface.php3 usages© RemoteSearch.php© Service.php76public function getMeeting(string $meetingId): array{..v • Listeners82C ConvertLeadActivities.php83public function getCall(string $callId): array{...}@ Purdel onkunCache nhn89Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218-219id = 33;220- 221_222— 223224id THEN •(own225226227228229230hubspot':231232233 V= 11512582;234W Windsurf Teams62:33UTF-8Ca 4 spaces...
|
45546
|
NULL
|
NULL
|
NULL
|
|
45549
|
1630
|
1
|
2026-05-14T14:42:07.138475+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769727138_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ActivityFilesLaterJiminny... ~@ jiminny-x-integrat ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctC OpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIđ 0Pm~ (Q SearchDate ModifiedYesterdav at 13.36Yesterday at 13:35Yesterday at 13.34Yesterday at 13:34Yesterday at 13:33resterday at 15.5sYesterdav at 13:37Yesterday at 13:32Yesterday ar 13.31Yesterday at 13:30Yesterday at 13:30resterday at 15.4gYesterdav at 13:29Yesterday at 13:28Yesterday at 13:28Yesterday at 13:27Yesterday at 13:27resterday at 13-40Yesterdav at 13:25Yesterday at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13.21Yesterdav at 13:21Yesterday at 13:20Yesterday at 13:20Yesterday at 13:19Yesterday at 13:19Yesterday at 13.18Vecterdav at 12:17Yesterday at 13:16Yesterdav at 13:16Yesterday at 13:15Yesterday at 13:14Yecterdav at 12:1/Yesterday at 13:13Yesterday at 13.13Yecterdav at 12:12Yesterday at 13:12Yesterday at 13:11Yesterday at 13:10Yesterday at 13:10Yesterday at 13.09Yecterdav at 12:091Yesterday at 13:08Yesterdav at 13:07MPEG-4 movie13 KBMPEG-4 movie16 KB1/ Kb29 KBMPEG-4 movieMPEG-4 movie6 KB12 KBMPE0"4 movie9 K:7 KBMPEG-4 movie8 KB37 KBMP2G-4 movie10 KBMPEG-4 movie7 KBMPEG"4 movie9K:8KBMPEG-4 movie72 KB14 K8|13 KRIMPEG-4 movieMPEG-4 movie9 KB18 KBMPEG-4 movie12 KEMPEG-4 movie10 KBMPEG-4 movie16 KB6 KB1MPEG-4 movie6 KBMPEG-4 movie12 KB23 KBMPEG-4 movie8 KEMPEG-4 movie6 KBMPEG-4 movie6 KBMPEG-4 movie11 K:MPEG-4 movie11 KBMPEG-4 movie34 KBMPEG-4 movie10 KPMPEG-4 movie7 KBMPEG-4 movie5 KBMPEG-4 movie11 KBIMPEG-4 movie26 KBMPEG-4 movie111 KB102 KBRR KRMPEG-4 movieMDEG-A movie59 KB98 KBMPEG-4 movie07 K:MPEG-A movie66 KB MPEG-4 movie44 KB93 KB79 KpMPEG-4 movieMPEG-4 movie58 KBMPEG-4 movie27 KP7 KBMPEG-4 movie12 KB32 K8MPEG-4 movieAl Notes: OffLeave• 0FavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network|• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zipD Transcript.pdf→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence bettertouchtoalMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•Alfredmazanoke-images-YWJ6ана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВZIP archivel148 KBZIP archive122 KBXML document111 KBAlfred...ferences94 KBPDF Document92 KBPDr DocumentK:91 KB91 KB30 KB29 KBPDF DocumentXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.42 GB availabold• Inu 14 May 1/.42:00Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
632793236427296448
|
NULL
|
click
|
ocr
|
NULL
|
ActivityFilesLaterJiminny... ~@ jiminny-x-integrat ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctC OpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIđ 0Pm~ (Q SearchDate ModifiedYesterdav at 13.36Yesterday at 13:35Yesterday at 13.34Yesterday at 13:34Yesterday at 13:33resterday at 15.5sYesterdav at 13:37Yesterday at 13:32Yesterday ar 13.31Yesterday at 13:30Yesterday at 13:30resterday at 15.4gYesterdav at 13:29Yesterday at 13:28Yesterday at 13:28Yesterday at 13:27Yesterday at 13:27resterday at 13-40Yesterdav at 13:25Yesterday at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13:23Yesterday at 13.21Yesterdav at 13:21Yesterday at 13:20Yesterday at 13:20Yesterday at 13:19Yesterday at 13:19Yesterday at 13.18Vecterdav at 12:17Yesterday at 13:16Yesterdav at 13:16Yesterday at 13:15Yesterday at 13:14Yecterdav at 12:1/Yesterday at 13:13Yesterday at 13.13Yecterdav at 12:12Yesterday at 13:12Yesterday at 13:11Yesterday at 13:10Yesterday at 13:10Yesterday at 13.09Yecterdav at 12:091Yesterday at 13:08Yesterdav at 13:07MPEG-4 movie13 KBMPEG-4 movie16 KB1/ Kb29 KBMPEG-4 movieMPEG-4 movie6 KB12 KBMPE0"4 movie9 K:7 KBMPEG-4 movie8 KB37 KBMP2G-4 movie10 KBMPEG-4 movie7 KBMPEG"4 movie9K:8KBMPEG-4 movie72 KB14 K8|13 KRIMPEG-4 movieMPEG-4 movie9 KB18 KBMPEG-4 movie12 KEMPEG-4 movie10 KBMPEG-4 movie16 KB6 KB1MPEG-4 movie6 KBMPEG-4 movie12 KB23 KBMPEG-4 movie8 KEMPEG-4 movie6 KBMPEG-4 movie6 KBMPEG-4 movie11 K:MPEG-4 movie11 KBMPEG-4 movie34 KBMPEG-4 movie10 KPMPEG-4 movie7 KBMPEG-4 movie5 KBMPEG-4 movie11 KBIMPEG-4 movie26 KBMPEG-4 movie111 KB102 KBRR KRMPEG-4 movieMDEG-A movie59 KB98 KBMPEG-4 movie07 K:MPEG-A movie66 KB MPEG-4 movie44 KB93 KB79 KpMPEG-4 movieMPEG-4 movie58 KBMPEG-4 movie27 KP7 KBMPEG-4 movie12 KB32 K8MPEG-4 movieAl Notes: OffLeave• 0FavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network|• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zipD Transcript.pdf→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zip• repon 4).XmAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence bettertouchtoalMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•Alfredmazanoke-images-YWJ6ана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jрс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВZIP archivel148 KBZIP archive122 KBXML document111 KBAlfred...ferences94 KBPDF Document92 KBPDr DocumentK:91 KB91 KB30 KB29 KBPDF DocumentXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.42 GB availabold• Inu 14 May 1/.42:00Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45550
|
1629
|
2
|
2026-05-14T14:42:08.853007+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769728853_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl100% СFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit K vU HandleHubspotRateLimitTest ~8• Thu 14 May 17:42:08* :QProject vSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.php© ImportActivityTypes.phpWriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.phpt RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.phpActivity.php© Salesforce/Service.phpT LogActivityTrait.php© Playbook.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging.env18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HubspotPaginationService.php© HandleHubspotRateLimit.php14trait RemoteWriteAccessorT RemoteWriteAccessor.phpA 1037public function createMeeting(array $meetingPayload = []): array• SystemStateAccessor.phpT UserAccessor.php4041• Аріreturn Sthis-›requestExecute->entity($requestBuilder);42ConfigO DTO43D Filters44public function updateDeal(string $dealId, array $dealPayload = [): array{...}51v d Jobs© CrmEntitiesFullSyncJob.ph4 usages52© DeleteRemoteTeamJob.phpublic function updateLead(string $leadId, array $leadPayload = []): array{...}T IntegrationAppService Trait59© SubscribeForEventsJob.ph60public function updateMeeting(string $meetingId, array $meetingPayload = []): array© TeamInitialSyncJob.php6162© UnsubscribeForEventsJob.$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meptingId]);© UpdateProfileRelatedEntiti63$requestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl::UPDATE_MEETING, $requestPayload) ;© ValidateTeamActiveConne64> C ProspectSearchStrategy65return $this->requestExecute-›entity($requestBuilder);66ServiceTraits67© DataClient.php© DecorateActivity.php3 usages© LocalSearch.php68public function updateCall(stringScallId, array $callPayload = []): arrayf...}• LocalSearchinterface.php753 usages© RemoteSearch.php© Service.php76public function getMeeting(string $meetingId): array{..v • Listeners82C ConvertLeadActivities.php83public function getCall(string $callId): array{...}@ Purdel onkunCache nhn89Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218-219id = 33;220- 221_222— 223224id THEN '(own225226227228229230hubspot':231232233 V= 11512582;234W Windsurf Teams62:76UTF-8Ca 4 spaces...
|
NULL
|
9028834505938559646
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl100% СFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit K vU HandleHubspotRateLimitTest ~8• Thu 14 May 17:42:08* :QProject vSendReportJob.php• DeleteCrmEntityTrait.phpDeleteAccountJob.php© ImportActivityTypes.phpWriteCrmTrait.php=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.phpt RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© IntegrationApp/DecorateActivity.phpActivity.php© Salesforce/Service.phpT LogActivityTrait.php© Playbook.php• ContactAccessor.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpPlainTextDecorateActivity.phpDealAccessor.phpT ActivityPlaybookTrait.phpCrmHelperRepository.php© AccountController.php.env.staging.env18© IntegrationAppAccessExce• LeadAccessor.phpDetachActivityObject.phpRematchActivityOnCrmObjectDetach.phpMatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HubspotPaginationService.php© HandleHubspotRateLimit.php14trait RemoteWriteAccessorT RemoteWriteAccessor.phpA 1037public function createMeeting(array $meetingPayload = []): array• SystemStateAccessor.phpT UserAccessor.php4041• Аріreturn Sthis-›requestExecute->entity($requestBuilder);42ConfigO DTO43D Filters44public function updateDeal(string $dealId, array $dealPayload = [): array{...}51v d Jobs© CrmEntitiesFullSyncJob.ph4 usages52© DeleteRemoteTeamJob.phpublic function updateLead(string $leadId, array $leadPayload = []): array{...}T IntegrationAppService Trait59© SubscribeForEventsJob.ph60public function updateMeeting(string $meetingId, array $meetingPayload = []): array© TeamInitialSyncJob.php6162© UnsubscribeForEventsJob.$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meptingId]);© UpdateProfileRelatedEntiti63$requestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl::UPDATE_MEETING, $requestPayload) ;© ValidateTeamActiveConne64> C ProspectSearchStrategy65return $this->requestExecute-›entity($requestBuilder);66ServiceTraits67© DataClient.php© DecorateActivity.php3 usages© LocalSearch.php68public function updateCall(stringScallId, array $callPayload = []): arrayf...}• LocalSearchinterface.php753 usages© RemoteSearch.php© Service.php76public function getMeeting(string $meetingId): array{..v • Listeners82C ConvertLeadActivities.php83public function getCall(string $callId): array{...}@ Purdel onkunCache nhn89Workspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218-219id = 33;220- 221_222— 223224id THEN '(own225226227228229230hubspot':231232233 V= 11512582;234W Windsurf Teams62:76UTF-8Ca 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45552
|
1629
|
3
|
2026-05-14T14:42:11.851804+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769731851_m1.jpg...
|
PhpStorm
|
faVsco.js – DataClient.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7759925082980464890
|
-7195274138718106135
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl•FV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vHandleHubspotRateLimitTestv100% С8• Thu 14 May 17:42:11QProjectvT DeleteCrmEntityTrait.phpDeleteAccountJob.php© ImportActivityTypes.phpT WriteCrmTrait.php:=custom.log> MetadataAccessorsHubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php( RemoteWriteAccessor.phpT AccountAccessor.php• BaseAccessor.php© DataClient.php X© IntegrationApp/DecorateActivity.php© Activity.phpSalesforce/Service.phpLogActivityTrait.php• ContactAccessor.php© Playbook.phpPipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpDealAccessor.phpPlainTextDecorateActivity.phpT ActivityPlaybookTrait.php© CrmHelperRepository.phpAccountController.php=.env.staging18© IntegrationAppAccessExce• LeadAccessor.php.env© DetachActivityObject.phpRematchActivityOnCrmObjectDetach.php© MatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HubspotPaginationService.php© HandleHubspotRateLimit.php32class DataClient implements Clientinterface• RemoteWriteAccessor.php103• SystemStateAccessor.phppublic function updateRecordById(string $objectType, string $objectId, array $data): array{...}112T UserAccessor.php2 usages• Арi113private function getAuthToken(): stringf...}ConfigO DTO124> O Filters4 usages125protected function getAdminToken(): string{...}v d Jobs132© CrmEntitiesFullSyncJob.ph133protected function getRequestBuilder(© DeleteRemoteTeamJob.ph134T IntegrationAppService TraitEnumUrlInterface SresourceUrl,135array $bodyParams = [],© SubscribeForEventsJob.ph136string $method = RequestBuilder: :METHOD_POST,© TeamInitialSyncJob.php137© UnsubscribeForEventsJob.?string $uriParams = null,138© UpdateProfileRelatedEntiti): RequestBuilder {.|.3155© ValidateTeamActiveConne156protected function refreshToken(): voidf...}• ProspectSearchStrategy164• ServiceTraits165/**© DataClient.php166© DecorateActivity.php* Pointless, yet mandatory method.© LocalSearch.php167*/168 € ›public function getMinimumApiVersion(: float{...}• LocalSearchinterface.php172© RemoteSearch.php173© Service.phpv • ListenersC ConvertLeadActivities.php© Purnel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]Go jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;220221222223224id THEN •(own225226227228— 229- 230hubspot':-231232233 V= 11512582;234W Windsurf Teams133:24UTF-8Ca 4 spaces...
|
45550
|
NULL
|
NULL
|
NULL
|
|
45553
|
1630
|
3
|
2026-05-14T14:42:21.764566+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769741764_m2.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp;\n\nuse Carbon\\Carbon;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Contracts\\Services\\Crm\\ClientInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\FetchRelatedActivityInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\ImportsBusinessProcessesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\LayoutManagementInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\MatchCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\Provider\\IntegrationAppInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityLookupInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\RemoteNoteEntityManipulationInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SendSummaryToCrmInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SettingsInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmMetadataInterface;\nuse Jiminny\\Events\\Activities\\Crm\\ActivityLeadConverted;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\SocialAccountNotFoundException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\Contracts\\ActivityContract;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Services\\Crm\\BaseService;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationAppProviders;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Config\\IntegrationConfigFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\FieldMapperInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\LeadFieldMapper;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\GenerateProviderUrlInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\IntegrationAppCrmGeneratorFactory;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Utils\\UrlGeneratorInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmFieldsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SystemStateTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\LayoutTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\MatchProspectsTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\NotSupportedTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmEntitiesTrait;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\ServiceTraits\\SyncCrmMetadataTrait;\nuse Psr\\Log\\LoggerInterface;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\DTO\\Mappers\\OpportunityFieldMapper;\nuse Jiminny\\Repositories\\Crm\\ProfileRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Services\\Crm\\CrmObjects\\CrmObjectsRepository;\n\nclass Service extends BaseService implements\n IntegrationAppInterface,\n SyncCrmEntitiesInterface,\n SyncCrmMetadataInterface,\n ImportsBusinessProcessesInterface,\n RemoteEntityManipulationInterface,\n LayoutManagementInterface,\n SettingsInterface,\n MatchCrmEntitiesInterface,\n RemoteEntityLookupInterface,\n RemoteNoteEntityManipulationInterface,\n SendSummaryToCrmInterface,\n UrlGeneratorInterface,\n FetchRelatedActivityInterface\n{\n use SyncCrmMetadataTrait;\n use SyncCrmEntitiesTrait;\n use SystemStateTrait;\n use LayoutTrait;\n use NotSupportedTrait;\n use MatchProspectsTrait;\n use SyncCrmFieldsTrait;\n\n public const string CALL_TYPE_MISSED = 'Missed';\n public const string CALL_TYPE_INBOUND = 'Inbound';\n public const string CALL_TYPE_OUTBOUND = 'Outbound';\n public const string RELATIONSHIP_OPPORTUNITY = 'Deals';\n public const string RELATIONSHIP_LEAD = 'Leads';\n public const string RELATIONSHIP_ACCOUNT = 'Accounts';\n\n /**\n * @var ClientInterface&DataClient\n */\n protected $client;\n\n protected ?User $invokedUser = null;\n\n protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;\n\n public function __construct(\n DataClient $client,\n LoggerInterface $logger,\n ) {\n parent::__construct();\n $this->client = $client;\n $this->logger = $logger;\n }\n\n public function getDisplayName(): string\n {\n return Providers::getProviderDisplayName(\n Providers::getCrmIntegrationSlug($this->config)\n );\n }\n\n /**\n * @throws \\Exception\n */\n public function setUser(User $user): void\n {\n $this->configureSentryScope($user);\n $this->invokedUser = $user;\n\n $this->team = $user->getTeam();\n $teamOwner = $this->team->getOwner();\n\n $this->setConfiguration($user->getTeam()->getCrmConfiguration());\n $this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));\n $this->setCrmUrlGenerator($this->config);\n\n $this->client->setTeam($this->team);\n $socialAccount = $teamOwner?->getSocialAccount('integration-app');\n if ($socialAccount === null) {\n $this->logger->info('[integration-app] Social account not found', [\n 'teamId' => $this->team->getId(),\n 'teamOwnerId' => $teamOwner?->getId(),\n 'userId' => $user->getId(),\n ]);\n\n throw new SocialAccountNotFoundException('Social account not found!');\n }\n $this->client->setSocialAccount($socialAccount);\n\n // The CRM Service is properly bootstrapped, and supports remote operations\n $this->connect();\n }\n\n public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string\n {\n return $fieldValue;\n }\n\n public function find(string $name, array $scopes): array\n {\n /** @var LocalSearch $localSearch */\n $localSearch = app(LocalSearch::class);\n $localSearch->setConfiguration($this->config);\n $localSearch->setCountryCode($this->invokedUser->getCountryCode());\n\n return $localSearch->search($name);\n\n // if (! empty($localMatch)) {\n // return $localMatch;\n // }\n //\n // /** @var RemoteSearch $remoteSearch */\n // $remoteSearch = app(RemoteSearch::class);\n // $remoteSearch->setClient($this->client);\n // $remoteSearch->setConfiguration($this->config);\n //\n // return $remoteSearch->search($name);\n }\n\n public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array\n {\n $data = [];\n $ownerData = [];\n\n $account = $this->getAccount($crmAccountId, $crmContactId);\n if ($account === null) {\n return [];\n }\n\n $ownerId = $this->getOwnerId($userId);\n\n try {\n $opportunityRepository = app(OpportunityRepository::class);\n $opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(\n $this->config,\n $account->getId()\n );\n\n foreach ($opportunities as $opportunity) {\n /** @var Opportunity $opportunity */\n $record = $this->buildOpportunityData($opportunity);\n\n if ($ownerId && $opportunity->getOwnerId() === $ownerId) {\n $ownerData[] = $record;\n }\n\n $data[] = $record;\n }\n\n if (! empty($ownerData)) {\n return $ownerData;\n }\n\n return $data;\n } catch (\\Exception $e) {\n $this->logger->info('[integration-app] Failed to fetch opportunities', [\n 'contact' => $crmContactId,\n 'account' => $crmAccountId,\n 'owner' => $ownerId,\n 'error' => $e->getMessage(),\n ]);\n\n return $data;\n }\n }\n\n private function getOwnerId(?int $userId = null): ?string\n {\n if (! $userId) {\n return null;\n }\n\n $profileRepository = app(ProfileRepository::class);\n $profile = $profileRepository->findProfileByUserId($this->config, $userId);\n\n return $profile instanceof Profile ? $profile->getCrmProviderId() : null;\n }\n\n private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account\n {\n $crmRepository = app(CrmObjectsRepository::class);\n\n if ($crmAccountId === null) {\n $contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);\n\n return $contact->getAccount();\n }\n\n return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);\n }\n\n private function buildOpportunityData(Opportunity $opportunity): array\n {\n $record = [\n 'crmId' => $opportunity->getCrmProviderId(),\n 'name' => $opportunity->getName(),\n 'won' => $opportunity->isWon(),\n 'closed' => $opportunity->isClosed(),\n ];\n\n if (! empty($opportunity->getFormattedValueAttribute())) {\n $record['value'] = $opportunity->getFormattedValueAttribute();\n }\n\n if (! empty($opportunity->getStage())) {\n $record['stage'] = [\n 'id' => $opportunity->getStage()->getUuid(),\n 'name' => $opportunity->getStage()->getName(),\n ];\n }\n\n return $record;\n }\n\n public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void\n {\n $data = [\n 'data' => $this->normalizeData($objectType, $data),\n ];\n\n $this->client->updateRecordById($objectType, $objectId, $data);\n }\n\n private function normalizeData(string $objectType, array $data): array\n {\n $fieldMapper = $this->getFieldMapper($objectType);\n\n if (! $fieldMapper instanceof FieldMapperInterface) {\n return $data;\n }\n\n return $fieldMapper->mapToCrmFields($data);\n }\n\n private function getFieldMapper(string $objectType): ?FieldMapperInterface\n {\n if ($objectType === self::OBJECT_OPPORTUNITY) {\n return app(OpportunityFieldMapper::class);\n }\n\n if ($objectType === self::OBJECT_LEAD) {\n return app(LeadFieldMapper::class);\n }\n\n return null;\n }\n\n public function getRecord(string $objectType, string $objectId, array $fields = []): array\n {\n return $this->client->getRecordById($objectType, $objectId);\n }\n\n public function getConfiguration(): Configuration\n {\n return $this->config;\n }\n\n public function setConfiguration(Configuration $config): void\n {\n $this->clearExternalMapCache();\n\n $this->config = $config;\n }\n\n private function setEditionConfiguration(string $provider): void\n {\n $this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);\n }\n\n public function setCrmUrlGenerator(Configuration $config): void\n {\n $this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);\n }\n\n public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface\n {\n if ($this->crmUrlGenerator === null) {\n $this->setCrmUrlGenerator($this->config);\n }\n\n return $this->crmUrlGenerator;\n }\n\n public function subscribeEntityEvents(bool $enableTrigger = true): void\n {\n $eventStates = $this->client->updateEntityEventsState($enableTrigger);\n\n $this->logger->info('[integration-app] Change team entity events subscription', [\n 'teamId' => $this->team->getId(),\n 'teamName' => $this->team->getName(),\n 'states' => $eventStates,\n 'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',\n ]);\n }\n\n #[\\Override] public function supportsNotes(): bool\n {\n return $this->editionConfig->supportsNotes();\n }\n\n #[\\Override] public function saveNote(\n string $title,\n string $body,\n string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n if ($noteObject === null) {\n return null;\n }\n\n $notePayload = [\n 'title' => $title,\n 'content' => $body,\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n ];\n\n $result = $this->client->createNote($notePayload);\n\n // debug saving note response\n $this->logger->info('[integration-app] createNote response', [\n 'objectId' => $objectId,\n 'objectType' => $noteObject->value,\n 'result' => $result,\n 'hasId' => isset($result['id']),\n ]);\n\n return $result['id'] ?? null;\n }\n\n /**\n * @throws CrmException\n */\n #[\\Override] public function saveActivity(Activity $activity): Activity\n {\n $this->logger->info('[integration-app] saveActivity', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n ]);\n\n if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {\n $crmActivity = $this->saveMeeting($activity);\n } elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {\n $crmActivity = $this->saveCall($activity);\n } else {\n throw new CrmException('Unsupported activity type');\n }\n\n $crmActivityId = $crmActivity['id'] ?? null;\n\n if ($crmActivityId !== null) {\n $activity->crm_provider_id = $crmActivityId;\n $activity->save();\n\n $this->logger->info('[integration-app] Activity successfully logged to CRM', [\n 'activity' => $activity->getUuid(),\n 'type' => $activity->getType(),\n 'crmId' => $crmActivityId,\n ]);\n }\n\n return $activity;\n }\n\n public function saveMeeting(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $meetingPayload = [\n 'Event_Title' => $decorateActivity->generateTitle($activity),\n 'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),\n 'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($meetingPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $meeting = $this->client->getMeeting($crmId);\n\n $oldDescription = $meeting['fields']['Description'] ?? null;\n $payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update meeting', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateMeeting($crmId, $payload);\n }\n\n $payload['Description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log meeting', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createMeeting($payload);\n }\n\n public function saveCall(Activity $activity): array\n {\n $decorateActivity = app(DecorateActivity::class);\n\n $callPayload = [\n 'Call_Type' => $this->getCallType($activity),\n 'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),\n 'Call_Duration' => $activity->getDuration(),\n 'name' => $decorateActivity->generateTitle($activity),\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n $payload = array_merge($callPayload, $this->attachToProspect($activity));\n\n if ($activity->hasCrmProviderId()) {\n $crmId = $activity->getCrmProviderId();\n $call = $this->client->getCall($crmId);\n\n $oldDescription = $call['fields']['Description'] ?? null;\n $payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] CRM update call', [\n 'activity' => $activity->getUuid(),\n 'crm_id' => $crmId,\n 'payload' => $payload,\n ]);\n\n return $this->client->updateCall($crmId, $payload);\n }\n\n $payload['description'] = $decorateActivity->generateDescription($activity);\n\n $this->logger->info('[integration-app] CRM log call', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n return $this->client->createCall($payload);\n }\n\n private function getCallType(Activity $activity): string\n {\n if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {\n return self::CALL_TYPE_MISSED;\n }\n\n return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;\n }\n\n private function attachToProspect(Activity $activity): array\n {\n $payload = [];\n\n if ($activity->hasContact()) {\n $payload['contactId'] = $activity->getContact()->getCrmProviderId();\n }\n\n if ($activity->hasOpportunity()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_OPPORTUNITY,\n $activity->getOpportunity()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {\n return array_merge(\n $payload,\n $this->buildBasicPayload(\n self::RELATIONSHIP_ACCOUNT,\n $activity->getAccount()->getCrmProviderId()\n )\n );\n }\n\n if ($activity->hasLead()) {\n $payload = $this->handleLeadPayload($activity);\n }\n\n return $payload;\n }\n\n private function handleLeadPayload(Activity $activity): array\n {\n $freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());\n $lead = $freshLead ?? $activity->getLead();\n\n if ($lead->getConvertedAt() === null) {\n return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());\n }\n\n $activity->lead_id = null;\n\n if ($lead->hasAccount()) {\n $account = $lead->getAccount();\n $activity->account_id = $account->getId();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());\n } else {\n $payload = [];\n }\n\n if ($lead->hasOpportunity()) {\n $opportunity = $lead->getOpportunity();\n $payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());\n $activity->opportunity_id = $opportunity->getId();\n $activity->value = $opportunity->value;\n $activity->stage_id = $opportunity->stage_id;\n } else {\n $activity->stage_id = null;\n }\n\n if ($lead->hasContact()) {\n $contact = $lead->getContact();\n $payload['contactId'] = $contact->getCrmProviderId();\n $activity->contact_id = $contact->getId();\n }\n\n $activity->save();\n event(new ActivityLeadConverted($activity, $lead));\n\n $this->logger->info('[integration-app] Lead converted', [\n 'activityUuid' => $activity->getUuid(),\n 'leadUuid' => $lead->getUuid(),\n ]);\n\n return $payload;\n }\n\n private function buildBasicPayload(string $type, string $id): array\n {\n return [\n 'type' => $type,\n 'id' => $id,\n ];\n }\n private function getActivityOwnerId(Activity $activity): ?string\n {\n $ownerId = null;\n if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {\n $ownerId = $activity->getUser()->getProfile()->getCrmProviderId();\n }\n\n return $ownerId;\n }\n\n #[\\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string\n {\n $taskPayload = [\n 'subject' => $fields['subject'],\n 'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,\n 'ownerId' => $this->getActivityOwnerId($activity),\n ];\n\n if (isset($fields['status'])) {\n $taskPayload['status'] = $fields['status'];\n }\n\n if (isset($fields['priority'])) {\n $taskPayload['priority'] = $fields['priority'];\n }\n\n if (isset($fields['content'])) {\n $taskPayload['content'] = $fields['content'];\n }\n\n $payload = array_merge($taskPayload, $this->attachToProspect($activity));\n\n $this->logger->info('[integration-app] CRM log follow up task', [\n 'activity' => $activity->getUuid(),\n 'payload' => $payload,\n ]);\n\n $task = $this->client->createTask($payload);\n\n return $task['id'] ?? null;\n }\n\n #[\\Override] public function saveTranscriptionSummaryAsNote(\n ActivityContract $activity,\n string $title,\n string $body,\n ?string $objectId,\n ?NoteObject $noteObject = null,\n ): ?string {\n // We have to find a way to store the transcription summary\n // This might be possible either by Tasks, Events, Engagements & Notes\n // Find what the CRM supports and save the note with the appropriate object(eg Notes)\n\n // For now use only Notes as both ZOHO & Salesforce support them.\n if ($this->supportsNotes() && $objectId !== null) {\n $this->logger->info('[integration-app] saving note', [\n 'activityId' => $activity->getUuid(),\n 'objectId' => $objectId,\n ]);\n\n return $this->saveNote($title, $body, $objectId, $noteObject);\n }\n\n $this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [\n 'activityId' => $activity->getUuid(),\n 'supportsNotes' => $this->supportsNotes(),\n 'objectId' => $objectId,\n ]);\n\n return null;\n }\n\n public function generateProviderUrl(string $providerId, string $objectType): ?string\n {\n return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);\n }\n\n public function updateStage($crmObject, Stage $stage): void\n {\n $objectType = $stage->getType();\n $objectId = $crmObject->getCrmProviderId();\n $params = ['stageName' => $stage->getCrmProviderId()];\n\n $this->logger->info('[integration-app] updateStage', [\n 'objectType' => $objectType,\n 'objectId' => $objectId,\n 'params' => $params,\n ]);\n\n $data = [\n 'data' => $this->normalizeData($objectType, $params),\n ];\n\n\n if ($objectType === Stage::TYPE_LEAD) {\n $this->client->updateLead($objectId, $data);\n } else {\n $this->client->updateDeal($objectId, $data);\n }\n }\n\n /**\n * @throws \\Exception\n */\n public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity\n {\n if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {\n return null;\n }\n\n if (! $activity->isTypeConference()) {\n return null;\n }\n\n // The related activity is already linked.\n if ($activity->hasCrmProviderId()) {\n return $activity;\n }\n\n if ($activity->hasActualStartTime() === false) {\n return null;\n }\n\n return $this->fetchAndAssociateZohoRelatedActivity($activity);\n }\n\n public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity\n {\n try {\n $meeting = $this->fetchRelatedZohoActivity($activity);\n if (empty($meeting)) {\n $this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [\n 'activity' => $activity->getUuid(),\n ]);\n\n return null;\n }\n\n $decorateActivity = app(DecorateActivity::class);\n $oldDescription = $meeting['Description'] ?? '';\n $updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);\n\n $this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [\n 'activity' => $activity->getUuid(),\n 'description' => $updatedDescription,\n ]);\n\n $this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);\n\n // Update our activity to reflect the remote data.\n $activity->update([\n 'crm_provider_id' => $meeting['id'],\n 'summary' => $meeting['Description'],\n ]);\n\n return $activity;\n } catch (\\Exception $exception) {\n \\Sentry::captureException($exception);\n\n throw $exception;\n }\n }\n\n public function fetchRelatedZohoActivity(Activity $activity): array\n {\n [$from, $to] = $this->getFromToDates($activity);\n\n $start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00\n $end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00\n if ($start === null || $end === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity missing start or end date',\n [\n 'activity' => $activity->getUuid(),\n 'start' => $start,\n 'end' => $end,\n 'from' => $from,\n 'to' => $to,\n ]\n );\n\n return [];\n }\n\n $whoId = null;\n $whatId = null;\n $criteriaParts = [];\n\n if ($activity->getContact()) {\n $whoId = $activity->getContact()->getCrmProviderId();\n $criteriaParts[] = \"(Who_Id:equals:$whoId)\";\n }\n\n if ($activity->getOpportunity()) {\n $whatId = $activity->getOpportunity()->getCrmProviderId();\n } elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {\n $whatId = $activity->getAccount()->getCrmProviderId();\n } elseif ($activity->getLead()) {\n $whatId = $activity->getLead()->getCrmProviderId();\n }\n\n if ($whatId !== null) {\n $criteriaParts[] = \"(What_Id:equals:$whatId)\";\n }\n\n if ($whoId === null && $whatId === null) {\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity cannot find prospect',\n [\n 'activity' => $activity->getUuid(),\n ]\n );\n\n return [];\n }\n\n $criteriaParts[] = \"(Start_DateTime:greater_equal:$start)\";\n $criteriaParts[] = \"(End_DateTime:less_equal:$end)\";\n\n $criteria = implode(' AND ', $criteriaParts);\n\n $params = [\n 'criteria' => $criteria,\n 'sort_by' => 'Modified_Time',\n 'sort_order' => 'desc',\n ];\n\n $this->logger->info(\n '[integration-app] fetchRelatedZohoActivity searching for related activity',\n [\n 'activity' => $activity->getUuid(),\n 'params' => $params,\n ]\n );\n\n $meetings = $this->client->searchMeetings($params);\n if (! empty($meetings)) {\n return $meetings[0];\n }\n\n return [];\n }\n\n private function getFromToDates(Activity $activity): array\n {\n $calendarEvent = $activity->calendarEvent()->first();\n\n $from = $calendarEvent?->getStartTime();\n $to = $calendarEvent?->getEndTime();\n\n if (! $from || ! $to) {\n $from = $activity->hasScheduledStartTime()\n ? $activity->getScheduledStartTime()\n : $activity->getActualStartTime();\n\n $to = $activity->hasScheduledEndTime()\n ? $activity->getScheduledEndTime()->addMinutes(15)\n : $activity->getActualEndTime();\n }\n\n return [$from, $to];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.28224733,"top":1.0,"width":0.024268618,"height":-0.04788506},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
4266403488567062772
|
6524482065460761565
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp;
use Carbon\Carbon;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Contracts\Services\Crm\ClientInterface;
use Jiminny\Contracts\Services\Crm\FetchRelatedActivityInterface;
use Jiminny\Contracts\Services\Crm\ImportsBusinessProcessesInterface;
use Jiminny\Contracts\Services\Crm\LayoutManagementInterface;
use Jiminny\Contracts\Services\Crm\MatchCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\Provider\IntegrationAppInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityLookupInterface;
use Jiminny\Contracts\Services\Crm\RemoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\RemoteNoteEntityManipulationInterface;
use Jiminny\Contracts\Services\Crm\SendSummaryToCrmInterface;
use Jiminny\Contracts\Services\Crm\SettingsInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Contracts\Services\Crm\SyncCrmMetadataInterface;
use Jiminny\Events\Activities\Crm\ActivityLeadConverted;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\SocialAccountNotFoundException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Account;
use Jiminny\Models\Activity;
use Jiminny\Models\Contracts\ActivityContract;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Models\User;
use Jiminny\Services\Crm\BaseService;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationAppProviders;
use Jiminny\Services\Crm\IntegrationApp\Config\IntegrationConfigFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\FieldMapperInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\LeadFieldMapper;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\GenerateProviderUrlInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\IntegrationAppCrmGeneratorFactory;
use Jiminny\Services\Crm\IntegrationApp\DTO\Utils\UrlGeneratorInterface;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmFieldsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SystemStateTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\LayoutTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\MatchProspectsTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\NotSupportedTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmEntitiesTrait;
use Jiminny\Services\Crm\IntegrationApp\ServiceTraits\SyncCrmMetadataTrait;
use Psr\Log\LoggerInterface;
use Jiminny\Services\Crm\IntegrationApp\DTO\Mappers\OpportunityFieldMapper;
use Jiminny\Repositories\Crm\ProfileRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Models\Crm\Profile;
use Jiminny\Services\Crm\CrmObjects\CrmObjectsRepository;
class Service extends BaseService implements
IntegrationAppInterface,
SyncCrmEntitiesInterface,
SyncCrmMetadataInterface,
ImportsBusinessProcessesInterface,
RemoteEntityManipulationInterface,
LayoutManagementInterface,
SettingsInterface,
MatchCrmEntitiesInterface,
RemoteEntityLookupInterface,
RemoteNoteEntityManipulationInterface,
SendSummaryToCrmInterface,
UrlGeneratorInterface,
FetchRelatedActivityInterface
{
use SyncCrmMetadataTrait;
use SyncCrmEntitiesTrait;
use SystemStateTrait;
use LayoutTrait;
use NotSupportedTrait;
use MatchProspectsTrait;
use SyncCrmFieldsTrait;
public const string CALL_TYPE_MISSED = 'Missed';
public const string CALL_TYPE_INBOUND = 'Inbound';
public const string CALL_TYPE_OUTBOUND = 'Outbound';
public const string RELATIONSHIP_OPPORTUNITY = 'Deals';
public const string RELATIONSHIP_LEAD = 'Leads';
public const string RELATIONSHIP_ACCOUNT = 'Accounts';
/**
* @var ClientInterface&DataClient
*/
protected $client;
protected ?User $invokedUser = null;
protected ?GenerateProviderUrlInterface $crmUrlGenerator = null;
public function __construct(
DataClient $client,
LoggerInterface $logger,
) {
parent::__construct();
$this->client = $client;
$this->logger = $logger;
}
public function getDisplayName(): string
{
return Providers::getProviderDisplayName(
Providers::getCrmIntegrationSlug($this->config)
);
}
/**
* @throws \Exception
*/
public function setUser(User $user): void
{
$this->configureSentryScope($user);
$this->invokedUser = $user;
$this->team = $user->getTeam();
$teamOwner = $this->team->getOwner();
$this->setConfiguration($user->getTeam()->getCrmConfiguration());
$this->setEditionConfiguration(Providers::getCrmIntegrationSlug($this->config));
$this->setCrmUrlGenerator($this->config);
$this->client->setTeam($this->team);
$socialAccount = $teamOwner?->getSocialAccount('integration-app');
if ($socialAccount === null) {
$this->logger->info('[integration-app] Social account not found', [
'teamId' => $this->team->getId(),
'teamOwnerId' => $teamOwner?->getId(),
'userId' => $user->getId(),
]);
throw new SocialAccountNotFoundException('Social account not found!');
}
$this->client->setSocialAccount($socialAccount);
// The CRM Service is properly bootstrapped, and supports remote operations
$this->connect();
}
public function normalizeValue(string $fieldType, string $fieldValue, bool $internal = false): string
{
return $fieldValue;
}
public function find(string $name, array $scopes): array
{
/** @var LocalSearch $localSearch */
$localSearch = app(LocalSearch::class);
$localSearch->setConfiguration($this->config);
$localSearch->setCountryCode($this->invokedUser->getCountryCode());
return $localSearch->search($name);
// if (! empty($localMatch)) {
// return $localMatch;
// }
//
// /** @var RemoteSearch $remoteSearch */
// $remoteSearch = app(RemoteSearch::class);
// $remoteSearch->setClient($this->client);
// $remoteSearch->setConfiguration($this->config);
//
// return $remoteSearch->search($name);
}
public function findOpportunities(?string $crmAccountId, ?string $crmContactId, ?int $userId = null): array
{
$data = [];
$ownerData = [];
$account = $this->getAccount($crmAccountId, $crmContactId);
if ($account === null) {
return [];
}
$ownerId = $this->getOwnerId($userId);
try {
$opportunityRepository = app(OpportunityRepository::class);
$opportunities = $opportunityRepository->findAllByConfigurationAndAccountId(
$this->config,
$account->getId()
);
foreach ($opportunities as $opportunity) {
/** @var Opportunity $opportunity */
$record = $this->buildOpportunityData($opportunity);
if ($ownerId && $opportunity->getOwnerId() === $ownerId) {
$ownerData[] = $record;
}
$data[] = $record;
}
if (! empty($ownerData)) {
return $ownerData;
}
return $data;
} catch (\Exception $e) {
$this->logger->info('[integration-app] Failed to fetch opportunities', [
'contact' => $crmContactId,
'account' => $crmAccountId,
'owner' => $ownerId,
'error' => $e->getMessage(),
]);
return $data;
}
}
private function getOwnerId(?int $userId = null): ?string
{
if (! $userId) {
return null;
}
$profileRepository = app(ProfileRepository::class);
$profile = $profileRepository->findProfileByUserId($this->config, $userId);
return $profile instanceof Profile ? $profile->getCrmProviderId() : null;
}
private function getAccount(?string $crmAccountId = null, ?string $crmContactId = null): ?Account
{
$crmRepository = app(CrmObjectsRepository::class);
if ($crmAccountId === null) {
$contact = $crmRepository->findContactByCrmProviderId($this->config, $crmContactId);
return $contact->getAccount();
}
return $crmRepository->findAccountByCrmProviderId($this->config, $crmAccountId);
}
private function buildOpportunityData(Opportunity $opportunity): array
{
$record = [
'crmId' => $opportunity->getCrmProviderId(),
'name' => $opportunity->getName(),
'won' => $opportunity->isWon(),
'closed' => $opportunity->isClosed(),
];
if (! empty($opportunity->getFormattedValueAttribute())) {
$record['value'] = $opportunity->getFormattedValueAttribute();
}
if (! empty($opportunity->getStage())) {
$record['stage'] = [
'id' => $opportunity->getStage()->getUuid(),
'name' => $opportunity->getStage()->getName(),
];
}
return $record;
}
public function updateRecord(string $objectType, string $objectId, array $data, array $headers = []): void
{
$data = [
'data' => $this->normalizeData($objectType, $data),
];
$this->client->updateRecordById($objectType, $objectId, $data);
}
private function normalizeData(string $objectType, array $data): array
{
$fieldMapper = $this->getFieldMapper($objectType);
if (! $fieldMapper instanceof FieldMapperInterface) {
return $data;
}
return $fieldMapper->mapToCrmFields($data);
}
private function getFieldMapper(string $objectType): ?FieldMapperInterface
{
if ($objectType === self::OBJECT_OPPORTUNITY) {
return app(OpportunityFieldMapper::class);
}
if ($objectType === self::OBJECT_LEAD) {
return app(LeadFieldMapper::class);
}
return null;
}
public function getRecord(string $objectType, string $objectId, array $fields = []): array
{
return $this->client->getRecordById($objectType, $objectId);
}
public function getConfiguration(): Configuration
{
return $this->config;
}
public function setConfiguration(Configuration $config): void
{
$this->clearExternalMapCache();
$this->config = $config;
}
private function setEditionConfiguration(string $provider): void
{
$this->editionConfig = app(IntegrationConfigFactory::class)->create($provider);
}
public function setCrmUrlGenerator(Configuration $config): void
{
$this->crmUrlGenerator = app(IntegrationAppCrmGeneratorFactory::class)->create($config);
}
public function getCrmUrlGenerator(): ?GenerateProviderUrlInterface
{
if ($this->crmUrlGenerator === null) {
$this->setCrmUrlGenerator($this->config);
}
return $this->crmUrlGenerator;
}
public function subscribeEntityEvents(bool $enableTrigger = true): void
{
$eventStates = $this->client->updateEntityEventsState($enableTrigger);
$this->logger->info('[integration-app] Change team entity events subscription', [
'teamId' => $this->team->getId(),
'teamName' => $this->team->getName(),
'states' => $eventStates,
'action' => $enableTrigger ? 'subscribe' : 'unsubscribe',
]);
}
#[\Override] public function supportsNotes(): bool
{
return $this->editionConfig->supportsNotes();
}
#[\Override] public function saveNote(
string $title,
string $body,
string $objectId,
?NoteObject $noteObject = null,
): ?string {
if ($noteObject === null) {
return null;
}
$notePayload = [
'title' => $title,
'content' => $body,
'objectId' => $objectId,
'objectType' => $noteObject->value,
];
$result = $this->client->createNote($notePayload);
// debug saving note response
$this->logger->info('[integration-app] createNote response', [
'objectId' => $objectId,
'objectType' => $noteObject->value,
'result' => $result,
'hasId' => isset($result['id']),
]);
return $result['id'] ?? null;
}
/**
* @throws CrmException
*/
#[\Override] public function saveActivity(Activity $activity): Activity
{
$this->logger->info('[integration-app] saveActivity', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
]);
if ($activity->getCrmType() === Activity::TYPE_CONFERENCE) {
$crmActivity = $this->saveMeeting($activity);
} elseif (in_array($activity->getType(), [Activity::TYPE_SOFTPHONE, Activity::TYPE_SOFTPHONE_INBOUND])) {
$crmActivity = $this->saveCall($activity);
} else {
throw new CrmException('Unsupported activity type');
}
$crmActivityId = $crmActivity['id'] ?? null;
if ($crmActivityId !== null) {
$activity->crm_provider_id = $crmActivityId;
$activity->save();
$this->logger->info('[integration-app] Activity successfully logged to CRM', [
'activity' => $activity->getUuid(),
'type' => $activity->getType(),
'crmId' => $crmActivityId,
]);
}
return $activity;
}
public function saveMeeting(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$meetingPayload = [
'Event_Title' => $decorateActivity->generateTitle($activity),
'Start_DateTime' => $activity->getActualStartTime()->toIso8601String(),
'End_DateTime' => $activity->getActualEndTime()->toIso8601String(),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($meetingPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$meeting = $this->client->getMeeting($crmId);
$oldDescription = $meeting['fields']['Description'] ?? null;
$payload['Description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update meeting', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateMeeting($crmId, $payload);
}
$payload['Description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log meeting', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createMeeting($payload);
}
public function saveCall(Activity $activity): array
{
$decorateActivity = app(DecorateActivity::class);
$callPayload = [
'Call_Type' => $this->getCallType($activity),
'Call_Start_Time' => $activity->getActualStartTime()->toIso8601String(),
'Call_Duration' => $activity->getDuration(),
'name' => $decorateActivity->generateTitle($activity),
'ownerId' => $this->getActivityOwnerId($activity),
];
$payload = array_merge($callPayload, $this->attachToProspect($activity));
if ($activity->hasCrmProviderId()) {
$crmId = $activity->getCrmProviderId();
$call = $this->client->getCall($crmId);
$oldDescription = $call['fields']['Description'] ?? null;
$payload['description'] = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] CRM update call', [
'activity' => $activity->getUuid(),
'crm_id' => $crmId,
'payload' => $payload,
]);
return $this->client->updateCall($crmId, $payload);
}
$payload['description'] = $decorateActivity->generateDescription($activity);
$this->logger->info('[integration-app] CRM log call', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
return $this->client->createCall($payload);
}
private function getCallType(Activity $activity): string
{
if ($activity->getStatus() === Activity::STATUS_NO_ANSWER) {
return self::CALL_TYPE_MISSED;
}
return $activity->getType() === Activity::TYPE_SOFTPHONE_INBOUND ? self::CALL_TYPE_INBOUND : self::CALL_TYPE_OUTBOUND;
}
private function attachToProspect(Activity $activity): array
{
$payload = [];
if ($activity->hasContact()) {
$payload['contactId'] = $activity->getContact()->getCrmProviderId();
}
if ($activity->hasOpportunity()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_OPPORTUNITY,
$activity->getOpportunity()->getCrmProviderId()
)
);
}
if ($activity->hasAccount() && ! $activity->getAccount()->getIsInternal()) {
return array_merge(
$payload,
$this->buildBasicPayload(
self::RELATIONSHIP_ACCOUNT,
$activity->getAccount()->getCrmProviderId()
)
);
}
if ($activity->hasLead()) {
$payload = $this->handleLeadPayload($activity);
}
return $payload;
}
private function handleLeadPayload(Activity $activity): array
{
$freshLead = $this->syncLead($activity->getLead()->getCrmProviderId());
$lead = $freshLead ?? $activity->getLead();
if ($lead->getConvertedAt() === null) {
return $this->buildBasicPayload(self::RELATIONSHIP_LEAD, $lead->getCrmProviderId());
}
$activity->lead_id = null;
if ($lead->hasAccount()) {
$account = $lead->getAccount();
$activity->account_id = $account->getId();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_ACCOUNT, $account->getCrmProviderId());
} else {
$payload = [];
}
if ($lead->hasOpportunity()) {
$opportunity = $lead->getOpportunity();
$payload = $this->buildBasicPayload(self::RELATIONSHIP_OPPORTUNITY, $opportunity->getCrmProviderId());
$activity->opportunity_id = $opportunity->getId();
$activity->value = $opportunity->value;
$activity->stage_id = $opportunity->stage_id;
} else {
$activity->stage_id = null;
}
if ($lead->hasContact()) {
$contact = $lead->getContact();
$payload['contactId'] = $contact->getCrmProviderId();
$activity->contact_id = $contact->getId();
}
$activity->save();
event(new ActivityLeadConverted($activity, $lead));
$this->logger->info('[integration-app] Lead converted', [
'activityUuid' => $activity->getUuid(),
'leadUuid' => $lead->getUuid(),
]);
return $payload;
}
private function buildBasicPayload(string $type, string $id): array
{
return [
'type' => $type,
'id' => $id,
];
}
private function getActivityOwnerId(Activity $activity): ?string
{
$ownerId = null;
if ($activity->hasUser() && $activity->getUser()->getProfile() !== null) {
$ownerId = $activity->getUser()->getProfile()->getCrmProviderId();
}
return $ownerId;
}
#[\Override] public function saveFollowupActivity(Activity $activity, array $fields): ?string
{
$taskPayload = [
'subject' => $fields['subject'],
'dueTime' => isset($fields['dueDate']) ? Carbon::parse($fields['dueDate'])->format('Y-m-d') : null,
'ownerId' => $this->getActivityOwnerId($activity),
];
if (isset($fields['status'])) {
$taskPayload['status'] = $fields['status'];
}
if (isset($fields['priority'])) {
$taskPayload['priority'] = $fields['priority'];
}
if (isset($fields['content'])) {
$taskPayload['content'] = $fields['content'];
}
$payload = array_merge($taskPayload, $this->attachToProspect($activity));
$this->logger->info('[integration-app] CRM log follow up task', [
'activity' => $activity->getUuid(),
'payload' => $payload,
]);
$task = $this->client->createTask($payload);
return $task['id'] ?? null;
}
#[\Override] public function saveTranscriptionSummaryAsNote(
ActivityContract $activity,
string $title,
string $body,
?string $objectId,
?NoteObject $noteObject = null,
): ?string {
// We have to find a way to store the transcription summary
// This might be possible either by Tasks, Events, Engagements & Notes
// Find what the CRM supports and save the note with the appropriate object(eg Notes)
// For now use only Notes as both ZOHO & Salesforce support them.
if ($this->supportsNotes() && $objectId !== null) {
$this->logger->info('[integration-app] saving note', [
'activityId' => $activity->getUuid(),
'objectId' => $objectId,
]);
return $this->saveNote($title, $body, $objectId, $noteObject);
}
$this->logger->info('[integration-app] skip saveTranscriptionSummaryAsNote', [
'activityId' => $activity->getUuid(),
'supportsNotes' => $this->supportsNotes(),
'objectId' => $objectId,
]);
return null;
}
public function generateProviderUrl(string $providerId, string $objectType): ?string
{
return $this->getCrmUrlGenerator()?->generateProviderUrl($providerId, $objectType);
}
public function updateStage($crmObject, Stage $stage): void
{
$objectType = $stage->getType();
$objectId = $crmObject->getCrmProviderId();
$params = ['stageName' => $stage->getCrmProviderId()];
$this->logger->info('[integration-app] updateStage', [
'objectType' => $objectType,
'objectId' => $objectId,
'params' => $params,
]);
$data = [
'data' => $this->normalizeData($objectType, $params),
];
if ($objectType === Stage::TYPE_LEAD) {
$this->client->updateLead($objectId, $data);
} else {
$this->client->updateDeal($objectId, $data);
}
}
/**
* @throws \Exception
*/
public function fetchAndAssociateRelatedActivity(Activity $activity): ?Activity
{
if ($activity->getCrm()?->getEdition() !== IntegrationAppProviders::ZOHO_CRM) {
return null;
}
if (! $activity->isTypeConference()) {
return null;
}
// The related activity is already linked.
if ($activity->hasCrmProviderId()) {
return $activity;
}
if ($activity->hasActualStartTime() === false) {
return null;
}
return $this->fetchAndAssociateZohoRelatedActivity($activity);
}
public function fetchAndAssociateZohoRelatedActivity(Activity $activity): ?Activity
{
try {
$meeting = $this->fetchRelatedZohoActivity($activity);
if (empty($meeting)) {
$this->logger->info('[integration-app] fetchRelatedZohoActivity No related activity found', [
'activity' => $activity->getUuid(),
]);
return null;
}
$decorateActivity = app(DecorateActivity::class);
$oldDescription = $meeting['Description'] ?? '';
$updatedDescription = $decorateActivity->generateUpdatedDescription($oldDescription, $activity);
$this->logger->info('[integration-app] fetchAndAssociateZohoRelatedActivity updating related activity', [
'activity' => $activity->getUuid(),
'description' => $updatedDescription,
]);
$this->client->updateMeeting($meeting['id'], ['Description' => $updatedDescription]);
// Update our activity to reflect the remote data.
$activity->update([
'crm_provider_id' => $meeting['id'],
'summary' => $meeting['Description'],
]);
return $activity;
} catch (\Exception $exception) {
\Sentry::captureException($exception);
throw $exception;
}
}
public function fetchRelatedZohoActivity(Activity $activity): array
{
[$from, $to] = $this->getFromToDates($activity);
$start = $from?->toIso8601String(); // e.g., 2025-07-01T00:00:00+00:00
$end = $to?->toIso8601String(); // e.g., 2025-07-14T23:59:59+00:00
if ($start === null || $end === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity missing start or end date',
[
'activity' => $activity->getUuid(),
'start' => $start,
'end' => $end,
'from' => $from,
'to' => $to,
]
);
return [];
}
$whoId = null;
$whatId = null;
$criteriaParts = [];
if ($activity->getContact()) {
$whoId = $activity->getContact()->getCrmProviderId();
$criteriaParts[] = "(Who_Id:equals:$whoId)";
}
if ($activity->getOpportunity()) {
$whatId = $activity->getOpportunity()->getCrmProviderId();
} elseif ($activity->getAccount() && $activity->getAccount()->getIsInternal() === false) {
$whatId = $activity->getAccount()->getCrmProviderId();
} elseif ($activity->getLead()) {
$whatId = $activity->getLead()->getCrmProviderId();
}
if ($whatId !== null) {
$criteriaParts[] = "(What_Id:equals:$whatId)";
}
if ($whoId === null && $whatId === null) {
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity cannot find prospect',
[
'activity' => $activity->getUuid(),
]
);
return [];
}
$criteriaParts[] = "(Start_DateTime:greater_equal:$start)";
$criteriaParts[] = "(End_DateTime:less_equal:$end)";
$criteria = implode(' AND ', $criteriaParts);
$params = [
'criteria' => $criteria,
'sort_by' => 'Modified_Time',
'sort_order' => 'desc',
];
$this->logger->info(
'[integration-app] fetchRelatedZohoActivity searching for related activity',
[
'activity' => $activity->getUuid(),
'params' => $params,
]
);
$meetings = $this->client->searchMeetings($params);
if (! empty($meetings)) {
return $meetings[0];
}
return [];
}
private function getFromToDates(Activity $activity): array
{
$calendarEvent = $activity->calendarEvent()->first();
$from = $calendarEvent?->getStartTime();
$to = $calendarEvent?->getEndTime();
if (! $from || ! $to) {
$from = $activity->hasScheduledStartTime()
? $activity->getScheduledStartTime()
: $activity->getActualStartTime();
$to = $activity->hasScheduledEndTime()
? $activity->getScheduledEndTime()->addMinutes(15)
: $activity->getActualEndTime();
}
return [$from, $to];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45554
|
1629
|
4
|
2026-05-14T14:42:21.764603+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769741764_m1.jpg...
|
PhpStorm
|
faVsco.js – IntegrationApp/Service.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16","depth":4,"bounds":{"left":0.77708334,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.80138886,"top":0.3122222,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7903400416253054810
|
-8781927421094687800
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
16
2
Previous Highlighted Error
Next Highlighted Error
PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelp•FV faVsco.js* #12066 on JY-20725-handle-HS-search-rate-limit k vProjectvT DeleteCrmEntityTrait.phpDeleteAccountJob.php© ImportActivityTypes.php© WriteCrmTrait.phplhl100% <HandleHubspotRateLimitTestv8• Thu 14 May 17:42:21* :Q=custom.log> MetadataAccessors© Hubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.php x* RemoteWriteAccessor.phpT AccountAccessor.php© DataClient.php• BaseAccessor.php© IntegrationApp/DecorateActivity.php© Activity.phpSalesforce/Service.phpT LogActivityTrait.php• ContactAccessor.php© Playbook.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpDealAccessor.phpPlainTextDecorateActivity.phpT ActivityPlaybookTrait.php© CrmHelperRepository.phpAccountController.php18.••© IntegrationAppAccessExce• LeadAccessor.phpE.env© DetachActivityObject.phpRematchActivityOnCrmObjectDetach.php© MatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt55• RemoteWriteAccessor.php413• SystemStateAccessor.php455T UserAccessor.php436© HubspotPaginationService.php© HandleHubspotRateLimit.phpclass Service extends BaseService implementspublic function saveMeeting(Activity $activity): arrayСтИДО= эстика,'payload'=> Spayload,> D Api|437D Config1):438O DTO439return $this->client->updateMeeting($crmId, $payload);> O Filters440v d Jobs441© CrmEntitiesFullSyncJob.ph 442$payload['Description'] = $decorateActivity->generateDescription(Sactivity);© DeleteRemoteTeamJob.ph 443T IntegrationAppService Trait444© SubscribeForEventsJob.ph445© TeamInitialSyncJob.php446$this-›logger-›info('[integration-app] CRM Log meeting', ['activity' => $activity->getUvid(),'payload' => $payload,© UnsubscribeForEventsJob.447© UpdateProfileRelatedEntiti1):448© ValidateTeamActiveConne449return $this->client->createMeeting($payload);> ProspectSearchStrategy450Service TraitsT RemoteWriteAccessor451© DataClient.php2 usages© DecorateActivity.php© LocalSearch.php4524911public function saveCall(Activity $acpublic function createMeetingarray $meetingPayload = []): array• LocalSearchlnterface.php1 usageParameters: array$meetingPayload© RemoteSearch.php© Service.php492500private function getCallType(ActivitySource:v • Listeners3 usagesC ConvertLeadActivities.php501private function attachToProspect(Act.../app/Services/Crm/IntegrationApp/Accessors/RemoteWriteAccessor.phf &:@ Purdel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W=.env.staging4 console [QAI PROD] X4 console [PROD]A console (EU]A 16 × 2DGojiminny v084143 ×4 л215•m_layout_id =2162,1661,66799,66217218219id = 33;_220— 221222_223224id THEN '(own=225_226227228229230hubspot':-231232-233 V= 11512582;234W Windsurf Teams439:42UTF-8Ca 4 spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45556
|
1630
|
4
|
2026-05-14T14:42:25.390168+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769745390_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ActivityFilesLaterJiminny... ~@ jiminny-x-integrat ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctOpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeave~ (Q SearchDate ModifiedYesterdav at 13.36Yesterday at 13:36Yesterday at 13.30Yesterday at 13:34Yesterday at 13:34resterday at 15.5sYesterdav at 13:3kYesterday at 13:32Yesterday at 13.31Yesterday at 13:31Yesterday at 13:30resterday at 15.30Yesterdav at 13:29Yesterday at 13:29Yesterday at 13:28Yesterday at 13:28Yesterday at 13:27resterday at 13-40Yesterdav at 13:26Yesterday at 13:25Yesterday at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13.22Yesterdav at 13:21Yesterday at 13:20Yesterday at 13:19Yesterday at 13.18Yecterdav at 12:19Yesterday at 13-1/Yesterdav at 13:16Yesterday at 13:16Yesterday at 13:15Yecterdav at 12:1/Yesterday at 13:14Yesterday at 13.13Yecterdav at 13:10Yesterday at 13:12Yesterday at 13:11Yesterday at 13:11Yesterday at 13:10Yesterday at 13.10Yecterdav at 12:091Yesterday at 13:09Yesterdav at 13:0823K:MPEG-4 movie9KBMPEG-4 movie13 KB16 Kb17 KEMPEG-4 movieMPEG-4 movie29 KB6 KBMPE0"4 movie12 K:9 KBMPEG-4 movie7 KBMP2G-4 movie37 KBMPEG-4 movie10 KBI KDMPEG"4 movie8 KE9KBMPEG-4 movie8 KB72 KBMPEG-4 movie14 KBMPEG-4 movie13 KB9KBMPEG-4 movie18 KEMPEG-4 movie12 KBMPEG-4 movie10 KB16 K:MPEG-4 movie6 KBMPEG-4 movie12 KBMPEG-4 movie23 KBMPEG-4 movie8 KBMPEG-4 movie6 KBMPEG-4 movie16 K:11 KBMPEG-4 movie20 KBMPEG-4 movie21 KPMPEG-4 movie10 KB MPEG-4 movie7 KBMPEG-4 movie5 KB1MPEG-4 movie11 KBMPEG-4 movie26 KB111 KB102 KRMPEG-4 movieMDEG-A movie88 KB59 KBMPEG-4 movie08 KBIMPEG-A movie97 KB MPEG-4 movie66 KB44 KB02 KpMPEG-4 movieMPEG-4 movie78 KB50 KBMPEG-4 movie58 KГMPEG-A movid27 KBMPEG-4 movie7 KB12K8MPEG-4 movieFavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network|• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zip→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zipD report(2) xmlAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence hettertouchtoolMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•AlfredwPmazanoko.imnaoc.YWIfана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jpс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВ148 KB122 KB111 KB94 KBZIP archivelZIP archiveXML documentAlfred...ferencesPDF Document92 KBPDr DocumentPDF Document91 KB91 KB30 KB29 KBXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.41 GB availabld• Inu 14 Mау 1/.42-23Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
NULL
|
5981897817541860208
|
NULL
|
click
|
ocr
|
NULL
|
ActivityFilesLaterJiminny... ~@ jiminny-x-integrat ActivityFilesLaterJiminny... ~@ jiminny-x-integrati& platform-inner-team© Channels# ai-chapter# alertsi backend# bugscontusion-cllnia# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the people of iimi..• Direct messages8. A...• A3 62P. Galya Dimitrova Mvasil Vasilevf. Stefka Stoyanova%: Todor Stamatovf. Mario GeorgievP. Nikolay Ivanov2o James Graham "2. Stoyan Tanev. Steliyan Georgiev. Petko Kashinski*. Lukas Kovali...a: Apps® ToastS lira Gloud6 Huddle with Aneliya Angelova& R. Aneliya Angelova •• Messagest Add canvasur FilesAneliya Angelova 2:30 PMЛукаш, само при Сейлсфорс и Хубспот се синкваха активити типовете, когато се направи плейбук,нали?пои останалите скМі тоябва оъчно ла се въвелат.Lukas Kovalik 2:47 PMтряова да се за всички, някьде не се ли попьлвапри зохо май беше hardcoded но май и там си връщаха две категорииAneliya Angelova @ 4:00 PMЛукаш имаш ли време да се чуем за тестването на https://jiminny.atlassian.net/browse/JY-20725X Preview insackt[HubSpot] Optimise CRM rematctOpenReady for QA- MediumAA Aneliya AngelovaAs of today at 4:00 PM RetreshOpen in Jira+ SummariseLukas Kovalik 4:02 PMzean-iurwiniareelYou joined the huddle LIVE 4:06 PMAneliva Angelova is here toolAneliya Angelova 4:44 PM11512582Lukas Kovalik O 5:16 PMcurl --location "httns:ani.hubani.com/crm/v3/obiects/contacts/search--header 'Content-Type: application/json'\--header "Authorization: BearerC|Kvma?iMx7OINOM8kOFwrAowAcAkUAhIR24?A05D?xiVrIYMILuP6SA01Kwcmhr=n.v2 hytorDniMvDalYck-CMalovolNOM9kOFwrAUAcrkcaws-ThwRARIRAOF-ATFSAOFRAO-ROIEBAQUBEggBAQEBAYICFIґ7Au8O2Nwal9YW2CbCCxYvwngmSgNldTFSAFoAYABoAHAAeAA'\--data "{ "limit", 13'Message Aneliva Angelova+ AaIAl Notes: OffLeave~ (Q SearchDate ModifiedYesterdav at 13.36Yesterday at 13:36Yesterday at 13.30Yesterday at 13:34Yesterday at 13:34resterday at 15.5sYesterdav at 13:3kYesterday at 13:32Yesterday at 13.31Yesterday at 13:31Yesterday at 13:30resterday at 15.30Yesterdav at 13:29Yesterday at 13:29Yesterday at 13:28Yesterday at 13:28Yesterday at 13:27resterday at 13-40Yesterdav at 13:26Yesterday at 13:25Yesterday at 13:25Yesterday at 13:24Yesterday at 13:24Yesterday at 13.22Yesterdav at 13:21Yesterday at 13:20Yesterday at 13:19Yesterday at 13.18Yecterdav at 12:19Yesterday at 13-1/Yesterdav at 13:16Yesterday at 13:16Yesterday at 13:15Yecterdav at 12:1/Yesterday at 13:14Yesterday at 13.13Yecterdav at 13:10Yesterday at 13:12Yesterday at 13:11Yesterday at 13:11Yesterday at 13:10Yesterday at 13.10Yecterdav at 12:091Yesterday at 13:09Yesterdav at 13:0823K:MPEG-4 movie9KBMPEG-4 movie13 KB16 Kb17 KEMPEG-4 movieMPEG-4 movie29 KB6 KBMPE0"4 movie12 K:9 KBMPEG-4 movie7 KBMP2G-4 movie37 KBMPEG-4 movie10 KBI KDMPEG"4 movie8 KE9KBMPEG-4 movie8 KB72 KBMPEG-4 movie14 KBMPEG-4 movie13 KB9KBMPEG-4 movie18 KEMPEG-4 movie12 KBMPEG-4 movie10 KB16 K:MPEG-4 movie6 KBMPEG-4 movie12 KBMPEG-4 movie23 KBMPEG-4 movie8 KBMPEG-4 movie6 KBMPEG-4 movie16 K:11 KBMPEG-4 movie20 KBMPEG-4 movie21 KPMPEG-4 movie10 KB MPEG-4 movie7 KBMPEG-4 movie5 KB1MPEG-4 movie11 KBMPEG-4 movie26 KB111 KB102 KRMPEG-4 movieMDEG-A movie88 KB59 KBMPEG-4 movie08 KBIMPEG-A movie97 KB MPEG-4 movie66 KB44 KB02 KpMPEG-4 movieMPEG-4 movie78 KB50 KBMPEG-4 movie58 KГMPEG-A movid27 KBMPEG-4 movie7 KB12K8MPEG-4 movieFavouritesE jiminny© Recents* ApplicationsiCloudiCloud Drive228 Sync folderQ DXP4800PLUS-B5FA@ Network|• CRMI• Orange• Red• Yellow• Green• Purple•) All lags..lohlDownloadsNameLoom.pkgAlfred copv.alfredoreterencesB KeychronAssist-1.0.2 (1).dmgA Keychron Assist-1.0.2.dmgmazanoke-images-yWJo.zioPhotos-3-001.zip→mage U.loge1 Orioninstaller.dmaimage.jpg- image (2).1pc• ПО-22221726037035-004-001_ORGES.pdf• %D0%9F%D0%9E-22221726037035-004-001_archive.zipПO-22221726037035-004-001_archive (1).zipD report(2) xmlAltred copy2.altredoreterences05012026_0000000026574472_ SWIFT_OB70501260015890.pdf27022026_0000000026574472_SWIFT_OB72702260049200.pdf= 03042026 [CREDIT_CARD] SWIFT [CREDIT_CARD].001B reporti) xm=pdt.odipdf-1.pdfD pdf-2.pdf-pdf-5.pd1= ndf-1 ndipdf-3.pdfKoválik Family Tree.gedbitwarden export 20251031122528.isonKoválik Family Tree.zip*macOS Storage_Cleanup.mdal favicon icofirst_aid_notes_complete.docxrenortl2).esvconfig.ymlIteration run Search HS.postman_collection.jsonm licence hettertouchtoolMariusHosting Config.json1ooks-891a6503-bbb7-4b2b-9c3.csv•AlfredwPmazanoko.imnaoc.YWIfана Ковалик.jpg•искане даниел Ковалик..pa• Фактура Март Даниел Ковалик.jpс• Фактура Април Даниел Ковалик.jpg• Dhotac 2.001Q SearchKind00,4 MDinstdlle..dckage55.9 MBAlfred...ferences10,1 MBDisk Image10,1 MBDisk ImageIL MBLiP archive6,6 MBZIP archive2,5 MB PDF Document2,5 MBJreo lmage2.2 MBDisk Image2,2 MB PDF Document2 MBJPEG image1,9 MBJPEG imaqe192 KBPDF Document140 KbZIP archive148 KВ148 KB122 KB111 KB94 KBZIP archivelZIP archiveXML documentAlfred...ferencesPDF Document92 KBPDr DocumentPDF Document91 KB91 KB30 KB29 KBXML documentPDF Document28 KBPDF Document28 KR28 KB27 KB14 KB11 KB6 KB6KBPDE DocumentDocumentJSONICSV DocumentZIP archiveMarkdo…..ument5KRWindo...n image4 KB3 KBword ..cumentCSV Document2 KBYAML document1 KBcSV Document928 byteshttlicence183 bytesZero butesJSONAlfred.. ferencesZero bytesFolde1,9 MB1,8 MB17 MB1,7 MBColdorJPEG imageJPEG ImageIPEG imadeJPEG imageColdo1 of 58 selected, 8.41 GB availabld• Inu 14 Mау 1/.42-23Date AddedIs Mdl ZUzo dl 19:4530 Jan 2026 at 12:3617 Mar 2026 at 20:2717 Mar 2026 at 20:26Z3 Aor 2020 al 13:0229 Jan 2026 at 15:2019 Dec 2025 at 10:1619 Dec 2025 at 12:238 Aor 2026 at 20:3519 Dec 2025 at 10:2919 Dec 2025 at 12:1819 Dec 2025 at 12:4026 Mar 2026 at 11:2410 May 2026 at 13:5326 Mar 2026 at 11:2426 Mar 2026 at 11:2426 Mar 2026 at 11:2310 May 2026 at 14:3730 Jan 2026 at 12:3713 Feb 2026 at 11:54Z3 Apr 2026 at 13.0823 Aor 2026 at 13:0810 May 2026 at 13:5410 May 2026 at 14:3710 May 2026 at 13:4910 May 2026 at 13:5010 May 2026 at 13:5110 Mav 2026 at 12:51110 May 2026 at 13:5019 Dec 2025 at 11:3431 Oct 2025 at 12:2525 Nov 2025 at 17:596 Mar 2026 at 11.2224 Anr 2026 at 16:5220 Oct 2025 at 11:0218 Mar 2026 at 15:29• Mav 2026 at 11:09129 Oct 2025 at 19:329 May 2026 at 10:0418 Mar 2026 at 11:5510 May 2026 at 13:5712 Jun 2025 at 19:0430 Jan 2026 at 12:3630 Jan 2026 at 12:3616 Oct 2025 aт 16:0123 Apr 2026 at 13:0223 Apr 2026 at 13:0223 Apr 2026 at 13:0222 Anr 2026 at 12:0223 Apr 2026 at 13:0229 Jan 2026 at 15:20...
|
45553
|
NULL
|
NULL
|
NULL
|
|
45557
|
1629
|
6
|
2026-05-14T14:42:30.670184+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769750670_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5813759127186664102
|
5533681059229808348
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45558
|
1630
|
5
|
2026-05-14T14:42:30.645136+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769750645_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.3899601,"top":0.7709497,"width":0.28789893,"height":0.22905028},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5813759127186664102
|
5533681059229808348
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45559
|
1630
|
6
|
2026-05-14T14:42:31.693222+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769751693_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.3899601,"top":0.7709497,"width":0.28789893,"height":0.22905028},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.28224733,"top":1.0,"width":0.024268618,"height":-0.04788506},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
45558
|
NULL
|
NULL
|
NULL
|
|
45560
|
1629
|
7
|
2026-05-14T14:42:31.312316+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769751312_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl19100% CFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vHandleHubspotRateLimitTest* :8• Thu 14 May 17:42:30QProjectvT DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivityTypes.phpT WriteCrmTrait.php:=custom.log> MetadataAccessorsHubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.phpT RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© DataClient.php© IntegrationApp/DecorateActivity.php© Activity.phpSalesforce/Service.phpT LogActivityTrait.php• ContactAccessor.php© Playbook.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpDealAccessor.phpPlainTextDecorateActivity.phpT ActivityPlaybookTrait.phpCrmHelperRepository.phpAccountController.php=.env.staging18© IntegrationAppAccessExceLeadAccessor.phpE.env© DetachActivityObject.phpRematchActivityOnCrmObjectDetach.php© MatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HandleHubspotRateLimit.php14T RemoteWriteAccessor.php37• SystemStateAccessor.php© HubspotPaginationService.phptrait RemoteWriteAccessorpublic function createMeeting(array SmeetingPayLoad = (I); arrayA 10T UserAccessor.php• АріConfigO DTO42434451public function updateDeal(string $dealId, array $dealPayload = [1): array{...}O Filters4 usagesv d Jobs52public function updateLead(string $leadId, array $leadPayload = []): array(...}© CrmEntitiesFullSyncJob.ph 59© DeleteRemoteTeamJob.ph 60public function updateMeeting(string SmeetingId, array $meetingPayload = [J): arrayT IntegrationAppService Trait 61© SubscribeForEventsJob.ph 62© TeamInitialSyncJob.php63SrequestPayload = array_merge(SmeetingPayload, ['meeting_id' => $meetingIdl);SrequestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl::UPDATE_MEETING, SrequestPayLoad);© UnsubscribeForEventsJob.64© UpdateProfileRelatedEntiti 65return $this->requestExecute->entity($requestBuilder);© ValidateTeamActiveConne66> C ProspectSearchStrategy67> D ServiceTraits3 usages© DataClient.php© DecorateActivity.php6875public function updateCall(string $callId, array $callPayload = []): array{...}© LocalSearch.php3 usages• LocalSearchinterface.php© RemoteSearch.php© Service.phpv • ListenersC ConvertLeadActivities.php7682838990public function getMeeting(string $meetingId): array{.public function getCall(string $callId): array{..;© Purnel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218-219.id = 33;220— 221—222— 223224id THEN '(own— 225|-226227228229230hubspot':231232233 V= 11512582;234W Windsurf Teams63:43UTF-8Ca 4 spaces...
|
NULL
|
-7074549755703053677
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRun PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpabl19100% CFV faVsco.jsv#12066 on JY-20725-handle-HS-search-rate-limit k vHandleHubspotRateLimitTest* :8• Thu 14 May 17:42:30QProjectvT DeleteCrmEntityTrait.phpDeleteAccountJob.phpImportActivityTypes.phpT WriteCrmTrait.php:=custom.log> MetadataAccessorsHubspot/DecorateActivity.phpIntegrationAppServiceTrait.phpIntegrationApp/Service.phpT RemoteWriteAccessor.php xT AccountAccessor.php• BaseAccessor.php© DataClient.php© IntegrationApp/DecorateActivity.php© Activity.phpSalesforce/Service.phpT LogActivityTrait.php• ContactAccessor.php© Playbook.php© Pipedrive/Service.phpClose/Service.phpCopper/Service.php© BullhornService.phpDealAccessor.phpPlainTextDecorateActivity.phpT ActivityPlaybookTrait.phpCrmHelperRepository.phpAccountController.php=.env.staging18© IntegrationAppAccessExceLeadAccessor.phpE.env© DetachActivityObject.phpRematchActivityOnCrmObjectDetach.php© MatchActivityCrmData.phpClient.phpT MeetingAccessor.phpRegisterEventsAccessor.pt© HandleHubspotRateLimit.php14T RemoteWriteAccessor.php37• SystemStateAccessor.php© HubspotPaginationService.phptrait RemoteWriteAccessorpublic function createMeeting(array SmeetingPayLoad = (I); arrayA 10T UserAccessor.php• АріConfigO DTO42434451public function updateDeal(string $dealId, array $dealPayload = [1): array{...}O Filters4 usagesv d Jobs52public function updateLead(string $leadId, array $leadPayload = []): array(...}© CrmEntitiesFullSyncJob.ph 59© DeleteRemoteTeamJob.ph 60public function updateMeeting(string SmeetingId, array $meetingPayload = [J): arrayT IntegrationAppService Trait 61© SubscribeForEventsJob.ph 62© TeamInitialSyncJob.php63SrequestPayload = array_merge(SmeetingPayload, ['meeting_id' => $meetingIdl);SrequestBuilder = $this->getRequestBuilder( resourceUrl: ActionUrl::UPDATE_MEETING, SrequestPayLoad);© UnsubscribeForEventsJob.64© UpdateProfileRelatedEntiti 65return $this->requestExecute->entity($requestBuilder);© ValidateTeamActiveConne66> C ProspectSearchStrategy67> D ServiceTraits3 usages© DataClient.php© DecorateActivity.php6875public function updateCall(string $callId, array $callPayload = []): array{...}© LocalSearch.php3 usages• LocalSearchinterface.php© RemoteSearch.php© Service.phpv • ListenersC ConvertLeadActivities.php7682838990public function getMeeting(string $meetingId): array{.public function getCall(string $callId): array{..;© Purnel onkunCache nhnWorkspace associated with branch 'JY-20725-handle-HS-search-rate-limit' has been restored // Rollback // Configure... (today 16:17)=laravel.logSF [jiminny@localhost]A HS_local [jiminny@localho:W4 console [QAI PROD] X4 console [PROD]A console (EU]DGo jiminny084143 ×4 л215•m_layout_id =2162,1661,66799,66217218-219.id = 33;220— 221—222— 223224id THEN '(own— 225|-226227228229230hubspot':231232233 V= 11512582;234W Windsurf Teams63:43UTF-8Ca 4 spaces...
|
45557
|
NULL
|
NULL
|
NULL
|
|
45561
|
1629
|
8
|
2026-05-14T14:42:32.695071+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769752695_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45563
|
1629
|
10
|
2026-05-14T14:42:36.815953+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769756815_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45567
|
1629
|
13
|
2026-05-14T14:42:45.938181+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769765938_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
45566
|
NULL
|
NULL
|
NULL
|
|
45568
|
1630
|
8
|
2026-05-14T14:43:08.027310+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769788027_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.3899601,"top":0.6089386,"width":0.28789893,"height":0.39106143},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.28224733,"top":1.0,"width":0.024268618,"height":-0.04788506},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
45564
|
NULL
|
NULL
|
NULL
|
|
45569
|
1629
|
14
|
2026-05-14T14:43:19.202990+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778769799202_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45644
|
1635
|
2
|
2026-05-14T15:17:15.789421+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778771835789_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.054166667,"top":0.027777778,"width":0.08055556,"height":0.035555556},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.13472222,"top":0.027777778,"width":0.25555557,"height":0.035555556},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.6326389,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.6645833,"top":0.027777778,"width":0.15902779,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.82361114,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.8472222,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.87083334,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.9291667,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9527778,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9763889,"top":0.027777778,"width":0.023611112,"height":0.035555556},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.79791665,"top":0.3122222,"width":0.02013889,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.8215278,"top":0.31,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.8368056,"top":0.31,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.85486114,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.87291664,"top":0.31,"width":0.018055556,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9138889,"top":0.31,"width":0.059027776,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"bounds":{"left":0.8645833,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.8854167,"top":0.34444445,"width":0.015277778,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9048611,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.92569447,"top":0.34444445,"width":0.016666668,"height":0.02111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9458333,"top":0.3422222,"width":0.015277778,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.9611111,"top":0.3422222,"width":0.014583333,"height":0.025555555},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.025,"top":0.06666667,"width":0.050694443,"height":0.034444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
45645
|
1636
|
1
|
2026-05-14T15:17:15.789418+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778771835789_m2.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.2962101,"top":1.0,"width":0.03856383,"height":-0.019952059},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.33477393,"top":1.0,"width":0.122340426,"height":-0.019952059},"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.5731383,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.5884308,"top":1.0,"width":0.076130316,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.66456115,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.67586434,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.6871675,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.7150931,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.72639626,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.73769945,"top":1.0,"width":0.011303191,"height":-0.019952059},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"bounds":{"left":0.3899601,"top":0.6089386,"width":0.28789893,"height":0.39106143},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.28224733,"top":1.0,"width":0.024268618,"height":-0.04788506},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4915557953454808779
|
5533679959718179548
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
45642
|
NULL
|
NULL
|
NULL
|
|
45646
|
1635
|
3
|
2026-05-14T15:17:25.587276+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-14/1778 /Users/lukas/.screenpipe/data/data/2026-05-14/1778771845587_m1.jpg...
|
PhpStorm
|
faVsco.js – RemoteWriteAccessor.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12066 on JY-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Pull request #12066 exists for current branch JY-20725-handle-HS-search-rate-limit, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\IntegrationApp\\Accessors;\n\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\ActionUrl;\n\n/**\n * Helper trait to group remote manipulation - create & update methods\n *\n * @TODO: Implement all methods\n */\ntrait RemoteWriteAccessor\n{\n public function createTask(array $taskPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createNote(array $notePayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createCall(array $callPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function createMeeting(array $meetingPayload = []): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateDeal(string $dealId, array $dealPayload = []): array\n {\n $requestPayload = array_merge($dealPayload, ['id' => $dealId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateLead(string $leadId, array $leadPayload = []): array\n {\n $requestPayload = array_merge($leadPayload, ['id' => $leadId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateMeeting(string $meetingId, array $meetingPayload = []): array\n {\n $requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function updateCall(string $callId, array $callPayload = []): array\n {\n $requestPayload = array_merge($callPayload, ['call_id' => $callId]);\n $requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getMeeting(string $meetingId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n\n public function getCall(string $callId): array\n {\n $requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);\n\n return $this->requestExecute->entity($requestBuilder);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","depth":4,"on_screen":true,"value":"SELECT\n# DISTINCT\nopp.id as opp_id, opp.uuid, opp.name,\n# COUNT(dr.id) AS deal_risk_count,\n\n# dr.id,\n# cfd.value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\n# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id\n# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id\n\nLEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 1\nAND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\nGROUP BY opp.id, cfd.value\nORDER BY\n# cfd.value\n CAST(cfd.value AS UNSIGNED)\n# owner_name\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1\n# AND gdrt.is_enabled = 1)\nDESC\nLIMIT 25\n# OFFSET 0\n;\n\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\nselect * from crm_layout_entities where crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4584045;\nSELECT * FROM crm_field_data WHERE object_id = 4584045;\n\nSELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'\n\nSELECT\n opp.id as opportunity_id,\n opp.name,\n COUNT(dr.id) as risk_count\nFROM opportunities opp\nLEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id\nWHERE opp.id IN (\n 6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788\n)\nGROUP BY opp.id;\n\nSELECT COUNT(dr.id)\n FROM deal_risks dr\n JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n WHERE dr.opportunity_id = 5563344\n# AND gdrt.group_id = usr.group_id\n\n\n\nEXPLAIN SELECT\n opp.id as opp_id, opp.uuid, opp.name,\n\ncfd.value,\ncfv.sequence,\ncfv.value,\n# MAX(cfd.value) AS max_cfd_value,\nusr.name AS owner_name,\nopp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,\nusr.uuid as owner_uuid,\nusr.photo_path as owner_photo,\nusr.id AS owner_id,\njt.name as owner_job,\nopp.stage_id, opp.stage_updated_at,\nacc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,\nrt.business_process_id AS pipeline_id\nFROM opportunities opp\n\nLEFT JOIN record_types rt ON opp.record_type_id = rt.id\nLEFT JOIN users usr ON opp.user_id = usr.id\nLEFT JOIN accounts acc ON opp.account_id = acc.id\nLEFT JOIN job_titles jt ON usr.job_title_id = jt.id\n\nLEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id\n FROM crm_field_data sub_cfd\n WHERE sub_cfd.object_id = opp.id\n AND sub_cfd.crm_field_id = 66810\n ORDER BY sub_cfd.updated_at DESC\n LIMIT 1)\n\nLEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value\n\nWHERE opp.user_id IS NOT NULL\nAND opp.deleted_at IS NULL\nAND opp.is_closed = 0\n# AND opp.is_closed = 1\n# AND opp.is_won = 0\nAND opp.close_date >= '2024-01-01 00:00:00'\nAND opp.close_date <= '2024-12-31 23:59:59'\nAND usr.team_id = 1\n\n# and opp.id = 4823179\n\n# GROUP BY opp.id\nORDER BY\n cfv.sequence DESC,\n# opp.name\n# owner_name\n cfd.value\n# CAST(cfd.value AS UNSIGNED)\n# CAST(MAX(cfd.value) AS UNSIGNED)\n# (SELECT COUNT(dr.id)\n# FROM deal_risks dr\n# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id\n# WHERE dr.opportunity_id = opp.id\n# AND dr.is_active = 1 AND gdrt.is_enabled = 1)\nDESC\n# LIMIT 75, 25\n;\n\n\n\nSELECT * FROM crm_field_values WHERE crm_field_id = 66810;\n\nSELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at\nFROM crm_fields f\nINNER JOIN crm_field_data fd ON fd.crm_field_id = f.id\n WHERE (f.crm_configuration_id = 1)\n AND (f.object_type = 'opportunity')\n# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))\n AND (fd.object_id IN (4158460))\n AND (f.crm_provider_id IN ('ForecastCategoryName'))\n ORDER BY fd.object_id ASC, fd.updated_at DESC;\n\nselect * from crm_layouts where crm_configuration_id = 1;\nselect cf.* from crm_fields cf\njoin crm_layout_entities cle on cf.id = cle.crm_field_id\nwhere crm_layout_id = 1493;\n\nSELECT * FROM opportunities WHERE id = 4158460;\nSELECT * FROM crm_field_data WHERE object_id = 4158460;\n\nselect * from users where team_id = 1;\nSELECT * FROM users WHERE id = 7160;\nselect * from role_user where user_id = 3248;\n\nselect * from crm_field_values where crm_field_id = 66824;\n\nSELECT * FROM users WHERE id = 23470;\nselect * from crm_configurations;\n\n# ******************************************\nselect * from teams where id = 1038; # 23521, 966\nselect * from users where team_id = 1038;\nselect * from crm_configurations where id = 966;\nSELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762\nSELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764\nSELECT * FROM participants WHERE activity_id = 54965764;\n\nSELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075\nSELECT * FROM participants WHERE activity_id = 54964075;\nselect f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id\n where tf.team_id = 1038;\n\n\n# ****************************************** PD *************************\nselect * from teams where id = 1029;\nSELECT * FROM crm_configurations WHERE id = 957;\nSELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421\n\n# ****************************************** Close *************************\nselect * from teams where id = 1031;\nSELECT * FROM crm_configurations WHERE id = 959;\nSELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517\n\n\nSELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433\n\nSELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009\n\n# ****************************************** SF *************************\nSELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;\n\nselect * from roles;\nselect * from permissions;\nselect * from permission_role where permission_id = 136;\n\nselect * from migrations order by id desc;\n\nselect * from teams where id IN (1, 1037);\nselect * from crm_layouts where crm_configuration_id = 1;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;\nSELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);\n\nselect * from features;\nselect * from team_features where feature_id = 33;\nselect * from opportunities;\n\nselect * from teams;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 1052 and sa.provider = 'hubspot';\n\nSELECT * FROM accounts where id = 11512582;\nselect * from activities where account_id = 11512582;","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4449490517767409907
|
5533681059229808348
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12066 on JY-20725-handle Project: faVsco.js, menu
#12066 on JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\IntegrationApp\Accessors;
use Jiminny\Services\Crm\IntegrationApp\Api\ActionUrl;
/**
* Helper trait to group remote manipulation - create & update methods
*
* @TODO: Implement all methods
*/
trait RemoteWriteAccessor
{
public function createTask(array $taskPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_TASK, $taskPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createNote(array $notePayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_NOTE, $notePayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createCall(array $callPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_CALL, $callPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function createMeeting(array $meetingPayload = []): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::CREATE_MEETING, $meetingPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateDeal(string $dealId, array $dealPayload = []): array
{
$requestPayload = array_merge($dealPayload, ['id' => $dealId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_DEAL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateLead(string $leadId, array $leadPayload = []): array
{
$requestPayload = array_merge($leadPayload, ['id' => $leadId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_LEAD, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateMeeting(string $meetingId, array $meetingPayload = []): array
{
$requestPayload = array_merge($meetingPayload, ['meeting_id' => $meetingId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_MEETING, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function updateCall(string $callId, array $callPayload = []): array
{
$requestPayload = array_merge($callPayload, ['call_id' => $callId]);
$requestBuilder = $this->getRequestBuilder(ActionUrl::UPDATE_CALL, $requestPayload);
return $this->requestExecute->entity($requestBuilder);
}
public function getMeeting(string $meetingId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_MEETING, ['id' => $meetingId]);
return $this->requestExecute->entity($requestBuilder);
}
public function getCall(string $callId): array
{
$requestBuilder = $this->getRequestBuilder(ActionUrl::GET_CALL, ['id' => $callId]);
return $this->requestExecute->entity($requestBuilder);
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Sync Changes
Hide This Notification
Code changed:
Hide
8
1
3
4
Previous Highlighted Error
Next Highlighted Error
SELECT
# DISTINCT
opp.id as opp_id, opp.uuid, opp.name,
# COUNT(dr.id) AS deal_risk_count,
# dr.id,
# cfd.value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
# LEFT JOIN group_deal_risk_types gdrt ON gdrt.group_id = usr.group_id
# LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id AND dr.group_deal_risk_type_id = gdrt.id
LEFT JOIN crm_field_data cfd ON (cfd.object_id = opp.id and cfd.crm_field_id = 66814)
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 1
AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
GROUP BY opp.id, cfd.value
ORDER BY
# cfd.value
CAST(cfd.value AS UNSIGNED)
# owner_name
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1
# AND gdrt.is_enabled = 1)
DESC
LIMIT 25
# OFFSET 0
;
select * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';
select * from crm_layout_entities where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4584045;
SELECT * FROM crm_field_data WHERE object_id = 4584045;
SELECT * FROM opportunities where team_id = 1 and crm_provider_id = '0061K00000lfb9IQAQ'
SELECT
opp.id as opportunity_id,
opp.name,
COUNT(dr.id) as risk_count
FROM opportunities opp
LEFT JOIN deal_risks dr ON dr.opportunity_id = opp.id
WHERE opp.id IN (
6069574,8900938,9507638,9524799,9660490,9662824,9705675,9749758,4158460,4391812,6450439,4448422,5118945,5590675,4584045,7228149,9002408,9165534,9446720,9641778,9665149,9703344,9709280,5747948,4158491,6182565,6263970,5798120,5111315,4536978,6062352,6548383,6072095,6548225,4480986,5011422,6548381,8760540,8917554,9509986,9514392,9569009,9569011,9578490,9713604,5784397,7276612,7288405,8994421,9118219,9608148,9818911,4510535,6479693,5958049,6271674,6550448,4158331,4158483,6126571,6171615,6540943,4897466,5190896,5796182,5932762,8572433,8723698,8892697,9711001,9789264,4549188,6100831,6170064,6260799,6263653,6449936,6530871,6538978,7777651,8059269,8319918,8787049,8901150,9263153,9453207,9514738,9696700,9791062,5752018,6421452,7439134,7878923,9354763,9369285,9514396,9582506,9889949,9890216,4094311,4158495,4158496,6098128,5585661,3872564,6442149,5891604,6164746,6199593,6583474,6519684,9018490,9809006,4496897,5041324,5829430,6198319,6253504,6555763,7242914,7931055,8024125,8797814,8058559,8673347,8892695,8994420,9616219,9714970,9722004,9809439,9818918,6523177,8134147,9002915,9711422,9892713,9901719,9954210,9978435,5800810,6243518,6416114,6222251,6411974,6512456,5791953,6545606,9914780,5805540,6238986,6463838,6547680,9767049,9809437,9810885,9890855,6673493,9902036,4335521,6379871,6503799,6546077,8018765,9907556,9958433,9905855,9916179,9946741,9957877,5563344,6271838,6450815,7641128,7762567,7780592,8684810,8685786,8685787,8685788
)
GROUP BY opp.id;
SELECT COUNT(dr.id)
FROM deal_risks dr
JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
WHERE dr.opportunity_id = 5563344
# AND gdrt.group_id = usr.group_id
EXPLAIN SELECT
opp.id as opp_id, opp.uuid, opp.name,
cfd.value,
cfv.sequence,
cfv.value,
# MAX(cfd.value) AS max_cfd_value,
usr.name AS owner_name,
opp.value, opp.currency_code, opp.close_date, opp.remotely_created_at, opp.is_closed, opp.is_won,
usr.uuid as owner_uuid,
usr.photo_path as owner_photo,
usr.id AS owner_id,
jt.name as owner_job,
opp.stage_id, opp.stage_updated_at,
acc.name AS acc_name, opp.stage_updated_at, acc.crm_provider_id AS acc_provider_id, opp.crm_provider_id AS opp_provider_id,
rt.business_process_id AS pipeline_id
FROM opportunities opp
LEFT JOIN record_types rt ON opp.record_type_id = rt.id
LEFT JOIN users usr ON opp.user_id = usr.id
LEFT JOIN accounts acc ON opp.account_id = acc.id
LEFT JOIN job_titles jt ON usr.job_title_id = jt.id
LEFT JOIN crm_field_data cfd ON cfd.id = (SELECT sub_cfd.id
FROM crm_field_data sub_cfd
WHERE sub_cfd.object_id = opp.id
AND sub_cfd.crm_field_id = 66810
ORDER BY sub_cfd.updated_at DESC
LIMIT 1)
LEFT JOIN crm_field_values cfv ON cfv.crm_field_id = 66810 AND cfv.value = cfd.value
WHERE opp.user_id IS NOT NULL
AND opp.deleted_at IS NULL
AND opp.is_closed = 0
# AND opp.is_closed = 1
# AND opp.is_won = 0
AND opp.close_date >= '2024-01-01 00:00:00'
AND opp.close_date <= '2024-12-31 23:59:59'
AND usr.team_id = 1
# and opp.id = 4823179
# GROUP BY opp.id
ORDER BY
cfv.sequence DESC,
# opp.name
# owner_name
cfd.value
# CAST(cfd.value AS UNSIGNED)
# CAST(MAX(cfd.value) AS UNSIGNED)
# (SELECT COUNT(dr.id)
# FROM deal_risks dr
# JOIN group_deal_risk_types gdrt ON dr.group_deal_risk_type_id = gdrt.id
# WHERE dr.opportunity_id = opp.id
# AND dr.is_active = 1 AND gdrt.is_enabled = 1)
DESC
# LIMIT 75, 25
;
SELECT * FROM crm_field_values WHERE crm_field_id = 66810;
SELECT f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value, fd.updated_at, fd.id, fd.created_at
FROM crm_fields f
INNER JOIN crm_field_data fd ON fd.crm_field_id = f.id
WHERE (f.crm_configuration_id = 1)
AND (f.object_type = 'opportunity')
# AND (fd.object_id IN (4158331,4158483,4158495,4158496,6069574,6263970,6171615,6540943,6545606,5829430,6198319,6263653,6548381,7242914,8797814,7228149,7439134,7878923,8134147,9002915,9118219,9165534,9354763,9369285,9446720))
AND (fd.object_id IN (4158460))
AND (f.crm_provider_id IN ('ForecastCategoryName'))
ORDER BY fd.object_id ASC, fd.updated_at DESC;
select * from crm_layouts where crm_configuration_id = 1;
select cf.* from crm_fields cf
join crm_layout_entities cle on cf.id = cle.crm_field_id
where crm_layout_id = 1493;
SELECT * FROM opportunities WHERE id = 4158460;
SELECT * FROM crm_field_data WHERE object_id = 4158460;
select * from users where team_id = 1;
SELECT * FROM users WHERE id = 7160;
select * from role_user where user_id = 3248;
select * from crm_field_values where crm_field_id = 66824;
SELECT * FROM users WHERE id = 23470;
select * from crm_configurations;
# [PASSWORD_DOTS]
select * from teams where id = 1038; # 23521, 966
select * from users where team_id = 1038;
select * from crm_configurations where id = 966;
SELECT * FROM activities WHERE uuid_to_bin('e8dc7c34-31f6-4430-bd81-2d9d8f00dd07') = uuid; # 54965762
SELECT * FROM activities WHERE uuid_to_bin('4b5727c0-69d1-428f-b8d9-b649055166e2') = uuid; # 54965764
SELECT * FROM participants WHERE activity_id = 54965764;
SELECT id, uuid, title, recording_state FROM activities WHERE uuid_to_bin('355f105d-5606-4379-b0c5-d91daf59f4ce') = uuid; # 54964075
SELECT * FROM participants WHERE activity_id = 54964075;
select f.id, slug, title, tf.team_id from team_features tf JOIN features f on tf.feature_id = f.id
where tf.team_id = 1038;
# [PASSWORD_DOTS] PD [PASSWORD_DOTS]
select * from teams where id = 1029;
SELECT * FROM crm_configurations WHERE id = 957;
SELECT * FROM activities WHERE uuid_to_bin('581a33cb-4343-44bd-ac0c-4a5cee71c5ec') = uuid; # 54963423
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('8b6bb2f7-e7a7-4aec-8806-fbfea7093ccd') = uuid; # 54963421
# [PASSWORD_DOTS] Close [PASSWORD_DOTS]
select * from teams where id = 1031;
SELECT * FROM crm_configurations WHERE id = 959;
SELECT * FROM activities WHERE uuid_to_bin('59c517e0-96c9-4dad-bfeb-b7bef72f8725') = uuid; # 54963517
SELECT * FROM activities WHERE uuid_to_bin('07238011-25fa-418e-838b-fb21e82b9ea2') = uuid; # 54963433
SELECT * FROM activities WHERE uuid_to_bin('d68311e3-ac34-49bd-bf04-88323a7e5352') = uuid; # 54966009
# [PASSWORD_DOTS] SF [PASSWORD_DOTS]
SELECT * FROM activities WHERE uuid_to_bin('2bd4cfa3-4eb5-4c77-84a7-9ed46a21c988') = uuid;
select * from roles;
select * from permissions;
select * from permission_role where permission_id = 136;
select * from migrations order by id desc;
select * from teams where id IN (1, 1037);
select * from crm_layouts where crm_configuration_id = 1;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1493;
SELECT * FROM crm_fields WHERE id IN (1652,1661,66799,66814,66821,66836,66843,66846,66864,84752,182306,323580,380378);
select * from features;
select * from team_features where feature_id = 33;
select * from opportunities;
select * from teams;
SELECT
CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,
u.email,
sa.*,
t.owner_id FROM social_accounts sa
JOIN users u on u.id = sa.sociable_id
JOIN teams t on t.id = u.team_id
WHERE u.team_id = 1052 and sa.provider = 'hubspot';
SELECT * FROM accounts where id = 11512582;
select * from activities where account_id = 11512582;
Project
Project
New File or Directory…...
|
45644
|
NULL
|
NULL
|
NULL
|