elmas 0.2.0 → 1.0.0

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: fb71ef967c15aeffc592ac76915b0f31078877f1
4
- data.tar.gz: 1ef5c1c7611901311cd897933d8deb26748e8239
3
+ metadata.gz: 31ec8dd25ceb6a01b7d07b240c16b8d33616cb33
4
+ data.tar.gz: 6877c0e58d2ba5c5ff77eba97a599e5ecf220ef7
5
5
  SHA512:
6
- metadata.gz: 2d9b9152c771283da77515702a6976d991027041a48ac2e92a8857a37003b95b057d3fa31bda66ba898f388c87d59fb2f1736c3ed7a5464f03bc26244d3aed2f
7
- data.tar.gz: 24f03387316472d659d09c34482ee728535a665af923ff3eee4ca71a847310e6d63c121cd3548784a80358cc5824e44d1d459d5579ad82a687bdba3d76a58b88
6
+ metadata.gz: 2c9aecd1f8e78b21621aec927ea74ece5e3d2e55780e5b650eb4e2278a960a543d5a83c18148117156ee07e4ab717ba48708d299db33c61d543d7e1220e6e9cc
7
+ data.tar.gz: e7047f922618c9efaf666e6ad2dd46a80381349c0fd9c038d25cfd462fdf076e736fea865d5abfac2684f60f5ebd44353ce2acc0ee736dc9eed6b7a0105ab7ee
data/README.md CHANGED
@@ -155,10 +155,33 @@ contact.find_all(select: [:last_name, :first_name])
155
155
  To create a new contact
156
156
 
157
157
  ```ruby
158
- contact = Elmas::Contact.new(first_name: "Karel", last_name: "Appel" )
158
+ contact = Elmas::Contact.new(first_name: "Karel", last_name: "Appel", account: "8d87c8c5-f1c6-495c-b6af-d5ba396873b5" )
159
159
  contact.save
160
160
  ```
161
161
 
162
+ ### Projects and Time Tracking
163
+
164
+ Project Types:
165
+
166
+ - :type=>2, :type_description=>"Fixed price"
167
+ - :type=>3, :type_description=>"Time and Material"
168
+ - :type=>4, :type_description=>"Non billable"
169
+ - :type=>5, :type_description=>"Prepaid"
170
+
171
+ To create a new project
172
+
173
+ ```ruby
174
+ project = Elmas::Project.new(code: "PROJ902343", description: "Great project", account: "8d87c8c5-f1c6-495c-b6af-d5ba396873b5", type: 2 )
175
+ project.save
176
+ ```
177
+
178
+ To submit a new time transaction
179
+
180
+ ```ruby
181
+ hours = Elmas::TimeTransaction.new(account: "8d87c8c5-f1c6-495c-b6af-d5ba396873b5", item: "eb73942a-53c0-4ee9-bbb2-6d985814a1b1", quantity: 3.0, notes: "")
182
+ hours.save
183
+ ```
184
+
162
185
  ### SalesInvoice flow
163
186
  SalesInvoices have a relationship with SalesInvoiceLines. A SalesInvoice has many
164
187
  SalesInvoiceLines and a SalesInvoiceLine belongs to a SalesInvoice. To create a
@@ -1,17 +1,13 @@
1
1
  module Elmas
2
2
  class BadRequestException < Exception
3
- def initialize(object)
3
+ def initialize(response, parsed)
4
+ @response = response
5
+ @parsed = parsed
4
6
  super(message)
5
- @object = object
6
7
  end
7
8
 
8
9
  def message
9
- case @object
10
- when 500
11
- "Server error"
12
- else
13
- "Something went wrong"
14
- end
10
+ "code #{@response.status}: #{@parsed.error_message}"
15
11
  end
16
12
  end
17
13
 
data/lib/elmas/oauth.rb CHANGED
@@ -19,9 +19,13 @@ module Elmas
19
19
  end
20
20
 
21
21
  def authorized?
22
- response = get("/Current/Me", no_division: true)
23
- !response.unauthorized?
24
22
  # Do a test call, return false if 401 or any error code
23
+ begin
24
+ response = get("/Current/Me", no_division: true)
25
+ rescue BadRequestException => e
26
+ Elmas.error "Not yet authorized"
27
+ return false
28
+ end
25
29
  end
