basic_dem_app/app/models/p_payment.rb
Nicolas Bally 3524d4c862 intial
2020-03-18 15:49:29 +01:00

170 lines
3.5 KiB
Ruby

class PPayment < ApplicationRecord
belongs_to :p_bank_account
belongs_to :p_payment_type
belongs_to :p_customer
validates :p_customer_id, :presence => true
validates :amount, :presence => true
validates :paid_at, :presence => true
belongs_to :p_remise
belongs_to :p_sheet_line
belongs_to :p_ship_tour_truck_sheet_line
has_many :p_payment_documents, :dependent => :destroy
accepts_nested_attributes_for :p_payment_documents, allow_destroy: true
has_one :p_compta_element, :as => :element, :dependent => :destroy
def self.qi_table_order
{
:p_payment_type => {:name => "Type de paiement",:reorder => false},
:paid_at => {:name => "Date de paiement",:reorder => true},
:received_at => {:name => "Date de réception du paiement",:reorder => true},
:p_customer => {:name => "Client",:reorder => false},
:amount => {:name => "Montant",:reorder => true},
:reste_to_affect => {:name => "Montant à affecter",:reorder => true},
#:label => {:name => "",:reorder => false},
:number => {:name => "N°/Ref",:reorder => false},
:actions => {:name => "Actions",:reorder => false}
}
end
def self.valid_sort
r = []
self.qi_table_order.each do |key, value|
if value.instance_of? Hash
if value[:reorder] == false
elsif value[:reorder] == true
if value[:sort_name]
r << value[:sort_name]
else
r << key.to_s
end
end
end
end
return r
end
QI_DYNAMICS = %w(total_affected reste_to_affect affected)
eval(QI_DYNAMICS_CORE)
def compta_date
self.paid_at
end
def compta_amount
self.amount
end
after_save do
self.generate_p_compta_element
end
def generate_p_compta_element
if self.id
if p_compta_element = PComptaElement.where(:element_type => "PPayment", :element_id => self.id).first
else
p_compta_element = PComptaElement.new(:p_customer => self.p_customer, :element => self)
end
p_compta_element.save
end
end
after_initialize do
self.p_payment_type_id = 1 if !self.p_payment_type_id?
self.paid = true
end
before_validation do
if self.p_payment_type and self.amount
if self.p_payment_type.signe == 1
if self.amount < 0
self.amount = self.amount * -1
end
elsif self.p_payment_type.signe == 2
if self.amount > 0
self.amount = self.amount * -1
end
end
end
if self.amount and (((self.amount < 0 and self.total_affected < self.amount.to_f) or (self.amount > 0 and self.total_affected > self.amount.to_f)))
errors.add(:amount, "Ne doit pas être inférieur aux affectations (manque #{(self.total_affected - self.amount.to_f).round(2)}€)")
end
true
end
after_save do
self.p_payment_documents.each do |p_payment_document|
p_payment_document.save
end
#self.p_customer.update_caches if self.p_customer
true
end
def ca_total_affected
r = 0.0
self.p_payment_documents.each do |ppd|
r += ppd.amount.to_f if !ppd.marked_for_destruction?
end
return r.round(2)
end
def ca_reste_to_affect
(self.amount.to_f - self.total_affected.to_f).round(2)
end
def ca_affected
if self.reste_to_affect == 0.0
true
else
false
end
end
end