tfso 0.8.0 → 0.14.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
  SHA256:
3
- metadata.gz: 580629da3765be6e48e898bf68d9651b57f37e0fa0d56708dd51f324d9321a99
4
- data.tar.gz: 941191ba3f192dba0362533cfd3a22e7011ff16c3773b566c6d8b9633fc37cc4
3
+ metadata.gz: 655776d30e65157f5da6a45cbb25ff130a8e4f4fd4eb1924b8f3b61084270c99
4
+ data.tar.gz: a547429273d8d60d1f6a771ba8a5b05518ff3eeab26324a8c9cd5dbe14638fcb
5
5
  SHA512:
6
- metadata.gz: 71c2a1ce1d322a7288146efd09e4654b7a23a0ad6896329f6f037920721488bed49c2029ba58595f75644cd7ff542aad934ae6badfc62387629b19175d291337
7
- data.tar.gz: df5bbb911873323fe5f9b2856920d6bdc61313729a2b972f110d74a33dcd2e11fcb35eb8fec36573d3930c93be9c02b17bcc942cc947ec9d28ccf1ca83643017
6
+ metadata.gz: 174bc898b4f0f6cb434a16c2d6ac73b2bcfbe53202cdaf41f358495f12278319f4cb530b229095ba53b87d08c50aed913d8e3597b49a899ed7880c8f26161c63
7
+ data.tar.gz: 2d738c2860fe67bf2e579c195b747109b788e41fa8b9a0e546eeb35805ff28fe384e5df5fce77f8f67a2c87bca5f05e76b0924ec963664ec2d283c88b0f91f52
@@ -1,9 +1,11 @@
1
1
  require 'savon'
2
- require "tfso/version"
2
+ require 'tfso/version'
3
3
  require 'tfso/helpers'
4
+ require 'tfso/errors'
4
5
  require 'tfso/authentication'
5
6
  require 'tfso/client'
6
7
  require 'tfso/company'
7
8
  require 'tfso/invoice'
8
9
  require 'tfso/payment'
9
- require 'tfso/product'
10
+ require 'tfso/product'
11
+ require 'tfso/person'
@@ -14,17 +14,19 @@ module TFSO
14
14
  end
15
15
 
16
16
  def authenticated?
17
- response = savon_client.call(:has_session, cookies: @cookies )
17
+ response = savon_client.call(:has_session, cookies: @cookies)
18
+ raise Errors::Authentication, 'Not authenticated' if !response.body[:has_session_response][:has_session_result]
18
19
  response.body[:has_session_response][:has_session_result]
19
20
  end
20
21
 
21
22
  def authenticate(username, password, identity_id = nil)
22
- response = savon_client.call(:login, message: { credential: {Username: username, Password: password, IdentityId: identity_id, ApplicationId: application_id} })
23
+ response = savon_client.call(:login, message: { credential: {Username: username, Password: password, IdentityId: identity_id, ApplicationId: application_id}})
24
+ raise Errors::Authentication, 'Incorrect credentials' if response.body[:login_response][:login_result].blank?
23
25
  self.session_id = response.body[:login_response][:login_result]
24
26
  end
25
27
 
26
28
  def identities
27
- response = savon_client.call(:get_identities, cookies: @cookies )
29
+ response = savon_client.call(:get_identities, cookies: @cookies)
28
30
  list = response.body[:get_identities_response][:get_identities_result][:identity]
29
31
  if list.is_a?(Hash)
30
32
  [list]
@@ -6,12 +6,13 @@ module TFSO
6
6
  URL = 'https://api.24sevenoffice.com/Client/V001/ClientService.asmx?WSDL'
7
7
 
8
8
  def initialize(auth)
9
+ ensure_authenticated(auth)
9
10
  self.session_id = auth.session_id
10
11
  intialize_savon_client
11
12
  end
12
13
 
13
14
  def type_groups(module_type)
