class PCustomerSheet < ActiveRecord::Base
has_many :p_documents, :as => :element
belongs_to :p_customer
accepts_nested_attributes_for :p_customer
belongs_to :p_customer_site
has_many :p_sheet_lines
accepts_nested_attributes_for :p_sheet_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
before_save do
if !self.imported
self.a_total_cost_ok = self.p_sheet_lines.sum(:a_total_cost_ok)
totals = PSheetLine.totals(self.p_sheet_lines)
self.a_ok_total = totals[:ok_total]
if (self.state == "livrée" or self.state == "facturée") and self.p_sheet_lines.where("p_customer_sheet_id is not null").where(:externe => false, :stock_done => false, :shiped => true).count == 0
self.stock_done = true
else
self.stock_done = false
end
end
true
end
def sheet_lines_shiped
self.p_sheet_lines.oks
end
def sheet_lines_not_shiped
self.p_sheet_lines.not_oks
end
def all_lines_shiped?
if sheet_lines_not_shiped.count == 0
true
else
false
end
end
after_save do
if self.state == "commande" or self.state == "livraison-en-cours"
if self.all_lines_shiped?
self.state = "livrée"
self.save
end
end
end
before_validation do
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 state_html
if self.state == "brouillon"
'Brouillon'
elsif self.state == "offre"
'Offre'
elsif self.state == "commande"
'Commande'
elsif self.state == "livraison-en-cours"
'Livr. en cours'
elsif self.state == "livrée"
'livrée'
elsif self.state =="facturée"
'Facturée'
elsif self.state == "annulée"
'Annulée'
elsif self.state == "refusée"
'Refusée'
end
end
after_create do
self.state = "brouillon" if !self.imported
self.save
end
#["brouillon", "offre", "commande", "livrée","facturée", "annulée", "refusée"]
def state_ok?
self.state == "facturée" ? true : false
end
def generate_d
if self.p_documents.create(:p_document_type => PDocumentType.find_by_label("Devis"))
self.state = "offre"
self.save
end
end
def generate_fp
if self.p_documents.create(:p_document_type => PDocumentType.find_by_label("Facture proforma"))
self.state = "offre"
self.save
end
end
def generate_bc
if self.p_documents.create(:p_document_type => PDocumentType.find_by_label("Bon de commande"))
self.state = "commande"
self.save
end
end
def generate_bl(sheet_id=nil)
if self.p_documents.create(:sheet_id => sheet_id, :p_document_type => PDocumentType.find_by_label("Bon de livraison"))
#self.state = "livrée"
self.save
end
end
def generate_f
if self.p_documents.create(:p_document_type => PDocumentType.find_by_label("Facture"))
self.state = "facturée"
self.save
end
end
def document_date(document=nil)
self.created_at
end
STATES = ["brouillon", "offre", "commande", "livrée","facturée", "annulée", "refusée"]
end