26
30
 
27
31
  def authorize_division
data/lib/elmas/parser.rb CHANGED
@@ -1,27 +1,33 @@
1
1
  module Elmas
2
2
  class Parser
3
+ attr_accessor :parsed_json
4
+
3
5
  def initialize(json)
4
- @object = JSON.parse(json)
6
+ @parsed_json = JSON.parse(json)
5
7
  rescue JSON::ParserError => e
6
- Elmas.error("There was an error parsing the response, #{e.message}")
7
- @error_message = e.message
8
- return false
8
+ Elmas.error 'There was an error parsing the response'
9
+ Elmas.error "#{e.class}: #{e.message}"
10
+ @error_message = "#{e.class}: #{e.message}"
9
11
  end
10
12
 
11
13
  def results
12
- @object["d"]["results"] if @object
14
+ result['results'] if result && result['results']
13
15
  end
14
16
 
15
17
  def metadata
16
- @object["d"]["__metadata"] if @object
18
+ result['__metadata'] if result && result['__metadata']
17
19
  end
18
20
 
19
21
  def result
20
- @object["d"] if @object
22
+ parsed_json['d']
21
23
  end
22
24
 
23
25
  def error_message
24
- @error_message ||= @object["error"]["message"]["value"]
26
+ @error_message ||= begin
27
+ if parsed_json['error']
28
+ parsed_json['error']['message']['value']
29
+ end
30
+ end
25
31
  end
26
32
 
27
33
  def first_result
@@ -11,7 +11,7 @@ module Elmas
11
11
  [:name]
12
12
  end
13
13
 
14
- # https://start.exactonline.nl/docs/HlpRestAPIResourcesDetails.aspx?id=9
14
+ # https://start.exactonline.nl/docs/HlpRestAPIResourcesDetails.aspx?name=CRMAccounts
15
15
  def other_attributes # rubocop:disable Metrics/MethodLength
