This repository has been archived on 2021-11-24. You can view files and clone it, but cannot push or open issues or pull requests.
phone_app/app/models/line_stock.rb

129 lines
3.3 KiB
Ruby

class LineStock < ApplicationRecord
belongs_to :p_product_ref
belongs_to :stockable, :polymorphic => true
belongs_to :price_line
belongs_to :price_line_block
belongs_to :stock_movement_line
belongs_to :partition_lines
has_many :line_stock_p_articles
has_many :p_articles, through: :line_stock_p_articles
acts_as_sorting :fields => {
:id => {:name => "ID", :reorder => false},
:date => {:name => "Date", :reorder => true, :as => :date},
:stockable => {:name => "Origine", :reorder => false},
:p_product_ref => {:name => "Produit", :reorder => false},
:description => {:name => "Description", :reorder => true, :sort_name => "p_customer_sheets.created_at"},
#:dluo => {:name => "DLUO", :reorder => true},
:qte => {:name => "Quantité", :reorder => true },
:qte_available => {:name => "Quantité restante", :reorder => true},
:qte_used => {:name => "Quantité utilisée", :reorder => true},
:price_ht => {:name => "Valeur totale d'origine", :reorder => true, :as => :currency},
:price_ht_available => {:name => "Valeur disponnible", :reorder => true, :as => :currency},
:price_ht_used => {:name => "Valeur utilisée", :reorder => true, :as => :currency},
:price_u_ht => {:name => "Prix Unitaire", :reorder => true, :as => :currency},
#:price_u_kg_ht => {:name => "Prix U [Kg]", :reorder => true, :as => :currency},
#:qte_kg_per_unit => {:name => "Poids par unité", :reorder => true},
#:qte_kg => {:name => "Poids total", :reorder => true},
:actions => {:name => "Actions", :reorder => false},
}
has_many :line_stock_usages, :dependent => :destroy
acts_as_caching :fields => [:line_type, :price_ht_available, :price_ht_used, :price_u_ht, :price_u_kg_ht, :qte_kg_per_unit, :qte_kg, :qte_kg_available, :qte_kg_used ]
def price_u_ht
self.price_ht.to_f / self.qte.to_f
end
before_destroy do
LineStockUsage.where(:dest_line_stock_id => self.id).all.each do |lsu|
lsu.destroy
end
end
before_validation do
if self.qte >= 0
self.qte_used = self.line_stock_usages.sum(:qte)
self.qte_available = self.qte - self.qte_used
else
self.qte_used = nil
self.qte_available = nil
end
end
def ca_line_type
if self.stockable and self.stockable_type == "PriceDocument" and self.stockable.price_document_type_id == 6
"Facture d'achat"
elsif self.stockable and self.stockable_type == "PriceDocument" and self.stockable.price_document_type_id == 4
"Facture vente"
else
"Entrée manuelle"
end
end
def ca_price_ht_available
if self.qte >= 0
self.qte_available.to_f * self.price_u_ht.to_f
end
end
def ca_price_ht_used
if self.qte >= 0
self.qte_used.to_f * self.price_u_ht
end
end
def ca_price_u_ht
(self.price_ht.to_f / self.qte.to_f).round(2)
end
def ca_price_u_kg_ht
if self.qte_kg_per_unit.to_f != 0.0
(self.price_u_ht.to_f / self.qte_kg_per_unit).round(2)
else
0.0
end
end
def ca_qte_kg_per_unit
if self.p_product_ref
self.p_product_ref.weight
else
0.0
end
end
def ca_qte_kg
self.qte.to_f * self.qte_kg_per_unit.to_f
end
def ca_qte_kg_available
self.qte_available.to_f * self.qte_kg_per_unit.to_f
end
def ca_qte_kg_used
self.qte_used.to_f * self.qte_kg_per_unit.to_f
end
end