src/App/EventSubscriber/App/ExtendedApplicationEventSubscriber.php line 694

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\App;
  3. use App\Entity\AutomatedEmailNotificationDefinition\AutomatedEmailNotificationDefinitionTextContent;
  4. use App\Entity\ExternalPartner\IntegratedExternalPartnerCustomer;
  5. use App\Entity\PlatformEvent;
  6. use App\Entity\PlatformSite;
  7. use App\Event\ExtendedApplicationCreatedEvent;
  8. use App\Event\ExtendedApplicationReadByJoboffererEvent;
  9. use App\Service\AutomatedEmailNotificationDefinitionService;
  10. use App\Service\ConversationMessageService;
  11. use App\Service\ConversionEventService;
  12. use App\Service\ExternalFeedsService;
  13. use App\Service\ExternalPartner\IntegratedExternalPartnerCustomerService;
  14. use App\Service\MailService;
  15. use App\Service\OnetimeLoginTokenService;
  16. use App\Service\PlatformEventService;
  17. use App\Service\ProfileService;
  18. use App\Service\RouterHelperService;
  19. use App\SymfonyMessage\AskNewUserForGoogleRatingSymfonyMessage;
  20. use App\SymfonyMessage\UpdateCachedUnreadConversationMessagesCountSymfonyMessage;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use Exception;
  23. use JanusHercules\DatawarehouseIntegration\Domain\Entity\BusinessEvent;
  24. use JanusHercules\DatawarehouseIntegration\Domain\Entity\ExternalPartnerEvent;
  25. use JanusHercules\DatawarehouseIntegration\Domain\Service\BusinessEventDomainService;
  26. use JanusHercules\DatawarehouseIntegration\Domain\Service\ExternalPartnerEventDomainService;
  27. use Psr\Log\LoggerInterface;
  28. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  29. use Symfony\Component\Messenger\MessageBusInterface;
  30. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  31. use Throwable;
  32. use Twig\Environment;
  33. readonly class ExtendedApplicationEventSubscriber implements EventSubscriberInterface
  34. {
  35. public function __construct(
  36. private ConversionEventService $conversionEventService,
  37. private ExternalPartnerEventDomainService $externalPartnerEventDomainService,
  38. private BusinessEventDomainService $businessEventDomainService,
  39. private MailService $mailService,
  40. private Environment $twigEnvironment,
  41. private OnetimeLoginTokenService $onetimeLoginTokenService,
  42. private RouterHelperService $routerHelperService,
  43. private IntegratedExternalPartnerCustomerService $integratedExternalPartnerCustomerService,
  44. private EntityManagerInterface $entityManager,
  45. private ProfileService $profileService,
  46. private MessageBusInterface $messageBus,
  47. private PlatformEventService $platformEventService,
  48. private LoggerInterface $logger
  49. ) {
  50. }
  51. public static function getSubscribedEvents(): array
  52. {
  53. return [
  54. ExtendedApplicationCreatedEvent::class => 'onExtendedApplicationCreated',
  55. ExtendedApplicationReadByJoboffererEvent::class => 'onExtendedApplicationReadByJobofferer'
  56. ];
  57. }
  58. /** @throws Exception */
  59. public function onExtendedApplicationCreated(ExtendedApplicationCreatedEvent $event): void
  60. {
  61. try {
  62. /* @see ConversationMessageService::getUnreadMessagesCount — unread extended applications count as unread messages, too */
  63. $joboffererUser = $event->getExtendedApplication()
  64. ->getRecurrentJob()
  65. ?->getJoboffererProfile()
  66. ->getUser();
  67. if (!is_null($joboffererUser)) {
  68. $this->messageBus->dispatch(
  69. new UpdateCachedUnreadConversationMessagesCountSymfonyMessage(
  70. $joboffererUser
  71. )
  72. );
  73. }
  74. $userHasBeenNewlyCreatedByThisExtendedApplication = $event->userHasBeenNewlyCreatedByThisExtendedApplication();
  75. // If as user has been newly created by this extended application,
  76. // we don't want to track the conversion goals here because they are
  77. // already tracked in the UserEventSubscriber.
  78. if (!$userHasBeenNewlyCreatedByThisExtendedApplication) {
  79. foreach ([ConversionEventService::CAMPAIGN_ID_JOBLIFT,
  80. ConversionEventService::CAMPAIGN_ID_TALENTCOM,
  81. ConversionEventService::CAMPAIGN_ID_STELLENONLINE
  82. ] as $campaignId
  83. ) {
  84. foreach ([0, 1, 2, 3, 4, 5, 6, 12] as $subcampaignId) {
  85. $this->conversionEventService->handleConversionGoalReached(
  86. $campaignId,
  87. $subcampaignId,
  88. $event->getRequest(),
  89. $event->getUser(),
  90. $event->getExtendedApplication()->getRecurrentJob()
  91. );
  92. }
  93. }
  94. foreach ([0, 1, 2, 7, 8, 9, 10, 11, 12, 13] as $subcampaignId) {
  95. $this->conversionEventService->handleConversionGoalReached(
  96. ConversionEventService::CAMPAIGN_ID_MEINESTADT,
  97. $subcampaignId,
  98. $event->getRequest(),
  99. $event->getUser(),
  100. $event->getExtendedApplication()->getRecurrentJob()
  101. );
  102. }
  103. foreach ([0, 1, 2, 3, 4, 5] as $subcampaignId) {
  104. $this->conversionEventService->handleConversionGoalReached(
  105. ConversionEventService::CAMPAIGN_ID_JOBIJOBA,
  106. $subcampaignId,
  107. $event->getRequest(),
  108. $event->getUser(),
  109. $event->getExtendedApplication()->getRecurrentJob()
  110. );
  111. }
  112. foreach ([0, 1, 2, 3, 4, 5, 6] as $subcampaignId) {
  113. $this->conversionEventService->handleConversionGoalReached(
  114. ConversionEventService::CAMPAIGN_ID_WHATJOBS,
  115. $subcampaignId,
  116. $event->getRequest(),
  117. $event->getUser(),
  118. $event->getExtendedApplication()->getRecurrentJob()
  119. );
  120. }
  121. foreach ([0, 1, 2, 3] as $subcampaignId) {
  122. $this->conversionEventService->handleConversionGoalReached(
  123. ConversionEventService::CAMPAIGN_ID_JOOBLE,
  124. $subcampaignId,
  125. $event->getRequest(),
  126. $event->getUser(),
  127. $event->getExtendedApplication()->getRecurrentJob()
  128. );
  129. }
  130. foreach ([0, 1] as $subcampaignId) {
  131. $this->conversionEventService->handleConversionGoalReached(
  132. ConversionEventService::CAMPAIGN_ID_PERSOMATCH_FEED,
  133. $subcampaignId,
  134. $event->getRequest(),
  135. $event->getUser(),
  136. $event->getExtendedApplication()->getRecurrentJob()
  137. );
  138. }
  139. $this->conversionEventService->handleConversionGoalReached(
  140. ConversionEventService::CAMPAIGN_ID_LINKED_IN,
  141. 0,
  142. $event->getRequest(),
  143. $event->getUser(),
  144. $event->getExtendedApplication()->getRecurrentJob()
  145. );
  146. // subcampaign id 3 currently doesn't get tracked on extended application creation for Stellenonline
  147. if (!is_null($recurrentJob = $event->getExtendedApplication()->getRecurrentJob())
  148. && $recurrentJob->belongsToIntegratedExternalPartnerCustomer()
  149. && !is_null($customer = $recurrentJob->getIntegratedExternalPartnerCustomer())
  150. && $customer->getInternalId() === IntegratedExternalPartnerCustomer::INTERNAL_ID_DEUTSCHE_BAHN_AG
  151. ) {
  152. $this->conversionEventService->handleConversionGoalReached(
  153. ConversionEventService::CAMPAIGN_ID_TALENTCOM,
  154. 4,
  155. $event->getRequest(),
  156. $event->getUser(),
  157. $event->getExtendedApplication()->getRecurrentJob()
  158. );
  159. $this->conversionEventService->handleConversionGoalReached(
  160. ConversionEventService::CAMPAIGN_ID_STELLENONLINE,
  161. 4,
  162. $event->getRequest(),
  163. $event->getUser(),
  164. $event->getExtendedApplication()->getRecurrentJob()
  165. );
  166. $this->conversionEventService->handleConversionGoalReached(
  167. ConversionEventService::CAMPAIGN_ID_JOBLIFT,
  168. 4,
  169. $event->getRequest(),
  170. $event->getUser(),
  171. $event->getExtendedApplication()->getRecurrentJob()
  172. );
  173. } elseif (!is_null($recurrentJob = $event->getExtendedApplication()->getRecurrentJob())
  174. && $recurrentJob->belongsToIntegratedExternalPartnerCustomer()
  175. && !is_null($customer = $recurrentJob->getIntegratedExternalPartnerCustomer())
  176. && $customer->getInternalId() === IntegratedExternalPartnerCustomer::INTERNAL_ID_WISAG_CONCLUDIS_API
  177. ) {
  178. $this->conversionEventService->handleConversionGoalReached(
  179. ConversionEventService::CAMPAIGN_ID_STELLENONLINE,
  180. 5,
  181. $event->getRequest(),
  182. $event->getUser(),
  183. $event->getExtendedApplication()->getRecurrentJob()
  184. );
  185. $this->conversionEventService->handleConversionGoalReached(
  186. ConversionEventService::CAMPAIGN_ID_JOBLIFT,
  187. 5,
  188. $event->getRequest(),
  189. $event->getUser(),
  190. $event->getExtendedApplication()->getRecurrentJob()
  191. );
  192. } elseif (!is_null($recurrentJob = $event->getExtendedApplication()->getRecurrentJob())
  193. && $recurrentJob->belongsToIntegratedExternalPartnerCustomer()
  194. && !is_null($customer = $recurrentJob->getIntegratedExternalPartnerCustomer())
  195. && $customer->getInternalId() === IntegratedExternalPartnerCustomer::INTERNAL_ID_MEINESTADT_DE
  196. ) {
  197. $this->conversionEventService->handleConversionGoalReached(
  198. ConversionEventService::CAMPAIGN_ID_TALENTCOM,
  199. 6,
  200. $event->getRequest(),
  201. $event->getUser(),
  202. $event->getExtendedApplication()->getRecurrentJob()
  203. );
  204. $this->conversionEventService->handleConversionGoalReached(
  205. ConversionEventService::CAMPAIGN_ID_STELLENONLINE,
  206. 6,
  207. $event->getRequest(),
  208. $event->getUser(),
  209. $event->getExtendedApplication()->getRecurrentJob()
  210. );
  211. }
  212. foreach ([0, 1, 2] as $subcampaignId) {
  213. $this->conversionEventService->handleConversionGoalReached(
  214. ConversionEventService::CAMPAIGN_ID_CRITEO,
  215. $subcampaignId,
  216. $event->getRequest(),
  217. $event->getUser(),
  218. $event->getExtendedApplication()->getRecurrentJob()
  219. );
  220. }
  221. foreach (ExternalFeedsService::EBAY_SUBCAMPAIGN_VARIANTS as $subcampaignId) {
  222. $this->conversionEventService->handleConversionGoalReached(
  223. ConversionEventService::CAMPAIGN_ID_EBAY,
  224. $subcampaignId,
  225. $event->getRequest(),
  226. $event->getUser(),
  227. $event->getExtendedApplication()->getRecurrentJob()
  228. );
  229. }
  230. foreach (range(0, 1000) as $subcampaignId) {
  231. $this->conversionEventService->handleConversionGoalReached(
  232. ConversionEventService::CAMPAIGN_ID_FACEBOOK,
  233. $subcampaignId,
  234. $event->getRequest(),
  235. $event->getUser(),
  236. $event->getExtendedApplication()->getRecurrentJob()
  237. );
  238. }
  239. $this->conversionEventService->handleConversionGoalReached(
  240. ConversionEventService::CAMPAIGN_ID_INSTAGRAM,
  241. 0,
  242. $event->getRequest(),
  243. $event->getUser(),
  244. $event->getExtendedApplication()->getRecurrentJob()
  245. );
  246. $this->conversionEventService->handleConversionGoalReached(
  247. ConversionEventService::CAMPAIGN_ID_EASY_LEBENSLAUF,
  248. 0,
  249. $event->getRequest(),
  250. $event->getUser(),
  251. $event->getExtendedApplication()->getRecurrentJob()
  252. );
  253. $this->conversionEventService->handleConversionGoalReached(
  254. ConversionEventService::CAMPAIGN_ID_EASY_LEBENSLAUF,
  255. 1,
  256. $event->getRequest(),
  257. $event->getUser(),
  258. $event->getExtendedApplication()->getRecurrentJob()
  259. );
  260. foreach (range(0, 31) as $subcampaignId) {
  261. $this->conversionEventService->handleConversionGoalReached(
  262. ConversionEventService::CAMPAIGN_ID_LANDINGPAGES,
  263. $subcampaignId,
  264. $event->getRequest(),
  265. $event->getUser(),
  266. $event->getExtendedApplication()->getRecurrentJob()
  267. );
  268. }
  269. foreach ([0, 1, 2, 3] as $subcampaignId) {
  270. $this->conversionEventService->handleConversionGoalReached(
  271. ConversionEventService::CAMPAIGN_ID_BING_LANDINGPAGES,
  272. $subcampaignId,
  273. $event->getRequest(),
  274. $event->getUser(),
  275. $event->getExtendedApplication()->getRecurrentJob()
  276. );
  277. }
  278. $this->conversionEventService->handleConversionGoalReached(
  279. ConversionEventService::CAMPAIGN_ID_JOBWARE,
  280. 0,
  281. $event->getRequest(),
  282. $event->getUser(),
  283. $event->getExtendedApplication()->getRecurrentJob()
  284. );
  285. $this->conversionEventService->handleConversionGoalReached(
  286. ConversionEventService::CAMPAIGN_ID_AGENTUR_FUER_ARBEIT,
  287. 0,
  288. $event->getRequest(),
  289. $event->getUser(),
  290. $event->getExtendedApplication()->getRecurrentJob()
  291. );
  292. $this->conversionEventService->handleConversionGoalReached(
  293. ConversionEventService::CAMPAIGN_ID_SIMILAR_JOBS,
  294. 0,
  295. $event->getRequest(),
  296. $event->getUser(),
  297. $event->getExtendedApplication()->getRecurrentJob()
  298. );
  299. $this->conversionEventService->handleConversionGoalReached(
  300. ConversionEventService::CAMPAIGN_ID_GOOGLE_FOR_JOBS,
  301. 0,
  302. $event->getRequest(),
  303. $event->getUser(),
  304. $event->getExtendedApplication()->getRecurrentJob()
  305. );
  306. foreach ([0, 1] as $subcampaignId) {
  307. $this->conversionEventService->handleConversionGoalReached(
  308. ConversionEventService::CAMPAIGN_ID_GMX,
  309. $subcampaignId,
  310. $event->getRequest(),
  311. $event->getUser(),
  312. $event->getExtendedApplication()->getRecurrentJob()
  313. );
  314. }
  315. $this->conversionEventService->handleConversionGoalReached(
  316. ConversionEventService::CAMPAIGN_ID_WHATSAPP_MESSAGE_ABOUT_UNREAD_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR_MESSAGE,
  317. 0,
  318. $event->getRequest(),
  319. $event->getUser(),
  320. $event->getExtendedApplication()->getRecurrentJob(),
  321. null,
  322. json_encode(['goalReachedBy' => 'extendedApplication'])
  323. );
  324. $this->conversionEventService->handleConversionGoalReached(
  325. ConversionEventService::CAMPAIGN_ID_WHATSAPP_MESSAGE_ABOUT_UNREAD_LEAD_CONVERSION_RADAR_MESSAGE,
  326. 0,
  327. $event->getRequest(),
  328. $event->getUser(),
  329. $event->getExtendedApplication()->getRecurrentJob(),
  330. null,
  331. json_encode(['goalReachedBy' => 'extendedApplication'])
  332. );
  333. $this->conversionEventService->handleConversionGoalReached(
  334. ConversionEventService::CAMPAIGN_ID_WHATSAPP_MESSAGE_ABOUT_UNREAD_LEAD_CONVERSION_RADAR_MESSAGE,
  335. 1,
  336. $event->getRequest(),
  337. $event->getUser(),
  338. $event->getExtendedApplication()->getRecurrentJob(),
  339. null,
  340. json_encode(['goalReachedBy' => 'extendedApplication'])
  341. );
  342. foreach ([0, 1, 2] as $subcampaignId) {
  343. $this->conversionEventService->handleConversionGoalReached(
  344. ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_RECURRENT_JOBS_SEARCH,
  345. $subcampaignId,
  346. $event->getRequest(),
  347. $event->getUser(),
  348. $event->getExtendedApplication()->getRecurrentJob()
  349. );
  350. }
  351. foreach ([0, 1, 2] as $subcampaignId) {
  352. $this->conversionEventService->handleConversionGoalReached(
  353. ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_RECURRENT_JOBS_SEARCH_ALL_JOBS,
  354. $subcampaignId,
  355. $event->getRequest(),
  356. $event->getUser(),
  357. $event->getExtendedApplication()->getRecurrentJob()
  358. );
  359. }
  360. foreach ([0, 1] as $subcampaignId) {
  361. $this->conversionEventService->handleConversionGoalReached(
  362. ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_AUTOMATED_CONVERSATION_MESSAGES_MAILING,
  363. $subcampaignId,
  364. $event->getRequest(),
  365. $event->getUser(),
  366. $event->getExtendedApplication()->getRecurrentJob()
  367. );
  368. }
  369. foreach ([0, 1] as $subcampaignId) {
  370. $this->conversionEventService->handleConversionGoalReached(
  371. ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR,
  372. $subcampaignId,
  373. $event->getRequest(),
  374. $event->getUser(),
  375. $event->getExtendedApplication()->getRecurrentJob()
  376. );
  377. }
  378. $this->conversionEventService->handleConversionGoalReached(
  379. ConversionEventService::CAMPAIGN_ID_XING_FEED,
  380. 0,
  381. $event->getRequest(),
  382. $event->getUser(),
  383. $event->getExtendedApplication()->getRecurrentJob()
  384. );
  385. }
  386. if (!is_null($event->getExtendedApplication()->getRecurrentJob())
  387. && !is_null($event->getExtendedApplication()->getRecurrentJob()->getExternalPartner())
  388. ) {
  389. $this->externalPartnerEventDomainService->writeEvent(
  390. ExternalPartnerEvent::EVENT_TYPE_EXTENDED_APPLICATION_HAS_BEEN_CREATED,
  391. $event->getExtendedApplication()->getRecurrentJob()->getExternalPartner(),
  392. $event->getExtendedApplication()->getRecurrentJob(),
  393. $event->getExtendedApplication()->getRecurrentJob()->getQuota(),
  394. null,
  395. null,
  396. null,
  397. null,
  398. $event->getUser(),
  399. $event->getRequest(),
  400. $event->getConversionCampaignId(),
  401. $event->getPlatformSiteId(),
  402. null,
  403. null,
  404. $event->getExtendedApplication()
  405. );
  406. }
  407. $recurrentJob = $event->getExtendedApplication()->getRecurrentJob();
  408. $joboffererProfile = null;
  409. $withoutFiles = is_null($event->getExtendedApplication()->getPrimaryCvFile())
  410. && is_null($event->getExtendedApplication()->getSecondaryCvFile());
  411. $additionalData = [
  412. 'withoutFiles' => $withoutFiles,
  413. 'source' => $event->getExtendedApplication()->getCreatedViaCampaignId(),
  414. 'extendedApplicationId' => $event->getExtendedApplication()->getId(),
  415. 'recurrentJobZipcode' => null
  416. ];
  417. if (!is_null($recurrentJob)) {
  418. $joboffererProfile = $recurrentJob->getJoboffererProfile();
  419. $dataToAdd = [
  420. 'occupationalFieldSearchterm' => $event->getExtendedApplication()->getRecurrentJob()->getOccupationalFieldSearchterm(),
  421. 'recurrentJobId' => $event->getExtendedApplication()->getRecurrentJob()->getId(),
  422. 'internalId' => !is_null($event->getExtendedApplication()->getRecurrentJob()->getIntegratedExternalPartnerCustomer())
  423. ? $event->getExtendedApplication()->getRecurrentJob()->getIntegratedExternalPartnerCustomer()->getInternalId()
  424. : null,
  425. 'recurrentJobZipcode' => $event->getExtendedApplication()->getRecurrentJob()->getZipcode(),
  426. 'recurrentJobBusinessName' => $event->getExtendedApplication()->getRecurrentJobBusinessName(),
  427. 'recurrentJobTitel' => $event->getExtendedApplication()->getRecurrentJob()->getTitle()
  428. ];
  429. $additionalData = [...$additionalData, ...$dataToAdd];
  430. }
  431. if (!is_null($joboffererProfile)
  432. && !is_null($joboffererProfile->getEconomicSector())
  433. && !is_null($joboffererProfile->getEconomicSector()->getTitle())
  434. ) {
  435. $additionalData = [
  436. ...$additionalData,
  437. 'economicSector' => $joboffererProfile->getEconomicSector()->getTitle(),
  438. ];
  439. }
  440. $additionalData = json_encode($additionalData);
  441. $this->businessEventDomainService->writeNewEvent(
  442. BusinessEvent::EVENT_TYPE_EXTENDED_APPLICATION_FORM_COMPLETED,
  443. $event->getExtendedApplication()->getJobseekerProfile()->getUser(),
  444. $event->getExtendedApplication()->getRecurrentJob(),
  445. null,
  446. $additionalData
  447. );
  448. if ($event->getPlatformSiteId() === PlatformSite::PLATFORM_SITE_ID_RECRUIT_DL) {
  449. $this->businessEventDomainService->writeNewEvent(
  450. BusinessEvent::EVENT_TYPE_INDEED_RECRUIT_DL_FORM_COMPLETED,
  451. $event->getExtendedApplication()->getJobseekerProfile()->getUser(),
  452. $event->getExtendedApplication()->getRecurrentJob(),
  453. null,
  454. $additionalData
  455. );
  456. }
  457. $this->conversionEventService->handleConversionGoalReached(
  458. ConversionEventService::CAMPAIGN_ID_EXTENDED_APPLICATION,
  459. 0,
  460. $event->getRequest(),
  461. $event->getExtendedApplication()->getJobseekerProfile()->getUser(),
  462. $event->getExtendedApplication()->getRecurrentJob()
  463. );
  464. $this->conversionEventService->handleConversionGoalReached(
  465. ConversionEventService::CAMPAIGN_ID_EXTENDED_APPLICATION,
  466. 1,
  467. $event->getRequest(),
  468. $event->getExtendedApplication()->getJobseekerProfile()->getUser(),
  469. $event->getExtendedApplication()->getRecurrentJob()
  470. );
  471. $this->conversionEventService->handleConversionGoalReached(
  472. ConversionEventService::CAMPAIGN_ID_INDEED_RECRUIT_DL_CONTENT_DISTRIBUTION_VIA_XML_FEED,
  473. 0,
  474. $event->getRequest(),
  475. $event->getExtendedApplication()->getJobseekerProfile()->getUser(),
  476. $event->getExtendedApplication()->getRecurrentJob()
  477. );
  478. $this->conversionEventService->handleConversionGoalReached(
  479. ConversionEventService::CAMPAIGN_ID_RECRUIT_DL_LANDINGPAGE,
  480. 0,
  481. $event->getRequest(),
  482. $event->getExtendedApplication()->getJobseekerProfile()->getUser(),
  483. $event->getExtendedApplication()->getRecurrentJob()
  484. );
  485. $this->conversionEventService->handleConversionGoalReached(
  486. ConversionEventService::CAMPAIGN_ID_SHARED_RECURRENT_JOBS,
  487. 0,
  488. $event->getRequest(),
  489. $event->getExtendedApplication()->getJobseekerProfile()->getUser(),
  490. $event->getExtendedApplication()->getRecurrentJob()
  491. );
  492. $this->conversionEventService->handleConversionGoalReached(
  493. ConversionEventService::CAMPAIGN_ID_RECURRENT_JOBS_TO_PRINT_QR_CODE,
  494. 0,
  495. $event->getRequest(),
  496. $event->getExtendedApplication()->getJobseekerProfile()->getUser(),
  497. $event->getExtendedApplication()->getRecurrentJob()
  498. );
  499. foreach ([0, 1, 2, 3, 4, 5, 6, 7] as $subcampaignId) {
  500. $this->conversionEventService->handleConversionGoalReached(
  501. ConversionEventService::CAMPAIGN_ID_RECURRENT_JOBS_SEARCH_FOR_ONE_SPECIFIC_CUSTOMER,
  502. $subcampaignId,
  503. $event->getRequest(),
  504. $event->getUser(),
  505. $event->getExtendedApplication()->getRecurrentJob(),
  506. null,
  507. null,
  508. !is_null($event->getExtendedApplication()->getRecurrentJob())
  509. ? $event->getExtendedApplication()->getRecurrentJob()->getIntegratedExternalPartnerCustomer()
  510. : null
  511. );
  512. }
  513. if ($event->getPlatformSiteId() === PlatformSite::PLATFORM_SITE_ID_JOBOO && $event->getUser()->hasJobseekerProfile()) {
  514. $this->profileService->activateHiddenWantedJobsForProfile(
  515. $event->getUser()
  516. ->getDefaultJobseekerProfile()
  517. );
  518. }
  519. if ($event->getUser()->isEnabled()
  520. ) {
  521. if ($event->getPlatformSiteId() === PlatformSite::PLATFORM_SITE_ID_RECRUIT_DL) {
  522. $message = $this->mailService->createMessage(
  523. 'Deine Bewerbung',
  524. $this->twigEnvironment->render(
  525. '/extended_application/info_about_new_application.html.twig',
  526. [
  527. 'firstname' => $event->getExtendedApplication()->getFirstname(),
  528. 'zipcode' => $event->getExtendedApplication()->getRecurrentJob()->getZipcode(),
  529. 'searchterm' => $event->getExtendedApplication()->getRecurrentJob()->getOccupationalFieldSearchtermForDisplay(),
  530. 'businessName' => $event->getExtendedApplication()->getRecurrentJobBusinessName(),
  531. 'link' => $this->routerHelperService->replaceRecruitDlAndJobooOnlineInUri(
  532. $this->onetimeLoginTokenService->generateOneTimeLoginUrl(
  533. OnetimeLoginTokenService::REDIRECT_KEY_CONVERSATIONS_SHOW_EXTENDED_APPLICATIONS_JOBSEEKER,
  534. $event->getUser(),
  535. ['id' => $event->getExtendedApplication()->getJobseekerProfile()->getId()],
  536. ConversionEventService::CAMPAIGN_ID_EXTENDED_APPLICATION_EMAIL_LINK_TO_CONVERSATION_MESSAGE_EXTENDED_APPLICATION_OVERVIEW,
  537. 1,
  538. $event->getExtendedApplication()->getRecurrentJob()
  539. )
  540. ),
  541. 'platformSiteId' => $event->getPlatformSiteId(),
  542. ]
  543. ),
  544. $event->getExtendedApplication()->getEmail(),
  545. 'info@recruit-dl.de',
  546. 'mailfromname.recruit-dl'
  547. );
  548. $message->setContentType('text/html');
  549. } else {
  550. /** @var AutomatedEmailNotificationDefinitionTextContent $textContent */
  551. $textContent = $this
  552. ->entityManager
  553. ->getRepository(AutomatedEmailNotificationDefinitionTextContent::class)
  554. ->findOneBy(
  555. [
  556. 'automatedEmailNotificationDefinition' => MailService::MAIL_ID_INFO_TO_ENABLED_JOBSEEKER_ABOUT_EXTENDED_APPLICATION,
  557. 'subjectId' => AutomatedEmailNotificationDefinitionService::SUBJECT_ID_INFO_TO_ENABLED_JOBSEEKER_ABOUT_EXTENDED_APPLICATION
  558. ]
  559. );
  560. $message = $this->mailService->createMessage(
  561. $textContent->getSubject(),
  562. $this->twigEnvironment->render(
  563. $textContent->getTwigTemplateName(),
  564. [
  565. 'firstname' => $event->getExtendedApplication()->getFirstname(),
  566. 'zipcode' => $event->getExtendedApplication()->getRecurrentJob()->getZipcode(),
  567. 'searchterm' => $event->getExtendedApplication()->getRecurrentJob()->getOccupationalFieldSearchtermForDisplay(),
  568. 'businessName' => $event->getExtendedApplication()->getRecurrentJobBusinessName(),
  569. 'link' => $this->routerHelperService->replaceRecruitDlAndJobooOnlineInUri(
  570. $this->onetimeLoginTokenService->generateOneTimeLoginUrl(
  571. OnetimeLoginTokenService::REDIRECT_KEY_CONVERSATIONS_SHOW_EXTENDED_APPLICATIONS_JOBSEEKER,
  572. $event->getUser(),
  573. ['id' => $event->getExtendedApplication()->getJobseekerProfile()->getId()],
  574. ConversionEventService::CAMPAIGN_ID_EXTENDED_APPLICATION_EMAIL_LINK_TO_CONVERSATION_MESSAGE_EXTENDED_APPLICATION_OVERVIEW,
  575. 1,
  576. $event->getExtendedApplication()->getRecurrentJob(),
  577. null,
  578. null,
  579. UrlGeneratorInterface::ABSOLUTE_URL,
  580. false,
  581. $textContent->getAutomatedEmailNotificationDefinition()->getId(),
  582. $textContent->getBodyId()
  583. )
  584. ),
  585. 'platformSiteId' => $event->getPlatformSiteId(),
  586. ]
  587. ),
  588. $event->getExtendedApplication()->getEmail(),
  589. MailService::DEFAULT_SENDER_NOREPLY_MAILADDRESS,
  590. 'direct_email_communication.outgoing_message.noreply_sender_name'
  591. );
  592. $message->setContentType('text/html');
  593. }
  594. $this->mailService->queueForSending(
  595. MailService::MAIL_ID_INFO_TO_ENABLED_JOBSEEKER_ABOUT_EXTENDED_APPLICATION,
  596. $message,
  597. $event->getExtendedApplication()->getJobseekerProfile()->getUser()
  598. );
  599. }
  600. if ($event->getPlatformSiteId() === PlatformSite::PLATFORM_SITE_ID_JOBOO
  601. || $event->getPlatformSiteId() === PlatformSite::PLATFORM_SITE_ID_JOBOO_ONLINE
  602. ) {
  603. $jobseekerProfile = $event->getExtendedApplication()->getJobseekerProfile();
  604. if (!is_null($jobseekerProfile)) {
  605. if (!$this->platformEventService->hasEventOccuredInLastNDaysForAdditionalData(
  606. PlatformEvent::EVENT_TYPE_ASK_USER_FOR_GOOGLE_RATINGS_WHATSAPP_MESSAGE_WAS_SENT,
  607. 10,
  608. $jobseekerProfile->getId()
  609. )) {
  610. $this->platformEventService->eventHasOccurred(
  611. PlatformEvent::EVENT_TYPE_ASK_USER_FOR_GOOGLE_RATINGS_WHATSAPP_MESSAGE_WAS_SENT,
  612. $jobseekerProfile->getId()
  613. );
  614. $this->messageBus->dispatch(
  615. new AskNewUserForGoogleRatingSymfonyMessage($event->getExtendedApplication())
  616. );
  617. }
  618. }
  619. }
  620. $this
  621. ->integratedExternalPartnerCustomerService
  622. ->handleNeccessaryExternalApplications($event->getExtendedApplication());
  623. } catch (Throwable $t) {
  624. $this->logger->error(
  625. sprintf(
  626. "Error while handling onExtendedApplicationCreated symfony event for extended application '%s' for recurrent job '%s': '%s'",
  627. $event->getExtendedApplication()->getId(),
  628. $event->getExtendedApplication()->getRecurrentJob()?->getId(),
  629. $t->getMessage()
  630. ),
  631. ['exception' => $t]
  632. );
  633. throw new Exception($t->getMessage(), $t->getCode(), $t);
  634. }
  635. }
  636. public function onExtendedApplicationReadByJobofferer(
  637. ExtendedApplicationReadByJoboffererEvent $event
  638. ): void {
  639. /* @see ConversationMessageService::getUnreadMessagesCount — unread extended applications count as unread messages, too */
  640. $joboffererUser = $event->getExtendedApplication()->getRecurrentJob()?->getJoboffererProfile()->getUser();
  641. if (!is_null($joboffererUser)) {
  642. $this->messageBus->dispatch(
  643. new UpdateCachedUnreadConversationMessagesCountSymfonyMessage(
  644. $joboffererUser
  645. )
  646. );
  647. }
  648. }
  649. }