14
- response = savon_client.call(:get_type_group_list, message: {module_type: module_type }, cookies: @cookies)
15
+ response = savon_client.call(:get_type_group_list, message: {module_type: module_type}, cookies: @cookies)
15
16
  response.body[:get_type_group_list_response][:get_type_group_list_result]
16
17
  end
17
18
 
@@ -6,12 +6,13 @@ module TFSO
6
6
  URL = 'https://api.24sevenoffice.com/CRM/Company/V001/CompanyService.asmx?wsdl'
7
7
 
8
8
  def initialize(auth)
9
+ ensure_authenticated(auth)
9
10
  self.session_id = auth.session_id
10
11
  intialize_savon_client
11
12
  end
12
13
 
13
14
  def find(search_params)
14
- response = savon_client.call(:get_companies, message: {searchParams: search_params, returnProperties: {string: ['Id', 'OrganizationNumber', 'NickName', 'Country', 'Addresses', 'EmailAddresses', 'PhoneNumbers', 'InvoiceLanguage', 'TypeGroup', 'DistributionMethod', 'Currency'] } }, cookies: @cookies)
15
+ response = savon_client.call(:get_companies, message: {searchParams: search_params, returnProperties: {string: ['Id', 'OrganizationNumber', 'NickName', 'Country', 'Addresses', 'EmailAddresses', 'PhoneNumbers', 'InvoiceLanguage', 'TypeGroup', 'DistributionMethod', 'Currency']}}, cookies: @cookies)
15
16
  result = response.body[:get_companies_response][:get_companies_result]
16
17
  if result
17
18
  if result[:company].class == Hash
@@ -35,7 +36,7 @@ module TFSO
35
36
  end
36
37
 
37
38
  def create(company_info)
38
- response = savon_client.call(:save_companies, message: {companies: [{Company: company_info}] }, cookies: @cookies)
39
+ response = savon_client.call(:save_companies, message: {companies: [{Company: company_info}]}, cookies: @cookies)
39
40
  result = response.body[:save_companies_response][:save_companies_result]
40
41
  if result
41
42
  if result[:company].class == Hash
@@ -53,6 +54,7 @@ module TFSO
53
54
  end
54
55
 
55
56
  def transform_attributes(company)
57
+ company.compact!
56
58
  company[:EmailAddresses] ||= []
57
59
  company[:PhoneNumbers] ||= []
58
60
  company[:Addresses] ||= []
@@ -70,24 +72,28 @@ module TFSO
70
72
  :Value => company.delete(:billing_email)
71
73
  }
72
74
  }
75
+ company.delete(:billing_email)
73
76
  end
74
77
  if company[:email]
75
78
  company[:EmailAddresses] << {:Work => {
76
79
  :Value => company.delete(:email)
77
80
  }
78
81
  }
82
+ company.delete(:email)
79
83
  end
80
84
  if company[:phone_number]
81
85
  company[:PhoneNumbers] << {:Work => {
82
86
  :Value => company.delete(:phone_number)
83
87
  }
84
88
  }
89
+ company.delete(:phone_number)
85
90
  end
86
91
  if company[:mobile_phone_number]
87
92
  company[:PhoneNumbers] << {:Mobile => {
88
93
  :Value => company.delete(:mobile_phone_number)
89
94
  }
90
95
  }
96
+ company.delete(:mobile_phone_number)
91
97
  end
92
98
  if company[:billing_address]
