<?php
namespace App\Service;
use App\Repository\JobCandidateRepository;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class JobCandidateService extends BaseService
{
/**
* @param JobCandidateRepository $repository
*/
public function __construct(
JobCandidateRepository $repository,
BaseService $baseService,
TranslatorInterface $translator
) {
$this->reflectFromParent($baseService);
$this->repository = $repository;
$this->translator = $translator;
}
public function listStatusCandidate()
{
return [
[
'id' => 1,
'name' => $this->translator->trans('canditate.status_1')
],
[
'id' => 2,
'name' => $this->translator->trans('canditate.status_2')
],
[
'id' => 3,
'name' => $this->translator->trans('canditate.status_3')
]
];
}
public function uploadFile(UploadedFile $fileUpload, $folder)
{
$newMedia = $this->mediaService->uploadFile($fileUpload, $folder);
return $newMedia['path'];
}
public function removeFileCv($entity)
{
if ($entity->getFileCv()) {
$this->mediaService->deleteFile($entity->getFileCv());
}
$entity->setFileCv(null);
$this->entityManager->flush();
return;
}
public function removeFileCover($entity)
{
if ($entity->getFileCover()) {
$this->mediaService->deleteFile($entity->getFileCover());
}
$entity->setFileCover(null);
$this->entityManager->flush();
return;
}
public function addEntity($request)
{
$input = [];
// Upload file cv
$fileCv = $request->files->get('file_cv');
if ($fileCv) {
$input['fileCv'] = $this->uploadFile($fileCv, $this->container->getParameter('dir.offer_cv'));
$request->files->remove('file_cv');
}
$fileCover = $request->files->get('file_cover');
if ($fileCover) {
$input['fileCover'] = $this->uploadFile($fileCover, $this->container->getParameter('dir.offer_cover'));
$request->files->remove('file_cover');
}
$entity = $this->add($request, $input, null, 'ENTITY', false, [], true);
if ($entity) {
$this->sendMailJobCandidate($this->autoMapper->map($entity, 'App\DTO\JobCandidate\JobCandidateOutput'));
}
return $this->autoMapper->map($entity, 'App\DTO\JobCandidate\JobCandidateOutput');
}
public function updateEntity($request)
{
$input = [];
$entity = $this->get($request->get('id'));
// Remove file cv
if ($request->get('removeFileCv')) {
$this->removeFileCv($entity);
}
// Upload file cv
$fileCv = $request->files->get('file_cv');
if ($fileCv) {
$input['fileCv'] = $this->uploadFile($fileCv, $this->container->getParameter('dir.offer_cv'));
$request->files->remove('file_cv');
}
// Remove file Cover
if ($request->get('removeFileCover')) {
$this->removeFileCover($entity);
}
// Upload file Cover
$fileCover = $request->files->get('file_cover');
if ($fileCover) {
$input['fileCover'] = $this->uploadFile($fileCover, $this->container->getParameter('dir.offer_cover'));
$request->files->remove('file_cover');
}
$entity = $this->update($entity, $request, $input, null, 'ENTITY', false, true);
return $this->autoMapper->map($entity, 'App\DTO\JobCandidate\JobCandidateOutput');
}
public function deleteEntity($id)
{
$entity = $this->get($id);
$this->delete($entity);
if ($entity->getFileCv()) {
$this->mediaService->deleteFile($entity->getFileCv());
}
if ($entity->getFileCover()) {
$this->mediaService->deleteFile($entity->getFileCover());
}
return true;
}
public function sendMailJobCandidate($candidate)
{
$subjectMail = $this->translator->trans(
'job.mail.title',
[
'%offerName%' => $candidate->offer['companyName']
]
);
$bodyMail = $this->container->get('twig')->render('email/candidate/candidate.html.twig', [
'candidate' => $candidate
]);
$recipientsString = $this->container->getParameter('mail.contact.recipients');
$this->sendMail(explode(",", $recipientsString), $subjectMail, $bodyMail);
}
}