✨ feat(etl): implémente la finalisation et la signature électronique de l'état des lieux
This commit is contained in:
@@ -6,6 +6,7 @@ use App\Entity\Contrats;
|
||||
use App\Entity\ContratsPayments;
|
||||
use App\Entity\CustomerOrder;
|
||||
use App\Entity\Devis;
|
||||
use App\Entity\EtatLieux;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\HttpFoundation\RequestStack;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
@@ -322,4 +323,79 @@ class Client
|
||||
|
||||
return $documentUrl;
|
||||
}
|
||||
|
||||
public function createSubmissionEtatLieux(EtatLieux $etatLieux): void
|
||||
{
|
||||
// Si déjà initié, on arrête (ou on pourrait retourner les liens existants)
|
||||
if ($etatLieux->getSignIdCustomer()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$contrat = $etatLieux->getContrat();
|
||||
$customer = $contrat->getCustomer();
|
||||
// Prestataire or Admin
|
||||
$prestataireEmail = 'contact@ludikevent.fr';
|
||||
if ($etatLieux->getPrestataire()) {
|
||||
$prestataireEmail = $etatLieux->getPrestataire()->getEmail();
|
||||
} elseif ($etatLieux->getAccount()) {
|
||||
$prestataireEmail = $etatLieux->getAccount()->getEmail();
|
||||
}
|
||||
|
||||
// URL où on redirige après signature
|
||||
$completedRedirectUrl = $this->baseUrl . $this->urlGenerator->generate('etl_mission_signed_entry_state', ['id' => $contrat->getId()]);
|
||||
|
||||
// Récupération du fichier PDF EDL (Non signé)
|
||||
$relativeFileUrl = $this->storage->resolveUri($etatLieux, 'etatLieuxUnsignFile');
|
||||
$fileUrl = $this->baseUrl . $relativeFileUrl;
|
||||
|
||||
$submission = $this->docuseal->createSubmissionFromPdf([
|
||||
'name' => 'Etat des Lieux - Contrat #' . $contrat->getNumReservation(),
|
||||
'completed_redirect_url' => $completedRedirectUrl,
|
||||
'send_email' => true, // Envoi email aux deux parties
|
||||
'documents' => [
|
||||
[
|
||||
'name' => 'edl_' . $contrat->getNumReservation() . '.pdf',
|
||||
'file' => $fileUrl,
|
||||
],
|
||||
],
|
||||
'submitters' => [
|
||||
[
|
||||
'role' => 'Ludikevent', // Prestataire
|
||||
'email' => $prestataireEmail,
|
||||
],
|
||||
[
|
||||
'role' => 'Client',
|
||||
'email' => $customer->getEmail(),
|
||||
'name' => $customer->getSurname() . ' ' . $customer->getName(),
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
// Mapping des IDs
|
||||
foreach ($submission['submitters'] as $submitter) {
|
||||
if ($submitter['role'] === 'Ludikevent') {
|
||||
$etatLieux->setSignIdDelivery($submitter['id']);
|
||||
} elseif ($submitter['role'] === 'Client') {
|
||||
$etatLieux->setSignIdCustomer($submitter['id']);
|
||||
}
|
||||
}
|
||||
|
||||
$this->entityManager->persist($etatLieux);
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
|
||||
public function getSigningUrl(EtatLieux $etatLieux, string $role): ?string
|
||||
{
|
||||
$submitterId = match ($role) {
|
||||
'Ludikevent', 'Prestataire' => $etatLieux->getSignIdDelivery(),
|
||||
'Client' => $etatLieux->getSignIdCustomer(),
|
||||
default => null
|
||||
};
|
||||
|
||||
if (!$submitterId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->getLinkSign($submitterId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user