Class: Spina::Shop::InvoiceGenerator
- Inherits:
-
Object
- Object
- Spina::Shop::InvoiceGenerator
- Defined in:
- app/services/spina/shop/invoice_generator.rb
Instance Method Summary collapse
- #generate! ⇒ Object
-
#initialize(order) ⇒ InvoiceGenerator
constructor
A new instance of InvoiceGenerator.
Constructor Details
#initialize(order) ⇒ InvoiceGenerator
Returns a new instance of InvoiceGenerator.
3 4 5 6 |
# File 'app/services/spina/shop/invoice_generator.rb', line 3 def initialize(order) @order = order @account = Spina::Account.first end |
Instance Method Details
#generate! ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/services/spina/shop/invoice_generator.rb', line 8 def generate! @customer = @order.customer number = InvoiceNumberGenerator.generate! invoice = Invoice.new( order_id: @order.id, customer_id: @customer.id, vat_id: @customer.vat_id, company_name: @customer.company, prices_include_tax: @order.prices_include_tax, vat_reverse_charge: @order.vat_reverse_charge?, country_id: @order.billing_country.id, country_name: @order.billing_country.name, order_number: @order.number, customer_number: @customer.number, customer_name: @customer.full_name, address_1: @order.billing_address, postal_code: @order.billing_postal_code, city: @order.billing_city, number: number, invoice_number: "#{number}", date: Date.today, identity_name: @account.name, identity_details: "#{@account.address} #{@account.postal_code}, #{@account.city} #{@account.phone} #{@account.email}" ) @order.order_items.each do |order_item| invoice.invoice_lines << InvoiceLine.new( quantity: order_item.quantity, description: order_item.description, unit_price: order_item.unit_price, tax_rate: invoice.vat_reverse_charge? ? BigDecimal.new(0) : order_item.tax_rate, metadata: order_item. ) if order_item.discount_amount > 0 invoice.invoice_lines << InvoiceLine.new( quantity: -1, description: "Korting #{order_item.description}", unit_price: order_item.discount_amount, tax_rate: invoice.vat_reverse_charge? ? BigDecimal.new(0) : order_item.tax_rate, metadata: order_item. ) end end if @order.delivery_option.present? invoice.invoice_lines << InvoiceLine.new( quantity: 1, description: "Verzendkosten", unit_price: @order.delivery_price, tax_rate: invoice.vat_reverse_charge? ? BigDecimal.new(0) : @order.delivery_tax_rate, metadata: @order. ) end return invoice if invoice.save! end |