16
16
  [
17
17
  :accountant, :account_manager, :activity_sector,
@@ -0,0 +1,34 @@
1
+ module Elmas
2
+ class Project
3
+ include Elmas::Resource
4
+
5
+ def base_path
6
+ "project/Projects"
7
+ end
8
+
9
+ def mandatory_attributes
10
+ [:account, :description, :code, :type]
11
+ end
12
+
13
+ # https://start.exactonline.nl/docs/HlpRestAPIResourcesDetails.aspx?name=ProjectProjects
14
+ def other_attributes # rubocop:disable Metrics/MethodLength
15
+ [
16
+ :account, :account_code, :AccountContact, :account_name,
17
+ :allow_additional_invoicing, :block_entry, :block_rebilling,
18
+ :budgeted_amount, :budgeted_costs, :budgeted_hours_per_hour_type,
19
+ :BudgetedRevenue, :BudgetType, :BudgetTypeDescription, :clasification,
20
+ :classification_description, :code, :costs_amount_fc, :created,
21
+ :creator, :creator_full_name, :customer_p_onumber, :description,
22
+ :division, :division_name, :end_date, :fixed_price_item,
23
+ :fixed_price_item_description, :invoice_as_quoted, :invoice_terms,
24
+ :manager, :manager_fullname, :markup_percentage, :modified, :modifier,
25
+ :modifier_full_name, :notes, :prepaid_item, :prepaid_item_description,
26
+ :prepaid_type, :prepaid_type_description,
27
+ :project_restriction_employees, :project_restriction_items,
28
+ :project_restriction_rebillings, :sales_time_quantity,
29
+ :source_quotation, :start_date, :time_quantity_to_alert, :type,
30
+ :type_description, :use_billing_milestones
31
+ ]
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ module Elmas
2
+ class TimeTransaction
3
+ include Elmas::Resource
4
+
5
+ def base_path
6
+ "project/TimeTransactions"
7
+ end
8
+
9
+ def mandatory_attributes
10
+ [:account, :item, :quantity]
11
+ end
12
+
13
+ # https://start.exactonline.nl/docs/HlpRestAPIResourcesDetails.aspx?name=ProjectTimeTransactions
14
+ def other_attributes
15
+ [
16
+ :account, :account_name, :activity, :activity_description, :amount, :amount_fc,
17
+ :attachment, :created, :creator, :creator_full_name, :currency, :date,
18
+ :division, :division_description, :employee, :end_time, :entry_number,
19
+ :error_text, :hour_status, :item, :item_description, :item_divisable,
20
+ :modified, :modifier, :modifier_full_name, :notes, :price, :price_fc, :project,
21
+ :project_account, :project_account_code, :project_account_name,
22
+ :project_description, :quantity, :start_time, :subscription,
23
+ :subscription_account, :subscription_account_code, :subscription_account_name,
24
+ :subscription_description, :subscription_number, :type
25
+ ]
26
+ end
27
+ end
28
+ end
@@ -7,7 +7,10 @@ module Elmas
7
7
 
8
8
  def initialize(response)
9
9
  @response = response
10
- log_error if fail?
10
+ if fail?
11
+ log_error
12
+ raise BadRequestException.new(@response, parsed)
13
+ end
11
14
  end
12
15
 
13
16
  def success?
@@ -68,10 +71,6 @@ module Elmas
68
71
  Elmas.error(message)
69
72
  end
70
73
 
71
- def unauthorized?
72
- UNAUTHORIZED_CODES.include? status
73
- end
74
-
75
74
  SUCCESS_CODES = [
76
75
  201, 202, 203, 204, 301, 302, 303, 304
77
76
  ]
@@ -33,7 +33,7 @@ module Elmas
33
33
  end
34
34
 
35
35
  def sanitize_date_time(value)
36
- value.strftime("datetime'%Y-%m-%dT%H:%M'")
36
+ value.strftime("%Y-%m-%d")
37
37
  end
38
38
 
39
39
  def sanitize_has_many(value)
data/lib/elmas/uri.rb CHANGED
@@ -27,7 +27,12 @@ module Elmas
27
27
  if attribute == :id
28
28
  return id_filter
29
29
  else
30
- return ["$filter", "#{Utils.camelize(attribute)} eq '#{@attributes[attribute]}'"]
30
+ if @attributes[attribute].is_a?(Fixnum)
31
+ value = @attributes[attribute]
32
+ else
33
+ value = "'#{@attributes[attribute]}'"
34
+ end
35
+ return ["$filter", "#{Utils.camelize(attribute)} eq #{value}"]
31
36
  end
32
37
  end
33
38
 
data/lib/elmas/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Elmas
2
2
  class Version
3
- MAJOR = 0
4
- MINOR = 2
3
+ MAJOR = 1
4
+ MINOR = 0
5
5
  PATCH = 0
6
6
 
7
7
  class << self
data/lib/elmas.rb CHANGED
@@ -22,6 +22,8 @@ require "elmas/resources/sales_entry"
22
22
  require "elmas/resources/sales_entry_line"
23
23
  require "elmas/resources/sales_order"
24
24
  require "elmas/resources/sales_order_line"
25
+ require "elmas/resources/project"
26
+ require "elmas/resources/time_transaction"
25
27
  require "elmas/resources/purchase_entry"
26
28
  require "elmas/resources/purchase_entry_line"
27
29
  require "elmas/resources/costunit"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elmas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marthyn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-22 00:00:00.000000000 Z
11
+ date: 2015-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -256,6 +256,7 @@ files:
256
256
  - lib/elmas/resources/item_group.rb
257
257
  - lib/elmas/resources/journal.rb
258
258
  - lib/elmas/resources/mailbox.rb
259
+ - lib/elmas/resources/project.rb
259
260
  - lib/elmas/resources/purchase_entry.rb
260
261
  - lib/elmas/resources/purchase_entry_line.rb
261
262
  - lib/elmas/resources/sales_entry.rb
@@ -265,6 +266,7 @@ files:
265
266
  - lib/elmas/resources/sales_order.rb
266
267
  - lib/elmas/resources/sales_order_line.rb
267
268
  - lib/elmas/resources/shared_sales_attributes.rb
269
+ - lib/elmas/resources/time_transaction.rb
268
270
  - lib/elmas/resources/transaction.rb
269
271
  - lib/elmas/resources/transaction_line.rb
270
272
  - lib/elmas/resources/vat_code.rb