qi6_app/app/models/p_payment.rb
2019-05-17 12:30:45 +02:00

175 lines
3.9 KiB
Ruby

class PPayment < ApplicationRecord
belongs_to :p_payment_type
belongs_to :p_customer
validates :p_customer_id, :presence => true
validates :amount, :presence => true
validates :paid_at, :presence => true, :if => :paid_date_needed?
#validates :theo_date, :presence => true, :if => :theo_date_needed?
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
after_save do
self.generate_p_compta_element
end
def generate_p_compta_element
if self.p_compta_element
p_compta_element = self.p_compta_element
else
p_compta_element = PComptaElement.new(:p_customer => self.p_customer, :element => self)
end
p_compta_element.amount = (self.amount)
if self.paid_at?
p_compta_element.date = self.paid_at
elsif self.theo_paid_at?
p_compta_element.date = self.theo_paid_at
else
p_compta_element.date = self.created_at
end
puts p_compta_element.save
end
after_initialize do
self.p_payment_type_id = 41 if !self.p_payment_type_id?
self.paid = true if !self.id
end
def auto_affect(p_document)
totals = PSheetLine.totals(p_document.p_sheet_lines)
total = totals[:ok_total_ttc]
if self.reste_to_affect > 0.0 and p_document.total_du_th > 0.0
if self.reste_to_affect > p_document.total_du_th
total_to_affect_now = p_document.total_du_th
else
total_to_affect_now = self.reste_to_affect
end
total_to_affect_now = total_to_affect_now.to_f
self.p_payment_documents.create(:p_document => p_document, :amount => total_to_affect_now)
end
end
before_save do
self.paid = true
if self.p_remise
self.remise = true
else
self.remise = false
end
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.p_remise
self.remise = true
else
self.remise = false
end
if self.p_ship_tour_truck_sheet_line
self.p_sheet_line = p_ship_tour_truck_sheet_line.p_sheet_line
if self.p_sheet_line
self.p_customer = self.p_sheet_line.p_customer
end
#self.amount =123
end
if self.reste_to_affect.to_f != 0.0
self.affected = false
else
self.affected = true
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)) and !self.imported)
errors.add(:amount, "Ne doit pas être inférieur aux affectations (manque #{(self.total_affected - self.amount.to_f)}€)")
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 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
end
def paid_date_needed?
true if self.paid and !self.imported
end
def theo_date_needed?
true if self.p_payment_type and !self.p_payment_type.comptant and !self.imported
end
def reste_to_affect
(self.amount.to_f - self.total_affected.to_f).round(2)
end
end