<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Form\UserPartnerInscriptionType;
use App\Service\DynamicHostService;
use App\Service\ContractService;
use App\Entity\User;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use App\Event\SubContractor\SubContractorCompletedProfileEvent;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use App\Event\SubContractorUpdatedEvent;
use App\Service\ConfidentialityService;
use App\Form\UserAgencyType;
use App\Event\ClientUpdatedEvent;
class InscriptionController extends AbstractController
{
public function __construct(
private ParameterBagInterface $parameter,private ConfidentialityService $confidentialityService
){}
#[Route('/inscription/partner', name: 'app_inscription_partner')]
public function inscription(DynamicHostService $host,ContractService $contractService,Request $request,EntityManagerInterface $entityManagerInterface,UserPasswordHasherInterface $hash,EventDispatcherInterface $dispatcher): Response
{
$company = $host->getCompany();
//redirection si MYFlow
if ($company == null) {
return $this->redirectToRoute('app_login');
}
//fin redirection
$user = new User();
$inscriptionForm =$this->createForm(UserPartnerInscriptionType::class,$user);
$inscriptionForm->handleRequest($request);
$errorMessages = [];
if ($inscriptionForm->isSubmitted() && !$inscriptionForm->isValid()) {
foreach ($inscriptionForm->getErrors(true) as $error) {
$errorMessages[] = $error->getMessage();
}
}
if($inscriptionForm->isSubmitted() && $inscriptionForm->isValid()){
$userData = $inscriptionForm->get('userData')->getData();
$vigilenceCertificate = $inscriptionForm->get('userData')->get('VigilanceCertificateFile')->getData();
$this->saveVigilenceCertificate($vigilenceCertificate,$user);
$user->setPassword($hash->hashPassword($user, $user->getPassword()));
$user->setRoles(['ROLE_SUBCONTRACTOR']);
$user->setEnabled(true);
$user->setPartner(true);
$user->setCompany($company);
$user->setShareMyEmail(true);
$user->setShareMyPhone(true);
$resaleRate = $user->getDailyRate() + ($user->getDailyRate() * 0.03);
$user->setResaleRate($resaleRate);
$entityManagerInterface->persist($user);
$entityManagerInterface->flush();
//ajout de resaleRate
//send all email and create contract
$event = new SubContractorCompletedProfileEvent($user, true, true);
$dispatcher->dispatch($event, SubContractorCompletedProfileEvent::NAME);
$event = new SubContractorUpdatedEvent($user, false, true, false);
$dispatcher->dispatch($event, SubContractorUpdatedEvent::NAME);
$this->confidentialityService->addSignedContractSubcontractor($user, true, true, true);
$this->addFlash('success', "Inscription fait avec succès");
return $this->render('inscription/confirmation.html.twig', [
'company' => $company
]);
}
//var_dump($error);
return $this->render('inscription/partner.html.twig', [
'inscriptionForm' => $inscriptionForm->createView(),
'cgv' => $contractService->getCGV(null, $company, false),
'cgu' => $contractService->getCGU(null,$company,'subcontractor', false),
'company' => $company,
'errors' => $errorMessages
]);
}
private function saveVigilenceCertificate($file,$user){
$path = "file_user_directory";
if (!is_null($file)) {
$destination = $this->parameter->get($path);
if (!is_dir($destination)) {
mkdir($destination, 0755, true);
}
$originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$newFilename = $originalFilename . '-' . uniqid() . '.' . $file->guessExtension();
$file->move(
$destination,
$newFilename
);
//save file vigilence in data (name of file / date insertion)
$allUserFile = $user->getUserData()->getVigilanceCertificate();
$allUserFile [] = [
'name' => $newFilename,
'shortName' => mb_substr($newFilename, 0, 40)."...",
'dateInsert' => new \Datetime()
];
if($user->getUserData()->getStateCompany() === 'fr'){
$user->getUserData()->setVigilanceCertificate($allUserFile);
$dateAddCertificate = new \DateTime();
if(is_null($user->getUserData()->getVigilanceCertificate())){
$user->getUserData()->setDateAddCertificate($dateAddCertificate);
$user->getUserData()->setDateUpdateCertificate($dateAddCertificate);
}else{
$user->getUserData()->setDateUpdateCertificate($dateAddCertificate);
}
}
}
}
#[Route('/creez-votre-compte-client-agence-{id}', name: 'dsfdsfqcreate_client')]
public function finalStepInscription(User $user,DynamicHostService $host,ContractService $contractService,Request $request,EntityManagerInterface $entityManagerInterface,UserPasswordHasherInterface $hash,EventDispatcherInterface $dispatcher): Response
{
if ($user->isEnabled()) {
return $this->redirectToRoute('app_login');
}
$company = $host->getCompany();
$formInscription = $this->createForm(UserAgencyType::class,$user);
$formInscription->handleRequest($request);
if($formInscription->isSubmitted() && $formInscription->isValid()){
$user->setEnabled(true);
$hashedPassword = $hash->hashPassword($user, $user->getPassword());
$user->setPassword($hashedPassword);
$user->setShareMyEmail(true);
$user->setShareMyPhone(true);
$entityManagerInterface->persist($user);
$entityManagerInterface->flush();
$event = new ClientUpdatedEvent($user, false, $user->getPassword(), true);
$dispatcher->dispatch($event, ClientUpdatedEvent::NAME);
$this->confidentialityService->addSignedContractForClient($user, true, false, true);
return $this->render('inscription/confirmation_client.html.twig', [
'company' => $company
]);
}
return $this->render('inscription/finalisation_inscription.html.twig', [
'cgu' => $contractService->getCGU(null,$company,'subcontractor', false),
'company' => $company,
'inscriptionForm' => $formInscription->createView(),
'user' => $user
]);
}
}