127 lines
3.0 KiB
Ruby
127 lines
3.0 KiB
Ruby
class Partition < ApplicationRecord
|
|
belongs_to :admin
|
|
|
|
has_many :partition_lines, :dependent => :destroy
|
|
accepts_nested_attributes_for :partition_lines, allow_destroy: true
|
|
|
|
acts_as_sorting :fields => {
|
|
:id => {:name => "Id", :reorder => true},
|
|
:created_at => {:name => "Date de création", :reorder => true},
|
|
:date => {:name => "Date d'exécution", :reorder => true},
|
|
:stock_ok => {:name => "Executé ?", :reorder => true, :as => :boolean},
|
|
|
|
|
|
|
|
:actions => {:name => "Actions", :reorder => false}
|
|
}
|
|
|
|
has_many :line_stocks, :as => :stockable
|
|
|
|
|
|
def cancel_execution
|
|
#Fonction Admin
|
|
|
|
self.line_stocks.each do |ls|
|
|
ls.destroy
|
|
end
|
|
|
|
self.stock_ok = false
|
|
self.save
|
|
end
|
|
|
|
|
|
|
|
def ecart_warning
|
|
r = false
|
|
self.partition_lines.each do |pl|
|
|
r = true if pl.dif_weight.to_f != 0.0
|
|
end
|
|
|
|
return r
|
|
end
|
|
|
|
def stock_warning
|
|
r = false
|
|
self.partition_lines.each do |pl|
|
|
r = true if !pl.stock_available?
|
|
end
|
|
|
|
return r
|
|
end
|
|
|
|
def ok_to_execute
|
|
if !self.stock_ok and !self.ecart_warning and !self.stock_warning
|
|
true
|
|
else
|
|
false
|
|
|
|
end
|
|
end
|
|
|
|
def generate_stock
|
|
if self.ok_to_execute
|
|
|
|
self.partition_lines.each do |pl|
|
|
new_line_stock_price = 0.0
|
|
|
|
decr_line_stock = LineStock.create(:date => self.date, :p_product_ref => pl.p_product_ref_from, :qte => pl.qte_from*-1, :description => self.description, :price_ht => 0.0, :partition_line_id => pl.id, :stockable => self)
|
|
puts "a"
|
|
puts decr_line_stock.id
|
|
puts "b"
|
|
|
|
|
|
price = 0.0
|
|
line_stock_usages = []
|
|
|
|
qte_to_affect = pl.qte_from
|
|
|
|
LineStock.where(:p_product_ref_id => pl.p_product_ref_from.id).where("qte_available > 0.0").each do |ls| #.where("date <= ?", self.date) à rajouter lorsqu'on bloquera les dates...
|
|
if qte_to_affect <= ls.qte_available
|
|
qte_here = qte_to_affect
|
|
else
|
|
qte_here = ls.qte_available
|
|
|
|
end
|
|
|
|
qte_to_affect = qte_to_affect - qte_here
|
|
|
|
lsu = LineStockUsage.new(:qte => qte_here, :line_stock => ls, :dest_line_stock_id => decr_line_stock.id)
|
|
|
|
if lsu.save
|
|
|
|
else
|
|
raise
|
|
end
|
|
|
|
|
|
line_stock_usages << lsu
|
|
|
|
price += lsu.price_ht
|
|
ls.save
|
|
|
|
|
|
break if qte_to_affect == 0.0
|
|
|
|
#price_u_ht
|
|
|
|
end
|
|
|
|
decr_line_stock.price_ht = price * -1
|
|
decr_line_stock.save
|
|
|
|
|
|
new_line_stock_price += (decr_line_stock.price_ht * -1)
|
|
|
|
LineStock.create(:date => self.date, :p_product_ref => pl.p_product_ref_to, :description => self.description, :qte => pl.qte_to, :price_ht => new_line_stock_price, :partition_line_id => pl.id, :stockable => self)
|
|
|
|
|
|
end
|
|
|
|
self.stock_ok = true
|
|
self.save
|
|
return true
|
|
end
|
|
end
|
|
|
|
end
|