class Agents::XeroAgent
Public Instance Methods
create_invoice(event)
click to toggle source
# File lib/huginn_xero_agent/xero_agent.rb, line 60 def create_invoice(event) interpolate_with(event.payload) do invoice = gateway.build_invoice({ invoice_type: "ACCREC", due_date: (interpolated['due_in_days'].presence || 14).to_i.days.from_now }) invoice.contact.name = interpolated['contact_name'].presence invoice.contact.phone.number = interpolated['contact_phone_number'].presence invoice.contact.email = interpolated['contact_email'].presence invoice.contact.address.line_1 = interpolated['contact_address_line_1'].presence invoice.contact.address.line_2 = interpolated['contact_address_line_2'].presence invoice.contact.address.city = interpolated['contact_address_city'].presence invoice.contact.address.region = interpolated['contact_address_region'].presence invoice.contact.address.country = interpolated['contact_address_country'].presence invoice.contact.address.post_code = interpolated['contact_address_post_code'].presence [Utils.value_at(event.payload, interpolated['item_path'].presence || '.') || {}].flatten.each do |item| line_item = XeroGateway::LineItem.new( :description => interpolated(item)['item_description'], :account_code => interpolated(item)['item_account_code'].presence, :unit_amount => interpolated(item)['item_amount'] ) invoice.line_items << line_item end invoice.create invoice end end
default_options()
click to toggle source
# File lib/huginn_xero_agent/xero_agent.rb, line 25 def default_options { due_in_days: 14, contact_name: '{{name}}', contact_phone_number: '{{phone}}', contact_email: '{{email}}', item_path: 'items', item_description: 'Widget', item_account_code: '123', item_amount: 20, expected_receive_period_in_days: 10 } end
gateway()
click to toggle source
# File lib/huginn_xero_agent/xero_agent.rb, line 49 def gateway @gateway ||= XeroGateway::PrivateApp.new(ENV['XERO_CONSUMER_KEY'], ENV['XERO_CONSUMER_SECRET'], ENV['XERO_PRIVATE_KEY_PATH']) end
receive(incoming_events)
click to toggle source
# File lib/huginn_xero_agent/xero_agent.rb, line 53 def receive(incoming_events) incoming_events.each do |event| invoice = create_invoice(event) create_event payload: { id: invoice.invoice_id } end end
validate_options()
click to toggle source
# File lib/huginn_xero_agent/xero_agent.rb, line 43 def validate_options errors.add(:base, "due_in_days must be a number") if options['due_in_days'].present? && options['due_in_days'].to_s !~ /\A\d+\z/ errors.add(:base, "item_description and item_amount are required") unless options['item_description'].present? && options['item_amount'].present? errors.add(:base, "expected_receive_period_in_days is required") unless options['expected_receive_period_in_days'].present? end
working?()
click to toggle source
# File lib/huginn_xero_agent/xero_agent.rb, line 39 def working? last_receive_at && last_receive_at > options['expected_receive_period_in_days'].to_i.days.ago && !recent_error_logs? end