class TFSO::Invoice
Constants
- URL
Public Class Methods
new(auth)
click to toggle source
# File lib/tfso/invoice.rb, line 8 def initialize(auth) ensure_authenticated(auth) self.session_id = auth.session_id intialize_savon_client end
Public Instance Methods
create(order_attributes)
click to toggle source
# File lib/tfso/invoice.rb, line 44 def create(order_attributes) response = savon_client.call(:save_invoices, message: {invoices: [{InvoiceOrder: order_attributes}] }, cookies: @cookies) response.body[:save_invoices_response][:save_invoices_result][:invoice_order] end
find(search_params)
click to toggle source
# File lib/tfso/invoice.rb, line 14 def find(search_params) response = savon_client.call(:get_invoices, message: {searchParams: search_params, invoiceReturnProperties: {string: ['OrderId', 'InvoiceId', 'CustomerId', 'OrderStatus', 'DateOrdered', 'DateInvoiced', 'PaymentTime', 'CustomerReferenceNo', 'IncludeVAT', 'YourReference', 'OrderTotalIncVat', 'OrderTotalVat', 'InvoiceTitle', 'InvoiceText', 'Paid', 'Currency', 'PaymentMethodId', 'PaymentAmount', 'TypeOfSaleId', 'Distributor', 'DistributionMethod', 'InvoiceEmailAddress']}, rowReturnProperties: {string: ['ProductId', 'VatRate', 'Price', 'Name', 'DiscountRate', 'Quantity']} }, cookies: @cookies) result = response.body[:get_invoices_response][:get_invoices_result] if result if result[:invoice_order].class == Hash [result[:invoice_order]] else result[:invoice_order] end else [] end end
find_by_invoice_id(id)
click to toggle source
# File lib/tfso/invoice.rb, line 28 def find_by_invoice_id(id) if invoice = find(InvoiceIds: {int: [id]}) invoice.first else false end end
find_by_order_id(id)
click to toggle source
# File lib/tfso/invoice.rb, line 36 def find_by_order_id(id) if invoice = find(OrderIds: {int: [id]}) invoice.first else false end end
transform_attributes(invoice, items)
click to toggle source
# File lib/tfso/invoice.rb, line 49 def transform_attributes(invoice, items) invoice.compact! items.compact! state = case invoice[:state] when :invoice 'Invoiced' when :draft 'Offer' else invoice[:state] end invoice_info = { OrderStatus: state, DateOrdered: Time.zone.today.iso8601, CustomerId: invoice[:customer_id], CustomerName: invoice[:customer_name], CustomerOrgNo: invoice[:customer_gov_no], InvoiceEmailAddress: invoice[:customer_email], InvoiceRows: [] } invoice_info[:TypeOfSaleId] = invoice[:type_of_sale_id] invoice_info[:PaymentTime] = invoice[:payment_time] if invoice[:currency] invoice_info[:Currency] = { Symbol: invoice[:currency], Rate: invoice[:currency_rate].to_f, } end invoice_info[:InvoiceTitle] = invoice[:title] if invoice[:title] invoice_info[:InvoiceText] = invoice[:description] if invoice[:description] invoice_info[:YourReference] = invoice[:order_ref] invoice_info[:Distributor] = invoice[:distributor] if invoice[:distributor] invoice_info[:DistributionMethod] = invoice[:distribution_method] if invoice[:distribution_method] invoice[:Addresses] = { Invoice: { :Street => invoice[:customer_street], :PostalCode => invoice[:customer_postal_code], :PostalArea => invoice[:customer_city], :State => invoice[:customer_state], :Country => invoice[:customer_country_code] } } if items.any? invoiceRows = [] items.each {|item| if item[:type] == :text invoiceRows << {:InvoiceRow => { Type: 'Text', Name: item[:name] }} else invoiceRows << {:InvoiceRow => { Type: 'Normal', ProductId: item[:product_id], Name: item[:name], Price: item[:price].to_f, Quantity: item[:quantity].to_f }} end } invoice_info[:InvoiceRows] = invoiceRows end invoice_info end