93
99
  address = {
@@ -104,13 +110,13 @@ module TFSO
104
110
  company.delete(:billing_address)
105
111
  end
106
112
  if company[:tfso]
107
- company[:tfso].keys.each{|k| company[k] = company[:tfso].delete(k) }
113
+ company[:tfso].keys.each{|k| company[k] = company[:tfso].delete(k)}
108
114
  company.delete(:tfso)
109
115
  end
110
116
 
111
117
  mappings = {:name => :Name, :nickname => :NickName, :gov_no => :OrganizationNumber, :country_code => :Country}
112
118
 
113
- company.keys.each { |k| company[ mappings[k] ] = company.delete(k) if mappings[k] }
119
+ company.keys.each {|k| company[ mappings[k] ] = company.delete(k) if mappings[k]}
114
120
  company
115
121
  end
116
122
 
@@ -0,0 +1,5 @@
1
+ module TFSO
2
+ module Errors
3
+ class Authentication < StandardError; end
4
+ end
5
+ end
@@ -1,15 +1,20 @@
1
1
  module TFSO
2
2
 
3
3
  module Helpers
4
+
4
5
  def intialize_savon_client
5
6
  @savon_client = Savon.client(wsdl: self.class::URL, convert_request_keys_to: :none)
6
- if defined?(Rails) && Rails.env.development?
7
+ if ENV['RACK_ENV'] == 'test' || defined?(Rails) && Rails.env.development?
7
8
  @savon_client.globals.proxy('http://localhost:8080')
8
9
  @savon_client.globals.ssl_verify_mode(:none)
9
10
  end
10
11
  @savon_client.globals.unwrap(true)
11
12
  end
12
13
 
14
+ def ensure_authenticated(auth)
15
+ auth.authenticated?
16
+ end
17
+
13
18
  def savon_client
14
19
  @savon_client
15
20
  end
@@ -6,6 +6,7 @@ module TFSO
6
6
  URL = 'https://api.24sevenoffice.com/Economy/InvoiceOrder/V001/InvoiceService.asmx?wsdl'
7
7
 
8
8
  def initialize(auth)
9
+ ensure_authenticated(auth)
9
10
  self.session_id = auth.session_id
10
11
  intialize_savon_client
11
12
  end
@@ -41,11 +42,13 @@ module TFSO
41
42
  end
42
43
 
43
44
  def create(order_attributes)
44
- response = savon_client.call(:save_invoices, message: {invoices: [{InvoiceOrder: order_attributes }] }, cookies: @cookies)
45
+ response = savon_client.call(:save_invoices, message: {invoices: [{InvoiceOrder: order_attributes}] }, cookies: @cookies)
45
46
  response.body[:save_invoices_response][:save_invoices_result][:invoice_order]
46
47
  end
47
48
 
48
49
  def transform_attributes(invoice, items)
50
+ invoice.compact!
51
+ items.compact!
49
52
  state = case invoice[:state]
50
53
  when :invoice
51
54
  'Invoiced'
@@ -90,14 +93,22 @@ module TFSO
90
93
  if items.any?
91
94
  invoiceRows = []
92
95
  items.each {|item|
93
- invoiceRows << {
94
- ProductId: item[:product_id],
95
- Name: item[:description],
96
- Price: item[:price].to_f,
97
- Quantity: item[:quantity].to_f
98
- }
96
+ if item[:type] == :text
97
+ invoiceRows << {:InvoiceRow => {
98
+ Type: 'Text',
99
+ Name: item[:name]
100
+ }}
101
+ else
102
+ invoiceRows << {:InvoiceRow => {
103
+ Type: 'Normal',
104
+ ProductId: item[:product_id],
105
+ Name: item[:name],
106
+ Price: item[:price].to_f,
107
+ Quantity: item[:quantity].to_f
108
+ }}
109
+ end
99
110
  }
100
- invoice_info[:InvoiceRows] = { :InvoiceRow => invoiceRows }
111
+ invoice_info[:InvoiceRows] = invoiceRows
101
112
  end
102
113
  invoice_info
103
114
  end
@@ -6,12 +6,13 @@ module TFSO
6
6
  URL = 'https://api.24sevenoffice.com/Economy/InvoiceOrder/V001/PaymentService.asmx?WSDL'
7
7
 
8
8
  def initialize(auth)
9
+ ensure_authenticated(auth)
9
10
  self.session_id = auth.session_id
10
11
  intialize_savon_client
11
12
  end
12
13
 
13
14
  def create(payment_info)
14
- response = savon_client.call(:register_invoice_payment, message: {payment: payment_info }, cookies: @cookies)
15
+ response = savon_client.call(:register_invoice_payment, message: {payment: payment_info}, cookies: @cookies)
15
16
  response.body[:register_invoice_payment_response][:register_invoice_payment_result]
16
17
  end
17
18
 
@@ -0,0 +1,47 @@
1
+ module TFSO
2
+ class Person
3
+
4
+ include TFSO::Helpers
5
+
6
+ URL = 'https://webservices.24sevenoffice.com/CRM/Contact/PersonService.asmx?WSDL'
7
+
8
+ def initialize(auth)
9
+ ensure_authenticated(auth)
10
+ self.session_id = auth.session_id
11
+ intialize_savon_client
12
+ end
13
+
14
+ def find(search_params={})
15
+ response = savon_client.call(:get_persons, message: {personSearch: search_params}, cookies: @cookies)
16
+ result = response.body[:get_persons_response][:get_persons_result]
17
+ if result
18
+ if result[:person_item].class == Hash
19
+ [result[:person_item]]
20
+ else
21
+ result[:person_item]
22
+ end
23
+ else
24
+ []
25
+ end
26
+ end
27
+
28
+ def create(person_info)
29
+ response = savon_client.call(:save_person, message: {personItem: person_info}, cookies: @cookies)
30
+ result = response.body[:save_person_response][:save_person_result]
31
+ if result
32
+ if result.class == Hash
33
+ if result[:api_exception]
34
+ raise "Error when saving tfso person"
35
+ else
36
+ result
37
+ end
38
+ else
39
+ result
40
+ end
41
+ else
42
+ false
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -6,6 +6,7 @@ module TFSO
6
6
  URL = 'https://api.24sevenoffice.com/Logistics/Product/V001/ProductService.asmx?WSDL'
7
7
 
8
8
  def initialize(auth)
9
+ ensure_authenticated(auth)
9
10
  self.session_id = auth.session_id
10
11
  intialize_savon_client
11
12
  end
@@ -30,6 +31,5 @@ module TFSO
30
31
  end
31
32
  end
32
33
 
33
-
34
34
  end
35
35
  end
@@ -1,3 +1,3 @@
1
1
  module TFSO
2
- VERSION = "0.8.0"
2
+ VERSION = '0.14.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tfso
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Espen Antonsen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-22 00:00:00.000000000 Z
11
+ date: 2020-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
@@ -80,7 +80,7 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- description:
83
+ description:
84
84
  email:
85
85
  - espen@inspired.no
86
86
  executables: []
@@ -99,9 +99,11 @@ files:
99
99
  - lib/tfso/authentication.rb
100
100
  - lib/tfso/client.rb
101
101
  - lib/tfso/company.rb
102
+ - lib/tfso/errors.rb
102
103
  - lib/tfso/helpers.rb
103
104
  - lib/tfso/invoice.rb
104
105
  - lib/tfso/payment.rb
106
+ - lib/tfso/person.rb
105
107
  - lib/tfso/product.rb
106
108
  - lib/tfso/version.rb
107
109
  - tfso.gemspec
@@ -109,7 +111,7 @@ homepage: https://github.com/espen/tfso
109
111
  licenses:
110
112
  - MIT
111
113
  metadata: {}
112
- post_install_message:
114
+ post_install_message:
113
115
  rdoc_options: []
114
116
  require_paths:
115
117
  - lib
@@ -124,8 +126,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
126
  - !ruby/object:Gem::Version
125
127
  version: '0'
126
128
  requirements: []
127
- rubygems_version: 3.0.3
128
- signing_key:
129
+ rubygems_version: 3.1.3
130
+ signing_key:
129
131
  specification_version: 4
130
132
  summary: Ruby API Wrapper for 24SevenOffice.
131
133
  test_files: []