1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-04 15:24:23 +01:00
fab-manager/app/models/invoice_item.rb

68 lines
1.7 KiB
Ruby
Raw Normal View History

2019-03-13 16:49:03 +01:00
# frozen_string_literal: true
require 'checksum'
2019-03-13 16:49:03 +01:00
# A single line inside an invoice. Can be a subscription or a reservation
2020-03-25 10:16:47 +01:00
class InvoiceItem < ApplicationRecord
2016-03-23 18:39:41 +01:00
belongs_to :invoice
belongs_to :subscription
has_one :invoice_item # associates invoice_items of an invoice to invoice_items of an Avoir
after_create :chain_record
after_update :log_changes
def chain_record
2019-02-12 16:00:36 +01:00
self.footprint = compute_footprint
2019-03-11 13:49:16 +01:00
save!
2020-07-21 19:25:21 +02:00
FootprintDebug.create!(
footprint: footprint,
data: FootprintService.footprint_data(InvoiceItem, self),
klass: InvoiceItem.name
)
2019-02-12 16:00:36 +01:00
end
def check_footprint
footprint == compute_footprint
end
2020-07-21 19:25:21 +02:00
def debug_footprint
FootprintService.debug_footprint(InvoiceItem, self)
end
def amount_after_coupon
# deduct coupon discount
coupon_service = CouponService.new
coupon_service.ventilate(invoice.total, amount, invoice.coupon)
end
# return the item amount, coupon discount deducted, if any, and VAT excluded, if applicable
def net_amount
# deduct VAT
vat_service = VatHistoryService.new
vat_rate = vat_service.invoice_vat(invoice)
Rational(amount_after_coupon / (vat_rate / 100.00 + 1)).round.to_f
end
# return the VAT amount for this item
def vat
amount_after_coupon - net_amount
end
private
2019-02-12 16:00:36 +01:00
def compute_footprint
2019-09-18 15:09:14 +02:00
FootprintService.compute_footprint(InvoiceItem, self)
end
def log_changes
return if Rails.env.test?
return unless changed?
puts "WARNING: InvoiceItem update triggered [ id: #{id}, invoice reference: #{invoice.reference} ]"
puts '---------- changes ----------'
puts changes
puts '---------------------------------'
end
2016-03-23 18:39:41 +01:00
end