PaymentService
in package
Prépare les entités de paiement et calcule les montants d'abonnement entreprise.
Ce service ne dialogue avec aucune passerelle de paiement (voir StripeService pour cela) : il se limite à construire des Payment en mémoire, à déterminer le montant dû à partir du plan, du cycle de facturation et du nombre d'employés, et à formater les montants pour l'affichage en francs guinéens. La persistance des entités produites relève de l'appelant.
Table of Contents
Properties
- $entityManager : EntityManagerInterface
- $logger : LoggerInterface
Methods
- __construct() : mixed
- calculateSubscriptionAmount() : string
- Calculate subscription amount based on plan, billing cycle and employee count
- createCompanyPayment() : Payment
- Create a payment entity for company subscription
- formatAmount() : string
- Format amount for display
Properties
$entityManager
private
EntityManagerInterface
$entityManager
$logger
private
LoggerInterface
$logger
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, LoggerInterface $logger) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Gestionnaire Doctrine, utilisé ici en lecture seule pour charger les plans.
- $logger : LoggerInterface
-
Journalisation ; injectée et conservée, mais non utilisée dans l'implémentation actuelle.
calculateSubscriptionAmount()
Calculate subscription amount based on plan, billing cycle and employee count
public
calculateSubscriptionAmount(int $planId, string $billingCycle, int $employeeCount) : string
Charge le plan en base, retient son prix mensuel si le cycle vaut
Subscription::BILLING_MONTHLY et son prix annuel dans tous les autres cas,
puis multiplie ce prix unitaire par le nombre d'employés. Aucune remise ni palier
dégressif n'est appliqué. Le résultat est un float converti en chaîne, ce qui peut
produire une notation scientifique sur de très grandes valeurs.
Parameters
- $planId : int
-
Identifiant du plan à facturer.
- $billingCycle : string
-
Cycle de facturation ; seul Subscription::BILLING_MONTHLY déclenche le tarif mensuel.
- $employeeCount : int
-
Nombre d'employés servant de multiplicateur.
Tags
Return values
string —Montant total sous forme de chaîne.
createCompanyPayment()
Create a payment entity for company subscription
public
createCompanyPayment(User $user, Company $company, Subscription $subscription, string $paymentMethod, string $amount) : Payment
Instancie un Payment rattaché à l'utilisateur, à l'entreprise et à
l'abonnement fournis, avec le statut initial Payment::PENDING_STATUS et des
horodatages de création et de mise à jour positionnés à l'instant courant. Aucun
persist() ni flush() n'est effectué : l'entité retournée n'est pas encore
suivie par Doctrine.
Parameters
- $user : User
-
Utilisateur à l'origine du paiement.
- $company : Company
-
Entreprise facturée.
- $subscription : Subscription
-
Abonnement que ce paiement règle.
- $paymentMethod : string
-
Identifiant du moyen de paiement retenu.
- $amount : string
-
Montant, transporté sous forme de chaîne pour préserver la précision décimale.
Return values
Payment —Entité de paiement en attente, non persistée.
formatAmount()
Format amount for display
public
formatAmount(float $amount) : string
Arrondit le montant à l'unité (aucune décimale), utilise la virgule comme séparateur décimal et l'espace comme séparateur de milliers, puis suffixe la devise « GNF ».
Parameters
- $amount : float
-
Montant à formater.
Return values
string —Montant prêt à l'affichage, par exemple 150 000 GNF.