connectwise_sdk 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d6d2d523b28059cb548e7681f1f2ec0765121470
4
- data.tar.gz: 2994bc44e356d9f7a00dad0d04e83354763b4ca8
3
+ metadata.gz: 671e29c4c5672a85c98003621cc98720e306d375
4
+ data.tar.gz: 7fcb0eb04be9f02db99a3f7663a6cd028deb87b2
5
5
  SHA512:
6
- metadata.gz: 060aca0059fe895b85139c1d8dc33a04e6eb49c0fa88f518c2e522b0291edcc942f961f4fbb872d8ac1c5ef68c3e920dbec747d9c498ef2f23551c076f698464
7
- data.tar.gz: ae995236a9f669b16fc048e98d8499a4c010184ea4fec23dd2da00b470b26ea6b530048af553028279f567102e2706d369d7492892fcb0d776248012abef6b52
6
+ metadata.gz: cfbd2ae2a774a0d7aedbc5c7ce614458c2ebc225d9694f249a1d464624f936061816c3b40bc0c4653eea37d9e204a010cc5d88b3d9bd51b9588fd6065262bc6b
7
+ data.tar.gz: 8dab21de5c673309fd743a6c3b38e82d1c0cc8d1060e257b93b2cea6607b9d6caf528ab51dc1d07ebedfe7ea66f360698187aa1786584b51bfec34ae04b3a64d
data/README.md CHANGED
@@ -39,7 +39,7 @@ conn = Connectwise::Connection.new host: 'host.domain.com', company_name: 'compa
39
39
  conn.call :contact, :find_contacts, conditions: 'EmailAddress like "test@test.com"'
