✨ 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:
@@ -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', () => {
|
||||
|
||||
@@ -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);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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',[
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
27
templates/admin/payement_interface_b.twig
Normal file
27
templates/admin/payement_interface_b.twig
Normal 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 l’envoi 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 d’avis au dos et établir le chèque à l’ordre « SARL SITECONSEIL ».
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
Demande de paiement prise en compte
|
||||
{% endblock %}
|
||||
27
templates/admin/payement_interface_v.twig
Normal file
27
templates/admin/payement_interface_v.twig
Normal 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 %}
|
||||
40
templates/mails/customer/avis-payment-bank.twig
Normal file
40
templates/mails/customer/avis-payment-bank.twig
Normal 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 d’envoi 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 l’avis <strong>{{ datas.advert.numAvis }}</strong> au dos du chèque.<br/>
|
||||
- Le chèque doit être établi à l’ordre 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, n’hé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 %}
|
||||
35
templates/mails/customer/avis-payment-virement.twig
Normal file
35
templates/mails/customer/avis-payment-virement.twig
Normal 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, n’hé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 %}
|
||||
24
templates/mails/customer/avis-payment_b.twig
Normal file
24
templates/mails/customer/avis-payment_b.twig
Normal 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é qu’il règlera l’avis 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 %}
|
||||
23
templates/mails/customer/avis-payment_v.twig
Normal file
23
templates/mails/customer/avis-payment_v.twig
Normal 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é qu’il règlera l’avis 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 %}
|
||||
Reference in New Issue
Block a user