mirror of
https://github.com/internetee/registry.git
synced 2025-06-08 13:44:47 +02:00
81 lines
2.9 KiB
Ruby
81 lines
2.9 KiB
Ruby
class Invoice
|
|
class EInvoiceGenerator
|
|
attr_reader :invoice
|
|
attr_reader :payable
|
|
|
|
def initialize(invoice, payable)
|
|
@invoice = invoice
|
|
@payable = payable
|
|
end
|
|
|
|
def generate
|
|
seller = EInvoice::Seller.new
|
|
seller.name = invoice.seller_name
|
|
seller.registration_number = invoice.seller_reg_no
|
|
seller.vat_number = invoice.seller_vat_no
|
|
|
|
seller_legal_address = EInvoice::Address.new
|
|
seller_legal_address.line1 = invoice.seller_street
|
|
seller_legal_address.line2 = invoice.seller_state
|
|
seller_legal_address.postal_code = invoice.seller_zip
|
|
seller_legal_address.city = invoice.seller_city
|
|
seller_legal_address.country = invoice.seller_country
|
|
seller.legal_address = seller_legal_address
|
|
|
|
buyer = EInvoice::Buyer.new
|
|
buyer.name = invoice.buyer_name
|
|
buyer.registration_number = invoice.buyer_reg_no
|
|
buyer.vat_number = invoice.buyer_vat_no
|
|
buyer.email = invoice.buyer.billing_email
|
|
|
|
buyer_bank_account = EInvoice::BankAccount.new
|
|
buyer_bank_account.number = invoice.buyer.e_invoice_iban
|
|
buyer.bank_account = buyer_bank_account
|
|
|
|
buyer_legal_address = EInvoice::Address.new
|
|
buyer_legal_address.line1 = invoice.buyer_street
|
|
buyer_legal_address.line2 = invoice.buyer_state
|
|
buyer_legal_address.postal_code = invoice.buyer_zip
|
|
buyer_legal_address.city = invoice.buyer_city
|
|
buyer_legal_address.country = invoice.buyer_country
|
|
buyer.legal_address = buyer_legal_address
|
|
|
|
e_invoice_invoice_items = []
|
|
invoice.each do |invoice_item|
|
|
e_invoice_invoice_item = EInvoice::InvoiceItem.new.tap do |i|
|
|
i.description = invoice_item.description
|
|
i.price = invoice_item.price
|
|
i.quantity = invoice_item.quantity
|
|
i.unit = invoice_item.unit
|
|
i.subtotal = invoice_item.subtotal
|
|
i.vat_rate = invoice_item.vat_rate
|
|
i.vat_amount = invoice_item.vat_amount
|
|
i.total = invoice_item.total
|
|
end
|
|
e_invoice_invoice_items << e_invoice_invoice_item
|
|
end
|
|
|
|
e_invoice_invoice = EInvoice::Invoice.new.tap do |i|
|
|
i.seller = seller
|
|
i.buyer = buyer
|
|
i.items = e_invoice_invoice_items
|
|
i.number = invoice.number
|
|
i.date = invoice.issue_date
|
|
i.recipient_id_code = invoice.buyer_reg_no
|
|
i.reference_number = invoice.reference_no
|
|
i.due_date = invoice.due_date
|
|
i.beneficiary_name = invoice.seller_name
|
|
i.beneficiary_account_number = invoice.seller_iban
|
|
i.payer_name = invoice.buyer_name
|
|
i.subtotal = invoice.subtotal
|
|
i.vat_amount = invoice.vat_amount
|
|
i.total = invoice.total
|
|
i.currency = invoice.currency
|
|
i.delivery_channel = %i[internet_bank portal]
|
|
i.payable = payable
|
|
end
|
|
|
|
EInvoice::EInvoice.new(date: Time.zone.today, invoice: e_invoice_invoice)
|
|
end
|
|
end
|
|
end
|