40
40
  ```
41
41
 
42
- - The first parameter is the api you wish to use. In this case the `contactApi`.
42
+ - The first parameter is the api you wish to use. In this case the `contactApi`.
43
43
  - The second parameter is the specific api call you wish to use (from the Connectwise Api documentation)
44
44
  - The third paramater is the data you wish to send the api
45
45
 
@@ -62,8 +62,7 @@ Currently the low level `Connection.call` method is working, as well as basic Me
62
62
 
63
63
  Remaining items include:
64
64
 
65
- 1. Ticket class
66
- 2. Support Notes for Opportunities (submitting them)
65
+ 1. Support Notes for Opportunities (submitting them)
67
66
  2. Creating a Facade layer so that the connection object doesn't need to be passed to each object
68
67
  3. Supporting a late binding way of accessing internal objects (accessing the company object within an opportunity for example)
69
68
  4. Supporting an intuitive way of accessing lists of phone numbers, addresses, and email addresses, while still allowing simple access to the first one of each.
@@ -8,7 +8,7 @@ module Connectwise
8
8
  end
9
9
 
10
10
  def find(connection, id)
11
- if (attrs = connection.call(cw_api_name, "get_#{cw_api_name}".to_sym, {id: id}))
11
+ if (attrs = connection.call(cw_api_name, "get_#{cw_model_name}".to_sym, {id: id}))
12
12
  self.new(connection, find_transform(attrs))
13
13
  else
14
14
  fail RecordNotFound
@@ -33,6 +33,10 @@ module Connectwise
33
33
  base_class_name.downcase.to_sym
34
34
  end
35
35
 
36
+ def cw_model_name
37
+ base_class_name.downcase.to_sym
38
+ end
39
+
36
40
  def plural_class_name
37
41
  ending = base_class_name[/[aeiou]$/] ? 'es' : 's'
38
42
  @plural_form ||= "#{base_class_name.downcase}#{ending}"
@@ -85,12 +89,12 @@ module Connectwise
85
89
  end
86
90
 
87
91
  def save
88
- attrs = connection.call self.class.cw_api_name, "add_or_update_#{self.class.cw_api_name}".to_sym, {self.class.cw_api_name => to_cw_h}
92
+ attrs = connection.call self.class.cw_api_name, "add_or_update_#{self.class.cw_model_name}".to_sym, {self.class.cw_model_name => to_cw_h}
89
93
  self.class.new(connection, self.class.save_transform(attrs))
90
94
  end
91
95
 
92
96
  def destroy
93
- connection.call self.class.cw_api_name, "delete_#{self.class.cw_api_name}".to_sym, {id: id}
97
+ connection.call self.class.cw_api_name, "delete_#{self.class.cw_model_name}".to_sym, {id: id}
94
98
  self
95
99
  end
96
100
 
@@ -2,7 +2,7 @@ module Connectwise
2
2
  class Ticket
3
3
  include Model
4
4
  model_name 'service_ticket'
5
- attr_accessor :id, :summary, :problem_description, :status_name, :board, :site_name, :status, :resolution, :remote_internal_company_name, :priority, :source, :severity, :impact,
5
+ attr_accessor :id, :summary, :problem_description, :status_name, :board, :site_name, :status, :resolution, :remote_internal_company_name, :priority, :source, :severity, :impact, :company
6
6
 
7
7
  #TODO - The use of SrServiceRecid and TicketNumber instead of id - may want to configure these
8
8
  # but this is so inconsistent for tickets that it may not be worth it unless other calls do the same thing
@@ -20,10 +20,6 @@ module Connectwise
20
20
  @status_name ||= 'New'
21
21
  end
22
22
 
23
- def company=(company)
24
- @company = company
25
- end
26
-
27
23
  def save
28
24
  return false unless @company
29
25
  attrs = {companyId: @company.company_id, 'serviceTicket' => to_cw_h}
@@ -36,6 +32,11 @@ module Connectwise
36
32
  self
37
33
  end
38
34
 
35
+ def add_note(msg, **options)
36
+ note = TicketNote.new(connection, {note: msg, ticket: self}.merge(options))
37
+ note.save
38
+ end
39
+
39
40
  private
40
41
  def self.find_transform(attrs)
41
42
  attrs[:id] = attrs.delete(:ticket_number)
@@ -44,11 +45,13 @@ module Connectwise
44
45
 
45
46
  def self.save_transform(attrs)
46
47
  attrs[:id] = attrs.delete(:ticket_number)
48
+ attrs[:company] = OpenStruct.new id: attrs.delete(:company_rec_id)
47
49
  attrs
48
50
  end
49
51
 
50
52
  def to_cw_h
51
53
  attrs = super
54
+ attrs.delete('Company')
52
55
  attrs['TicketNumber'] = attrs[:id] || 0
53
56
  attrs
54
57
  end
@@ -0,0 +1,46 @@
1
+ module Connectwise
2
+ class TicketNote
3
+ include Model
4
+ model_name 'ticket_note'
5
+ attr_accessor :id, :note, :note_text, :is_part_of_internal_analysis, :is_part_of_resolution, :is_part_of_detail_description
6
+
7
+ def self.cw_api_name
8
+ :service_ticket
9
+ end
10
+
11
+ def self.transform(attrs)
12
+ type = attrs.delete(:type)
13
+ attrs[:note_text] ||= attrs.delete(:note)
14
+ if type == :internal
15
+ attrs[:is_part_of_internal_analysis] = true
16
+ elsif type == :resolution
17
+ attrs[:is_part_of_resolution] = true
18
+ else
19
+ attrs[:is_part_of_detail_description] = true
20
+ end
21
+ attrs
22
+ end
23
+
24
+ def initialize(connection, **attributes)
25
+ @ticket = attributes.delete(:ticket)
26
+ super(connection, attributes)
27
+ end
28
+
29
+ def save
30
+ attrs = connection.call self.class.cw_api_name, "update_#{self.class.cw_model_name}".to_sym, {'note' => to_cw_h, 'srServiceRecid' => @ticket.id}
31
+ self.class.new(connection, self.class.save_transform(attrs))
32
+ end
33
+
34
+ def external?
35
+ !!is_part_of_detail_description
36
+ end
37
+
38
+ def internal?
39
+ !!is_part_of_internal_analysis
40
+ end
41
+
42
+ def resolution?
43
+ !!is_part_of_resolution
44
+ end
45
+ end
46
+ end
@@ -1,3 +1,3 @@
1
1
  module Connectwise
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -9,3 +9,4 @@ require 'connectwise/company'
9
9
  require 'connectwise/contact'
10
10
  require 'connectwise/opportunity'
11
11
  require 'connectwise/ticket'
12
+ require 'connectwise/ticket_note'
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Connectwise::TicketNote do
4
+ let(:credentials) { connectwise_credentials }
5
+ let(:conn) { Connectwise::Connection.new(credentials) }
6
+ let(:company_attrs) { {name: 'Pandorica'} }
7
+ let(:ticket_attrs) { {summary: 'Help me', problem_description: 'I need the doctor!'} }
8
+ let(:company) { Connectwise::Company.new(conn, company_attrs) }
9
+ let(:ticket) {
10
+ t = Connectwise::Ticket.new(conn, ticket_attrs)
11
+ t.company = company.save
12
+ t.save
13
+ }
14
+ let(:ticket_note_attrs) { {note: 'some text to describe the note', type: :internal} }
15
+ subject { Connectwise::TicketNote.new(conn, ticket_note_attrs.merge({ticket: ticket})) }
16
+
17
+ it 'creates a ticket note' do
18
+ new_ticket_note = subject.save
19
+ expect(new_ticket_note.persisted?).to eq true
20
+ end
21
+ end
@@ -49,4 +49,20 @@ describe Connectwise::Ticket do
49
49
  expect(deleted_ticket).not_to be_nil
50
50
  expect {Connectwise::Ticket.find(conn, new_ticket.id)}.to raise_error Connectwise::RecordNotFound
51
51
  end
52
+
53
+ it 'adds a note to the ticket' do
54
+ subject.company = company.save
55
+ new_ticket = subject.save
56
+ ticket_note = new_ticket.add_note('Message of some kind')
57
+ expect(ticket_note.persisted?).to eq true
58
+ expect(ticket_note.external?).to eq true
59
+ end
60
+
61
+ it 'adds an internal note to the ticket' do
62
+ subject.company = company.save
63
+ new_ticket = subject.save
64
+ ticket_note = new_ticket.add_note('Message of some kind', type: :internal)
65
+ expect(ticket_note.persisted?).to eq true
66
+ expect(ticket_note.internal?).to eq true
67
+ end
52
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: connectwise_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emery A. Miller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-22 00:00:00.000000000 Z
11
+ date: 2014-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -89,6 +89,7 @@ files:
89
89
  - lib/connectwise/model.rb
90
90
  - lib/connectwise/opportunity.rb
91
91
  - lib/connectwise/ticket.rb
92
+ - lib/connectwise/ticket_note.rb
92
93
  - lib/connectwise/version.rb
93
94
  - lib/connectwise_sdk.rb
94
95
  - spec/credentials.yml.sample
@@ -98,6 +99,7 @@ files:
98
99
  - spec/lib/connectwise/contact_spec.rb
99
100
  - spec/lib/connectwise/member_spec.rb
100
101
  - spec/lib/connectwise/opportunity_spec.rb
102
+ - spec/lib/connectwise/ticket_note_spec.rb
101
103
  - spec/lib/connectwise/ticket_spec.rb
102
104
  - spec/lib/connectwise_sdk_spec.rb
103
105
  - spec/spec_helper.rb
@@ -133,6 +135,7 @@ test_files:
133
135
  - spec/lib/connectwise/contact_spec.rb
134
136
  - spec/lib/connectwise/member_spec.rb
135
137
  - spec/lib/connectwise/opportunity_spec.rb
138
+ - spec/lib/connectwise/ticket_note_spec.rb
136
139
  - spec/lib/connectwise/ticket_spec.rb
137
140
  - spec/lib/connectwise_sdk_spec.rb
138
141
  - spec/spec_helper.rb