Ajout section "Informations sur les paiements" avec 3 cartes :
- Stripe : CB et SEPA operes par Stripe (PCI DSS)
- SumUp Bank : compte bancaire en Irlande pour les virements
- Declaree aux Etats : Prefecture, INSEE, RNA, SIRET
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Etapes mises a jour (5 etapes):
1. Reception contrat par email depuis contrat@e-cosplay.fr
2. Signature electronique DocuSeal
3. Configuration mode de paiement (SEPA/CB/virement)
4. Creation espace client
5. Continuite des services
Verification 1er paiement (bloc rouge):
- Premier paiement obligatoirement par CB ou SEPA (pas de virement)
- Requis pour valider le moyen de paiement
- Paiements suivants : SEPA/CB/virement au choix
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Decisions avertissements/sanctions/resiliations restent privees
pour proteger la reputation du client
- AG Exceptionnelle possible avec seule mention "Discussion
resiliation service client" - aucune info nominative communiquee
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Entre 3eme avertissement et reunion bureau (24h), possibilite
d'envoyer un email a direction@e-cosplay.fr pour repousser a 72h
- Preuves et documents justificatifs obligatoires
- Frais de remise en service possibles, plafonnes a 300 EUR HT
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ajout question FAQ "Puis-je devenir adherent ?" :
- Non, par principe de protection des clients et conflit d'interet
- Les clients avec services ne peuvent pas adherer
- Les membres ne sont pas des societes de developpement
(eviter concurrence et influence sur les decisions)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Horaires ouverture: 10h-12h / 14h-17h du lundi au vendredi
- Hors horaires: pas de reponse ou facturation 35 EUR HT/h
(toute heure commencee est due)
- Exception: probleme technique verifie et verifiable = non facture
- Tout abus sanctionne sans limite (avertissement/resiliation)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ajout bloc dore expliquant le statut associatif :
- Association loi 1901 a but non lucratif
- Membres adherents de l'association
- Benevoles selon leur disponibilite et desir
- Revenus couvrent uniquement les couts d'infrastructure
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Tarif passe de 200 EUR a 100 EUR/mois HT (1200 EUR/an)
- Mention claire: hebergement uniquement, aucune maintenance,
aucune mise a jour, aucun support technique inclus
- La maintenance reste a la charge du client ou d'un prestataire externe
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3 niveaux visuels (jaune/orange/rouge) :
- 1er avertissement : notification officielle
- 2eme avertissement : procedure de suspension preparee
- 3eme : resiliation immediate et definitive, non negociable
Decisions prises par le bureau et membres fondateurs a huis clos.
Contestation uniquement via direction@e-cosplay.fr.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ajout carte rouge "Site hors CMS Esy-Web" dans la grille tarifaire
migration SITECONSEIL : 200 EUR/mois HT (2400 EUR/an) pour les sites
realises avec WordPress, Prestashop, etc. necessitant une machine dediee.
Tarif non negociable.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Page /legal/tarif:
- Section E-Flex: financement sans frais, 3 methodes (SEPA/CB/virement)
- Mention financement EsyFlex SITECONSEIL poursuivable sous validation
- Mention credit obligatoire
- Date de mise a jour dynamique
Page /move/from/siteconseil:
- Mention E-Flex existant chez SITECONSEIL (reprise sous validation)
- Lien vers grille tarifaire complete
- Section developpement sur-mesure: refus sauf si termine
(l'association n'a pas la capacite de gerer les devs sur-mesure)
- Suppression controller LegalTarifController doublon
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ajout ligne orange "Modification des tarifs : les tarifs sont differents
de ceux de la SARL SITECONSEIL" dans la section "Ce qui change".
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ajout section "Base legale" avec references juridiques :
- Article 1219 Code civil (exception d'inexecution)
- Article L.441-10 Code de commerce (suspension de plein droit)
- Liberte de suspension quelle que soit la situation de l'entreprise
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ajout section rouge "Systeme automatique de gestion des impayes" :
- Suspension automatique des services sans intervention humaine
- Aucun renouvellement sans paiement prealable
- Aucun arrangement possible (s'enerver ne changera rien)
- Rappel: contacter avant l'echeance, sans paiement pas de service
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Lien Contrats dans la sidebar (entre Clients et Facturation)
- Controller ContratController avec route /admin/contrats
- Template placeholder avec description du flow futur:
creer contrat -> signer -> creation espace client auto
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Annulation automatique:
- Apres 2 echecs de prelevement, E-Flex passe en STATE_CANCELLED
- Email d'annulation envoye au client (detail: total, paye, restant,
rejets) + notification admin
- Template eflex_cancelled.html.twig
Blocage creation:
- Controller: refuse la creation si un E-Flex est en cours (active,
pending_setup, draft) ou en defaut (cancelled avec nbFailed > 0)
- Template: bouton "Creer" remplace par "Creation bloquee (defaut)"
ou "E-Flex en cours" selon le cas
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ajout "Un credit vous engage et doit etre rembourse. Verifiez votre
capacite de remboursement avant de vous engager." dans :
- Page process E-Flex (bandeau orange avant le bouton signer)
- PDF contrat E-Flex (section dediee avant les signatures)
- Email de signature E-Flex (encadre orange)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Email eflex_paiement_recu au client lors du paiement manuel admin
(reference, echeance, montant, methode, date, progression)
- Bandeau vert si toutes echeances payees
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Ajout input date (pre-rempli aujourd'hui) dans le formulaire "Paye"
- Controller accepte la date saisie pour setPaidAt au lieu de now()
- Date et methode affiches dans le tableau des echeances
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Checkout Session avec setup_future_usage=off_session + customer Stripe
pour sauvegarder la carte et permettre les prelevements futurs
- Webhook payment_intent.succeeded stocke le PaymentMethod sur EFlex
si pas deja configure (permet cron auto ensuite)
- 1ere echeance = creation +2 jours (pas de champ startDate)
- Echeances suivantes = tous les 2 mois apres la 1ere
- Retrait du champ date 1ere echeance du formulaire (automatique)
- Info dans le formulaire: "La 1ere echeance sera due 2 jours apres
la signature. Les suivantes tous les 2 mois."
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remplace les boutons "Payer echeance X" par 3 cartes de choix :
- Virement bancaire : coordonnees bancaires + reference a indiquer
- Carte bancaire : bouton payer la prochaine echeance via Stripe Checkout
- Prelevement automatique SEPA (recommande) : configurer l'IBAN une fois
Si SEPA deja configure, affiche le statut actif avec IBAN masque.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Le @unlink() etait appele avant $em->flush(), Vich essayait de lire
un fichier deja supprime. Les fichiers temporaires sont maintenant
supprimes apres le flush.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Ajout getPdfSignedFile() et getPdfAuditFile() manquants sur entite EFlex (erreur Vich/Twig)
- Retrait du select methode de paiement dans le formulaire de creation E-Flex (le client choisira directement)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Nouveau template emails/echeancier_verify_code.html.twig
(sans reference a advert.orderNumber)
- Controller utilise le nouveau template au lieu de order_verify_code
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Route /echeancier/verify/{id}/resend (POST)
- Genere nouveau code 6 chiffres + envoie par email
- Bouton "Renvoyer le code" sous le formulaire
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Protection :
- /echeancier/verify/{id} : verification par code email 6 chiffres
(meme pattern que OrderPayment verify, 15 min expiry)
- process redirige vers verify si non authentifie
Pages client :
- Boutons "Signer l'echeancier" (vert) et "Refuser" (rouge) dans process
- /echeancier/sign/{id} : redirige vers DocuSeal
- /echeancier/refuse/{id} : passe en cancelled, affiche page refused
- echeancier/verify.html.twig : saisie code
- echeancier/refused.html.twig : confirmation refus
Email :
- Lien pointe vers /echeancier/verify/{id} (protege)
- Texte Stripe ajoute dans page process
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remplace "vous autorisez le prelevement automatique" par
"un email vous sera envoye pour effectuer la configuration
des prelevements automatiques" dans tous les templates.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Entite Echeancier :
- MAJORATION_RATE = 0.05 constante
- getMajoration() : montant de la majoration
- getTotalWithMajoration() : total creance + 5%
- getMonthlyAmount() : calcule sur le total majore
Controller create :
- Echeances calculees sur le total majore (pas le total brut)
PDF EcheancierPdf :
- Bloc resume : creance, majoration (rouge), total a payer
- Tableau total : "TOTAL (creance + majoration 5%)"
Email proposition :
- Lignes creance, majoration +5% (rouge), total a payer
Page process (client) :
- 4 colonnes : creance, majoration 5%, total a payer, mensualite
Admin show :
- Carte "Creance + majoration 5%" avec detail
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Page publique /echeancier/process/{id} avec detail complet avant signature
(motif, resume, tableau echeances, conditions)
- Redirige vers page signed si deja signe/actif/termine
- Bouton unique "Envoyer pour signature" / "Renvoyer signature" selon state
- Suppression bouton "Envoyer proposition" (remplace par signature directe)
- Email signature : ajout bouton "Voir les details" + lien processUrl
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- create() genere le PDF automatiquement apres creation
- Extraction generateEcheancierPdf() methode privee reutilisable
- Bouton "Regenerer PDF" (jaune) si PDF existe, "Generer PDF" sinon
- Bouton visible dans tous les etats sauf cancelled/completed
- Redirect vers show apres creation (au lieu de l'onglet client)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Ajout methode "Echeancier" dans le select du modal paiement manuel
- Select dynamique des echeanciers du client (visible si methode=echeancier)
- AdvertPayment : relation ManyToOne vers Echeancier (nullable)
- Controller : lie l'echeancier au paiement, label avec description
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Ne passe en 'accepted' que quand totalPaid >= totalTtc
- Facture generee uniquement quand totalement paye
- Message flash avec reste a payer si paiement partiel
- Modal affiche "Deja paye / Reste" si paiements existants
- Bouton visible sur avis send + tout state non cancel/accepted
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Bouton "Enregistrer paiement" sur les avis au state 'send'
- Modal avec montant, methode (virement/cheque/especes/CB externe/autre),
reference optionnelle
- Route manualPayment : cree AdvertPayment, passe avis en accepted,
genere facture payee, indexe Meilisearch
- Methodes : virement, cheque, especes, CB terminal externe, autre
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Webhook Stripe :
- handleInvoicePaid : trouve echeancier par subscriptionId, marque la
prochaine ligne en attente comme payee, envoie email confirmation,
passe echeancier en 'completed' si toutes les echeances payees
- handleInvoiceFailed : marque ligne en echec avec raison, envoie email
echec au client + notification admin, passe en 'default' apres 2 echecs
Emails :
- echeancier_echeance_payee.html.twig : confirmation prelevement reussi
- echeancier_echeance_echec.html.twig : notification echec prelevement
Fix DevisController :
- Route #[Route] deplacee de sendDevisSignEmail vers createAdvert
(erreur "controller not callable" corrigee)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- testGeneratePdfWithExistingPdf : supprime ancien PDF sur disque
- testGeneratePdfWithExistingPdfNotOnDisk : ancien PDF absent du disque
- Retire @codeCoverageIgnoreStart sur le bloc hadOld
1406 PHP tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>