sk_api_schema 0.10.6 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -2
- data/CHANGELOG.md +4 -0
- data/README.rdoc +1 -1
- data/Rakefile +0 -10
- data/json/v1.0/account.json +13 -0
- data/json/v1.0/contact.json +7 -1
- data/json/v1.0/credit_note.json +6 -0
- data/json/v1.0/invoice.json +6 -0
- data/json/v1.0/order.json +6 -0
- data/json/v1.0/product.json +0 -4
- data/json/v1.0/recurring.json +6 -0
- data/json/v2.0/README.md +28 -0
- data/json/v2.0/account.json +31 -18
- data/json/v2.0/account_billing.json +15 -7
- data/json/v2.0/account_entry.json +19 -16
- data/json/v2.0/address.json +7 -6
- data/json/v2.0/attachment.json +17 -16
- data/json/v2.0/auth_permission.json +6 -5
- data/json/v2.0/comment.json +15 -9
- data/json/v2.0/company.json +11 -8
- data/json/v2.0/contact.json +45 -49
- data/json/v2.0/credit_note.json +59 -84
- data/json/v2.0/divider_item.json +9 -8
- data/json/v2.0/document.json +41 -36
- data/json/v2.0/email.json +29 -22
- data/json/v2.0/email_template.json +15 -10
- data/json/v2.0/estimate.json +59 -76
- data/json/v2.0/export.json +26 -16
- data/json/v2.0/export_template.json +15 -9
- data/json/v2.0/invoice.json +62 -92
- data/json/v2.0/language.json +14 -6
- data/json/v2.0/line_item.json +14 -13
- data/json/v2.0/order.json +59 -75
- data/json/v2.0/payment.json +17 -12
- data/json/v2.0/payment_reminder.json +53 -71
- data/json/v2.0/pdf_template.json +14 -8
- data/json/v2.0/product.json +16 -13
- data/json/v2.0/recurring.json +57 -54
- data/json/v2.0/sub.json +14 -7
- data/json/v2.0/sub_total_item.json +10 -9
- data/json/v2.0/tag.json +13 -5
- data/json/v2.0/task.json +31 -16
- data/json/v2.0/text_template.json +16 -10
- data/json/v2.0/user.json +8 -8
- data/lib/sk_api_schema/version.rb +1 -1
- data/sk_api_schema.gemspec +1 -1
- data/spec/sk_api_schema_spec.rb +35 -19
- data/spec/spec_helper.rb +1 -2
- metadata +7 -7
- data/json/v2.0/client.json +0 -318
data/json/v2.0/tag.json
CHANGED
@@ -1,25 +1,33 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type":"object",
|
2
4
|
"title": "tag",
|
3
|
-
"name": "tag",
|
4
5
|
"description":"A tag",
|
5
6
|
"properties":{
|
6
7
|
"id":{
|
7
8
|
"description":"Unique identifier - UUID",
|
8
9
|
"identity":true,
|
9
|
-
"
|
10
|
+
"readOnly":true,
|
11
|
+
"type":"string",
|
12
|
+
"maxLength": 22,
|
13
|
+
"minLength":22
|
14
|
+
},
|
15
|
+
"company_id":{
|
16
|
+
"description":"Company",
|
17
|
+
"readOnly":true,
|
10
18
|
"type":"string",
|
11
19
|
"maxLength": 22,
|
12
20
|
"minLength":22
|
13
21
|
},
|
14
22
|
"name":{
|
15
23
|
"description": "The tag itself",
|
16
|
-
"
|
24
|
+
"readOnly":true,
|
17
25
|
"type":"string",
|
18
26
|
"maxLength": 50
|
19
27
|
},
|
20
28
|
"taggings_count":{
|
21
29
|
"description": "Usage count of this tag, for all objects in whole company scope.",
|
22
|
-
"
|
30
|
+
"readOnly":true,
|
23
31
|
"type":"number"
|
24
32
|
}
|
25
33
|
},
|
data/json/v2.0/task.json
CHANGED
@@ -1,24 +1,32 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type":"object",
|
2
4
|
"title": "task",
|
3
|
-
"
|
4
|
-
"
|
5
|
+
"description":"An Task",
|
6
|
+
"required" : ["name", "description"],
|
5
7
|
"properties":{
|
6
8
|
"id":{
|
7
9
|
"description":"Unique identifier - UUID",
|
8
10
|
"identity":true,
|
9
|
-
"
|
11
|
+
"readOnly":true,
|
12
|
+
"type":"string",
|
13
|
+
"maxLength": 22,
|
14
|
+
"minLength":22
|
15
|
+
},
|
16
|
+
"company_id":{
|
17
|
+
"description":"Company",
|
18
|
+
"readOnly":true,
|
10
19
|
"type":"string",
|
11
20
|
"maxLength": 22,
|
12
21
|
"minLength":22
|
13
22
|
},
|
14
23
|
"name":{
|
15
24
|
"description": "The task title.",
|
16
|
-
"
|
17
|
-
"
|
25
|
+
"type":"string",
|
26
|
+
"maxLength": 255
|
18
27
|
},
|
19
28
|
"description":{
|
20
29
|
"description": "Notes, explanations for the task.",
|
21
|
-
"required":true,
|
22
30
|
"type":"string"
|
23
31
|
},
|
24
32
|
"status":{
|
@@ -35,20 +43,27 @@
|
|
35
43
|
},
|
36
44
|
"contact":{
|
37
45
|
"description": "The contact for the task. Use contact_id field to set a contact.",
|
38
|
-
"
|
46
|
+
"readOnly":true,
|
39
47
|
"type":"object",
|
40
|
-
"
|
48
|
+
"$ref":"./contact.json#"
|
41
49
|
},
|
42
50
|
"documents":{
|
43
|
-
"description": "A
|
51
|
+
"description": "A task can have many related documents.",
|
52
|
+
"readOnly":true,
|
44
53
|
"type":"array",
|
45
|
-
"
|
54
|
+
"items": {
|
55
|
+
"type": "object",
|
56
|
+
"$ref" : "./document.json#"
|
57
|
+
}
|
46
58
|
},
|
47
59
|
"attachments":{
|
48
60
|
"description": "Attached files, uploads.",
|
49
|
-
"
|
61
|
+
"readOnly":true,
|
50
62
|
"type":"array",
|
51
|
-
"
|
63
|
+
"items": {
|
64
|
+
"type": "object",
|
65
|
+
"$ref" : "./attachment.json#"
|
66
|
+
}
|
52
67
|
},
|
53
68
|
"assignee_id":{
|
54
69
|
"description": "User who should do the tasks.",
|
@@ -65,19 +80,19 @@
|
|
65
80
|
"closed_at":{
|
66
81
|
"description": "Date the task was completed.",
|
67
82
|
"format":"date",
|
68
|
-
"
|
83
|
+
"readOnly":true,
|
69
84
|
"type":"string"
|
70
85
|
},
|
71
86
|
"created_at":{
|
72
87
|
"description": "Date the object was created in SK. Never changes afterwards",
|
73
88
|
"format":"date-time",
|
74
|
-
"
|
89
|
+
"readOnly":true,
|
75
90
|
"type":"string"
|
76
91
|
},
|
77
92
|
"updated_at":{
|
78
93
|
"description": "Date the object was edited in SK.",
|
79
94
|
"format":"date-time",
|
80
|
-
"
|
95
|
+
"readOnly":true,
|
81
96
|
"type":"string"
|
82
97
|
}
|
83
98
|
},
|
@@ -1,44 +1,50 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type":"object",
|
2
4
|
"title": "text_template",
|
3
|
-
"
|
4
|
-
"
|
5
|
+
"description":"A text snippet template to be used in documents and emails",
|
6
|
+
"required" : ["name", "text", "kind"],
|
5
7
|
"properties":{
|
6
8
|
"id":{
|
7
9
|
"description":"Unique identifier - UUID",
|
8
10
|
"identity":true,
|
9
|
-
"
|
11
|
+
"readOnly":true,
|
12
|
+
"type":"string",
|
13
|
+
"maxLength": 22,
|
14
|
+
"minLength":22
|
15
|
+
},
|
16
|
+
"company_id":{
|
17
|
+
"description":"Company",
|
18
|
+
"readOnly":true,
|
10
19
|
"type":"string",
|
11
20
|
"maxLength": 22,
|
12
21
|
"minLength":22
|
13
22
|
},
|
14
23
|
"name":{
|
15
24
|
"description": "A meaningful name.",
|
16
|
-
"required":true,
|
17
25
|
"type":"string",
|
18
26
|
"maxLength": 50
|
19
27
|
},
|
20
28
|
"text":{
|
21
29
|
"description": "Text which may contain placeholders, replaced when the template is used.",
|
22
|
-
"required":true,
|
23
30
|
"type":"string",
|
24
|
-
"format":"
|
31
|
+
"format":"string"
|
25
32
|
},
|
26
33
|
"kind":{
|
27
34
|
"description": "Kind of object the template can be used for. If empty the snippet can be used global. In this case watch not all placeholders are available: a client has different fields than an invoice.",
|
28
|
-
"required":true,
|
29
35
|
"enum": ["","invoice", "estimate", "credit_note", "payment_reminder", "order", "contact", "email"],
|
30
36
|
"type":"string"
|
31
37
|
},
|
32
38
|
"created_at":{
|
33
39
|
"description": "Date the object was created in SK. Never changes afterwards",
|
34
40
|
"format":"date-time",
|
35
|
-
"
|
41
|
+
"readOnly":true,
|
36
42
|
"type":"string"
|
37
43
|
},
|
38
44
|
"updated_at":{
|
39
45
|
"description": "Date the object was edited in SK.",
|
40
46
|
"format":"date-time",
|
41
|
-
"
|
47
|
+
"readOnly":true,
|
42
48
|
"type":"string"
|
43
49
|
},
|
44
50
|
"team_id":{
|
data/json/v2.0/user.json
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type":"object",
|
2
4
|
"title": "user",
|
3
|
-
"
|
4
|
-
"
|
5
|
+
"description": "A SalesKing user",
|
6
|
+
"required" : ["email", "language"],
|
5
7
|
"properties":{
|
6
8
|
"id":{
|
7
9
|
"description":"Unique identifier - UUID",
|
8
10
|
"identity":true,
|
9
|
-
"
|
11
|
+
"readOnly":true,
|
10
12
|
"type":"string",
|
11
13
|
"maxLength": 22,
|
12
14
|
"minLength":22
|
@@ -38,7 +40,6 @@
|
|
38
40
|
},
|
39
41
|
"language":{
|
40
42
|
"description": "The users language, reflected in the interface.",
|
41
|
-
"required":true,
|
42
43
|
"type":"string",
|
43
44
|
"maxLength": 10
|
44
45
|
},
|
@@ -48,7 +49,6 @@
|
|
48
49
|
},
|
49
50
|
"email":{
|
50
51
|
"description": "Email address of the user. Unique in SK",
|
51
|
-
"required":true,
|
52
52
|
"type":"string",
|
53
53
|
"maxLength": 100
|
54
54
|
},
|
@@ -84,13 +84,13 @@
|
|
84
84
|
"created_at":{
|
85
85
|
"description": "Date the record was created in SK. Never changes afterwards.",
|
86
86
|
"format":"date-time",
|
87
|
-
"
|
87
|
+
"readOnly":true,
|
88
88
|
"type":"string"
|
89
89
|
},
|
90
90
|
"updated_at":{
|
91
91
|
"description": "Last date when the record was edited.",
|
92
92
|
"format":"date-time",
|
93
|
-
"
|
93
|
+
"readOnly":true,
|
94
94
|
"type":"string"
|
95
95
|
}
|
96
96
|
},
|
data/sk_api_schema.gemspec
CHANGED
@@ -19,9 +19,9 @@ Besides ruby users can use a small lib with utility methods to load and test the
|
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
21
|
s.add_runtime_dependency 'activesupport'
|
22
|
-
s.add_development_dependency 'rdoc'
|
23
22
|
s.add_development_dependency 'rspec'
|
24
23
|
s.add_development_dependency 'simplecov'
|
24
|
+
s.add_development_dependency 'json_schema_validator'
|
25
25
|
s.add_development_dependency 'rake', '>= 0.9.2'
|
26
26
|
|
27
27
|
end
|
data/spec/sk_api_schema_spec.rb
CHANGED
@@ -7,44 +7,51 @@ describe SK::Api::Schema do
|
|
7
7
|
SK::Api::Schema.registry_reset
|
8
8
|
end
|
9
9
|
|
10
|
-
it "
|
11
|
-
File.exists?(SK::Api::Schema.path).
|
10
|
+
it "provides schema path" do
|
11
|
+
expect(File.exists?(SK::Api::Schema.path)).to be true
|
12
12
|
end
|
13
13
|
|
14
|
-
it "
|
14
|
+
it "reads json schema file" do
|
15
15
|
schema = SK::Api::Schema.read(:invoice, 'v1.0')
|
16
|
-
schema[:title].
|
17
|
-
schema[:type].
|
18
|
-
schema['properties'].
|
19
|
-
schema['properties']['id']['identity'].
|
16
|
+
expect(schema[:title]).to eq 'invoice'
|
17
|
+
expect(schema[:type]).to eq 'object'
|
18
|
+
expect(schema['properties']).to be_a Hash
|
19
|
+
expect(schema['properties']['id']['identity']).to be true
|
20
20
|
end
|
21
21
|
|
22
|
-
it "
|
22
|
+
it "reads json schema file with simple version" do
|
23
23
|
schema = SK::Api::Schema.read(:invoice, '1.0')
|
24
|
-
schema[:title].
|
25
|
-
schema[:type].
|
26
|
-
schema['properties'].
|
27
|
-
schema['properties']['id']['identity'].
|
24
|
+
expect(schema[:title]).to eq 'invoice'
|
25
|
+
expect(schema[:type]).to eq 'object'
|
26
|
+
expect(schema['properties']).to be_a Hash
|
27
|
+
expect(schema['properties']['id']['identity']).to be true
|
28
28
|
end
|
29
29
|
|
30
|
-
it "
|
30
|
+
it "reads all json schemas" do
|
31
31
|
schemas = SK::Api::Schema.read_all('1.0')
|
32
32
|
|
33
33
|
file_path = File.join(File.dirname(__FILE__), '../json', 'v1.0', '*.json')
|
34
34
|
# just check file count
|
35
|
-
schemas.length.
|
35
|
+
expect(schemas.length).to eq Dir.glob( file_path ).length
|
36
|
+
end
|
37
|
+
|
38
|
+
it "reads v2 json schemas" do
|
39
|
+
schemas = SK::Api::Schema.read_all('2.0')
|
40
|
+
|
41
|
+
file_path = File.join(File.dirname(__FILE__), '../json', 'v2.0', '*.json')
|
42
|
+
expect(schemas.length).to eq Dir.glob( file_path ).length
|
36
43
|
end
|
37
44
|
|
38
45
|
it "should raise error if version folder does not exist" do
|
39
|
-
|
46
|
+
expect{
|
40
47
|
SK::Api::Schema.read(:invoice, 'v3.0')
|
41
|
-
}.
|
48
|
+
}.to raise_error(Errno::ENOENT)
|
42
49
|
end
|
43
50
|
|
44
51
|
it "should raise error if schema file does not exist" do
|
45
|
-
|
52
|
+
expect{
|
46
53
|
SK::Api::Schema.read(:nope, 'v1.0')
|
47
|
-
}.
|
54
|
+
}.to raise_error(Errno::ENOENT)
|
48
55
|
end
|
49
56
|
|
50
57
|
it "should add schema to registry" do
|
@@ -52,7 +59,6 @@ describe SK::Api::Schema do
|
|
52
59
|
File.should_not_receive(:open)
|
53
60
|
SK::Api::Schema.read(:credit_note, 'v1.0')
|
54
61
|
end
|
55
|
-
|
56
62
|
end
|
57
63
|
|
58
64
|
context 'object parsing' do
|
@@ -144,6 +150,16 @@ describe SK::Api::Schema do
|
|
144
150
|
end
|
145
151
|
|
146
152
|
end
|
153
|
+
|
154
|
+
context 'validate v2 schemata' do
|
155
|
+
it 'should validate all' do
|
156
|
+
schema_path = File.join(SK::Api::Schema.path, 'v2.0')
|
157
|
+
errors = JsonSchemaValidator.validate_schemas(schema_path)
|
158
|
+
errors.each do |name, error|
|
159
|
+
expect(error).to be_empty
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
147
163
|
end
|
148
164
|
|
149
165
|
################################################################################
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sk_api_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Georg Leciejewski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: json_schema_validator
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -128,13 +128,13 @@ files:
|
|
128
128
|
- json/v1.0/task.json
|
129
129
|
- json/v1.0/text_template.json
|
130
130
|
- json/v1.0/user.json
|
131
|
+
- json/v2.0/README.md
|
131
132
|
- json/v2.0/account.json
|
132
133
|
- json/v2.0/account_billing.json
|
133
134
|
- json/v2.0/account_entry.json
|
134
135
|
- json/v2.0/address.json
|
135
136
|
- json/v2.0/attachment.json
|
136
137
|
- json/v2.0/auth_permission.json
|
137
|
-
- json/v2.0/client.json
|
138
138
|
- json/v2.0/comment.json
|
139
139
|
- json/v2.0/company.json
|
140
140
|
- json/v2.0/contact.json
|
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
186
|
version: '0'
|
187
187
|
requirements: []
|
188
188
|
rubyforge_project:
|
189
|
-
rubygems_version: 2.
|
189
|
+
rubygems_version: 2.4.8
|
190
190
|
signing_key:
|
191
191
|
specification_version: 4
|
192
192
|
summary: SalesKing API - JSON Schema
|
data/json/v2.0/client.json
DELETED
@@ -1,318 +0,0 @@
|
|
1
|
-
{"type":"object",
|
2
|
-
"title": "client",
|
3
|
-
"name": "client",
|
4
|
-
"description": "A client as seen by SalesKing. This resource is DEPRECATED please use contacts instead with type-field set 'Client'",
|
5
|
-
"properties":{
|
6
|
-
"id":{
|
7
|
-
"description":"Unique identifier - UUID",
|
8
|
-
"identity":true,
|
9
|
-
"readonly":true,
|
10
|
-
"type":"string",
|
11
|
-
"maxLength": 22,
|
12
|
-
"minLength":22
|
13
|
-
},
|
14
|
-
"number":{
|
15
|
-
"description": "Unique number, auto-created by SK for new client without number.",
|
16
|
-
"type":"string",
|
17
|
-
"maxLength": 50
|
18
|
-
},
|
19
|
-
"organisation":{
|
20
|
-
"description": "Name of a company. This or lastname must be present",
|
21
|
-
"required" : true,
|
22
|
-
"type":"string",
|
23
|
-
"maxLength": 100
|
24
|
-
},
|
25
|
-
"last_name":{
|
26
|
-
"description": "Last name of a person. At least this or the organisation field must be filled for new records",
|
27
|
-
"type":"string",
|
28
|
-
"maxLength": 50
|
29
|
-
},
|
30
|
-
"first_name":{
|
31
|
-
"description": "First name of a person.",
|
32
|
-
"type":"string",
|
33
|
-
"maxLength": 50
|
34
|
-
},
|
35
|
-
"gender":{
|
36
|
-
"description": "Can be empty for a company. Is used in salutation",
|
37
|
-
"enum":["male", "female"],
|
38
|
-
"type":"string"
|
39
|
-
},
|
40
|
-
"notes":{
|
41
|
-
"description": "Notes for a contact. For day to day information you should use comments instead.",
|
42
|
-
"type":"string",
|
43
|
-
"format": "text"
|
44
|
-
},
|
45
|
-
"position":{
|
46
|
-
"description": "Position of a person in a company.",
|
47
|
-
"type":"string",
|
48
|
-
"maxLength": 50
|
49
|
-
},
|
50
|
-
"title":{
|
51
|
-
"description": "Academical title of a person e.g. Dr., Prof",
|
52
|
-
"type":"string",
|
53
|
-
"maxLength": 50
|
54
|
-
},
|
55
|
-
"tax_number":{
|
56
|
-
"description": "Tax number, normally applies to a private person",
|
57
|
-
"type":"string",
|
58
|
-
"maxLength": 30
|
59
|
-
},
|
60
|
-
"vat_number":{
|
61
|
-
"description": "VAT number, for a company or person paying value added taxes.",
|
62
|
-
"type":"string",
|
63
|
-
"maxLength": 30
|
64
|
-
},
|
65
|
-
"email":{
|
66
|
-
"description": "Email address of the contact.",
|
67
|
-
"type":"string",
|
68
|
-
"maxLength": 100
|
69
|
-
},
|
70
|
-
"url":{
|
71
|
-
"description": "An url associated with the person, e.g its company website.",
|
72
|
-
"type":"string",
|
73
|
-
"maxLength": 255
|
74
|
-
},
|
75
|
-
"birthday":{
|
76
|
-
"description": "The birthday. YYYY-MM-DD",
|
77
|
-
"format":"date",
|
78
|
-
"type":"string"
|
79
|
-
},
|
80
|
-
"tag_list":{
|
81
|
-
"description": "Space separated list of tags. Are split and saved as Tag objects on create, update.",
|
82
|
-
"type":"string"
|
83
|
-
},
|
84
|
-
"created_at":{
|
85
|
-
"description": "Date the record was created in SK. Never changes afterwards.",
|
86
|
-
"format":"date-time",
|
87
|
-
"readonly":true,
|
88
|
-
"type":"string"
|
89
|
-
},
|
90
|
-
"updated_at":{
|
91
|
-
"description": "Last date when the record was edited.",
|
92
|
-
"format":"date-time",
|
93
|
-
"readonly":true,
|
94
|
-
"type":"string"
|
95
|
-
},
|
96
|
-
"language":{
|
97
|
-
"description": "Should be a valid language short-code: de-DE, fr, en-GB; like defined in your account language menu. When the client is emailed, a localized version of a multi-language template(email, pdf) will be used if available. The language will also be set for new documents.",
|
98
|
-
"type":"string",
|
99
|
-
"maxLength": 10
|
100
|
-
},
|
101
|
-
"currency":{
|
102
|
-
"description": "Currency code as defined by the ISO 4217 standard(3-letter UPCASE: EUR, USD). If set the currency is taken for new documents.",
|
103
|
-
"type":"string",
|
104
|
-
"maxLength": 3,
|
105
|
-
"minLength": 3
|
106
|
-
},
|
107
|
-
"payment_method":{
|
108
|
-
"description": "Default payment method for used for new documemts",
|
109
|
-
"enum":["cash","bank_transfer","credit_card","paypal","direct_debit","cheque", "moneybookers", "premium_sms"],
|
110
|
-
"type":"string"
|
111
|
-
},
|
112
|
-
"bank_name":{
|
113
|
-
"description": "Bank name",
|
114
|
-
"type":"string",
|
115
|
-
"maxLength": 70
|
116
|
-
},
|
117
|
-
"bank_number":{
|
118
|
-
"description": "Bank number",
|
119
|
-
"type":"string",
|
120
|
-
"maxLength": 35
|
121
|
-
},
|
122
|
-
"bank_account_number":{
|
123
|
-
"description": "Bank account number.",
|
124
|
-
"type":"string",
|
125
|
-
"maxLength": 35
|
126
|
-
},
|
127
|
-
"bank_iban":{
|
128
|
-
"description": "IBAN Number of the bank account. Is validated",
|
129
|
-
"type":"string",
|
130
|
-
"maxLength": 35
|
131
|
-
},
|
132
|
-
"bank_swift":{
|
133
|
-
"description": "SWIFT BIC- Bank Identifier Code",
|
134
|
-
"type":"string",
|
135
|
-
"maxLength": 11
|
136
|
-
},
|
137
|
-
"bank_owner":{
|
138
|
-
"description": "Bank account owner",
|
139
|
-
"type":"string",
|
140
|
-
"maxLength": 70
|
141
|
-
},
|
142
|
-
"phone_fax":{
|
143
|
-
"description": "Fax number",
|
144
|
-
"type":"string",
|
145
|
-
"maxLength": 30
|
146
|
-
},
|
147
|
-
"phone_office":{
|
148
|
-
"description": "Office phone number",
|
149
|
-
"type":"string",
|
150
|
-
"maxLength": 30
|
151
|
-
},
|
152
|
-
"phone_home":{
|
153
|
-
"description": "Private phone number",
|
154
|
-
"type":"string",
|
155
|
-
"maxLength": 30
|
156
|
-
},
|
157
|
-
"phone_mobile":{
|
158
|
-
"description": "Mobile phone number",
|
159
|
-
"type":"string",
|
160
|
-
"maxLength": 30
|
161
|
-
},
|
162
|
-
"lock_version":{
|
163
|
-
"description": "Increased on every edit, so SK can detect/prevent a concurrent edit by another user. First save wins.",
|
164
|
-
"type":"integer"
|
165
|
-
},
|
166
|
-
"cash_discount":{
|
167
|
-
"description": "Default cash discount for new invoices.",
|
168
|
-
"type":"number"
|
169
|
-
},
|
170
|
-
"due_days":{
|
171
|
-
"description": "Default due days for new invoices.",
|
172
|
-
"type":"integer"
|
173
|
-
},
|
174
|
-
"address_field":{
|
175
|
-
"description": "Returns the address field used on new docs. Consist of Organisation name and default(first) address",
|
176
|
-
"readonly":true,
|
177
|
-
"type":"string"
|
178
|
-
},
|
179
|
-
"addresses":{
|
180
|
-
"description": "A client can have many addresses, sorted by date descending(new first). Default address is the most recent one.",
|
181
|
-
"type":"array",
|
182
|
-
"properties" : {"$ref":"./address.json#properties"}
|
183
|
-
},
|
184
|
-
"team_id":{
|
185
|
-
"description": "A team uuid. If set only the team and its parent teams can see the record.",
|
186
|
-
"type":"string",
|
187
|
-
"maxLength": 22,
|
188
|
-
"minLength":22
|
189
|
-
}
|
190
|
-
},
|
191
|
-
"links":[
|
192
|
-
{ "rel": "self",
|
193
|
-
"href": "clients/{id}"
|
194
|
-
},
|
195
|
-
{ "rel": "instances",
|
196
|
-
"href": "clients",
|
197
|
-
"properties" : {
|
198
|
-
"page":{
|
199
|
-
"title" : "Page",
|
200
|
-
"description": "In paginated results set the page to look for",
|
201
|
-
"type":"number"
|
202
|
-
},
|
203
|
-
"per_page":{
|
204
|
-
"title" : "Per page",
|
205
|
-
"description": "Results per page. Default is 50, max is 200",
|
206
|
-
"type":"number"
|
207
|
-
},
|
208
|
-
"filter[q]":{
|
209
|
-
"title" : "Search",
|
210
|
-
"description": "Wildcard search in first, last_name, organisation, email, number",
|
211
|
-
"type":"string"
|
212
|
-
},
|
213
|
-
"filter[tags]":{
|
214
|
-
"title" : "Tags",
|
215
|
-
"description": "Filter by a space delimited list of tags",
|
216
|
-
"type":"string"
|
217
|
-
},
|
218
|
-
"filter[ids]":{
|
219
|
-
"title" : "Clients",
|
220
|
-
"description": "A single or a list of client uuids, comma separated",
|
221
|
-
"type" : "string"
|
222
|
-
},
|
223
|
-
"filter[created_at_from]":{
|
224
|
-
"title" : "From date",
|
225
|
-
"description": "Objects with a creation on/after the date(>=). ISO 8601 format YYY-MM-DDThh:mm:ss+z or just a date YYY-MM-DD. If date is given the time is set to the start of the day(00:00:00) so all objects created on this day are included. A time should be already utc time",
|
226
|
-
"format" : "date-time",
|
227
|
-
"type" : "string"
|
228
|
-
},
|
229
|
-
"filter[created_at_to]":{
|
230
|
-
"title" : "To date",
|
231
|
-
"description": "Objects with a creation until the date(<=). ISO 8601 format YYY-MM-DDThh:mm:ss+z or just a date YYY-MM-DD. If date is given the time is set to the end of the day(23:59:59) so all objects created on that day are included. A time should be already utc time.",
|
232
|
-
"format" : "date-time",
|
233
|
-
"type" : "string"
|
234
|
-
},
|
235
|
-
"filter[birthday_from]":{
|
236
|
-
"title" : "From birthday date",
|
237
|
-
"description": "Contacts with a birthday after and on the date. Leave the birthday-to date blank to only search on this day. YYYY-MM-DD",
|
238
|
-
"format" : "date",
|
239
|
-
"type" : "string"
|
240
|
-
},
|
241
|
-
"filter[birthday_to]":{
|
242
|
-
"title" : "To birthday date",
|
243
|
-
"description": "Contacts with a birthday date before and on the date. YYYY-MM-DD",
|
244
|
-
"format" : "date",
|
245
|
-
"type" : "string"
|
246
|
-
},
|
247
|
-
"filter[creator_ids]":{
|
248
|
-
"title" : "Creator",
|
249
|
-
"description": "Objects created by the given users uuids, comma separated",
|
250
|
-
"type" : "string"
|
251
|
-
},
|
252
|
-
"filter[number]":{
|
253
|
-
"title" : "By number",
|
254
|
-
"description": "Search by number where the number is matched from the start: number%",
|
255
|
-
"type" : "string"
|
256
|
-
},
|
257
|
-
"filter[languages]":{
|
258
|
-
"title" : "Languages",
|
259
|
-
"description": "A single or a list of language codes, comma separated",
|
260
|
-
"type" : "string"
|
261
|
-
},
|
262
|
-
"sort_by":{
|
263
|
-
"title" : "Sort by",
|
264
|
-
"description": "Sort the results by the given field => number",
|
265
|
-
"enum":["organisation", "number","email","first_name","last_name", "created_at", "updated_at"],
|
266
|
-
"type": "string"
|
267
|
-
},
|
268
|
-
"sort":{
|
269
|
-
"title" : "Sort",
|
270
|
-
"enum":["ASC","DESC"],
|
271
|
-
"description": "Sort the results in ASC or DESC"
|
272
|
-
}
|
273
|
-
}
|
274
|
-
},
|
275
|
-
{ "rel": "destroy",
|
276
|
-
"href": "clients/{id}",
|
277
|
-
"method": "DELETE"
|
278
|
-
},
|
279
|
-
{ "rel": "update",
|
280
|
-
"href": "clients/{id}",
|
281
|
-
"method": "PUT"
|
282
|
-
},
|
283
|
-
{ "rel": "create",
|
284
|
-
"href": "clients",
|
285
|
-
"method": "POST"
|
286
|
-
},
|
287
|
-
{ "rel": "documents",
|
288
|
-
"href": "clients/{id}/documents"
|
289
|
-
},
|
290
|
-
{ "rel": "attachments",
|
291
|
-
"href": "clients/{id}/attachments"
|
292
|
-
},
|
293
|
-
{ "rel": "invoices",
|
294
|
-
"href": "clients/{id}/invoices"
|
295
|
-
},
|
296
|
-
{ "rel": "estimates",
|
297
|
-
"href": "clients/{id}/estimates"
|
298
|
-
},
|
299
|
-
{ "rel": "orders",
|
300
|
-
"href": "clients/{id}/orders"
|
301
|
-
},
|
302
|
-
{ "rel": "credit_notes",
|
303
|
-
"href": "clients/{id}/credit_notes"
|
304
|
-
},
|
305
|
-
{ "rel": "recurrings",
|
306
|
-
"href": "clients/{id}/recurrings"
|
307
|
-
},
|
308
|
-
{ "rel": "payment_reminders",
|
309
|
-
"href": "clients/{id}/payment_reminders"
|
310
|
-
},
|
311
|
-
{ "rel": "comments",
|
312
|
-
"href": "clients/{id}/comments"
|
313
|
-
},
|
314
|
-
{ "rel": "emails",
|
315
|
-
"href": "clients/{id}/emails"
|
316
|
-
}
|
317
|
-
]
|
318
|
-
}
|