feat(Product.php): Ajoute la relation avec ProductReserve.

 feat(DevisSubscriber.php): Crée un subscriber pour l'envoi de devis.

 feat(Devis.php): Ajoute la relation avec ProductReserve.

 feat: Crée le template de mail pour la notification de signature.

 feat(DevisSend.php): Crée l'événement DevisSend.

 feat(Customer.php): Ajoute la relation avec ProductReserve.

🐛 fix(SignatureController.php): Corrige la gestion de la signature complétée.

 feat(DevisController.php): Ajoute la relance de signature et pagination.

 feat: Crée le template de mail pour l'envoi du devis à signer.

 feat: Crée le template de mail pour la confirmation de signature.

 feat(Client.php): Gère la création et le suivi de la signature DocuSeal.

 feat(DevisPdfService.php): Intègre les champs Docuseal.

 feat(list.twig): Affiche la liste des devis avec actions et statuts.

 feat: Crée la page de succès de signature.

 feat(StripeExtension.php): Ajoute le filtre totalQuoto pour calculer le total HT.
```
This commit is contained in:
Serreau Jovann
2026-01-19 19:40:27 +01:00
parent 0afc9e3396
commit cd45a37d73
19 changed files with 879 additions and 55 deletions

View File

@@ -29,6 +29,7 @@ class Client
// L'URL API est le point d'entrée pour le SDK Docuseal
$apiUrl = rtrim("https://signature.esy-web.dev", '/') . '/api';
$this->docuseal = new \Docuseal\Api($key, $apiUrl);
$this->logo = $kernel->getProjectDir()."/public/provider/images/favicon.png";
}
/**
@@ -64,11 +65,20 @@ class Client
'role' => 'Ludikevent',
'email' => 'contact@ludikevent.fr',
'completed' => true,
'fields' => [
['name'=>'Sign','default_value'=>$this->logoBase64()]
]
],
[
'role' => 'Client',
'email' => $devis->getCustomer()->getEmail(),
'name' => $devis->getCustomer()->getSurname() . ' ' . $devis->getCustomer()->getName(),
'fields' => [
['name'=>'cgv','default_value'=>true],
['name'=>'assurance','default_value'=>true],
['name'=>'securite','default_value'=>true],
['name'=>'arrhes','default_value'=>true],
],
'metadata' => [
'id' => $devis->getId(),
'type' => 'devis'
@@ -77,8 +87,11 @@ class Client
],
]);
// Stockage de l'ID submitter de Docuseal dans ton entité
$devis->setSignatureId($submission['submitters'][1]['id']);
dd($this->getLinkSign($devis->getSignatureId()));
$this->entityManager->flush();
}
@@ -96,7 +109,7 @@ class Client
$submissionData = $this->docuseal->getSubmitter($submitterId);
return rtrim($this->baseUrl, '/') . "/s/" . $submissionData['slug'];
return rtrim("https://signature.esy-web.dev", '/') . "/s/" . $submissionData['slug'];
}
/**
@@ -116,4 +129,33 @@ class Client
return false;
}
}
/**
* Récupère le fichier logo et le convertit en chaîne Base64
* Utile pour l'intégration directe dans certains flux HTML ou API
*/
private function logoBase64(): ?string
{
// Vérifie si le fichier existe pour éviter une erreur
if (!file_exists($this->logo)) {
return null;
}
// Lecture du contenu du fichier
$binaryData = file_get_contents($this->logo);
// Récupération de l'extension pour le type MIME (png, jpg, etc.)
$extension = pathinfo($this->logo, PATHINFO_EXTENSION);
// Encodage en Base64
$base64 = base64_encode($binaryData);
// Retourne le format complet data:image/...
return 'data:image/' . $extension . ';base64,' . $base64;
}
public function getSubmition(mixed $submission_id)
{
return $this->docuseal->getSubmission($submission_id);
}
}