feat(PaymentController): Gère les paiements par virement et chèque

Ajoute la gestion des paiements par virement et chèque avec envoi
d'emails et redirection vers des interfaces dédiées.
This commit is contained in:
Serreau Jovann
2025-08-06 15:49:46 +02:00
parent 44bfd245db
commit 6d0b8e67ef
15 changed files with 432 additions and 49 deletions

View File

@@ -1,8 +1,11 @@
import './app.scss'
import * as Turbo from "@hotwired/turbo"
import {PaymentPage} from "./class/PaymentPage.js";
import {PaymentChaque, PaymentPage, PaymentSepa, PaymentVirement} from "./class/PaymentPage.js";
customElements.define('payment-page',PaymentPage,{extends:'button'})
customElements.define('payment-cheque',PaymentChaque,{extends:'button'})
customElements.define('payment-sepa',PaymentSepa,{extends:'button'})
customElements.define('payment-virement',PaymentVirement,{extends:'button'})
document.addEventListener('DOMContentLoaded', () => {

View File

@@ -1,3 +1,134 @@
export class PaymentVirement extends HTMLButtonElement{
connectedCallback(){
let element = this;
element.addEventListener('click', function(e){
e.preventDefault();
let displayModal = document.createElement('div');
displayModal.classList.add('modal-payment');
let iframeContainer = document.createElement('div');
iframeContainer.style.height = "fit-content";
iframeContainer.classList.add(
'iframe-container',
'max-w-md',
'mx-auto',
'bg-white',
'dark:bg-gray-900',
'rounded-xl',
'shadow-md',
'overflow-hidden',
'p-6',
'space-y-4'
);
// Message d'invitation au virement
let infoMsg = document.createElement('div');
infoMsg.className = 'text-xl text-white-700 dark:text-white-300 mb-2';
infoMsg.textContent = "Merci d'effectuer le virement sur ce compte, en notant la référence de l'avis de paiement ! Dés réception du règlement une facture vous sera envoyée";
iframeContainer.appendChild(infoMsg);
let ibanLabel = document.createElement('div');
ibanLabel.className = 'text-gray-700 dark:text-gray-300 text-base font-semibold';
ibanLabel.textContent = 'IBAN';
let ibanValue = document.createElement('div');
ibanValue.className = 'text-gray-900 dark:text-white text-lg font-mono break-all';
ibanValue.textContent = 'FR76 1020 6006 7198 4797 7981 061';
let bicLabel = document.createElement('div');
bicLabel.className = 'text-gray-700 dark:text-gray-300 text-base font-semibold';
bicLabel.textContent = 'BIC';
let bicValue = document.createElement('div');
bicValue.className = 'text-gray-900 dark:text-white text-lg font-mono';
bicValue.textContent = 'AGRIFRPP802';
let btn = document.createElement('a');
btn.setAttribute('href', '/paiement?id='+element.getAttribute('id')+"&type=virement");
btn.classList = "button bg-green-900 w-full text-center text-white p-2";
btn.innerText = "Je confirme le paiement par virement bancaire"
iframeContainer.appendChild(ibanLabel);
iframeContainer.appendChild(ibanValue);
iframeContainer.appendChild(bicLabel);
iframeContainer.appendChild(bicValue);
iframeContainer.appendChild(btn);
document.body.appendChild(iframeContainer);
displayModal.appendChild(iframeContainer);
document.body.appendChild(displayModal);
})
}
}
export class PaymentChaque extends HTMLButtonElement{
connectedCallback(){
let element = this;
element.addEventListener('click', function(e){
e.preventDefault();
let displayModal = document.createElement('div');
displayModal.classList.add('modal-payment');
let iframeContainer = document.createElement('div');
iframeContainer.style.height = "fit-content";
iframeContainer.classList.add(
'iframe-container',
'max-w-md',
'mx-auto',
'bg-white',
'dark:bg-gray-900',
'rounded-xl',
'shadow-md',
'overflow-hidden',
'p-6',
'space-y-4'
);
// Message d'invitation au virement
let infoMsg = document.createElement('div');
infoMsg.className = 'text-xl text-white-700 dark:text-white-300 mb-2';
infoMsg.textContent = "Merci d'envoie le chéque à l'adresse suivant en notant la référence de l'avis de paiement aux dos ! Dés réception du chéque et sont incaisement une facture vous sera envoyée";
iframeContainer.appendChild(infoMsg);
let ibanLabel = document.createElement('div');
ibanLabel.className = 'text-gray-700 dark:text-gray-300 text-base font-semibold';
ibanLabel.textContent = 'Adresse';
let ibanValue = document.createElement('div');
ibanValue.className = 'text-gray-900 dark:text-white text-lg font-mono break-all';
ibanValue.textContent = '27 rue le Sérurier 02100 Saint-Quentin';
let bicLabel = document.createElement('div');
bicLabel.className = 'text-gray-700 dark:text-gray-300 text-base font-semibold';
bicLabel.textContent = 'A l\'ordre de ';
let bicValue = document.createElement('div');
bicValue.className = 'text-gray-900 dark:text-white text-lg font-mono';
bicValue.textContent = 'SARL SITECONSEIL';
let btn = document.createElement('a');
btn.setAttribute('href', '/paiement?id='+element.getAttribute('id')+"&type=bank");
btn.classList = "button bg-green-900 w-full text-center text-white p-2";
btn.innerText = "Je confirme le paiement par chéque"
iframeContainer.appendChild(ibanLabel);
iframeContainer.appendChild(ibanValue);
iframeContainer.appendChild(bicLabel);
iframeContainer.appendChild(bicValue);
iframeContainer.appendChild(btn);
document.body.appendChild(iframeContainer);
displayModal.appendChild(iframeContainer);
document.body.appendChild(displayModal);
})
}
}
export class PaymentPage extends HTMLButtonElement{
connectedCallback(){
let element = this;
@@ -45,3 +176,50 @@ export class PaymentPage extends HTMLButtonElement{
})
}
}
export class PaymentSepa extends HTMLButtonElement{
connectedCallback(){
let element = this;
element.addEventListener('click', function(){
let banke = document.querySelector('.banke');
banke.classList.remove('show');
let displayModal = document.createElement('div');
displayModal.classList.add('modal-payment');
let iframeContainer = document.createElement('div');
iframeContainer.classList.add('iframe-container');
window.addEventListener('message', function (event) {
if (event.origin !== 'https://payment.stancer.com') {
return;
}
/*if(event.data.status != undefined) {
if(event.data.status != "init" && event.data.status != "pending" && event.data.status != "secure-auth-start" && event.data.status != "secure-auth-end") {
if (event.data.status == "paid") {
displayModal.remove();
location.href = "/paiement/complete?id=" + element.getAttribute('id');
} else if (event.data.status == "finished") {
displayModal.remove();
location.href = event.data.url;
} else {
fetch("/api-interne/intranet/customer/payment/cancel?id="+element.getAttribute('id'))
displayModal.remove();
banke.classList.add('show');
}
}
}*/
console.log(event.data);
});
fetch("/api-interne/intranet/customer/payment?id="+element.getAttribute('id')+"&type=sepa")
.then(r=>r.json())
.then(r=>{
let iframe = document.createElement('iframe');
iframe.src = r.url;
iframeContainer.appendChild(iframe);
window.frame = iframeContainer;
})
displayModal.appendChild(iframeContainer);
document.body.appendChild(displayModal);
})
}
}

View File

@@ -73,7 +73,7 @@ class CustomerController extends AbstractController
$payment->setCustomer($customerStancer);
$payment->setReturnUrl($paymentReturnPath);
$payment->setOrderId($advert->getNumAvis());
$payment->setMethodsAllowed(["card"]);
$payment->setMethodsAllowed([$request->query->has('type')?"sepa":"card"]);
$payment->setCapture(true);
$paimentId = $payment->send();
$advert->setPaymentId($paimentId);

View File

@@ -280,8 +280,6 @@ class CustomerController extends AbstractController
$orderAdvert = $entityManager->getRepository(CustomerAdvertPayment::class)->findBy(['customer'=>$customer],['id'=>'ASC']);
$orderOrder = $entityManager->getRepository(CustomerOrder::class)->findBy(['customer'=>$customer],['id'=>'ASC']);
$event = new CreateDevisCustomerEvent($orderDevis[1],false);
$eventDispatcher->dispatch($event);
return $this->render('artemis/intranet/customer/edit.twig',[
'form' => $form->createView(),
'formNdd' => $formNdd->createView(),
@@ -393,6 +391,35 @@ class CustomerController extends AbstractController
{
if($request->isMethod('POST')) {
$data = $_POST;
if($data['type'] == "avis") {
$avisPayment = new CustomerAdvertPayment();
$t = new \DateTimeImmutable();
$num = "A-".$t->format('Y/m')."/".sprintf('%05d',$entityManager->getRepository(CustomerAdvertPayment::class)->count()+1);
$avisPayment->setNumAvis($num);
$avisPayment->setCustomer($customer);
$avisPayment->setDevis(null);
$avisPayment->setCreateAt(new \DateTimeImmutable());
$avisPayment->setState("created");
$entityManager->persist($avisPayment);
$r = 0;
foreach ($data['lines'] as $line) {
$avisLine = new CustomerAdvertPaymentLine();
$avisLine->setPos($r);
$avisLine->setName($line['title']);
$avisLine->setPriceHT($line['price']);
$avisLine->setContent($line['description']);
$avisLine->setTva(1.20);
$entityManager->persist($avisLine);
$avisPayment->addCustomerAdvertPaymentLine($avisLine);
$entityManager->persist($avisPayment);
$r = $r+1;
}
$event = new CreateAvisEvent($avisPayment,false);
$eventDispatcher->dispatch($event);
$this->addFlash("success","Création effectuée");
return $this->redirectToRoute('artemis_intranet_customer_view',['id'=>$customer->getId(),'current'=>'order','currentOrder'=>'a']);
}
if($data['type'] == "devis") {
$devis = new CustomerDevis();
$devis->setCustomer($customer);
@@ -419,7 +446,7 @@ class CustomerController extends AbstractController
$event = new CreateDevisCustomerEvent($devis,false);
$eventDispatcher->dispatch($event);
$this->addFlash("success","Création effectuée");
return $this->redirectToRoute('artemis_intranet_customer_view',['id'=>$customer->getId(),'current'=>'order']);
return $this->redirectToRoute('artemis_intranet_customer_view',['id'=>$customer->getId(),'current'=>'order','currentOrder'=>'d']);
}
}
return $this->render('artemis/intranet/customer/order-add.twig',[

View File

@@ -67,7 +67,7 @@ class PaymentController extends AbstractController
]);
}
#[Route(path: '/paiement',name: 'app_payment')]
public function payment(EntityManagerInterface $entityManager,Request $request,CustomerAdvertPaymentRepository $customerAdvertPaymentRepository): Response
public function payment(Mailer $mailer,EntityManagerInterface $entityManager,Request $request,CustomerAdvertPaymentRepository $customerAdvertPaymentRepository): Response
{
if(!$request->query->has('id'))
return $this->render('admin/payement_invalid.twig',[
@@ -89,42 +89,48 @@ class PaymentController extends AbstractController
$amount = $amount + (floatval($line->getPriceHt())*1.20);
$amountHt = $amountHt + floatval($line->getPriceHt());
}
$client = Config::init([$_ENV['STANCER_PUBLIC_KEY'], $_ENV['STANCER_PRIVATE_KEY']]);
$client->setMode($_ENV['STANCER_ENV']);
$payEdit = str_replace('"',"",$advert->getPaymentId());
$payment = new Payment($payEdit);
$paymentNotice = [
'customer' => $advert->getCustomer()->getRaisonSocial(),
'number' =>$advert->getNumAvis(),
'amount' => $amount,
'amountHt' => $amountHt,
];
/* if($request->query->has('act') && $request->query->get('act') == 'createPaiment'){
$total = 0;
foreach ($advert->getCustomerAdvertPaymentLines() as $item) {
$total = $total + (floatval($item->getPriceHt()) * 1.20);
}
$paymentReturnPath = $this->generateUrl("app_payment_complete", ['id'=>$advert->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
$paymentReturnPath = str_replace("http://", "https://", $paymentReturnPath);
$customerStancer = new Customer($advert->getCustomer()->getStancerId());
$payment = new Payment();
$payment->setAmount($total * 100);
$payment->setCurrency("EUR");
$payment->setDescription("Paiement de l'avis de paiement - " . $advert->getNumAvis());
$payment->setCustomer($customerStancer);
$payment->setReturnUrl($paymentReturnPath);
$payment->setOrderId($advert->getNumAvis());
$payment->setMethodsAllowed(["card"]);
$payment->setCapture(true);
$paimentId = $payment->send();
$advert->setPaymentId($paimentId);
if($request->query->has('type') && $request->query->get('type') == "virement") {
$advert->setState("wait-virement");
$entityManager->persist($advert);
$entityManager->flush();
return $this->redirect($payment->getPaymentPageUrl());
}*/
$mailer->send($advert->getCustomer()->mainContact()->getEmail(),$advert->getCustomer()->getRaisonSocial(),"[SARL SITECONSEIL] - Rapel information de virement","mails/customer/avis-payment-virement.twig",[
'advert' => $advert,
]);
$mailer->sendMulti(['s.com@siteconseil.fr',"jovann@siteconseil.fr"],"[SARL SITECONSEIL] - Information virement pour réglement Avis de paiement - ".$advert->getNumAvis(),"mails/customer/avis-payment_v.twig",[
'advert' => $advert,
]);
}
if($request->query->has('type') && $request->query->get('type') == "bank") {
$advert->setState("wait-bank");
$entityManager->persist($advert);
$entityManager->flush();
$mailer->send($advert->getCustomer()->mainContact()->getEmail(),$advert->getCustomer()->getRaisonSocial(),"[SARL SITECONSEIL] - Rapel information pour le chéque","mails/customer/avis-payment-bank.twig",[
'advert' => $advert,
]);
$mailer->sendMulti(['s.com@siteconseil.fr',"jovann@siteconseil.fr"],"[SARL SITECONSEIL] - Information pour réglement parr chéque Avis de paiement - ".$advert->getNumAvis(),"mails/customer/avis-payment_b.twig",[
'advert' => $advert,
]);
}
if($advert->getState() == "wait-virement") {
return $this->render('admin/payement_interface_v.twig',[
'paymentNotice' => $paymentNotice,
'advert' => $advert
]);
}
if($advert->getState() == "wait-bank") {
return $this->render('admin/payement_interface_b.twig',[
'paymentNotice' => $paymentNotice,
'advert' => $advert
]);
}
return $this->render('admin/payement_interface.twig',[
'paymentNotice' => $paymentNotice,
'advert' => $advert

View File

@@ -151,11 +151,10 @@ class BillingEventSusbriber
$pdf = New DevisPdf($this->kernel,$devis);
$tmpname = Uuid::v4().".pdf";
$dir = sys_get_temp_dir().'/'.$tmpname;
$pdf->generate();
$content = $pdf->Output('I');
$content = $pdf->Output('S');
file_put_contents($dir,$content);
$upload = new UploadedFile($dir,"devis-".$devis->getNumDevis().".pdf","application/pdf",0,true);
$devis->setDevis($upload);

View File

@@ -60,7 +60,6 @@ class DevisPdf extends FPDF
$y = $y + 5;
$this->Text(110, $y, mb_convert_encoding($this->customerDevis->getCustomer()->getZipcode() . " " . $this->customerDevis->getCustomer()->getCity(), 'ISO-8859-1', 'UTF-8'));
$this->body();
// This function is called in the Header, so it will draw the item headers on every page.
}

View File

@@ -39,17 +39,6 @@ class FacturePdf extends Fpdf
function Header()
{
/*$this->Image($this->kernel->getProjectDir() . "/public/assets/logo_siteconseil.png", 5, 5, 25);
$this->SetFont('Arial', 'B', 12);
$this->Text(30, 10, mb_convert_encoding("SITECONSEIL", 'ISO-8859-1', 'UTF-8'));
$this->SetFont('Arial', '', 12);
$this->Text(30, 15, mb_convert_encoding("27 rue le sérurier", 'ISO-8859-1', 'UTF-8'));
$this->Text(30, 20, mb_convert_encoding("02100 SAINT-QUENTIN", 'ISO-8859-1', 'UTF-8'));
$this->Text(30, 25, mb_convert_encoding("s.com@siteconseil.fr", 'ISO-8859-1', 'UTF-8'));
$this->Text(30, 30, mb_convert_encoding("03 23 05 62 43", 'ISO-8859-1', 'UTF-8'));
$this->Text(8, 35, mb_convert_encoding("SIRET: 41866405800025", 'ISO-8859-1', 'UTF-8'));
$this->Text(8, 40, mb_convert_encoding("RCS: RCS St-Quentin 418 664 058", 'ISO-8859-1', 'UTF-8'));
$this->Text(8, 45, mb_convert_encoding("TVA: FR05418664058", 'ISO-8859-1', 'UTF-8'));*/
$this->SetFont('Arial', '', 10);
$formatter = new IntlDateFormatter(
'fr_FR', // Locale for French (France)

View File

@@ -30,7 +30,13 @@
Voir l'avis de paiement
</a>
<button is="payment-page" id="{{ advert.id }}" class="w-full sm:w-auto bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-4 rounded-md text-center transition duration-300 ease-in-out">
Payer
Payer par CB
</button>
<button is="payment-virement" id="{{ advert.id }}" class="w-full sm:w-auto bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-4 rounded-md text-center transition duration-300 ease-in-out">
Virement Bancaire (validation entre 24h à 92h)
</button>
<button is="payment-cheque" id="{{ advert.id }}" class="w-full sm:w-auto bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-4 rounded-md text-center transition duration-300 ease-in-out">
Chéque (validation entre 24h à 92h, aprés récéption du chéque)
</button>
</div>
</div>

View File

@@ -0,0 +1,27 @@
{% extends 'admin/base.twig' %}
{% block content %}
<div class="min-h-screen flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8">
<div class="max-w-md w-full space-y-8 p-10 rounded-xl shadow-lg bg-gray-700">
<div class="text-center">
<!-- Icône de succès (SVG ou Emoji) -->
<svg class="mx-auto h-24 w-24 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<h2 class="mt-6 text-3xl font-extrabold text-white">
Votre demande de paiement par chèque a bien été prise en compte
</h2>
<p class="mt-2 text-sm text-white">
Un mail vous a été envoyé contenant un rappel des informations nécessaires pour lenvoi de votre chèque.
</p>
<p class="mt-2 text-sm text-white-600">
Merci de suivre les instructions indiquées dans ce mail afin de finaliser votre paiement: noter le numéro davis au dos et établir le chèque à lordre «SARL SITECONSEIL».
</p>
</div>
</div>
</div>
{% endblock %}
{% block title %}
Demande de paiement prise en compte
{% endblock %}

View File

@@ -0,0 +1,27 @@
{% extends 'admin/base.twig' %}
{% block content %}
<div class="min-h-screen flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8">
<div class="max-w-md w-full space-y-8 p-10 rounded-xl shadow-lg bg-gray-700">
<div class="text-center">
<!-- Icône de succès (SVG ou Emoji) -->
<svg class="mx-auto h-24 w-24 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<h2 class="mt-6 text-3xl font-extrabold text-white">
Votre demande de paiement par virement a bien été prise en compte
</h2>
<p class="mt-2 text-sm text-white">
Un mail vous a été envoyé contenant un rappel des informations bancaires nécessaires pour effectuer le paiement.
</p>
<p class="mt-2 text-sm text-white-600">
Merci de suivre les instructions indiquées dans ce mail afin de finaliser votre paiement.
</p>
</div>
</div>
</div>
{% endblock %}
{% block title %}
Demande de paiement prise en compte
{% endblock %}

View File

@@ -0,0 +1,40 @@
{% extends 'mails/base.twig' %}
{% block content %}
<mj-column>
<mj-text font-size="20px" font-weight="bold" color="#333333" padding-bottom="10px">
Confirmation de votre choix de paiement par chèque
</mj-text>
<mj-text font-size="16px" color="#555555" padding-bottom="20px">
Bonjour,<br/><br/>
Nous confirmons que vous avez bien choisi le paiement par chèque pour votre commande.
Veuillez trouver ci-dessous les informations nécessaires pour effectuer le paiement.
</mj-text>
<mj-divider border-color="#cccccc" />
<mj-text font-size="16px" font-weight="bold" color="#333333" padding-top="15px" padding-bottom="5px">
Adresse denvoi du chèque :
</mj-text>
<mj-text font-size="14px" color="#555555" line-height="1.5">
SARL SITECONSEIL<br/>
27 rue Le Séurier<br/>
02100 Saint-Quentin<br/>
</mj-text>
<mj-text font-size="16px" font-weight="bold" color="#333333" padding-top="15px" padding-bottom="5px">
Instructions pour le chèque :
</mj-text>
<mj-text font-size="14px" color="#555555" line-height="1.5">
- Merci de bien vouloir noter le numéro de lavis <strong>{{ datas.advert.numAvis }}</strong> au dos du chèque.<br/>
- Le chèque doit être établi à lordre de : <strong>SARL SITECONSEIL</strong>
</mj-text>
<mj-text font-size="14px" color="#555555" padding-top="20px">
Une fois le chèque reçu, nous procéderons à la validation de votre paiement dans les plus brefs délais.
</mj-text>
<mj-text font-size="14px" color="#555555" padding-top="20px">
Si vous avez des questions, nhésitez pas à nous contacter.
</mj-text>
<mj-text font-size="14px" color="#333333" padding-top="30px">
Cordialement,<br/>
Léquipe Support
</mj-text>
</mj-column>
{% endblock %}

View File

@@ -0,0 +1,35 @@
{% extends 'mails/base.twig' %}
{% block content %}
<mj-column>
<mj-text font-size="20px" font-weight="bold" color="#333333" padding-bottom="10px">
Confirmation de votre choix de paiement par virement
</mj-text>
<mj-text font-size="16px" color="#555555" padding-bottom="20px">
Bonjour,<br/><br/>
Nous confirmons que vous avez bien choisi le paiement par virement bancaire pour votre commande.
Veuillez trouver ci-dessous les coordonnées nécessaires pour effectuer le paiement.
</mj-text>
<mj-divider border-color="#cccccc" />
<mj-text font-size="16px" font-weight="bold" color="#333333" padding-top="15px" padding-bottom="5px">
Coordonnées bancaires :
</mj-text>
<mj-text font-size="14px" color="#555555" line-height="1.5">
Banque : <strong>CR NORD EST</strong><br/>
Titulaire du compte : <strong>SARL SITECONSEIL</strong><br/>
IBAN : <strong>FR76 1020 6006 7198 7497 798 061</strong><br/>
BIC / SWIFT : <strong>AGRIFRPP802</strong><br/>
Référence de paiement : <strong>{{ datas.advert.numAvis }}</strong>
</mj-text>
<mj-text font-size="14px" color="#555555" padding-top="20px">
Merci de bien vouloir effectuer le virement en mentionnant la référence ci-dessus afin que nous puissions valider votre paiement au plus vite.
</mj-text>
<mj-text font-size="14px" color="#555555" padding-top="20px">
Si vous avez des questions, nhésitez pas à nous contacter.
</mj-text>
<mj-text font-size="14px" color="#333333" padding-top="30px">
Cordialement,<br/>
Léquipe Support
</mj-text>
</mj-column>
{% endblock %}

View File

@@ -0,0 +1,24 @@
{% extends 'mails/base.twig' %}
{% block content %}
<mj-column>
<mj-text font-size="20px" font-weight="bold" color="#333333" padding-bottom="10px">
Information concernant le règlement de l'avis de paiement
</mj-text>
<mj-text font-size="16px" color="#555555" padding-bottom="20px">
Bonjour,<br/><br/>
Nous souhaitons vous informer que le client <strong>{{ datas.advert.customer.raisonSocial }}</strong> a confirmé quil règlera lavis de paiement émis pour la commande <strong>{{ datas.advert.numAvis }}</strong>.<br/><br/>
Le paiement sera effectué par chèque selon les modalités convenues.<br/>
Nous restons disponibles pour toute question ou information complémentaire.
</mj-text>
<mj-text font-size="14px" color="#555555" padding-top="20px">
Merci de votre collaboration.<br/><br/>
</mj-text>
<mj-text font-size="14px" color="#333333" padding-top="30px">
Cordialement,<br/>
Léquipe Support
</mj-text>
</mj-column>
{% endblock %}

View File

@@ -0,0 +1,23 @@
{% extends 'mails/base.twig' %}
{% block content %}
<mj-column>
<mj-text font-size="20px" font-weight="bold" color="#333333" padding-bottom="10px">
Information concernant le règlement de l'avis de paiement
</mj-text>
<mj-text font-size="16px" color="#555555" padding-bottom="20px">
Bonjour,<br/><br/>
Nous souhaitons vous informer que le client <strong>{{ datas.advert.customer.raisonSocial }}</strong> a confirmé quil règlera lavis de paiement émis pour la commande <strong>{{ datas.advert.numAvis }}</strong>.<br/><br/>
Le paiement sera effectué par virement bancaire selon les modalités convenues.<br/>
Nous restons disponibles pour toute question ou information complémentaire.
</mj-text>
<mj-text font-size="14px" color="#555555" padding-top="20px">
Merci de votre collaboration.<br/><br/>
</mj-text>
<mj-text font-size="14px" color="#333333" padding-top="30px">
Cordialement,<br/>
Léquipe Support
</mj-text>
</mj-column>
{% endblock %}