intacctrb 0.4.9 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0cecf194c6ee6c5530daa82e23ec10ac0cf4c911
4
- data.tar.gz: d589c81677699419c0b70de9504bfc07335e5d37
3
+ metadata.gz: e0dfc25041760de6446265c128bc2b744fb6224d
4
+ data.tar.gz: 26d7d99bc4ef1b20d8330f170ce02143e2330df5
5
5
  SHA512:
6
- metadata.gz: 2752aa9ddb7cb18b1e1ea69710f9758d2663569ff4ebb4dd5b00f444859b2207b7ed5d253bc66b13c3d9af303513488b16971642b8682ff51c3272c40f6ece75
7
- data.tar.gz: 4976150460ccb7497012cea6fc46cd056ec1003922676e28ae69ad7bf40b805d1f82aa3f4b40ab078cbffc9bf83d558aaf0d8743cbd04cc41bd7d0bb5db975b9
6
+ metadata.gz: db81d916f34730c96190eab884e9a69e9935346b46897de5e1703355a6fadab3ee0dd9c47651613e06fe97bc15e96b5676ac9c72ac9898aa42fc9553686ad36b
7
+ data.tar.gz: 4a0feca79cee93376bb4a9ed726cd73e2a99c4391792e40b7fe825906e048274b49ad15cccf712604ff2a540b02987d9f9c758213db7ca851198c88f74dd7c4b
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  .ruby-version
2
2
  pkg/*
3
+ .idea
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- intacctrb (0.4.9)
4
+ intacctrb (0.5.0)
5
5
  hooks
6
6
  nokogiri
7
7
 
data/lib/intacctrb.rb CHANGED
@@ -17,6 +17,7 @@ require "intacctrb/exceptions/base"
17
17
  require "intacctrb/exceptions/vendor"
18
18
  require "intacctrb/exceptions/bill"
19
19
  require "intacctrb/exceptions/attachment"
20
+ require "intacctrb/exceptions/ap_payment"
20
21
 
21
22
  class Object
22
23
  def blank?
@@ -5,15 +5,20 @@ module IntacctRB
5
5
 
6
6
  def create
7
7
  return false if object.intacct_system_id.present?
8
+
8
9
  send_xml('create') do |xml|
9
10
  xml.function(controlid: "f1") {
10
- xml.send("create_paymentrequest") {
11
+ xml.send("create_appayment") {
11
12
  ap_payment_xml xml
12
13
  }
13
14
  }
14
15
  end
15
- puts response
16
- successful?
16
+
17
+ if !successful?
18
+ raise IntacctRB::Exceptions::APPayment.new(response.at('//error//description2'))
19
+ end
20
+
21
+ object.intacct_id
17
22
  end
18
23
 
19
24
  def reverse
@@ -127,22 +132,28 @@ module IntacctRB
127
132
  end
128
133
 
129
134
  def ap_payment_xml xml
135
+ xml.key object.intacct_id if object.intacct_id
130
136
  xml.bankaccountid object.bank_account_id if object.bank_account_id
131
137
  xml.chargecardid object.charge_card_id if object.charge_card_id
132
138
  xml.vendorid object.vendor_id
139
+ xml.memo object.memo
133
140
  xml.paymentmethod object.payment_method
134
- xml.paymentdate {
135
- xml.year object.payment_date.strftime("%Y")
136
- xml.month object.payment_date.strftime("%m")
137
- xml.day object.payment_date.strftime("%d")
141
+ xml.checkdate {
142
+ xml.year Date.parse(object.payment_date).year
143
+ xml.month Date.parse(object.payment_date).month
144
+ xml.day Date.parse(object.payment_date).day
138
145
  }
139
- xml.paymentrequestitems {
140
- xml.paymentrequestitem {
141
- xml.key object.bill_key
142
- xml.paymentamount object.amount
143
- }
146
+ xml.checkno object.check_number
147
+ xml.billno object.bill_number
148
+ xml.payitems {
149
+ object.line_items.each do |line_item|
150
+ xml.payitem {
151
+ xml.glaccountno line_item.account_number
152
+ xml.paymentamount line_item.amount
153
+ xml.locationid line_item.location_id
154
+ }
155
+ end
144
156
  }
145
- xml.documentnumber object.check_number
146
157
  end
147
158
 
148
159
  def set_intacct_system_id
@@ -0,0 +1,168 @@
1
+ module IntacctRB
2
+ class APPaymentRequest < IntacctRB::Base
3
+ attr_accessor :customer_data
4
+ define_hook :custom_bill_fields, :bill_item_fields
5
+
6
+ def create
7
+ return false if object.intacct_system_id.present?
8
+ send_xml('create') do |xml|
9
+ xml.function(controlid: "f1") {
10
+ xml.send("create_paymentrequest") {
11
+ ap_payment_xml xml
12
+ }
13
+ }
14
+ end
15
+ puts response
16
+ successful?
17
+ end
18
+
19
+ def reverse
20
+ return false unless object.id.present?
21
+
22
+ send_xml('delete') do |xml|
23
+ xml.function(controlid: "1") {
24
+ xml.reverse_appayment(key: object.id) do |xml|
25
+ xml.datereversed do |xml|
26
+ xml.year object.date.year
27
+ xml.month object.date.month
28
+ xml.day object.date.day
29
+ end
30
+ end
31
+ }
32
+ end
33
+
34
+ successful?
35
+ end
36
+
37
+ def get_list(options = {})
38
+ send_xml('get_list') do |xml|
39
+ xml.function(controlid: "f4") {
40
+ xml.get_list(object: "appayment", maxitems: (options[:max_items] || 0),
41
+ start: (options[:start] || 0), showprivate:"true") {
42
+ if options[:filters]
43
+ xml.filter {
44
+ xml.logical(logical_operator: "and") do
45
+ options[:filters][:and_filters].each do |filter|
46
+ xml.expression do
47
+ filter.each_pair do |k,v|
48
+ xml.send(k,v)
49
+ end
50
+ end
51
+ end
52
+ if options[:filters][:or_filters]
53
+ xml.logical(logical_operator: "or") do
54
+ options[:filters][:or_filters].each do |filter|
55
+ xml.expression do
56
+ filter.each_pair do |k,v|
57
+ xml.send(k,v)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ }
65
+ end
66
+ if options[:fields]
67
+ xml.fields {
68
+ fields.each do |field|
69
+ xml.field field.to_s
70
+ end
71
+ }
72
+ end
73
+ }
74
+ }
75
+ end
76
+
77
+ puts response
78
+ if successful?
79
+ @data = []
80
+ @response.xpath('//appayment').each do |payment|
81
+ item = OpenStruct.new({
82
+ id: payment.at("key").content,
83
+ vendor_id: payment.at("vendorid").content,
84
+ payment_amount: payment.at("paymentamount").content,
85
+ payment_trx_amount: payment.at("paymenttrxamount").content,
86
+ payment_method: payment.at("paymentmethod").content,
87
+ payment_account_id: payment.at("financialentity").content,
88
+ state: payment.at("transactionstate").content,
89
+ date: get_date_at('paymentdate', payment),
90
+ date_cleared: get_date_at('cleareddate', payment),
91
+ cleared: payment.at("cleared").content,
92
+ })
93
+ payment.xpath('.//appaymentitem').each do |payment_item|
94
+ item[:payment_items] ||= []
95
+ item[:payment_items] << {
96
+ bill_id: payment_item.at('billkey').content,
97
+ line_item_id: payment_item.at('lineitemkey').content,
98
+ gl_account_number: payment_item.at('glaccountno').content,
99
+ amount: payment_item.at('amount').content,
100
+ department_id: payment_item.at('departmentid').content,
101
+ location_id: payment_item.at('locationid').content,
102
+ trx_amount: payment_item.at('trx_amount').content,
103
+ currency: payment_item.at('currency').content
104
+ }
105
+ end
106
+ @data << item
107
+ end
108
+ @data
109
+ else
110
+ false
111
+ end
112
+ end
113
+
114
+ def get_date_at(xpath, object)
115
+ year = object.at("#{xpath}/year").content
116
+ month = object.at("#{xpath}/month").content
117
+ day = object.at("#{xpath}/day").content
118
+ if [year,month,day].any?(&:empty?)
119
+ nil
120
+ else
121
+ Date.new(year.to_i,month.to_i,day.to_i)
122
+ end
123
+ end
124
+
125
+ def intacct_object_id
126
+ "#{intacct_bill_prefix}#{object.payment.id}"
127
+ end
128
+
129
+ def ap_payment_xml xml
130
+ xml.bankaccountid object.bank_account_id if object.bank_account_id
131
+ xml.chargecardid object.charge_card_id if object.charge_card_id
132
+ xml.vendorid object.vendor_id
133
+ xml.paymentmethod object.payment_method
134
+ xml.paymentdate {
135
+ xml.year object.payment_date.strftime("%Y")
136
+ xml.month object.payment_date.strftime("%m")
137
+ xml.day object.payment_date.strftime("%d")
138
+ }
139
+ xml.paymentrequestitems {
140
+ xml.paymentrequestitem {
141
+ xml.key object.bill_key
142
+ xml.paymentamount object.amount
143
+ }
144
+ }
145
+ xml.documentnumber object.check_number
146
+ end
147
+
148
+ def set_intacct_system_id
149
+ object.payment.intacct_system_id = intacct_object_id
150
+ end
151
+
152
+ def delete_intacct_system_id
153
+ object.payment.intacct_system_id = nil
154
+ end
155
+
156
+ def delete_intacct_key
157
+ object.payment.intacct_key = nil
158
+ end
159
+
160
+ def set_date_time type
161
+ if %w(create update delete).include? type
162
+ if object.payment.respond_to? :"intacct_#{type}d_at"
163
+ object.payment.send("intacct_#{type}d_at=", DateTime.now)
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
@@ -140,7 +140,7 @@ module IntacctRB
140
140
  xml.amount line_item.amount
141
141
  xml.entrydescription line_item.memo
142
142
  xml.locationid line_item.location_id
143
- xml.projectid line_item.provider_id
143
+ xml.projectid line_item.project_id
144
144
  }
145
145
  end
146
146
  }
@@ -0,0 +1,6 @@
1
+ module IntacctRB
2
+ module Exceptions
3
+ class APPayment < IntacctRB::Exceptions::Base
4
+ end
5
+ end
6
+ end
@@ -1,3 +1,3 @@
1
1
  module IntacctRB
2
- VERSION = "0.4.9"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intacctrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Hale
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-17 00:00:00.000000000 Z
11
+ date: 2017-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -170,10 +170,12 @@ files:
170
170
  - lib/intacctrb.rb
171
171
  - lib/intacctrb/account.rb
172
172
  - lib/intacctrb/ap_payment.rb
173
+ - lib/intacctrb/ap_payment_request.rb
173
174
  - lib/intacctrb/attachment.rb
174
175
  - lib/intacctrb/base.rb
175
176
  - lib/intacctrb/bill.rb
176
177
  - lib/intacctrb/customer.rb
178
+ - lib/intacctrb/exceptions/ap_payment.rb
177
179
  - lib/intacctrb/exceptions/attachment.rb
178
180
  - lib/intacctrb/exceptions/base.rb
179
181
  - lib/intacctrb/exceptions/bill.rb