/** * ========================================================================= * PLATEFORME ECO-PANNEAU.FR - VERSION 1.0.0 * Composants : Modales complexes B2B (Stripe, Coffre-fort, Équipe, Partage) * ========================================================================= */ const { useState, useMemo } = React; // ========================================================================= // 1. COMPOSANT STRIPE : FORMULAIRE DE PAIEMENT // ========================================================================= const StripePaymentForm = ({ clientSecret, onSuccess, onCancel, amountCents }) => { const { AlertTriangle, Loader, CreditCard } = window; const stripePromise = useMemo(() => window.Stripe(window.ECO_CONFIG.stripePubKey), []); const options = useMemo(() => ({ clientSecret, appearance: { theme: 'stripe', variables: { colorPrimary: '#10b981', borderRadius: '12px' } } }), [clientSecret]); const CheckoutForm = () => { const stripeInstance = window.ReactStripe.useStripe(); const elements = window.ReactStripe.useElements(); const [isProcessing, setIsProcessing] = useState(false); const [error, setError] = useState(null); const handleSubmit = async (e) => { e.preventDefault(); if (!stripeInstance || !elements) return; setIsProcessing(true); setError(null); const { error: submitError } = await elements.submit(); if (submitError) { setError(submitError.message); setIsProcessing(false); return; } const { error: confirmError, paymentIntent } = await stripeInstance.confirmPayment({ elements, confirmParams: { return_url: window.location.href }, redirect: "if_required" }); if (confirmError) { setError(confirmError.message); setIsProcessing(false); } else if (paymentIntent && paymentIntent.status === "succeeded") { onSuccess(paymentIntent.id); } else { setError("Statut de paiement inattendu."); setIsProcessing(false); } }; return (
); }; return (Sélectionnez le type d'abonnement et les options matérielles.
{pRental} € HT / mois
Paiement mensuel automatisé. Résiliable à tout moment, en un clic, à la fin de vos travaux. Engagement mensuel, tout mois entamé est dû.
{pPurchase} € HT
Paiement unique sans abonnement. Le panneau numérique reste actif indéfiniment.
Recevez votre panneau pré-imprimé (Format A1) sur un support rigide Akilux résistant aux intempéries, livré directement au cabinet.
Quantité souhaitée
{pBoardFirst}€ HT le premier, {pBoardAdd}€ HT l'unité supplémentaire.
Laissez vide pour utiliser l'adresse de votre société.
Reste à payer aujourd'hui
{platformHasTva ? 'TVA 20% incluse' : 'TVA non applicable'}
{Math.max(0, finalUpfrontTTC - (myClientData.wallet_balance || 0)).toFixed(2)} €
{currentOfferType === 'rental' &&Puis {finalMonthlyTTC.toFixed(2)} € TTC / mois
} {currentOfferType === 'purchase' &&Puis { (pHosting * priceMultiplier * tvaMult).toFixed(2) } € TTC / an
}L'administration a temporairement suspendu la validation de nouvelles commandes payantes sur la plateforme. Veuillez réessayer ultérieurement.
Preuves et constats d'huissier
Ces documents sont chiffrés et inaccessibles au public. Ils seront inclus dans l'archive D.O.E lors de la clôture du panneau.
{doc.name}
Aucun document privé stocké.
)}Aucun lien n'a encore été créé pour ce panneau.
)} {managingPanneau.delegate_links?.map((link, idx) => { const isExpired = link.exp < Date.now() / 1000; return ({link.name}
Exp. : {new Date(link.exp * 1000).toLocaleDateString('fr-FR')} {isExpired && (Expiré)}