papierkram_api_client 0.3.1 → 0.4.1
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 +4 -4
- data/.rubocop +2 -1
- data/.rubocop.yml +5 -5
- data/CHANGELOG.md +23 -0
- data/Gemfile +5 -5
- data/Gemfile.lock +36 -32
- data/README.md +462 -19
- data/UPGRADING.md +10 -0
- data/lib/papierkram_api/client.rb +9 -0
- data/lib/papierkram_api/v1/business_intelligence/base.rb +9 -0
- data/lib/papierkram_api/v1/endpoints/contact/companies.rb +54 -3
- data/lib/papierkram_api/v1/endpoints/contact/companies_persons.rb +35 -3
- data/lib/papierkram_api/v1/endpoints/expense/vouchers.rb +150 -0
- data/lib/papierkram_api/v1/endpoints/income/invoices.rb +154 -8
- data/lib/papierkram_api/v1/endpoints/income/payment_terms.rb +30 -0
- data/lib/papierkram_api/v1/endpoints/income/propositions.rb +23 -7
- data/lib/papierkram_api/v1/endpoints/projects.rb +32 -3
- data/lib/papierkram_api/v1/endpoints/tracker/tasks.rb +63 -0
- data/lib/papierkram_api/v1/endpoints/tracker/time_entries.rb +59 -0
- data/lib/papierkram_api_client/version.rb +1 -1
- data/lib/papierkram_api_client.rb +2 -0
- metadata +19 -4
@@ -134,11 +134,62 @@ module PapierkramApi
|
|
134
134
|
http_post("#{@url_api_path}/contact/companies", body)
|
135
135
|
end
|
136
136
|
|
137
|
-
def update_by(
|
137
|
+
def update_by( # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/ParameterLists
|
138
|
+
id:,
|
139
|
+
name: nil,
|
140
|
+
contact_type: nil,
|
141
|
+
phone: nil,
|
142
|
+
fax: nil,
|
143
|
+
email: nil,
|
144
|
+
website: nil,
|
145
|
+
twitter: nil,
|
146
|
+
ust_idnr: nil,
|
147
|
+
delivery_method: nil,
|
148
|
+
postal_street: nil,
|
149
|
+
postal_zip: nil,
|
150
|
+
postal_city: nil,
|
151
|
+
postal_country: nil,
|
152
|
+
physical_street: nil,
|
153
|
+
physical_zip: nil,
|
154
|
+
physical_city: nil,
|
155
|
+
physical_country: nil,
|
156
|
+
bank_account_no: nil,
|
157
|
+
bank_blz: nil,
|
158
|
+
bank_institute: nil,
|
159
|
+
bank_bic: nil,
|
160
|
+
bank_iban: nil,
|
161
|
+
notes: nil,
|
162
|
+
color: nil
|
163
|
+
)
|
138
164
|
raise ArgumentError, 'id must be an Integer' unless id.is_a?(Integer)
|
139
|
-
raise ArgumentError, 'attributes must be a Hash' unless attributes.is_a?(Hash)
|
140
165
|
|
141
|
-
|
166
|
+
body = {}
|
167
|
+
body[:name] = name if name
|
168
|
+
body[:contact_type] = contact_type if contact_type
|
169
|
+
body[:phone] = phone if phone
|
170
|
+
body[:fax] = fax if fax
|
171
|
+
body[:email] = email if email
|
172
|
+
body[:website] = website if website
|
173
|
+
body[:twitter] = twitter if twitter
|
174
|
+
body[:ust_idnr] = ust_idnr if ust_idnr
|
175
|
+
body[:delivery_method] = delivery_method if delivery_method
|
176
|
+
body[:postal_street] = postal_street if postal_street
|
177
|
+
body[:postal_zip] = postal_zip if postal_zip
|
178
|
+
body[:postal_city] = postal_city if postal_city
|
179
|
+
body[:postal_country] = postal_country if postal_country
|
180
|
+
body[:physical_street] = physical_street if physical_street
|
181
|
+
body[:physical_zip] = physical_zip if physical_zip
|
182
|
+
body[:physical_city] = physical_city if physical_city
|
183
|
+
body[:physical_country] = physical_country if physical_country
|
184
|
+
body[:bank_account_no] = bank_account_no if bank_account_no
|
185
|
+
body[:bank_blz] = bank_blz if bank_blz
|
186
|
+
body[:bank_institute] = bank_institute if bank_institute
|
187
|
+
body[:bank_bic] = bank_bic if bank_bic
|
188
|
+
body[:bank_iban] = bank_iban if bank_iban
|
189
|
+
body[:notes] = notes if notes
|
190
|
+
body[:color] = color if color
|
191
|
+
|
192
|
+
http_put("#{@url_api_path}/contact/companies/#{id}", body)
|
142
193
|
end
|
143
194
|
|
144
195
|
def delete_by(id:)
|
@@ -54,12 +54,44 @@ module PapierkramApi
|
|
54
54
|
http_post("#{@url_api_path}/contact/companies/#{company_id}/persons", body)
|
55
55
|
end
|
56
56
|
|
57
|
-
def update_by(
|
58
|
-
|
57
|
+
def update_by( # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/ParameterLists, Metrics/MethodLength
|
58
|
+
id:,
|
59
|
+
company_id:,
|
60
|
+
title: nil,
|
61
|
+
salutation: nil,
|
62
|
+
first_name: nil,
|
63
|
+
last_name: nil,
|
64
|
+
position: nil,
|
65
|
+
department: nil,
|
66
|
+
phone: nil,
|
67
|
+
skype: nil,
|
68
|
+
fax: nil,
|
69
|
+
email: nil,
|
70
|
+
flagged: nil,
|
71
|
+
mobile: nil,
|
72
|
+
comment: nil,
|
73
|
+
default: nil
|
74
|
+
)
|
59
75
|
raise ArgumentError, 'company_id must be an Integer' unless company_id.is_a?(Integer)
|
60
76
|
raise ArgumentError, 'id must be an Integer' unless id.is_a?(Integer)
|
61
77
|
|
62
|
-
|
78
|
+
body = {}
|
79
|
+
body[:title] = title if title
|
80
|
+
body[:salutation] = salutation if salutation
|
81
|
+
body[:first_name] = first_name if first_name
|
82
|
+
body[:last_name] = last_name if last_name
|
83
|
+
body[:position] = position if position
|
84
|
+
body[:department] = department if department
|
85
|
+
body[:phone] = phone if phone
|
86
|
+
body[:skype] = skype if skype
|
87
|
+
body[:fax] = fax if fax
|
88
|
+
body[:email] = email if email
|
89
|
+
body[:flagged] = flagged if flagged
|
90
|
+
body[:mobile] = mobile if mobile
|
91
|
+
body[:comment] = comment if comment
|
92
|
+
body[:default] = default if default
|
93
|
+
|
94
|
+
http_put("#{@url_api_path}/contact/companies/#{company_id}/persons/#{id}", body)
|
63
95
|
end
|
64
96
|
|
65
97
|
def delete_by(company_id:, id:)
|
@@ -6,6 +6,8 @@ module PapierkramApi
|
|
6
6
|
module Expense
|
7
7
|
# This class is responsible for all the API calls related to expense vouchers.
|
8
8
|
class Vouchers < PapierkramApi::V1::Endpoints::Base
|
9
|
+
ALLOWED_DIFFERENCE_REASONS = %w[sonstige mahnung teilzahlung skonto sonstige schmaelerung].freeze
|
10
|
+
|
9
11
|
def find_by(id:, pdf: false)
|
10
12
|
if pdf == true
|
11
13
|
return get("#{@url_api_path}/expense/vouchers/#{id}/pdf", nil,
|
@@ -38,6 +40,154 @@ module PapierkramApi
|
|
38
40
|
|
39
41
|
http_get("#{@url_api_path}/expense/vouchers", query)
|
40
42
|
end
|
43
|
+
|
44
|
+
def create( # rubocop:disable Metrics/ParameterLists,Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
|
45
|
+
name:,
|
46
|
+
provenance:,
|
47
|
+
line_items:,
|
48
|
+
due_date: nil,
|
49
|
+
document_date: nil,
|
50
|
+
description: nil,
|
51
|
+
entertainment_reason: nil,
|
52
|
+
entertainment_persons: nil,
|
53
|
+
flagged: nil,
|
54
|
+
creditor_id: nil
|
55
|
+
)
|
56
|
+
body = {}
|
57
|
+
body[:name] = name
|
58
|
+
body[:line_items] = line_items
|
59
|
+
body[:provenance] = provenance
|
60
|
+
|
61
|
+
body[:due_date] = due_date if due_date
|
62
|
+
body[:document_date] = document_date if document_date
|
63
|
+
body[:description] = description if description
|
64
|
+
body[:entertainment_reason] = entertainment_reason if entertainment_reason
|
65
|
+
body[:entertainment_persons] = entertainment_persons if entertainment_persons
|
66
|
+
body[:flagged] = flagged if flagged
|
67
|
+
body[:creditor] = { id: creditor_id } if creditor_id
|
68
|
+
|
69
|
+
if entertainment_persons
|
70
|
+
raise ArgumentError, 'entertainment_persons must be an array' unless entertainment_persons.is_a?(Array)
|
71
|
+
|
72
|
+
unless entertainment_persons.all?(String)
|
73
|
+
raise ArgumentError,
|
74
|
+
'entertainment_persons must be an array of strings'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
if line_items
|
79
|
+
raise ArgumentError, 'line_items must be an array' unless line_items.is_a?(Array)
|
80
|
+
raise ArgumentError, 'line_items must be an array of hashes' unless line_items.all?(Hash)
|
81
|
+
end
|
82
|
+
|
83
|
+
http_post("#{@url_api_path}/expense/vouchers", body)
|
84
|
+
end
|
85
|
+
|
86
|
+
def update_by( # rubocop:disable Metrics/ParameterLists,Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
87
|
+
id:,
|
88
|
+
name: nil,
|
89
|
+
due_date: nil,
|
90
|
+
document_date: nil,
|
91
|
+
description: nil,
|
92
|
+
entertainment_reason: nil,
|
93
|
+
entertainment_persons: nil,
|
94
|
+
flagged: nil,
|
95
|
+
provenance: nil,
|
96
|
+
creditor_id: nil,
|
97
|
+
line_items: nil
|
98
|
+
)
|
99
|
+
body = {}
|
100
|
+
body[:name] = name if name
|
101
|
+
body[:due_date] = due_date if due_date
|
102
|
+
body[:document_date] = document_date if document_date
|
103
|
+
body[:description] = description if description
|
104
|
+
body[:entertainment_reason] = entertainment_reason if entertainment_reason
|
105
|
+
body[:entertainment_persons] = entertainment_persons if entertainment_persons
|
106
|
+
body[:flagged] = flagged if flagged
|
107
|
+
body[:provenance] = provenance if provenance
|
108
|
+
body[:creditor] = { id: creditor_id } if creditor_id
|
109
|
+
body[:line_items] = line_items if line_items
|
110
|
+
|
111
|
+
if line_items
|
112
|
+
raise ArgumentError, 'line_items must be an array' unless line_items.is_a?(Array)
|
113
|
+
raise ArgumentError, 'line_items must be an array of hashes' unless line_items.all?(Hash)
|
114
|
+
end
|
115
|
+
|
116
|
+
http_put("#{@url_api_path}/expense/vouchers/#{id}", body)
|
117
|
+
end
|
118
|
+
|
119
|
+
def add_document_by(id:, path_to_file:, file_type:)
|
120
|
+
doc = Faraday::Multipart::FilePart.new(path_to_file, file_type)
|
121
|
+
|
122
|
+
http_post("#{@url_api_path}/expense/vouchers/#{id}/documents", { file: doc })
|
123
|
+
end
|
124
|
+
|
125
|
+
def delete_document_by(id:, document_id:)
|
126
|
+
http_delete("#{@url_api_path}/expense/vouchers/#{id}/documents/#{document_id}")
|
127
|
+
end
|
128
|
+
|
129
|
+
def delete_by(id:)
|
130
|
+
http_delete("#{@url_api_path}/expense/vouchers/#{id}")
|
131
|
+
end
|
132
|
+
|
133
|
+
def archive_by(id:)
|
134
|
+
http_post("#{@url_api_path}/expense/vouchers/#{id}/archive")
|
135
|
+
end
|
136
|
+
|
137
|
+
def unarchive_by(id:)
|
138
|
+
http_post("#{@url_api_path}/expense/vouchers/#{id}/unarchive")
|
139
|
+
end
|
140
|
+
|
141
|
+
def cancel_by(id:)
|
142
|
+
http_post("#{@url_api_path}/expense/vouchers/#{id}/cancel")
|
143
|
+
end
|
144
|
+
|
145
|
+
def cancel_with_reverse_entry_by(id:)
|
146
|
+
http_post("#{@url_api_path}/expense/vouchers/#{id}/cancel_with_reverse_entry")
|
147
|
+
end
|
148
|
+
|
149
|
+
def mark_as_paid_by(
|
150
|
+
id:,
|
151
|
+
value: nil,
|
152
|
+
payment_date: nil,
|
153
|
+
banking_transaction_id: nil,
|
154
|
+
difference_reason: nil
|
155
|
+
)
|
156
|
+
unless value || banking_transaction_id
|
157
|
+
raise ArgumentError, 'either value or banking_transaction_id must be given'
|
158
|
+
end
|
159
|
+
|
160
|
+
body = {}
|
161
|
+
|
162
|
+
if value
|
163
|
+
validate_value!(value)
|
164
|
+
body[:value] = value
|
165
|
+
end
|
166
|
+
|
167
|
+
if difference_reason
|
168
|
+
validate_difference_reason!(difference_reason)
|
169
|
+
body[:difference_reason] = difference_reason
|
170
|
+
end
|
171
|
+
|
172
|
+
body[:payment_date] = payment_date if payment_date
|
173
|
+
body[:banking_transaction] = { id: banking_transaction_id } if banking_transaction_id
|
174
|
+
|
175
|
+
http_post("#{@url_api_path}/expense/vouchers/#{id}/pay", body)
|
176
|
+
end
|
177
|
+
|
178
|
+
private
|
179
|
+
|
180
|
+
def validate_value!(value)
|
181
|
+
raise ArgumentError, 'value must be a float' unless value.is_a?(Numeric)
|
182
|
+
end
|
183
|
+
|
184
|
+
def validate_difference_reason!(difference_reason)
|
185
|
+
raise ArgumentError, 'difference_reason must be a string' unless difference_reason.is_a?(String)
|
186
|
+
|
187
|
+
return if ALLOWED_DIFFERENCE_REASONS.include?(difference_reason)
|
188
|
+
|
189
|
+
raise ArgumentError, "difference_reason must be one of: #{ALLOWED_DIFFERENCE_REASONS.join(', ')}"
|
190
|
+
end
|
41
191
|
end
|
42
192
|
end
|
43
193
|
end
|
@@ -6,6 +6,8 @@ module PapierkramApi
|
|
6
6
|
module Income
|
7
7
|
# This class is responsible for all the API calls related to income invoices.
|
8
8
|
class Invoices < PapierkramApi::V1::Endpoints::Base
|
9
|
+
ALLOWED_SEND_VIA = %i[email pdf].freeze
|
10
|
+
|
9
11
|
def find_by(id:, pdf: false)
|
10
12
|
if pdf == true
|
11
13
|
return http_get(
|
@@ -18,14 +20,16 @@ module PapierkramApi
|
|
18
20
|
http_get("#{@url_api_path}/income/invoices/#{id}")
|
19
21
|
end
|
20
22
|
|
21
|
-
def all(
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
def all( # rubocop:disable Metrics/CyclomaticComplexity
|
24
|
+
page: 1,
|
25
|
+
page_size: 100,
|
26
|
+
order_by: nil,
|
27
|
+
order_direction: nil,
|
28
|
+
creditor_id: nil,
|
29
|
+
project_id: nil,
|
30
|
+
document_date_range_start: nil,
|
31
|
+
document_date_range_end: nil
|
32
|
+
)
|
29
33
|
query = {
|
30
34
|
page: page,
|
31
35
|
page_size: page_size
|
@@ -42,6 +46,148 @@ module PapierkramApi
|
|
42
46
|
|
43
47
|
http_get("#{@url_api_path}/income/invoices", query)
|
44
48
|
end
|
49
|
+
|
50
|
+
def create( # rubocop:disable Metrics/ParameterLists,Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
51
|
+
name:,
|
52
|
+
line_items:,
|
53
|
+
payment_term_id:,
|
54
|
+
description: nil,
|
55
|
+
flagged: nil,
|
56
|
+
document_date: nil,
|
57
|
+
supply_date: nil,
|
58
|
+
customer_id: nil,
|
59
|
+
contact_person_id: nil,
|
60
|
+
project_id: nil,
|
61
|
+
custom_template_id: nil,
|
62
|
+
billing_company: nil,
|
63
|
+
billing_department: nil,
|
64
|
+
billing_contact_person: nil,
|
65
|
+
billing_street: nil,
|
66
|
+
billing_zip: nil,
|
67
|
+
billing_city: nil,
|
68
|
+
billing_country: nil,
|
69
|
+
billing_ust_idnr: nil,
|
70
|
+
billing_email: nil
|
71
|
+
)
|
72
|
+
body = {}
|
73
|
+
body[:name] = name
|
74
|
+
body[:line_items] = line_items
|
75
|
+
body[:payment_term] = { id: payment_term_id }
|
76
|
+
body[:description] = description if description
|
77
|
+
body[:flagged] = flagged if flagged
|
78
|
+
body[:document_date] = document_date if document_date
|
79
|
+
body[:supply_date] = supply_date if supply_date
|
80
|
+
body[:customer] = { id: customer_id } if customer_id
|
81
|
+
body[:customer][:contact_person] = { id: contact_person_id } if contact_person_id
|
82
|
+
body[:customer][:project] = { id: project_id } if project_id
|
83
|
+
body[:custom_template] = { id: custom_template_id } if custom_template_id
|
84
|
+
|
85
|
+
body[:billing] = {}
|
86
|
+
body[:billing][:company] = billing_company if billing_company
|
87
|
+
body[:billing][:department] = billing_department if billing_department
|
88
|
+
body[:billing][:contact_person] = billing_contact_person if billing_contact_person
|
89
|
+
body[:billing][:street] = billing_street if billing_street
|
90
|
+
body[:billing][:zip] = billing_zip if billing_zip
|
91
|
+
body[:billing][:city] = billing_city if billing_city
|
92
|
+
body[:billing][:country] = billing_country if billing_country
|
93
|
+
body[:billing][:ust_idnr] = billing_ust_idnr if billing_ust_idnr
|
94
|
+
body[:billing][:email] = billing_email if billing_email
|
95
|
+
|
96
|
+
http_post("#{@url_api_path}/income/invoices", body)
|
97
|
+
end
|
98
|
+
|
99
|
+
def update_by( # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity,Metrics/ParameterLists
|
100
|
+
id:,
|
101
|
+
name: nil,
|
102
|
+
line_items: nil,
|
103
|
+
payment_term_id: nil,
|
104
|
+
description: nil,
|
105
|
+
flagged: nil,
|
106
|
+
document_date: nil,
|
107
|
+
supply_date: nil,
|
108
|
+
customer_id: nil,
|
109
|
+
contact_person_id: nil,
|
110
|
+
project_id: nil,
|
111
|
+
custom_template_id: nil,
|
112
|
+
billing_company: nil,
|
113
|
+
billing_department: nil,
|
114
|
+
billing_contact_person: nil,
|
115
|
+
billing_street: nil,
|
116
|
+
billing_zip: nil,
|
117
|
+
billing_city: nil,
|
118
|
+
billing_country: nil,
|
119
|
+
billing_ust_idnr: nil,
|
120
|
+
billing_email: nil
|
121
|
+
)
|
122
|
+
body = {}
|
123
|
+
body[:name] = name if name
|
124
|
+
body[:line_items] = line_items if line_items
|
125
|
+
body[:payment_term] = { id: payment_term_id } if payment_term_id
|
126
|
+
body[:description] = description if description
|
127
|
+
body[:flagged] = flagged if flagged
|
128
|
+
body[:document_date] = document_date if document_date
|
129
|
+
body[:supply_date] = supply_date if supply_date
|
130
|
+
body[:customer] = { id: customer_id } if customer_id
|
131
|
+
body[:customer][:contact_person] = { id: contact_person_id } if contact_person_id
|
132
|
+
body[:customer][:project] = { id: project_id } if project_id
|
133
|
+
body[:custom_template] = { id: custom_template_id } if custom_template_id
|
134
|
+
|
135
|
+
body[:billing] = {}
|
136
|
+
body[:billing][:company] = billing_company if billing_company
|
137
|
+
body[:billing][:department] = billing_department if billing_department
|
138
|
+
body[:billing][:contact_person] = billing_contact_person if billing_contact_person
|
139
|
+
body[:billing][:street] = billing_street if billing_street
|
140
|
+
body[:billing][:zip] = billing_zip if billing_zip
|
141
|
+
body[:billing][:city] = billing_city if billing_city
|
142
|
+
body[:billing][:country] = billing_country if billing_country
|
143
|
+
body[:billing][:ust_idnr] = billing_ust_idnr if billing_ust_idnr
|
144
|
+
body[:billing][:email] = billing_email if billing_email
|
145
|
+
|
146
|
+
http_put("#{@url_api_path}/income/invoices/#{id}", body)
|
147
|
+
end
|
148
|
+
|
149
|
+
def deliver_by( # rubocop:disable Metrics/AbcSize
|
150
|
+
id:,
|
151
|
+
email_recipient: nil,
|
152
|
+
email_subject: nil,
|
153
|
+
email_body: nil,
|
154
|
+
send_via: :pdf
|
155
|
+
)
|
156
|
+
|
157
|
+
raise ArgumentError, 'send_via must be :email or :pdf' unless ALLOWED_SEND_VIA.include?(send_via)
|
158
|
+
|
159
|
+
body = {}
|
160
|
+
body[:send_via] = send_via
|
161
|
+
|
162
|
+
if send_via == :email
|
163
|
+
if email_recipient.nil? || email_subject.nil? || email_body.nil?
|
164
|
+
raise ArgumentError, 'email_recipient, email_subject and email_body must be set'
|
165
|
+
end
|
166
|
+
|
167
|
+
body[:email] = {}
|
168
|
+
body[:email][:recipient] = email_recipient
|
169
|
+
body[:email][:subject] = email_subject
|
170
|
+
body[:email][:body] = email_body
|
171
|
+
end
|
172
|
+
|
173
|
+
http_post("#{@url_api_path}/income/invoices/#{id}/deliver", body)
|
174
|
+
end
|
175
|
+
|
176
|
+
def delete_by(id:)
|
177
|
+
http_delete("#{@url_api_path}/income/invoices/#{id}")
|
178
|
+
end
|
179
|
+
|
180
|
+
def archive_by(id:)
|
181
|
+
http_post("#{@url_api_path}/income/invoices/#{id}/archive")
|
182
|
+
end
|
183
|
+
|
184
|
+
def unarchive_by(id:)
|
185
|
+
http_post("#{@url_api_path}/income/invoices/#{id}/unarchive")
|
186
|
+
end
|
187
|
+
|
188
|
+
def cancel_by(id:)
|
189
|
+
http_post("#{@url_api_path}/income/invoices/#{id}/cancel")
|
190
|
+
end
|
45
191
|
end
|
46
192
|
end
|
47
193
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PapierkramApi
|
4
|
+
module V1
|
5
|
+
module Endpoints
|
6
|
+
module Income
|
7
|
+
# This class is responsible for all the API calls related to income propositions.
|
8
|
+
class PaymentTerms < PapierkramApi::V1::Endpoints::Base
|
9
|
+
def find_by(id:)
|
10
|
+
http_get("#{@url_api_path}/income/payment_terms/#{id}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def all(page: 1,
|
14
|
+
page_size: 100,
|
15
|
+
order_by: nil,
|
16
|
+
order_direction: nil)
|
17
|
+
query = {
|
18
|
+
page: page,
|
19
|
+
page_size: page_size
|
20
|
+
}
|
21
|
+
query[:order_by] = order_by if order_by
|
22
|
+
query[:order_direction] = order_direction if order_direction
|
23
|
+
|
24
|
+
http_get("#{@url_api_path}/income/payment_terms", query)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -27,21 +27,37 @@ module PapierkramApi
|
|
27
27
|
body = {}
|
28
28
|
body[:name] = name
|
29
29
|
body[:article_no] = article_no
|
30
|
+
|
31
|
+
body[:proposition_type] = proposition_type if proposition_type
|
30
32
|
body[:description] = description if description
|
31
33
|
body[:time_unit] = time_unit if time_unit
|
32
|
-
body[:proposition_type] = proposition_type if proposition_type
|
33
|
-
body[:price] = price if price
|
34
34
|
body[:vat_rate] = vat_rate if vat_rate
|
35
|
+
body[:price] = price if price
|
35
36
|
|
36
37
|
http_post("#{@url_api_path}/income/propositions", body)
|
37
38
|
end
|
38
39
|
|
39
|
-
def update_by(
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
def update_by( # rubocop:disable Metrics/CyclomaticComplexity
|
41
|
+
id:,
|
42
|
+
name: nil,
|
43
|
+
description: nil,
|
44
|
+
article_no: nil,
|
45
|
+
price: nil,
|
46
|
+
proposition_type: nil,
|
47
|
+
time_unit: nil,
|
48
|
+
vat_rate: nil
|
49
|
+
)
|
50
|
+
|
51
|
+
body = {}
|
52
|
+
body[:name] = name if name
|
53
|
+
body[:description] = description if description
|
54
|
+
body[:article_no] = article_no if article_no
|
55
|
+
body[:price] = price if price
|
56
|
+
body[:proposition_type] = proposition_type if proposition_type
|
57
|
+
body[:time_unit] = time_unit if time_unit
|
58
|
+
body[:vat_rate] = vat_rate if vat_rate
|
43
59
|
|
44
|
-
http_put("#{@url_api_path}/income/propositions/#{id}",
|
60
|
+
http_put("#{@url_api_path}/income/propositions/#{id}", body)
|
45
61
|
end
|
46
62
|
|
47
63
|
def delete_by(id:)
|
@@ -55,10 +55,39 @@ module PapierkramApi
|
|
55
55
|
http_post("#{@url_api_path}/projects", body)
|
56
56
|
end
|
57
57
|
|
58
|
-
def update_by(
|
59
|
-
|
58
|
+
def update_by( # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/ParameterLists
|
59
|
+
id:,
|
60
|
+
name: nil,
|
61
|
+
customer_id: nil,
|
62
|
+
description: nil,
|
63
|
+
start_date: nil,
|
64
|
+
end_date: nil,
|
65
|
+
flagged: nil,
|
66
|
+
budget_type: nil,
|
67
|
+
budget_money: nil,
|
68
|
+
budget_time: nil,
|
69
|
+
budget_time_unit: nil,
|
70
|
+
color: nil,
|
71
|
+
default_proposition: nil,
|
72
|
+
team_members: nil
|
73
|
+
)
|
74
|
+
|
75
|
+
body = {}
|
76
|
+
body[:name] = name if name
|
77
|
+
body[:customer] = { id: customer_id } if customer_id
|
78
|
+
body[:description] = description if description
|
79
|
+
body[:start_date] = start_date if start_date
|
80
|
+
body[:end_date] = end_date if end_date
|
81
|
+
body[:flagged] = flagged if flagged
|
82
|
+
body[:budget_type] = budget_type if budget_type
|
83
|
+
body[:budget_money] = budget_money if budget_money
|
84
|
+
body[:budget_time] = budget_time if budget_time
|
85
|
+
body[:budget_time_unit] = budget_time_unit if budget_time_unit
|
86
|
+
body[:color] = color if color
|
87
|
+
body[:default_proposition] = default_proposition if default_proposition
|
88
|
+
body[:team_members] = team_members if team_members
|
60
89
|
|
61
|
-
http_put("#{@url_api_path}/projects/#{id}",
|
90
|
+
http_put("#{@url_api_path}/projects/#{id}", body)
|
62
91
|
end
|
63
92
|
|
64
93
|
def delete_by(id:)
|
@@ -26,6 +26,69 @@ module PapierkramApi
|
|
26
26
|
query[:proposition_id] = proposition_id if proposition_id
|
27
27
|
http_get("#{@url_api_path}/tracker/tasks", query)
|
28
28
|
end
|
29
|
+
|
30
|
+
def create(
|
31
|
+
name:,
|
32
|
+
project_id:,
|
33
|
+
proposition_id: nil,
|
34
|
+
deadline: nil,
|
35
|
+
relative_costs: nil,
|
36
|
+
complete: nil,
|
37
|
+
flagged: nil,
|
38
|
+
user_id: nil
|
39
|
+
)
|
40
|
+
body = {}
|
41
|
+
body[:name] = name
|
42
|
+
body[:project] = { id: project_id }
|
43
|
+
body[:proposition] = { id: proposition_id } if proposition_id
|
44
|
+
body[:deadline] = deadline if deadline
|
45
|
+
body[:relative_costs] = relative_costs if relative_costs
|
46
|
+
body[:complete] = complete if complete
|
47
|
+
body[:flagged] = flagged if flagged
|
48
|
+
body[:user] = { id: user_id } if user_id
|
49
|
+
|
50
|
+
http_post("#{@url_api_path}/tracker/tasks", body)
|
51
|
+
end
|
52
|
+
|
53
|
+
def update_by( # rubocop:disable Metrics/ParameterLists
|
54
|
+
id:,
|
55
|
+
name:,
|
56
|
+
project_id:,
|
57
|
+
proposition_id: nil,
|
58
|
+
deadline: nil,
|
59
|
+
relative_costs: nil,
|
60
|
+
complete: nil,
|
61
|
+
flagged: nil,
|
62
|
+
user_id: nil
|
63
|
+
)
|
64
|
+
body = {}
|
65
|
+
body[:name] = name
|
66
|
+
body[:project] = { id: project_id }
|
67
|
+
body[:proposition] = { id: proposition_id } if proposition_id
|
68
|
+
body[:deadline] = deadline if deadline
|
69
|
+
body[:relative_costs] = relative_costs if relative_costs
|
70
|
+
body[:complete] = complete if complete
|
71
|
+
body[:flagged] = flagged if flagged
|
72
|
+
body[:user] = { id: user_id } if user_id
|
73
|
+
|
74
|
+
http_put("#{@url_api_path}/tracker/tasks/#{id}", body)
|
75
|
+
end
|
76
|
+
|
77
|
+
def delete_by(id:)
|
78
|
+
http_delete("#{@url_api_path}/tracker/tasks/#{id}")
|
79
|
+
end
|
80
|
+
|
81
|
+
def archive_by(id:)
|
82
|
+
raise ArgumentError, 'id must be an Integer' unless id.is_a?(Integer)
|
83
|
+
|
84
|
+
http_post("#{@url_api_path}/tracker/tasks/#{id}/archive")
|
85
|
+
end
|
86
|
+
|
87
|
+
def unarchive_by(id:)
|
88
|
+
raise ArgumentError, 'id must be an Integer' unless id.is_a?(Integer)
|
89
|
+
|
90
|
+
http_post("#{@url_api_path}/tracker/tasks/#{id}/unarchive")
|
91
|
+
end
|
29
92
|
end
|
30
93
|
end
|
31
94
|
end
|