Sha256: d3c271a1961d6678bce9090637ad19fb09a2608071017a8685470ffd6ce4f3c2

Contents?: true

Size: 1.93 KB

Versions: 6

Compression:

Stored size: 1.93 KB

Contents

module Adherent
  class Payment < ActiveRecord::Base
    
    has_many :reglements, :dependent=>:destroy
    belongs_to :member
    
    attr_accessible :amount, :date, :mode
    
    validates :amount, :date, :mode, presence:true
    
    pick_date_for :date
    
    # le montant ne peut être que positif
    validates_numericality_of :amount, greater_than: 0
    # le mode doit être dans les MODES
    validates_inclusion_of :mode, in: Adherent::MODES
    
    after_create :imputation
    
    
    # quand on reçoit un paiement, il faut en réaliser l'imputation, 
    # plusieurs cas de figure sont à envisager.
    # 
    # Le cas le plus simple est lorsque le montant est inférieur ou égal ou 
    # montant dus par le membre pour les adhésions en cours.
    # 
    # Donc on impute sur les adhésions du membre non soldées et on regarde s'il reste
    # quelque chose.
    # 
    # 
    # 
    def imputation
      # liste les adhésions non soldées et le montant total dû
      # pour chaque adhésion non soldée (prise dans l'ordre chrono)
      # on crée un réglement du montant dû dans la limité du montant du paiement.
      un_paid_adhs = member.adhesions.order(:to_date).reject {|adh| adh.is_paid?}
      a_imputer = amount
      un_paid_adhs.each  do |adh|
        if a_imputer > 0
          impute = adh.add_reglement(id, a_imputer)
          a_imputer -= impute
        end
      end
    end
    
    # pour faire une imputation sur une adhesion dont l'id est transmise en argument
    # TODO faire que la valeur de retour soit true ou false pour 
    # que la méthode créate du controller puisse tester et rediriger en conséquence
    def imputation_on_adh(adh_id)
      Adhesion.find(adh_id).add_reglement(id, amount)
    end
    
    # calcule le montant du paiement qui n'a pas été imputé, donc qui 
    # ne correspond pas à des réglements
    def non_impute
      amount - reglements(true).sum(:amount)
    end
    
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
adherent-0.1.1 app/models/adherent/payment.rb
adherent-0.1.0 app/models/adherent/payment.rb
adherent-0.0.9 app/models/adherent/payment.rb
adherent-0.0.7 app/models/adherent/payment.rb
adherent-0.0.6 app/models/adherent/payment.rb
adherent-0.0.5 app/models/adherent/payment.rb