basic_dem_app/app/models/price_line_block.rb
Nicolas Bally b8df7ba0e8 suite
2020-03-23 10:29:59 +01:00

352 lines
6.9 KiB
Ruby

class PriceLineBlock < ApplicationRecord
belongs_to :price_lineable, :polymorphic => true
validates :wish_date, :presence => true
has_many :price_lines
accepts_nested_attributes_for :price_lines, allow_destroy: true
validates :p_customer_id, :presence => true
validates :particular_bill_id, :presence => true
validates :particular_send_id, :presence => true
belongs_to :particular_bill, :class_name => "Particular"#, :dependent => :destroy
accepts_nested_attributes_for :particular_bill
belongs_to :particular_send, :class_name => "Particular"#, :dependent => :destroy
accepts_nested_attributes_for :particular_send
belongs_to :p_customer
belongs_to :p_payment_type
QI_DYNAMICS = %w(fdp_tva_rate weight_tot accounting_zone_id accounting_zone_name tot_lines_ht tot_lines_tva tot_lines_ttc tot_fdp_ht tot_fdp_tva tot_fdp_ttc tot_discount_ht tot_discount_tva tot_discount_ttc tot_amount_af_discount_ht tot_amount_af_discount_tva tot_amount_af_discount_ttc gen_discount_percent tot_gen_discount_ht tot_gen_discount_tva tot_gen_discount_ttc tot_amount_ht tot_amount_tva tot_amount_ttc remise_enrobage_ok remise_ecole_ok remise_pre_order_ok remise_qte_ok payment_comptant payment_delais payment_month_end payment_end_at acompte acompte_percent payment_days nbr_ship creation_date p_customer_cat_id)
eval(QI_DYNAMICS_CORE)
def personalised_archive
self.price_lines.each do |pl|
pl.archive_now
end
end
def personalised_unarchive
self.price_lines.each do |pl|
pl.unarchive_now
end
end
before_validation do
if !self.id and self.p_customer
self.p_commercial_id = self.p_customer.p_commercial_id
self.p_payment_type_id = self.p_customer.p_payment_type_id
self.ct_payment_comptant = self.p_customer.comptant
self.ct_acompte = self.p_customer.acompte
self.ct_acompte_percent = self.p_customer.acompte_percent
self.ct_payment_delais = self.p_customer.payment_delais
self.ct_payment_month_end = self.p_customer.payment_fin_de_mois
end
if !self.p_customer or !self.particular_bill or !self.particular_bill.owner or self.particular_bill.owner != self.p_customer
errors.add(:particular_bill_id, 'doit être une adresse du client')
end
if !self.p_customer or !self.particular_send or !self.particular_send.owner or self.particular_send.owner != self.p_customer
errors.add(:particular_send_id, 'doit être une adresse du client')
end
end
def ca_remise_pre_order_ok
if self.p_customer and self.p_customer_cat_id == 1
true
else
false
end
end
def ca_remise_qte_ok
if self.p_customer and self.p_customer_cat_id == 1
true
else
false
end
end
def ca_remise_enrobage_ok
if !self.remise_ecole_ok and self.p_customer and self.p_customer.discount_enrobage
true
else
false
end
end
def ca_remise_ecole_ok
if self.p_customer and self.p_customer_cat_id == 3
true
else
false
end
end
after_save do
self.price_lines.each do |pl|
pl.save
end
end
def ca_weight_tot
r = 0.0
self.price_lines.each do |pl|
r+= pl.weight_tot
end
return r
end
def ca_accounting_zone_id
self.price_lineable.accounting_zone_id
end
def ca_accounting_zone_name
self.price_lineable.accounting_zone_name
end
def ca_tot_lines_ht
r = 0.0
self.price_lines.each do |pl|
r+= pl.tot_amount_ht
end
return r
end
def ca_tot_lines_tva
r = 0.0
self.price_lines.each do |pl|
r+= pl.tot_amount_tva
end
return r
end
def ca_tot_lines_ttc
r = 0.0
self.price_lines.each do |pl|
r+= pl.tot_amount_ttc
end
return r
end
def ca_tot_fdp_ht
0.0
end
def ca_fdp_tva_rate
if self.accounting_zone_id == 1
20.0
else
20.0 #force
end
end
def ca_tot_fdp_tva
self.tot_fdp_ht * (self.fdp_tva_rate/100)
end
def ca_tot_fdp_ttc
self.tot_fdp_ht + self.tot_fdp_tva
end
def ca_tot_discount_ht
if self.ct_tot_discount_percent
(self.ct_tot_discount_percent / -100.0) * self.ca_tot_lines_ht
else
0.0
end
end
def ca_tot_discount_tva
if self.ct_tot_discount_percent
(self.ct_tot_discount_percent / -100.0) * self.ca_tot_lines_tva
else
0.0
end
end
def ca_tot_discount_ttc
self.tot_discount_ht + self.tot_discount_tva
end
def ca_tot_amount_af_discount_ht
self.tot_lines_ht + self.tot_discount_ht + self.tot_fdp_ht
end
def ca_tot_amount_af_discount_tva
self.tot_lines_tva + self.tot_discount_tva + self.tot_fdp_tva
end
def ca_tot_amount_af_discount_ttc
self.tot_lines_ttc + self.tot_discount_ttc + self.tot_fdp_ttc
end
def ca_gen_discount_percent
0.0
end
def ca_tot_gen_discount_ht
0.0
end
def ca_tot_gen_discount_tva
0.0
end
def ca_tot_gen_discount_ttc
0.0
end
def ca_tot_amount_ht
self.tot_amount_af_discount_ht + self.tot_gen_discount_ht
end
def ca_tot_amount_tva
self.tot_amount_af_discount_tva + self.tot_gen_discount_tva
end
def ca_tot_amount_ttc
self.tot_amount_af_discount_ttc + self.tot_gen_discount_ttc
end
def ca_payment_comptant
if self.ct_payment_comptant
self.ct_payment_comptant
else
if self.p_customer
self.p_customer.comptant
else
nil
end
end
end
def ca_payment_delais
if self.ct_payment_delais
self.ct_payment_delais
else
if self.p_customer
self.p_customer.payment_delais
else
nil
end
end
end
def ca_payment_month_end
if self.ct_payment_month_end
self.ct_payment_month_end
else
if self.p_customer
self.p_customer.payment_fin_de_mois
else
nil
end
end
end
def ca_payment_end_at
if self.ct_payment_comptant
self.creation_date
else
self.creation_date + self.ct_payment_delais.to_i.days
end
end
def ca_acompte
if self.p_customer
self.p_customer.acompte
else
nil
end
end
def ca_acompte_percent
if self.p_customer
self.p_customer.acompte_percent
else
nil
end
end
def ca_payment_days
end
def ca_nbr_ship
if self.ct_nbr_ship
self.ct_nbr_ship
else
nil
end
end
def ca_creation_date
if self.ct_creation_date
self.ct_creation_date
elsif self.id
self.created_at
else
Date.today
end
end
def ca_p_customer_cat_id
if self.p_customer
self.p_customer.p_customer_cat_id
else
nil
end
end
def cumul_discount_ht
r = 0.0
self.price_lines.each do |pl|
r += pl.ca_tot_discount_ht
end
return r
end
end