mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-01-29 18:52:22 +01:00
factorized footprint computation
This commit is contained in:
parent
276a99c068
commit
02c7cb801f
@ -25,14 +25,6 @@ class HistoryValue < ActiveRecord::Base
|
|||||||
private
|
private
|
||||||
|
|
||||||
def compute_footprint
|
def compute_footprint
|
||||||
max_date = created_at || Time.current
|
FootprintService.compute_footprint(HistoryValue, self, 'created_at')
|
||||||
previous = HistoryValue.where('created_at < ?', max_date)
|
|
||||||
.order('created_at DESC')
|
|
||||||
.limit(1)
|
|
||||||
|
|
||||||
columns = HistoryValue.columns.map(&:name)
|
|
||||||
.delete_if { |c| %w[footprint updated_at].include? c }
|
|
||||||
|
|
||||||
Checksum.text("#{columns.map { |c| self[c] }.join}#{previous.first ? previous.first.footprint : ''}")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -302,14 +302,7 @@ class Invoice < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def compute_footprint
|
def compute_footprint
|
||||||
previous = Invoice.where('id < ?', id)
|
FootprintService.compute_footprint(Invoice, self)
|
||||||
.order('id DESC')
|
|
||||||
.limit(1)
|
|
||||||
|
|
||||||
columns = Invoice.columns.map(&:name)
|
|
||||||
.delete_if { |c| %w[footprint updated_at].include? c }
|
|
||||||
|
|
||||||
Checksum.text("#{columns.map { |c| self[c] }.join}#{previous.first ? previous.first.footprint : ''}")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def log_changes
|
def log_changes
|
||||||
|
@ -24,14 +24,7 @@ class InvoiceItem < ActiveRecord::Base
|
|||||||
private
|
private
|
||||||
|
|
||||||
def compute_footprint
|
def compute_footprint
|
||||||
previous = InvoiceItem.where('id < ?', id)
|
FootprintService.compute_footprint(InvoiceItem, self)
|
||||||
.order('id DESC')
|
|
||||||
.limit(1)
|
|
||||||
|
|
||||||
columns = InvoiceItem.columns.map(&:name)
|
|
||||||
.delete_if { |c| %w[footprint updated_at].include? c }
|
|
||||||
|
|
||||||
Checksum.text("#{columns.map { |c| self[c] }.join}#{previous.first ? previous.first.footprint : ''}")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def log_changes
|
def log_changes
|
||||||
|
@ -186,7 +186,7 @@ class AccountingExportService
|
|||||||
# we do not render the VAT row if it was disabled for this invoice
|
# we do not render the VAT row if it was disabled for this invoice
|
||||||
return nil if rate.zero?
|
return nil if rate.zero?
|
||||||
|
|
||||||
# FIXME, round at +/-0.01 if total > sum(items)
|
# FIXME, +/-0.01
|
||||||
vat = (invoice.total - (invoice.total / (rate / 100.00 + 1))) / 100.00
|
vat = (invoice.total - (invoice.total / (rate / 100.00 + 1))) / 100.00
|
||||||
row = ''
|
row = ''
|
||||||
columns.each do |column|
|
columns.each do |column|
|
||||||
@ -237,7 +237,7 @@ class AccountingExportService
|
|||||||
end
|
end
|
||||||
when :reservation
|
when :reservation
|
||||||
if invoice.invoiced_type == 'Reservation'
|
if invoice.invoiced_type == 'Reservation'
|
||||||
Setting.find_by(name: "accounting_#{invoice.invoiced.reservable_type}_#{type}")&.value
|
Setting.find_by(name: "accounting_#{invoice.invoiced.reservable_type}_#{type}")&.value
|
||||||
else
|
else
|
||||||
puts "WARN: Invoice #{invoice.id} has no reservation"
|
puts "WARN: Invoice #{invoice.id} has no reservation"
|
||||||
end
|
end
|
||||||
|
21
app/services/footprint_service.rb
Normal file
21
app/services/footprint_service.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# Provides helper methods to compute footprints
|
||||||
|
class FootprintService
|
||||||
|
# Compute the footprint
|
||||||
|
# @param class_name Invoice|InvoiceItem|HistoryValue
|
||||||
|
# @param item an instance of the provided class
|
||||||
|
# @param sort the items in database by the provided criterion, to find the previous one
|
||||||
|
def self.compute_footprint(klass, item, sort_on = 'id')
|
||||||
|
raise TypeError unless item.class.name == klass.name
|
||||||
|
|
||||||
|
previous = klass.where("#{sort_on} < ?", item[sort_on])
|
||||||
|
.order("#{sort_on} DESC")
|
||||||
|
.limit(1)
|
||||||
|
|
||||||
|
columns = klass.columns.map(&:name)
|
||||||
|
.delete_if { |c| %w[footprint updated_at].include? c }
|
||||||
|
|
||||||
|
Checksum.text("#{columns.map { |c| item[c] }.join}#{previous.first ? previous.first.footprint : ''}")
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user