mavenlink 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +3 -0
  6. data/README.md +241 -0
  7. data/Rakefile +28 -0
  8. data/bin/mavenlink-console +18 -0
  9. data/doc/ml_logo_lb-primary.png +0 -0
  10. data/lib/config/specification.yml +1665 -0
  11. data/lib/mavenlink.rb +134 -0
  12. data/lib/mavenlink/account_invitation.rb +4 -0
  13. data/lib/mavenlink/account_membership.rb +4 -0
  14. data/lib/mavenlink/additional_item.rb +4 -0
  15. data/lib/mavenlink/assignment.rb +5 -0
  16. data/lib/mavenlink/attachment.rb +11 -0
  17. data/lib/mavenlink/backup_approver_association.rb +4 -0
  18. data/lib/mavenlink/client.rb +116 -0
  19. data/lib/mavenlink/concerns/custom_fieldable.rb +9 -0
  20. data/lib/mavenlink/concerns/indestructible.rb +11 -0
  21. data/lib/mavenlink/concerns/locked_record.rb +30 -0
  22. data/lib/mavenlink/cost_rate.rb +4 -0
  23. data/lib/mavenlink/custom_field.rb +4 -0
  24. data/lib/mavenlink/custom_field_choice.rb +5 -0
  25. data/lib/mavenlink/custom_field_value.rb +4 -0
  26. data/lib/mavenlink/errors.rb +47 -0
  27. data/lib/mavenlink/expense.rb +4 -0
  28. data/lib/mavenlink/expense_category.rb +4 -0
  29. data/lib/mavenlink/expense_report_submission.rb +7 -0
  30. data/lib/mavenlink/external_payment.rb +4 -0
  31. data/lib/mavenlink/external_reference.rb +24 -0
  32. data/lib/mavenlink/fixed_fee_item.rb +4 -0
  33. data/lib/mavenlink/holiday.rb +4 -0
  34. data/lib/mavenlink/holiday_calendar.rb +4 -0
  35. data/lib/mavenlink/holiday_calendar_association.rb +4 -0
  36. data/lib/mavenlink/holiday_calendar_membership.rb +4 -0
  37. data/lib/mavenlink/invoice.rb +4 -0
  38. data/lib/mavenlink/logger.rb +62 -0
  39. data/lib/mavenlink/model.rb +279 -0
  40. data/lib/mavenlink/organization.rb +4 -0
  41. data/lib/mavenlink/organization_membership.rb +4 -0
  42. data/lib/mavenlink/participation.rb +4 -0
  43. data/lib/mavenlink/post.rb +4 -0
  44. data/lib/mavenlink/project_template.rb +4 -0
  45. data/lib/mavenlink/project_template_assignment.rb +4 -0
  46. data/lib/mavenlink/railtie.rb +7 -0
  47. data/lib/mavenlink/rate_card.rb +4 -0
  48. data/lib/mavenlink/rate_card_role.rb +4 -0
  49. data/lib/mavenlink/rate_card_set.rb +4 -0
  50. data/lib/mavenlink/rate_card_set_version.rb +30 -0
  51. data/lib/mavenlink/rate_card_version.rb +4 -0
  52. data/lib/mavenlink/request.rb +241 -0
  53. data/lib/mavenlink/resolution.rb +4 -0
  54. data/lib/mavenlink/response.rb +22 -0
  55. data/lib/mavenlink/role.rb +5 -0
  56. data/lib/mavenlink/settings.rb +11 -0
  57. data/lib/mavenlink/skill.rb +4 -0
  58. data/lib/mavenlink/skill_category.rb +4 -0
  59. data/lib/mavenlink/skill_membership.rb +4 -0
  60. data/lib/mavenlink/specificators/association.rb +13 -0
  61. data/lib/mavenlink/specificators/attribute.rb +13 -0
  62. data/lib/mavenlink/specificators/base.rb +24 -0
  63. data/lib/mavenlink/specificators/validation.rb +27 -0
  64. data/lib/mavenlink/status_report.rb +4 -0
  65. data/lib/mavenlink/story.rb +8 -0
  66. data/lib/mavenlink/story_allocation_day.rb +5 -0
  67. data/lib/mavenlink/story_dependency.rb +5 -0
  68. data/lib/mavenlink/story_task.rb +5 -0
  69. data/lib/mavenlink/tag.rb +5 -0
  70. data/lib/mavenlink/time_adjustment.rb +4 -0
  71. data/lib/mavenlink/time_entry.rb +4 -0
  72. data/lib/mavenlink/time_off_entry.rb +4 -0
  73. data/lib/mavenlink/timesheet_submission.rb +4 -0
  74. data/lib/mavenlink/user.rb +5 -0
  75. data/lib/mavenlink/vendor.rb +4 -0
  76. data/lib/mavenlink/workspace.rb +21 -0
  77. data/lib/mavenlink/workspace_group.rb +5 -0
  78. data/lib/mavenlink/workspace_invoice_preference.rb +4 -0
  79. data/lib/mavenlink/workweek.rb +4 -0
  80. data/lib/mavenlink/workweek_membership.rb +4 -0
  81. data/mavenlink.gemspec +29 -0
  82. data/spec/lib/mavenlink/account_membership_spec.rb +8 -0
  83. data/spec/lib/mavenlink/assignment_spec.rb +17 -0
  84. data/spec/lib/mavenlink/attachment_spec.rb +30 -0
  85. data/spec/lib/mavenlink/backup_approver_association_spec.rb +9 -0
  86. data/spec/lib/mavenlink/client_spec.rb +187 -0
  87. data/spec/lib/mavenlink/concerns/indestructible_spec.rb +13 -0
  88. data/spec/lib/mavenlink/concerns/locked_record_spec.rb +28 -0
  89. data/spec/lib/mavenlink/cost_rate_spec.rb +9 -0
  90. data/spec/lib/mavenlink/custom_field_value_spec.rb +10 -0
  91. data/spec/lib/mavenlink/expense_report_submission_spec.rb +16 -0
  92. data/spec/lib/mavenlink/expense_spec.rb +23 -0
  93. data/spec/lib/mavenlink/external_references_spec.rb +144 -0
  94. data/spec/lib/mavenlink/holiday_calendar_association_spec.rb +8 -0
  95. data/spec/lib/mavenlink/holiday_calendar_membership_spec.rb +8 -0
  96. data/spec/lib/mavenlink/holiday_spec.rb +7 -0
  97. data/spec/lib/mavenlink/invalid_request_error_spec.rb +9 -0
  98. data/spec/lib/mavenlink/invoice_spec.rb +176 -0
  99. data/spec/lib/mavenlink/model_spec.rb +439 -0
  100. data/spec/lib/mavenlink/post_spec.rb +23 -0
  101. data/spec/lib/mavenlink/rate_card_set_version_spec.rb +119 -0
  102. data/spec/lib/mavenlink/record_invalid_error_spec.rb +16 -0
  103. data/spec/lib/mavenlink/record_not_found_error_spec.rb +9 -0
  104. data/spec/lib/mavenlink/request_spec.rb +381 -0
  105. data/spec/lib/mavenlink/response_spec.rb +50 -0
  106. data/spec/lib/mavenlink/role_spec.rb +9 -0
  107. data/spec/lib/mavenlink/settings_spec.rb +23 -0
  108. data/spec/lib/mavenlink/skill_category_spec.rb +7 -0
  109. data/spec/lib/mavenlink/skill_membership_spec.rb +9 -0
  110. data/spec/lib/mavenlink/skill_spec.rb +8 -0
  111. data/spec/lib/mavenlink/specificators/association_spec.rb +25 -0
  112. data/spec/lib/mavenlink/specificators/attribute_spec.rb +25 -0
  113. data/spec/lib/mavenlink/specificators/validation_spec.rb +39 -0
  114. data/spec/lib/mavenlink/story_allocation_day_spec.rb +64 -0
  115. data/spec/lib/mavenlink/story_dependency_spec.rb +16 -0
  116. data/spec/lib/mavenlink/story_spec.rb +69 -0
  117. data/spec/lib/mavenlink/time_adjustment_spec.rb +13 -0
  118. data/spec/lib/mavenlink/time_entry_spec.rb +43 -0
  119. data/spec/lib/mavenlink/time_off_entry_spec.rb +9 -0
  120. data/spec/lib/mavenlink/user_spec.rb +138 -0
  121. data/spec/lib/mavenlink/workspace_group_spec.rb +25 -0
  122. data/spec/lib/mavenlink/workspace_spec.rb +431 -0
  123. data/spec/lib/mavenlink_spec.rb +43 -0
  124. data/spec/spec_helper.rb +31 -0
  125. data/spec/support/shared_examples.rb +148 -0
  126. metadata +267 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: de43a923844eb10ec683c9ea9f1c0782b9cfbed7
4
+ data.tar.gz: 5dbb12c2d7baa46e6c7af26fb31b9c9a6c1190be
5
+ SHA512:
6
+ metadata.gz: 075203a456cd20e6f36aac7e338f0a0fb4fbc289099ae7021cada15eabd3ef2364763607049a174035152a2edf3c872a15702fe316f09d5ecc13a6e0f798fa51
7
+ data.tar.gz: 7d3b00c34e89cefb3fdb4f902ba42ecf66c4290ff028e516b31e5eed9ea76dd06c3b7b84fef90bb136f16736c69e3ca8a52161c0a8b4c05e9514b4bb1f661bff
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ *.gem
2
+ .yardoc
3
+ rdoc
4
+ coverage
5
+ .bundle
6
+ .rvmrc
7
+ .idea
8
+ .env
9
+ .pairs
10
+ Gemfile.lock
11
+
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ mavenlink_gem
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.3
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+ gemspec
3
+ gem 'rake'
data/README.md ADDED
@@ -0,0 +1,241 @@
1
+ ![](doc/ml_logo_lb-primary.png)
2
+
3
+ ## Mavenlink API
4
+ [![Circle CI](https://circleci.com/gh/mavenlink/mavenlink_gem/tree/master.svg?style=svg)](https://circleci.com/gh/mavenlink/mavenlink_gem/tree/master)
5
+ [![Dependency Status](https://gemnasium.com/einzige/mavenlink.svg)](https://gemnasium.com/einzige/mavenlink)
6
+
7
+ ### Usage
8
+
9
+ Examples below use `Mavenlink::Workspace` as an instance.
10
+ You also have other collections to use in similar way:
11
+
12
+ ```ruby
13
+ Mavenlink::Assignment # assignments collection Mavenlink.client.assignments
14
+ Mavenlink::Attachment # attachments collection Mavenlink.client.attachments
15
+ Mavenlink::Expense # expenses collection Mavenlink.client.expenses
16
+ Mavenlink::Invoice # invoices collection Mavenlink.client.invoices
17
+ Mavenlink::Post # posts collection Mavenlink.client.posts
18
+ Mavenlink::Story # stories collection Mavenlink.client.stories
19
+ Mavenlink::StoryAllocationDay
20
+ Mavenlink::TimeEntry # time_enties collection Mavenlink.client.time_entries
21
+ Mavenlink::User # users collection Mavenlink.client.users
22
+ Mavenlink::WorkspaceGroup
23
+ Mavenlink::Workspace
24
+ ```
25
+
26
+ #### Setting up access token
27
+
28
+ In order to be able to perform any requests you should set `outh_token` obtained by your Mavenlink Account.
29
+
30
+ ```ruby
31
+ Mavenlink.oauth_token = "your_token"
32
+ ```
33
+
34
+ If you are using __Rails__, put this line into `config/initializers/mavenlink.rb`.
35
+ If you are using __Heroku__ or __Foreman__, set MAVENLINK_OAUTH_TOKEN env var.
36
+
37
+ #### Creating new records
38
+ ```ruby
39
+ workspace = Mavenlink::Workspace.create(title: 'new workspace', creator_role: 'buyer')
40
+
41
+ # Exactly the same:
42
+ workspace = Mavenlink::Workspace.new(title: 'New workspace', creator_role: 'maven')
43
+ workspace.save # will call "create" and store record in Mavenlink db
44
+ workspace.new_record? # -> false
45
+ ```
46
+
47
+ #### Fetching records
48
+ ```ruby
49
+ Mavenlink::Workspace.find(9)
50
+ # Same as:
51
+ workspace = Mavenlink.client.workspaces.find(9)
52
+
53
+ # Reload record from remote host:
54
+ workspace.reload
55
+ ```
56
+
57
+ #### Updating records
58
+ ```ruby
59
+ workspace = Mavenlink::Workspace.find(1)
60
+
61
+ workspace.title = 'new title' # writes attribute
62
+ workspace.save # returns true if record has been saved
63
+ workspace.save! # will raise exception if record is invalid
64
+
65
+ workspace.update_attributes(title: 'title')
66
+ workspace.update_attributes!(title: 'title')
67
+
68
+ workspace.attributes = {title: 'title'}
69
+ workspace.save
70
+ ```
71
+
72
+ #### Destroying records
73
+ ```ruby
74
+ post = Mavenlink::Post.find(1)
75
+ post.destroy
76
+ ```
77
+
78
+ #### Associations
79
+ ```ruby
80
+ workspace.participants # will return participants as an array of Mavenlink::User instances, will do http API call if association is not "included"
81
+ workspace.participants # now it returns cached value
82
+ workspace.participants.first # returns Mavenlink::User record
83
+ workspace.participants(true) # flushes association cache
84
+
85
+ participant = workspace.participants.first
86
+ participant.full_name = 'new name'
87
+ participant.save # performs "update" query, full_name will be changed
88
+ ```
89
+
90
+ In order to include association use `include` as follows:
91
+ ```ruby
92
+ Mavenlink::Workspace.scoped.includes(:participants).search('My Workspace')
93
+ Mavenlink::Workspace.includes(:participants).search('My Workspace')
94
+
95
+ Mavenlink::Workspace.scoped.search('My Workspace').order(:updated_at, :desc).each do |workspace|
96
+ if workspace.valid?
97
+ workspace.destroy
98
+ end
99
+ end
100
+ ```
101
+
102
+ #### Search
103
+
104
+ ```ruby
105
+ Mavenlink::Workspace.search('Something')
106
+ Mavenlink::Workspace.scoped.search('Something')
107
+ Mavenlink.client.workspaces.search('Something')
108
+ ```
109
+
110
+ #### Filtering
111
+
112
+ ```ruby
113
+ Mavenlink::Workspace.filter(include_archived: true).all
114
+ Mavenlink::Workspace.scoped.filter(include_archived: true).all
115
+ Mavenlink.client.workspaces.filter(include_archived: true).all
116
+ ```
117
+
118
+ #### Pagination
119
+
120
+ ```ruby
121
+ Mavenlink::Workspace.page(2).per_page(3)
122
+ Mavenlink::Workspace.scoped.page(2).per_page(3)
123
+ Mavenlink.client.workspaces.page(2).per_page(3)
124
+ ```
125
+
126
+ ```ruby
127
+ Mavenlink::Workspace.limit(2).offset(3)
128
+ Mavenlink::Workspace.scoped.limit(2).offset(3)
129
+ Mavenlink.client.workspaces.limit(2).offset(3)
130
+ ```
131
+
132
+ You'll never receive full results set if number of records in requested collection is greater than 200.
133
+ Pagination allows you to go through entire collection.
134
+
135
+ ```ruby
136
+ Mavenlink::Workspace.scoped.each_page do |page|
137
+ page.each do |workspace|
138
+ p workspace.inspect
139
+ end
140
+ end
141
+ ```
142
+
143
+ Use your paginator as Enumerable:
144
+ ```ruby
145
+ Mavenlink::Workspace.scoped.each_page(200).to_a # 200 records per page
146
+ Mavenlink::Workspace.scoped.each_page.to_a.flatten # Returns full collection
147
+ Mavenlink::Workspace.scoped.each_page(2).each_with_index { |page, i| puts i }
148
+ ```
149
+
150
+ __Kaminari__ pagination is also supported.
151
+
152
+ #### Client side validation
153
+ By default client side validation is disabled, you can enable it by setting `perform_validations` to `true`
154
+
155
+ ```ruby
156
+ Mavenlink.perform_validations = true
157
+ ```
158
+
159
+ Now any record will be validated before you perform any request to change its attributes.
160
+
161
+ ```ruby
162
+ workspace = Workspace.new(title: 'My workspace')
163
+ workspace.save # -> returns false
164
+ workspace.errors.full_messages # -> ["Creator role is not included in the list"]
165
+ ```
166
+
167
+ #### Invite new user
168
+
169
+ ```ruby
170
+ Mavenlink::Workspace.find(7).invite(email: 'john@doe.com', full_name: 'John Doe', invitee_role: 'maven')
171
+ ```
172
+
173
+ #### Requesting expense categories
174
+
175
+ ```ruby
176
+ Mavenlink.client.expense_categories
177
+ ```
178
+
179
+ #### Custom requests
180
+
181
+ ```ruby
182
+ client = Mavenlink.client
183
+ client.get('/custom_path', {param: 'anything'})
184
+ client.post('/custom_path', {param: 'anything'})
185
+ client.put('/custom_path', {param: 'anything'})
186
+ client.delete('/custom_path', {param: 'anything'})
187
+ ```
188
+
189
+ ### More examples
190
+
191
+ ```ruby
192
+ client = Mavenlink::Client.new(oauth_token: '...')
193
+ client.workspaces.each { |workspace| do_something(workspace) }
194
+
195
+ client.workspaces.includes('participants')
196
+ client.workspaces.includes('participants')
197
+ client.workspaces.includes('participants, creator')
198
+ client.workspaces.includes('participants', 'creator')
199
+ client.workspaces.includes(['participants', 'creator'])
200
+ client.workspaces.includes(:participants, :creator)
201
+
202
+ client.workspaces.find(2) # Returns one Mavenlink::Workspace
203
+
204
+ client.workspaces # Returns sort of "active record relation collection"
205
+ client.workspaces.to_a # Same as calling #to_a on activerecord scope
206
+ client.workspaces.all # Same as calling #to_a on activerecord scope
207
+
208
+ client.workspaces.page(3).per_page(20)
209
+ client.workspaces.limit(100).offset(10)
210
+ client.workspaces.filter(by_something: true)
211
+ client.workspaces.search('some text')
212
+
213
+ client.workspaces.order(:updated_at)
214
+ client.workspaces.order('updated_at:desc')
215
+ client.workspaces.order(:updated_at, :desc)
216
+ client.workspaces.order(:updated_at, 'ASC')
217
+ client.workspaces.order(:updated_at, true)
218
+
219
+ client.workspaces.create(title: 'New workspace')
220
+ client.workspaces.only(8).update(title: 'new title')
221
+ client.workspaces.only(8).delete
222
+
223
+ # ...
224
+ ```
225
+
226
+ ### Running Developer Console
227
+
228
+ Run in your project directory `bundle exec mavenlink-console` or `TOKEN=your_oauth_token bundle exec mavenlink-console`.
229
+ Or just `mavenlink-console` (depending on your current setup).
230
+
231
+ ## Contributing
232
+
233
+ 1. Fork
234
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
235
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
236
+ 4. Push to the branch (`git push origin my-new-feature`)
237
+ 5. Create new Pull Request (`git pull-request`)
238
+
239
+ ## License
240
+
241
+ Created by Mavenlink, Inc. and available under the MIT License.
data/Rakefile ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new :spec
6
+ task default: :spec
7
+
8
+ desc 'Runs irb console and initializes the API'
9
+ task :console, :token do |_, args|
10
+ require 'irb'
11
+ require 'mavenlink'
12
+ require 'awesome_print'
13
+
14
+ token = ENV['TOKEN'] || args[:token]
15
+ Mavenlink.oauth_token = token
16
+
17
+ Mavenlink.logger = Mavenlink::Logger.new(STDOUT)
18
+ Mavenlink.logger.level = Logger::DEBUG # Change to Logger::INFO not to display responses
19
+ if token
20
+ Mavenlink.logger.hint "Using #{token} token."
21
+ else
22
+ Mavenlink.logger.disappointment 'No token set! Please put TOKEN=xxxx into your .env file or set manually.'
23
+ end
24
+
25
+ AwesomePrint.irb!
26
+ ARGV.clear
27
+ IRB.start
28
+ end
@@ -0,0 +1,18 @@
1
+ require 'irb'
2
+ require 'mavenlink'
3
+
4
+ token = ENV['TOKEN']
5
+ Mavenlink.oauth_token = token
6
+
7
+ Mavenlink.logger = Mavenlink::Logger.new(STDOUT)
8
+ Mavenlink.logger.level = Logger::INFO # Change to Logger::DEBUG in order to display responses
9
+
10
+ if token
11
+ Mavenlink.logger.hint "Using #{token} token."
12
+ else
13
+ Mavenlink.logger.disappointment 'No token set! Please put TOKEN=xxxx into your .env file or set manually.'
14
+ end
15
+
16
+ AwesomePrint.irb! if defined?(AwesomePrint)
17
+ ARGV.clear
18
+ IRB.start
Binary file
@@ -0,0 +1,1665 @@
1
+ ---
2
+ account_invitations:
3
+ attributes:
4
+ - id
5
+ - full_name
6
+ - email_address
7
+ - headline
8
+ - pending
9
+ - permission
10
+ - bill_rate_in_cents
11
+ - cost_rate_in_cents
12
+ - inviter_id
13
+ - invitee_id
14
+ create_attributes:
15
+ - full_name
16
+ - email_address
17
+ - headline
18
+ - permission
19
+ - bill_rate_in_cents
20
+ - cost_rate_in_cents
21
+ - default_role_id
22
+ - external_reference
23
+ update_attributes:
24
+ - permission
25
+ - bill_rate_in_cents
26
+ - cost_rate_in_cents
27
+ - default_role_id
28
+ associations:
29
+ inviter:
30
+ foreign_key: inviter_id
31
+ collection: users
32
+ invitee:
33
+ foreign_key: invitee_id
34
+ collection: users
35
+ default_role:
36
+ foreign_key: default_role_id
37
+ collection: roles
38
+
39
+ additional_items:
40
+ attributes:
41
+ - created_at
42
+ - notes
43
+ - amount_in_cents
44
+ - taxable
45
+ - currency
46
+
47
+ account_memberships:
48
+ attributes:
49
+ - disabled_at
50
+ - permission
51
+ - is_administrator
52
+ - is_project_lead
53
+ - is_punch_clock_user
54
+ - can_create_workspace
55
+ - can_view_reports
56
+ - bill_rate_in_cents
57
+ - cost_rate_in_cents
58
+ - manager_id
59
+ - billability_target
60
+ - should_show_alert_on_timesheet_submission
61
+ update_attributes:
62
+ - bill_rate_in_cents # bill_rate_in_cents is optional"
63
+ - cost_rate_in_cents # cost_rate_in_cents is optional"
64
+ - default_role_id # default_role_id is the internal ID of the role of this user on this account"
65
+ - permission # permission is optional; it can be 'administrator', 'reports_viewer', 'project_lead', 'project_creator', 'punch_clock' or 'collaborator'"
66
+ - manager_id
67
+ - billability_target
68
+ - should_show_alert_on_timesheet_submission
69
+ associations:
70
+ user:
71
+ foreign_key: user_id
72
+ collection: users
73
+ default_role:
74
+ foreign_key: default_role_id
75
+ collection: roles
76
+ cost_rates:
77
+ foreign_key: cost_rate_ids
78
+ collection: cost_rates
79
+ backup_approver_associations:
80
+ foreign_key: backup_approver_association_ids
81
+ collection: backup_approver_associations
82
+
83
+ assignments:
84
+ attributes:
85
+ - id # the unique identifier for this assignment object
86
+ - created_at # the date the assignment was recorded in Mavenlink
87
+ - updated_at # the date the assignment was last updated
88
+ - current # whether or not the assignment is active
89
+ - estimated_minutes # a user defined number of minutes that the user is expected to work on this story (task)
90
+ - allocated_minutes # the calculated sum of the assignment's Story Allocation Day minutes
91
+ - story_id # the id of the Story (Task) that owns the assignment
92
+ - assignee_id # the id of the user who owns the assignment
93
+ - story_allocation_day_ids # the ids of Story Allocation Days belonging to the assignment
94
+ create_attributes:
95
+ - story_id # (required) the ID of the Story for which the assignment will be created
96
+ - assignee_id # (required) the ID of the User for which the assignment will be created
97
+ - current # (optional) whether the assignment is active or not
98
+ - estimated_minutes # (optional) the number of minutes that the user is expected to work on this story
99
+ update_attributes:
100
+ - current
101
+ - estimated_minutes
102
+ associations:
103
+ # story - when included, the story_id will reference the story for which the assignment belongs
104
+ # assignee - when included, the assignee_id will reference the user for which the assignment belongs
105
+ # story_allocation_days - when included, the story_allocation_day_ids array will reference all of the
106
+ # Story Allocation Days that belong to the assignment.
107
+ # Including story allocation days requires the request to be filtered with the plannable filter
108
+ story:
109
+ foreign_key: story_id
110
+ collection: stories
111
+ assignee:
112
+ foreign_key: assignee_id
113
+ collection: users
114
+ story_allocation_days:
115
+ foreign_key: story_allocation_day_ids
116
+ collection: story_allocation_days
117
+ validations:
118
+ [story_id, assignee_id]:
119
+ presence: true
120
+ 'on': create
121
+
122
+ attachments:
123
+ validations:
124
+ [data, type]:
125
+ presence: true
126
+ type:
127
+ inclusion:
128
+ in: [post_attachment, receipt]
129
+ attributes:
130
+ - data
131
+ - type
132
+ create_attributes:
133
+ - data
134
+ - type
135
+
136
+ cost_rates:
137
+ attributes:
138
+ - id
139
+ - updated_at
140
+ - created_at
141
+ - currency
142
+ - amount_in_subunits
143
+ - in_use
144
+ create_attributes:
145
+ - currency
146
+ - amount_in_subunits
147
+ - account_membership_id
148
+ associations:
149
+ account_membership:
150
+ foreign_key: account_membership_id
151
+ collection: account_membership
152
+
153
+ backup_approver_associations:
154
+ attributes:
155
+ - backup_approver_id
156
+ - approver_id
157
+ - start_date
158
+ - end_date
159
+ create_attributes:
160
+ - backup_approver_id
161
+ - approver_id
162
+ - start_date
163
+ - end_date
164
+ associations:
165
+ account_membership:
166
+ foreign_key: account_membership_id
167
+ collection: account_membership
168
+
169
+ custom_fields:
170
+ attributes:
171
+ - id # the internal id of the custom field
172
+ - name # the given field name
173
+ - value_type # the types the Custom Field Values use defaulting to 'string'. The current types include: 'string', 'date', 'number', 'currency', 'single', and 'multi'
174
+ - creator_id # the internal id of the User who created the custom field
175
+ - default_text # the placeholder text
176
+ - unique_constraint # an optional boolean constraint which forces the Custom Field Values' value to be unique across a subject_type. The default is false
177
+ - choices # the choices only valid for a 'single' and 'multi' type custom fields
178
+ - custom_field_set_id # the custom field set the field belongs in. All custom fields are contained in a custom field set which contain many sets.
179
+ - write_access # the permission level required to create, update, and destroy values for this custom field
180
+ - read_access # the permission level required to read values for this custom field
181
+ - created_at # the date the CF was created
182
+ - updated_at # the date the CF was last updated
183
+ - values_count
184
+ create_attributes:
185
+ - name # (required) the given field name
186
+ - value_type # (optional) the types the Custom Field Values use. The current types include: 'string', 'date', 'number', and 'currency'
187
+ - default_text # (optional) the placeholder text
188
+ - unique_constraint # (optional) a boolean constraint which forces the Custom Field Values' value to be unique across a subject_type. The default is false
189
+ - choices # (optional) the choices a custom field may have and only valid for a 'single' and 'multi' type custom fields. eg. [{'label' => 'first choice'}, {'label' => 'another choice'}]
190
+ - custom_field_set_id # (optional) the custom field set the custom field will belong to. If the custom_field_set_id is omitted this field will belong to a Workspace set named 'Default Project Set'. Note omitting the set id will restrict this field to only be applied to workspaces.
191
+ - write_access
192
+ - read_access
193
+ update_attributes:
194
+ - name # (required) the given field name
195
+ - value_type
196
+ - default_text # (optional) the placeholder text
197
+ - unique_constraint
198
+ - choices # choices may be updated through their CF's choices attribute. To change a choice's name, specify the id. To add new choices, do not specify and id. eg. [{'id' => '1', 'label' => 'new first choice name'}, {'label' => 'a brand new choice'}]. If a previous choice of the custom field is omitted, that choice will be soft deleted so that the values will not point to invalid choices.
199
+ - custom_field_set_id
200
+ - write_access # (optional) the permission level required for a user to create, update, or delete a custom field value for an object.
201
+ - read_access # (optional) the permission level required to read a custom field value for an object.
202
+ associations:
203
+ creator:
204
+ foreign_key: creator_id
205
+ collection: users
206
+ choices:
207
+ foreign_key: choice_ids
208
+ collection: custom_field_choices
209
+
210
+ custom_field_values:
211
+ attributes:
212
+ - id # the internal custom field value id
213
+ - subject_type # the type of entity the custom field value is associated with. Valid types include 'Workspace', 'Story', and 'User'
214
+ - subject_id # the internal id of the entity type defined by the subject_type field
215
+ - value # the value applied to the subject
216
+ - display_value # the formatted version of the value
217
+ - can_edit # whether the custom field value can be edited by the user that is logged-in.
218
+ - type # the type of value. The Current valid values are: 'string', 'date', 'number', 'currency' 'single', and 'multi'
219
+ - setter_id # the internal id of the User who has set value
220
+ - account_id # the id of the account the custom field value is on
221
+ - custom_field_id # the internal id of the associated custom field
222
+ - custom_field_name # the name of the associated custom field
223
+ - created_at # the date the custom field value was created in Mavenlink
224
+ - updated_at # the date the custom field value was last updated
225
+ create_attributes:
226
+ - subject_type # (required)
227
+ - subject_id # (required)
228
+ - custom_field_id # (required)
229
+ - value # (required)
230
+ update_attributes:
231
+ - value # (required)
232
+ associations:
233
+ setter:
234
+ - foreign_key: setter_id
235
+ - collection: users
236
+ custom_field:
237
+ - foreign_key: custom_field_id
238
+ - collection: custom_fields
239
+
240
+ custom_field_choices:
241
+ attributes:
242
+ - id
243
+ - updated_at
244
+ - created_at
245
+ - label
246
+ - custom_field_id
247
+ associations:
248
+ custom_field:
249
+ - foreign_key: custom_field_id
250
+ - collection: custom_fields
251
+
252
+ expenses:
253
+ validations:
254
+ [workspace_id, date, category, amount_in_cents]:
255
+ presence: true
256
+ attributes:
257
+ - id # the unique identifier for this expense object
258
+ - created_at # the date the expense was recorded in Mavenlink
259
+ - updated_at # the date the expense was last updated
260
+ - date # the date the expense was incurred
261
+ - notes # any notes added to the expense
262
+ - category # the category of the expense, which can be any string. Built-in categories are: "Travel", "Mileage", "Lodging", "Food", "Entertainment", "Other"
263
+ - amount_in_cents # the amount of the expense, in cents
264
+ - currency # the currency of the expense
265
+ - currency_symbol # the symbol that represents the currency of the expense
266
+ - currency_base_unit # the number of the units in the amount_as_cents attribute that are required to make up a single unit of the currency
267
+ - user_can_edit # can the viewing user edit this expense?
268
+ - is_invoiced # has this expense been included on an invoice?
269
+ - is_billable # is this a billable expense?
270
+ - taxable
271
+ - reimbursable
272
+ - workspace_id # the id of the project Workspace this expense is associated with
273
+ - user_id # the id of the user who created this expense
274
+ - story_id
275
+ - receipt_id # the id of an attached Receipt Attachment
276
+ - expense_category_id # the id of its category
277
+ - active_submission_id
278
+ create_attributes:
279
+ - workspace_id # (required) the ID of the Workspace in which the expense will be created
280
+ - date # (required) the date of the expense in ISO8601 format
281
+ - category # (required) the category of the expense as a string
282
+ - amount_in_cents # the amount of the expense, expressed in cents
283
+ - notes # freeform text related to the expense
284
+ - user_id # the internal ID of the user the expense is associated with. This parameter is ignored unless the authorizing user has financial access in the workspace and is on the consultants team (or if the authorizing user is an account administrator and has proxy permissions via an account member with those permissions).
285
+ - receipt_id
286
+ - billable
287
+ - story_id
288
+ - expense_category_id # the id of its category
289
+ - reimbursable
290
+ - vendor_id
291
+ - external_reference
292
+ update_attributes:
293
+ # NOTE(AC): check
294
+ - date # (required) the date of the expense in ISO8601 format
295
+ - category # (required) the category of the expense as a string
296
+ - amount_in_cents # the amount of the expense, expressed in cents
297
+ - notes # freeform text related to the expense
298
+ - user_id # the internal ID of the user the expense is associated with. This parameter is ignored unless the authorizing user has financial access in the workspace and is on the consultants team (or if the authorizing user is an account administrator and has proxy permissions via an account member with those permissions).
299
+ - receipt_id
300
+ - billable
301
+ - story_id
302
+ - expense_category_id # the id of its category
303
+ - external_reference
304
+ associations:
305
+ workspace:
306
+ foreign_key: workspace_id
307
+ collection: workspaces
308
+ user:
309
+ foreign_key: user_id
310
+ collection: users
311
+ receipt:
312
+ foreign_key: receipt_id
313
+ collection: attachments
314
+ story:
315
+ foreign_key: story_id
316
+ collection: stories
317
+ expense_category:
318
+ foreign_key: expense_category_id
319
+ collection: expense_categories
320
+ external_references:
321
+ foreign_key: external_reference_ids
322
+ collection: external_references
323
+ active_submission:
324
+ foreign_key: active_submission_id
325
+ collection: active_submissions
326
+ role:
327
+ foreign_key: role_id
328
+ collection: roles
329
+ vendor:
330
+ foreign_key: vendor_id
331
+ collection: vendors
332
+
333
+ expense_categories:
334
+ attributes:
335
+ - id
336
+ - name
337
+ - deleted_at
338
+ create_attributes:
339
+ - name
340
+ update_attributes:
341
+ - name
342
+ validations:
343
+ name:
344
+ presence: true
345
+
346
+ expense_report_submissions:
347
+ attributes:
348
+ - id
349
+ - created_at
350
+ - updated_at
351
+ - status
352
+ - title
353
+ - comment
354
+ - type
355
+ - resolution_description
356
+ - line_item_total_formatted
357
+ - line_item_total_in_cents
358
+ - currency
359
+ - currency_symbol
360
+ - currency_base_unit
361
+ - current_resolution_description
362
+ - current_resolution_creator_id
363
+ - current_resolution_created_at_date
364
+ - expense_ids
365
+ - resolution_ids
366
+ create_attributes:
367
+ - title
368
+ - comment
369
+ - workspace_id
370
+ - user_id
371
+ - line_item_ids
372
+ associations:
373
+ user:
374
+ foreign_key: user_id
375
+ collection: users
376
+ workspace:
377
+ foreign_key: workspace_id
378
+ collection: workspaces
379
+ expenses:
380
+ foreign_key: expense_ids
381
+ collection: expenses
382
+ resolutions:
383
+ foreign_key: resolution_ids
384
+ collection: resolutions
385
+
386
+ external_payments:
387
+ attributes:
388
+ - id
389
+ - created_at
390
+ - updated_at
391
+ - user_id
392
+ - amount_in_cents
393
+ - message
394
+ - invoice_id
395
+ - workspace_id
396
+ create_attributes:
397
+ - amount_in_cents
398
+ - message
399
+ - invoice_id
400
+ - workspace_id
401
+ associations:
402
+ user:
403
+ foreign_key: user_id
404
+ collection: users
405
+ workspace:
406
+ foreign_key: workspace_id
407
+ collection: workspaces
408
+ invoice:
409
+ foreign_key: invoice_id
410
+ collection: invoices
411
+
412
+ fixed_fee_items:
413
+ attributes:
414
+ - id
415
+ - created_at
416
+ - notes
417
+ - amount_in_cents
418
+ - taxable
419
+ - currency
420
+ - story_id
421
+ - workspace_id
422
+
423
+ external_references:
424
+ attributes:
425
+ - service_name
426
+ - service_model
427
+ - service_model_ref
428
+ - subject_id
429
+ - subject_type
430
+ - status
431
+ - external_link
432
+ - external_message
433
+ - external_status
434
+ - locked
435
+ create_or_update_attributes:
436
+ - service_name
437
+ - service_model
438
+ - service_model_ref
439
+ - subject_id
440
+ - subject_type
441
+ - status
442
+ - external_link
443
+ - external_message
444
+ - external_status
445
+ - locked
446
+ validations:
447
+ [service_model_ref, service_model, service_name, subject_id, subject_type]:
448
+ presence: true
449
+
450
+ holidays:
451
+ attributes:
452
+ - name
453
+ - start_date
454
+ - end_date
455
+ - paid
456
+ - total_hours
457
+ - calendar_names_list
458
+ create_attributes:
459
+ - name
460
+ - start_date
461
+ - end_date
462
+ - paid
463
+ - holiday_calendar_ids
464
+ update_attributes:
465
+ - name
466
+ - start_date
467
+ - end_date
468
+ - paid
469
+ - holiday_calendar_ids
470
+ associations:
471
+ holiday_calendar_associations:
472
+ foreign_key: holiday_calendar_association_ids
473
+ collection: holiday_calendar_associations
474
+
475
+ holiday_calendars:
476
+ attributes:
477
+ - name
478
+ - default
479
+ - active_user_count
480
+ create_attributes:
481
+ - name
482
+ update_attributes:
483
+ - name
484
+
485
+ holiday_calendar_associations:
486
+ attributes:
487
+ - holiday_calendar_name
488
+ - holiday_name
489
+ create_attributes:
490
+ - holiday_id
491
+ - holiday_calendar_id
492
+ associations:
493
+ holiday:
494
+ foreign_key: holiday_id
495
+ collection: holidays
496
+ holiday_calendar:
497
+ foreign_key: holiday_calendar_id
498
+ collection: holiday_calendars
499
+
500
+ holiday_calendar_memberships:
501
+ attributes:
502
+ - user_id
503
+ - created_at
504
+ - start_date
505
+ - end_date
506
+ - in_use
507
+ create_attributes:
508
+ - holiday_calendar_id
509
+ - user_id
510
+ - start_date
511
+ update_attributes:
512
+ - holiday_calendar_id
513
+ - start_date
514
+ associations:
515
+ holiday_calendar:
516
+ foreign_key: holiday_calendar_id
517
+ collection: holiday_calendars
518
+ user:
519
+ foreign_key: user_id
520
+ collection: users
521
+
522
+ invoices:
523
+ attributes:
524
+ - id # the internal invoice id
525
+ - created_at # the date the invoice was recorded in Mavenlink, format: YY-MM-DD[T]HH:MM:SS-TIMEZONE
526
+ - updated_at # the date the invoice was last updated, format: YY-MM-DD[T]HH:MM:SS-TIMEZONE
527
+ - invoice_date # the date the invoice was incurred, format: YYYY-MM-DD
528
+ - due_date # the date the invoice is due, format: YYYY-MM-DD
529
+ - message # any notes added to the invoice
530
+ - title # A string of the format "(Draft )Invoice #<user-invoice-number>"
531
+ - draft # whether the invoice is a draft or not
532
+ - status # the current status of the invoice
533
+ - balance_in_cents # the balance of invoice in cents
534
+ - currency # the currency of this invoice
535
+ - currency_symbol # the symbol that represents the currency of the invoice
536
+ - currency_base_unit # the number of the units in the balance_in_cents attribute that are required to make up a single unit of the currency
537
+ - payment_schedule # the payment schedule (i.e. 30) in days of this invoice
538
+ - workspace_ids # the internal ids of the project workspaces this invoice is associated with
539
+ - user_id # the internal id of the user who created this invoice
540
+ - recipient_id # the internal id of the user who received this invoice; this will be the client lead at the time that the invoice was created, or null if no lead client existed at that time.
541
+ - user_invoice_title
542
+ - user_invoice_number
543
+ - tax_rate
544
+ - purchase_order
545
+ - project_code
546
+ create_attributes:
547
+ - time_entry_ids # (required) An array of time entry IDs to associate with the invoice
548
+ - expense_ids # (required) An array of expense IDs to associate with the invoice
549
+ - workspace_id # (required) The ID of the workspace this invoice is associated with
550
+ - payment_schedule # (required) The payment schedule (i.e. 30) in days of this invoice
551
+ - invoice_date # The date the invoice was incurred, format: YYYY-MM-DD#
552
+ - user_invoice_number #
553
+ - user_invoice_title #
554
+ - draft # Whether the invoice is a draft or not
555
+ - message # Any notes added to the invoice
556
+ - purchase_order # A string
557
+ - project_code # A string
558
+ - fixed_fee_items # Nested params for FixedFeeItem
559
+ - additional_items # Nested params for AdditionalItem
560
+ - suppress_emails
561
+ - tax_rate
562
+ update_attributes:
563
+ - expense_ids # (required)
564
+ - time_entry_ids # (required)
565
+ - payment_schedule
566
+ - user_invoice_number
567
+ - draft
568
+ - message
569
+ - user_invoice_title
570
+ - purchase_order
571
+ - project_code
572
+ associations:
573
+ # time_entries - when included, the time_entry_ids array will reference all of the time entries included in the Invoice
574
+ time_entries:
575
+ foreign_key: time_entry_ids
576
+ collection: time_entries
577
+ # expenses - when included, the expense_ids array will reference all of the expenses included in the Invoice
578
+ expenses:
579
+ foreign_key: expense_ids
580
+ collection: expenses
581
+ additional_items:
582
+ foreign_key: additional_item_ids
583
+ collection: additional_items
584
+ fixed_fee_items:
585
+ foreign_key: fixed_fee_item_ids
586
+ collection: fixed_fee_items
587
+ # NOTE(AC): ? additional_items - when included, the additional_item_ids array will reference all of the additional items (additional invoice line items) included in the Invoice
588
+ # workspaces - when included, the workspace_ids array will reference the workspaces that this Invoice covers
589
+ workspaces:
590
+ foreign_key: workspace_ids
591
+ collection: workspaces
592
+ # user - user_id will reference the User who created this Invoice
593
+ user:
594
+ foreign_key: user_id
595
+ collection: users
596
+ # recipient - recipient_id will reference the User who received this Invoice. This will be the client lead at the time that the invoice was created, or null if no lead client existed at that time.
597
+ recipient:
598
+ foreign_key: recipient_id
599
+ collection: users
600
+
601
+ organizations:
602
+ attributes:
603
+ - id
604
+ - name
605
+ - type
606
+ - parent_id
607
+ - ancestor_ids
608
+ create_attributes:
609
+ - name
610
+ - parent_id
611
+ update_attributes:
612
+ - name
613
+ - parent_id
614
+
615
+ organization_memberships:
616
+ attributes:
617
+ - id
618
+ - member_id
619
+ - member_type
620
+ create_attributes:
621
+ - geography_id
622
+ - department_id
623
+ - member_id
624
+ - member_type
625
+ associations:
626
+ geography:
627
+ foreign_key: geography_id
628
+ collection: organizations
629
+ department:
630
+ foreign_key: department_id
631
+ collection: organizations
632
+
633
+ participations:
634
+ attributes:
635
+ - id
636
+ - role
637
+ - is_team_lead
638
+ - active_role
639
+ - estimated_workspace_minutes
640
+ - allocated_workspace_minutes
641
+ - user_id
642
+ - workspace_id
643
+ - workspace_role_id
644
+ create_attributes:
645
+ - workspace_id # (required)
646
+ - role # (required) either `maven` or `buyer`
647
+ - user_id # (required)
648
+ update_attributes:
649
+ - team_lead # (required) boolean to set the team lead on the workspace
650
+ associations:
651
+ user:
652
+ foreign_key: user_id
653
+ collection: users
654
+ workspace:
655
+ foreign_key: workspace_id
656
+ collection: workspaces
657
+ role:
658
+ foreign_key: workspace_role_id
659
+ collection: roles
660
+
661
+ posts:
662
+ attributes:
663
+ - id # the internal id of the post
664
+ - newest_reply_at # the date of the newest reply
665
+ - message # the message of the post
666
+ - has_attachment # whether the post has any attachments
667
+ - created_at # the date the post was created
668
+ - updated_at # the date the post was last updated
669
+ - reply_count # the number of replies to the post
670
+ - private # whether this post is private
671
+ - user_id # the internal id of the user who made the post
672
+ - workspace_id # the internal id of the project workspace this post is associated with
673
+ - workspace_type # the class name of the workspace
674
+ - reply # whether this post is a reply
675
+ - subject_id # if this post is a reply, the internal id of the parent post or object being replied to
676
+ - subject_type # the class name of the object being replied to
677
+ - story_id # the internal id of the story that this post is linked to
678
+ - google_documents # NOTE: NOT AN ASSOCIATION?
679
+ create_attributes:
680
+ - message # - (required) the content to be created in the new post
681
+ - workspace_id # - (required) the ID of the Workspace in which the post will be created
682
+ - subject_id # - (optional, required for replies) the ID of the item the new post is replying to if it is a reply
683
+ - subject_type # - (optional, required for replies) the type of the item the new post is replying to; accepted values are Post
684
+ - story_id # - (optional) the ID of the Story (task) that the new post should be linked to
685
+ - recipient_ids # - (optional) an array of User IDs for whom the post is visible. These users must be participating in the target Workspace and including this parameter will make the post private
686
+ - attachment_ids # - (optional) an array of PostAttachment IDs that should be associated with the post. Create PostAttachments using the attachments endpoint.
687
+ update_attributes:
688
+ - message
689
+ - story_id
690
+ validations:
691
+ [message, workspace_id]:
692
+ presence: true
693
+ associations:
694
+ # subject - when you include this association, posts that are replies will have a subject_id key referencing their parent post in the posts top-level key
695
+ subject:
696
+ foreign_key: subject_id
697
+ collection: posts
698
+ # user - the user object of the post creator, returned in the users top-level key
699
+ user:
700
+ foreign_key: user_id
701
+ collection: users
702
+ # workspace - the workspace (project) that owns this post, returned in the workspaces top-level key
703
+ workspace:
704
+ foreign_key: workspace_id
705
+ collection: workspaces
706
+ # story - linked story (task), returned in the stories top-level key
707
+ story:
708
+ foreign_key: story_id
709
+ collection: stories
710
+ # replies - replies to this post, returned in the posts top-level key; posts will contain a reply_ids array
711
+ replies:
712
+ foreign_key: reply_ids
713
+ collection: posts
714
+ # newest_reply - newest reply to this post, available in newest_reply_id and returned in the posts top-level key
715
+ newest_reply:
716
+ foreign_key: newest_reply_id
717
+ collection: posts
718
+ # newest_reply_user- user of the newest reply to this post, available in newest_reply_user_id and returned in the users top-level key
719
+ newest_reply_user:
720
+ foreign_key: newest_reply_user_id
721
+ collection: users
722
+ # recipients - on private posts, the recipient_ids array contains the ids of recipients, returned in the users top-level key
723
+ recipients:
724
+ foreign_key: recipient_ids
725
+ collection: users
726
+ # NOTE(?) google_documents - the post's google document objects, available in google_document_ids and returned in the google_documents top-level key
727
+ # attachments - file attachments, available in attachment_ids and returned in the attachments top-level key
728
+ attachments:
729
+ foreign_key: attachment_ids
730
+ collection: attachments
731
+
732
+ project_templates:
733
+ attributes:
734
+ - id # the internal project template ID
735
+ - title # the title of the project template
736
+ - shared # whether or not the project template is shared with other users on the account other than the creator
737
+ - is_budgeted # whether or not the project template has financial attributes including overall budget, story budgets, and story time estimates
738
+ - budget # the estimated overall budget of the project associated with the template
739
+ - item_count # the number of stories (tasks) inside the project template
740
+ - duration # the estimated number of days that the associated project will take
741
+ - currency # the currency of the project template
742
+ - description # the description of the project template which does not map over to the project description when applied
743
+ - user_id # the id of the user who created the project template
744
+ - raw_json # (Optional Field) a json hash that contains all the project templates tasks - See below for explanation on optional fields and go to the bottom for and explanation on the raw_json field
745
+ create_attributes:
746
+ - title # (required) the title of the new project template
747
+ - description # the description of the project template
748
+ - raw_json # (optional) a json hash that contains all the project templates tasks
749
+ - shared # (optional) whether or not the project template is shared with other users on the account other than the creator (default: false)
750
+ - is_budgeted # (optional) whether or not the project template has financial attributes including overall budget, story budgets, and story time estimates (default: false)
751
+ - budget # (optional) the estimated overall budget of the project associated with the template
752
+ - currency # (optional) the currency of the project template (default: 'USD')
753
+ - duration # (optional) the estimated number of days that the associated project will take
754
+ update_attributes:
755
+ - title # (required) the title of the new project template
756
+ - description # the description of the project template
757
+ - raw_json # (optional) a json hash that contains all the project templates tasks
758
+ - shared # (optional) whether or not the project template is shared with other users on the account other than the creator (default: false)
759
+ - is_budgeted # (optional) whether or not the project template has financial attributes including overall budget, story budgets, and story time estimates (default: false)
760
+ - budget # (optional) the estimated overall budget of the project associated with the template
761
+ - currency # (optional) the currency of the project template (default: 'USD')
762
+ - duration # (optional) the estimated number of days that the associated project will take
763
+ associations:
764
+ user:
765
+ foreign_key: user_id
766
+ collection: users
767
+ project_template_assignments:
768
+ foreign_key: project_template_assignment_ids
769
+ collection: project_template_assignments
770
+
771
+ project_template_assignments:
772
+ associations:
773
+ project_template:
774
+ foreign_key: project_template_id
775
+ collection: project_templates
776
+ attributes:
777
+ - id
778
+ - name
779
+
780
+ rate_cards:
781
+ associations:
782
+ rate_card_set:
783
+ foreign_key: rate_card_set_id
784
+ collection: rate_card_sets
785
+ rate_card_versions:
786
+ foreign_key: rate_card_version_ids
787
+ collection: rate_card_versions
788
+ effective_rate_card_version:
789
+ foreign_key: effective_rate_card_version_id
790
+ collection: rate_card_versions
791
+ attributes:
792
+ - currency
793
+ - uses
794
+ - id
795
+ - rate_card_set_id
796
+ - rate_card_version_ids
797
+ create_attributes:
798
+ - rate_card_set_id
799
+ - rate_card_set_version_id
800
+ - currency
801
+ update_attributes:
802
+ - currency
803
+
804
+ rate_card_sets:
805
+ associations:
806
+ rate_cards:
807
+ foriegn_key: rate_card_ids
808
+ collection: rate_cards
809
+ rate_card_set_versions:
810
+ foreign_key: rate_card_set_version_ids
811
+ collection: rate_card_set_versions
812
+ attributes:
813
+ - id
814
+ - title
815
+ - account_default
816
+ - active_currencies
817
+ - default_currencies
818
+ - destroyable
819
+ create_attributes:
820
+ - clone_version_id
821
+ - title
822
+ update_attributes:
823
+ - title
824
+
825
+ rate_card_set_versions:
826
+ associations:
827
+ rate_card_set:
828
+ foreign_key: rate_card_set_id
829
+ collection: rate_card_sets
830
+ rate_card_versions:
831
+ foreign_key: rate_card_version_ids
832
+ collection: rate_card_versions
833
+ attributes:
834
+ - id
835
+ - active
836
+ - effective_date
837
+ - used_currencies
838
+ create_attributes:
839
+ - rate_card_set_id
840
+ - effective_date
841
+ update_attributes:
842
+ - effective_date
843
+
844
+ rate_card_versions:
845
+ associations:
846
+ rate_card:
847
+ foreign_key: rate_card_id
848
+ collection: rate_cards
849
+ rate_card_set_version:
850
+ foreign_key: rate_card_set_version_id
851
+ collection: rate_card_set_versions
852
+ rate_card_roles:
853
+ foreign_key: rate_card_role_ids
854
+ collection: rate_card_roles
855
+ attributes:
856
+ - id
857
+ - default_rate
858
+ create_attributes:
859
+ - default_rate
860
+ update_attributes:
861
+ - default_rate
862
+
863
+ rate_card_roles:
864
+ associations:
865
+ role:
866
+ foreign_key: role_id
867
+ collection: roles
868
+ rate_card_version:
869
+ foreign_key: rate_card_version_id
870
+ collection: rate_card_versions
871
+ attributes:
872
+ - id
873
+ - rate
874
+ create_attributes:
875
+ - rate_card_version_id
876
+ - role_id
877
+ - rate
878
+ update_attributes:
879
+ - rate
880
+
881
+ resolutions:
882
+ attributes:
883
+ - id
884
+ - type
885
+ - created_at
886
+ - updated_at
887
+ - description
888
+ - target_type
889
+ - target_id
890
+ - user_id
891
+
892
+ roles:
893
+ attributes:
894
+ - id
895
+ - name
896
+ create_attributes:
897
+ - name
898
+ update_attributes:
899
+ - name
900
+ validations:
901
+ name:
902
+ presence: true
903
+
904
+ skills:
905
+ associations:
906
+ skill_category:
907
+ foreign_key: skill_category_id
908
+ collection: skill_categories
909
+ roles:
910
+ foreign_key: role_ids
911
+ collection: roles
912
+ attributes:
913
+ - name
914
+ - max_level
915
+ - description
916
+ - user_count
917
+ create_attributes:
918
+ - skill_category_id
919
+ - name
920
+ - max_level
921
+ - description
922
+ - role_ids
923
+ update_attributes:
924
+ - skill_category_id
925
+ - name
926
+ - max_level
927
+ - description
928
+ - role_ids
929
+
930
+ skill_categories:
931
+ associations:
932
+ skills:
933
+ foreign_key: skill_ids
934
+ collection: skills
935
+ attributes:
936
+ - name
937
+
938
+ skill_memberships:
939
+ associations:
940
+ skill:
941
+ foreign_key: skill_id
942
+ collection: skills
943
+ user:
944
+ foreign_key: user_id
945
+ collection: users
946
+ creator:
947
+ foreign_key: creator_id
948
+ collection: users
949
+ attributes:
950
+ - level
951
+ - max_level
952
+ - created_at
953
+ - updated_at
954
+ - cached_skill_name
955
+ create_attributes:
956
+ - skill_id
957
+ - user_id
958
+ - level
959
+ update_attributes:
960
+ - level
961
+
962
+ status_reports:
963
+ associations:
964
+ workspace:
965
+ foreign_key: workspace_id
966
+ collection: workspaces
967
+ creator:
968
+ foreign_key: creator_id
969
+ collection: users
970
+ attributes:
971
+ - color
972
+ - description
973
+ - details
974
+ - created_at
975
+ - updated_at
976
+ create_attributes:
977
+ - workspace_id
978
+ - creator_id
979
+ - description
980
+ - color
981
+ - details
982
+ update_attributes:
983
+ - color
984
+ - description
985
+ - details
986
+
987
+ stories: # tasks
988
+ associations:
989
+ # workspace - the workspace (project) that owns this story, returned in the workspaces top-level key
990
+ # parent - when you include this association, stories that are sub-stories will have a parent_id key referencing their parent story in the stories top-level key
991
+ # assignees - an array of User IDs called assignee_ids that contains the users assigned to this story, returned in the users top-level key
992
+ # followers - an array of User IDs called folllower_ids that contains the users following this story, returned in the users top-level key
993
+ # sub_stories - sub-stories of this story, returned in the stories top-level key; stories will contain a sub_story_ids array
994
+ # tags - an array of Tag IDs returned in the tags top-level key; stories will contain a tag_ids array
995
+ workspace:
996
+ foreign_key: workspace_id
997
+ collection: workspaces
998
+ parent:
999
+ foreign_key: parent_id
1000
+ collection: stories
1001
+ assignees:
1002
+ foreign_key: assignee_ids
1003
+ collection: users
1004
+ followers:
1005
+ foreign_key: follower_ids
1006
+ collection: users
1007
+ sub_stories:
1008
+ foreign_key: sub_story_ids
1009
+ collection: stories
1010
+ tags: #NOTE(SZ) moved in read-only attributes
1011
+ foreign_key: tag_ids
1012
+ collection: tags
1013
+ story_tasks:
1014
+ foreign_key: story_task_ids
1015
+ collection: story_tasks
1016
+ descendants:
1017
+ foreign_key: descendant_ids
1018
+ collection: stories
1019
+ custom_field_values:
1020
+ foreign_key: custom_field_value_ids
1021
+ collection: custom_field_values
1022
+ external_references:
1023
+ foreign_key: external_reference_ids
1024
+ collection: external_references
1025
+
1026
+ attributes:
1027
+ - id # the internal story id
1028
+ - workspace_id # the internal id for the workspace of the story
1029
+ - parent_id # the internal story id of a story's parent story (only for sub-stories)
1030
+ - billable # whether or not the task is billable
1031
+ - title # the title of the story
1032
+ - assignee_ids # an array of User IDs that are assigned to the story
1033
+ - description # a user provided description of the story
1034
+ - story_type # the story's type (task, deliverable, or milestone)
1035
+ - priority # the integer value of the priority for a task
1036
+ - state # the current state of the story (started, not started, or completed)
1037
+ - position # a number corresponding to the story's order relative to all other stories
1038
+ - archived # the archived status of the story (true of false)
1039
+ - deleted_at # the date the story was deleted
1040
+ - updated_at # the date the story was last updated
1041
+ - created_at # the date the story was created in Mavenlink
1042
+ - due_date # the due date given to the story
1043
+ - start_date # the start date given to the story
1044
+ - sub_story_count # the number of sub-stories under this story
1045
+ - budget_estimate_in_cents # the budget for the story in cents (integer). Only present if the Workspace has budgets enabled and the authenticated user can view budget information.
1046
+ - sub_stories_budget_estimate_in_cents # the budget for the sub-stories in cents (integer). Only present if the Workspace has budgets enabled and the authenticated user can view budget information.
1047
+ - budget_used_in_cents # the value of all time entries logged against this story (integer). Only present if the Workspace has budgets enabled and the authenticated user can view budget information.
1048
+ - sub_stories_budget_used_in_cents # the value of all sub-stories' time entries logged against this story (integer). Only present if the Workspace has budgets enabled and the authenticated user can view budget information.
1049
+ - time_estimate_in_minutes # the time estimate for the story in minutes (integer). Only present if the Workspace has budgets enabled and the authenticated user can view time information.
1050
+ - sub_stories_time_estimate_in_minutes # the time estimate for the sub-stories in minutes (integer). Only present if the Workspace has budgets enabled and the authenticated user can view time information.
1051
+ - logged_billable_time_in_minutes # the sum of all billable time logged against this story (integer). Only present if the Workspace has budgets enabled and the authenticated user can view time information.
1052
+ - sub_stories_billable_time_in_minutes # the sum of all sub-stories' billable time logged against this story (integer). Only present if the Workspace has budgets enabled and the authenticated user can view time information.
1053
+ - logged_nonbillable_time_in_minutes # the sum of all non-billable time logged against this story (integer). Only present if the Workspace has budgets enabled and the authenticated user can view time information.
1054
+ - fixed_fee # whether or not the story is fixed fee
1055
+ - root_id # the id of its parent. It is nil if a top level story
1056
+ - descendant_ids # an array of Story ids for it's descendants
1057
+ - custom_field_value_ids # an array of Custom Field Value ids which are attached to the story
1058
+ - percentage_complete
1059
+ - checklist # an array of checklist items (optional)
1060
+ - weight # integer representing the weight of the story. Can only be set on a parent-level milestone by a consultant with at least budget permissions (optional)
1061
+ - external_reference_ids
1062
+ create_attributes:
1063
+ - title # (required) the title of the story # max 200 characters
1064
+ - story_type # (required) the type of the story: task, deliverable, or milestone
1065
+ - workspace_id # (required) the ID of the Workspace in which the story will be created
1066
+ - description # (optional) a description of the new story # max 1000 characters
1067
+ - parent_id # (optional) represents the parent of this story, making this a sub-story
1068
+ - start_date # (optional) the date the story should be started; format should look like YYYY-MM-DD
1069
+ - archived # (optional) the archived status of the story (true or false)
1070
+ - due_date # (optional) the date the story is due; format should look like YYYY-MM-DD
1071
+ - assignee_ids # (optional) an array of User IDs that the new story should be assigned to
1072
+ - budget_estimate_in_cents # (optional) the budget in cents of the new story (integer). This is only valid in budgeted Workspaces and if the user can view budget information
1073
+ - time_estimate_in_minutes # (optional) the time estimate in minutes of the new story (integer). This is only valid in budgeted Workspaces and if the user can view budget information
1074
+ - tag_list # (optional) a comma separated String of tags
1075
+ - billable # whether or not the task is billable
1076
+ - percentage_complete # (optional) a number (0-100) representing the stage of the story
1077
+ - state # (optional) the state of the story: not started, started or completed
1078
+ - sub_stories # (optional) sub stories to be created with the parent
1079
+ - fixed_fee # whether or not the story is fixed fee
1080
+ - checklist # an array of checklist items (optional)
1081
+ - weight # integer representing the weight of the story. Can only be set on a parent-level milestone by a consultant with at least budget permissions (optional)
1082
+ - priority # the integer value of the priority for a task
1083
+ - external_reference
1084
+ update_attributes:
1085
+ - title # (required) the title of the story # max 200 characters
1086
+ - story_type # (required) the type of the story: task, deliverable, or milestone
1087
+ - description # (optional) a description of the new story # max 1000 characters
1088
+ - parent_id # (optional) represents the parent of this story, making this a sub-story
1089
+ - start_date # (optional) the date the story should be started; format should look like YYYY-MM-DD
1090
+ - archived # (optional) the archived status of the story (true or false)
1091
+ - due_date # (optional) the date the story is due; format should look like YYYY-MM-DD
1092
+ - assignee_ids # (optional) an array of User IDs that the new story should be assigned to
1093
+ - budget_estimate_in_cents # (optional) the budget in cents of the new story (integer). This is only valid in budgeted Workspaces and if the user can view budget information
1094
+ - time_estimate_in_minutes # (optional) the time estimate in minutes of the new story (integer). This is only valid in budgeted Workspaces and if the user can view budget information
1095
+ - tag_list # (optional) a comma separated String of tags
1096
+ - billable # whether or not the task is billable
1097
+ - percentage_complete # (optional) a number (0-100) representing the stage of the story
1098
+ - state # (optional) the state of the story: not started, started or completed
1099
+ - fixed_fee # whether or not the story is fixed fee
1100
+ - weight # integer representing the weight of the story. Can only be set on a parent-level milestone by a consultant with at least budget permissions (optional)
1101
+ - priority # the integer value of the priority for a task
1102
+ - external_reference
1103
+
1104
+ story_allocation_days:
1105
+ attributes:
1106
+ - id # the unique identifier for this story allocation day object
1107
+ - updated_at # the date the story allocation day was last updated
1108
+ - date # the date of the story allocation day
1109
+ - minutes # the minutes allocated to the story allocation day
1110
+ - current # a calculated attribute that indicates whether or not the story allocation day's assignment is active
1111
+ - assignment_id # the id of the assignment that owns the story allocation day
1112
+ - story_id # the id of the story who owns the story allocation day's assignment
1113
+ - workspace_id # the id of the workspace who owns the story allocation day's assignment
1114
+ create_attributes:
1115
+ - assignment_id # required
1116
+ - date # required
1117
+ - minutes # required
1118
+ update_attributes:
1119
+ - minutes
1120
+ associations:
1121
+ # assignment - when included, the assignment_id will reference the assignment for which the story allocation day belongs
1122
+ # story - when included, the story_id will reference the story for which the story allocation day belongs
1123
+ # workspace - when included, the workspace_id will reference the workspace for which the story allocation day belongs
1124
+ assignment:
1125
+ foreign_key: assignment_id
1126
+ collection: assignments
1127
+ story:
1128
+ foreign_key: story_id
1129
+ collection: stories
1130
+ workspace:
1131
+ foreign_key: workspace_id
1132
+ collection: workspaces
1133
+
1134
+ story_dependencies:
1135
+ validations:
1136
+ [source_id, target_id]:
1137
+ presence: true
1138
+ workspace_id:
1139
+ presence: true
1140
+ 'on': create
1141
+ attributes:
1142
+ - id
1143
+ - dependency_type
1144
+ - lag
1145
+ - source_id
1146
+ - target_id
1147
+ create_attributes:
1148
+ - workspace_id
1149
+ - source_id
1150
+ - target_id
1151
+ - dependency_type
1152
+ - lag
1153
+ update_attributes:
1154
+ - dependency_type
1155
+ - lag
1156
+ associations:
1157
+ source:
1158
+ foreign_key: source_id
1159
+ collection: stories
1160
+ target:
1161
+ foreign_key: target_id
1162
+ collection: stories
1163
+
1164
+ story_tasks:
1165
+ associations:
1166
+ story:
1167
+ foreign_key: story_id
1168
+ collection: stories
1169
+ attributes:
1170
+ - id
1171
+ - name
1172
+ - completed
1173
+ - completed_at
1174
+ - position
1175
+ - completed_by_id
1176
+ - story_id
1177
+
1178
+ tags:
1179
+ attributes:
1180
+ - id
1181
+ - name
1182
+ - status
1183
+ create_attributes:
1184
+ - name
1185
+
1186
+ time_adjustments:
1187
+ associations:
1188
+ story:
1189
+ foreign_key: story_id
1190
+ collection: stories
1191
+ workspace:
1192
+ foreign_key: workspace_id
1193
+ collection: workspaces
1194
+ user:
1195
+ foreign_key: user_id
1196
+ collection: users
1197
+ creator:
1198
+ foreign_key: creator_id
1199
+ collection: users
1200
+ active_invoice:
1201
+ foreign_key: active_invoice_id
1202
+ collection: invoices
1203
+ attributes:
1204
+ - id
1205
+ - original_date
1206
+ - bill_rate_in_cents
1207
+ - billable
1208
+ - cost_rate_in_cents
1209
+ - currency
1210
+ - currency_symbol
1211
+ - currency_base_unit
1212
+ - is_invoiced
1213
+ - notes
1214
+ - posted_on_date
1215
+ - taxable
1216
+ - time
1217
+ - created_at
1218
+ - updated_at
1219
+ create_attributes:
1220
+ - workspace_id
1221
+ - user_id
1222
+ - original_date
1223
+ - bill_rate_in_cents
1224
+ - billable
1225
+ - cost_rate_in_cents
1226
+ - currency
1227
+ - posted_on_date
1228
+ - time
1229
+ - notes
1230
+ - story_id
1231
+ update_attributes:
1232
+ - workspace_id
1233
+ - user_id
1234
+ - original_date
1235
+ - bill_rate_in_cents
1236
+ - billable
1237
+ - cost_rate_in_cents
1238
+ - currency
1239
+ - posted_on_date
1240
+ - time
1241
+ - notes
1242
+ - story_id
1243
+
1244
+ time_entries:
1245
+ associations:
1246
+ workspace:
1247
+ foreign_key: workspace_id
1248
+ collection: workspaces
1249
+ user:
1250
+ foreign_key: user_id
1251
+ collection: users
1252
+ story:
1253
+ foreign_key: story_id
1254
+ collection: stories
1255
+ role:
1256
+ foreign_key: role_id
1257
+ collection: roles
1258
+ validations:
1259
+ [workspace_id, date_performed, time_in_minutes]:
1260
+ presence: true
1261
+ attributes:
1262
+ - id # the internal time entry ID
1263
+ - created_at # the date the time entry was created in Mavenlink
1264
+ - updated_at # the date the time entry was last updated
1265
+ - date_performed # the date the time entry was performed
1266
+ - story_id # the internal story ID of the story this time entry is associated with
1267
+ - time_in_minutes # the amount of time entered in minutes
1268
+ - billable # whether this time entry is billable time
1269
+ - notes # any notes added to the time entry
1270
+ - rate_in_cents # the hourly rate for this time entry in cents
1271
+ - cost_rate_in_cents
1272
+ - currency # the currency of this time entry's rate
1273
+ - currency_symbol # the currency symbol for this time entry's currency
1274
+ - currency_base_unit # the amount of cents in each of the currency's dollars, for example 100 for USD.
1275
+ - user_can_edit # whether the current user can edit this time entry or not
1276
+ - workspace_id # the internal ID of the project workspace this time entry is associated with
1277
+ - user_id # the internal ID of the user who created this time entry
1278
+ - approved # whether or not the time entry has been approved
1279
+ - role_id # The internal ID of the Role that is associated with this time entry
1280
+ - external_reference # Object representing the status of integration synchronization
1281
+ - location
1282
+ create_attributes:
1283
+ - workspace_id # (required) the internal ID of the project workspace this time entry is associated with
1284
+ - date_performed # (required) the date the activity for which the time is being entered was performed, format: YYYY-MM-DD
1285
+ - time_in_minutes # (required) the amount of time entered in minutes
1286
+ - billable # (optional) whether this time entry is billable time, you must also provide rate_in_cents if you set billable to true
1287
+ - notes # (optional) any notes added to the time entry
1288
+ - rate_in_cents # (optional, required if billable is true) the hourly rate for this time entry in cents, you must also set billable to true when setting this
1289
+ - cost_rate_in_cents
1290
+ - story_id # (optional) the internal ID of the story this time entry is associated with
1291
+ - user_id # (optional) the internal ID of the user the time entry is associated with. This parameter is ignored unless the authorizing user has financial access in the workspace and is on the consultants team (or if the authorizing user is an account administrator and has proxy permissions via an account member with those permissions).
1292
+ - external_reference # (optional) the object representing the status of integration synchronization.
1293
+ - location
1294
+ update_attributes:
1295
+ - date_performed # (required) the date the activity for which the time is being entered was performed, format: YYYY-MM-DD
1296
+ - time_in_minutes # (required) the amount of time entered in minutes
1297
+ - billable # (optional) whether this time entry is billable time, you must also provide rate_in_cents if you set billable to true
1298
+ - notes # (optional) any notes added to the time entry
1299
+ - rate_in_cents # (optional, required if billable is true) the hourly rate for this time entry in cents, you must also set billable to true when setting this
1300
+ - cost_rate_in_cents
1301
+ - story_id # (optional) the internal ID of the story this time entry is associated with
1302
+ - user_id # (optional) the internal ID of the user the time entry is associated with. This parameter is ignored unless the authorizing user has financial access in the workspace and is on the consultants team (or if the authorizing user is an account administrator and has proxy permissions via an account member with those permissions).
1303
+ - external_reference # (optional) the object representing the status of integration synchronization.
1304
+
1305
+ time_off_entries:
1306
+ attributes:
1307
+ - id
1308
+ - user_id
1309
+ - hours
1310
+ - requested_date
1311
+ - submission_date
1312
+ create_attributes:
1313
+ - user_id
1314
+ - hours
1315
+ - requested_date
1316
+ update_attributes:
1317
+ - hours
1318
+ associations:
1319
+ user:
1320
+ foreign_key: user_id
1321
+ collection: users
1322
+
1323
+ timesheet_submissions:
1324
+ attributes:
1325
+ - id
1326
+ - start_date
1327
+ - end_date
1328
+ - created_at
1329
+ - updated_at
1330
+ - status
1331
+ - title
1332
+ - comment
1333
+ - type
1334
+ - resolution_description
1335
+ - line_item_total_formatted
1336
+ - line_item_total_in_cents
1337
+ - currency
1338
+ - currency_symbol
1339
+ - currency_base_unit
1340
+ - current_resolution_description
1341
+ - current_resolution_creator_id
1342
+ - current_resolution_created_at_date
1343
+ - time_entry_ids
1344
+ - resolution_ids
1345
+ create_attributes:
1346
+ - title
1347
+ - comment
1348
+ - workspace_id
1349
+ - user_id
1350
+ - line_item_ids
1351
+ associations:
1352
+ user:
1353
+ foreign_key: user_id
1354
+ collection: users
1355
+ workspace:
1356
+ foreign_key: workspace_id
1357
+ collection: workspaces
1358
+ time_entries:
1359
+ foreign_key: time_entry_ids
1360
+ collection: time_entries
1361
+ resolutions:
1362
+ foreign_key: resolution_ids
1363
+ collection: resolutions
1364
+
1365
+ users:
1366
+ attributes:
1367
+ - id
1368
+ - user_id # the internal ID of the user
1369
+ - full_name # the full name of the user
1370
+ - photo_path # the full url to the user's thumbnail
1371
+ - email_address # the user's primary email address
1372
+ - headline # the short description of the user as found in the user's profile
1373
+ update_attributes:
1374
+ - full_name
1375
+ - headline
1376
+ - email_address
1377
+ - external_reference
1378
+ associations:
1379
+ role:
1380
+ foreign_key: role_id
1381
+ collection: roles
1382
+ account_membership:
1383
+ foreign_key: account_membership_id
1384
+ collection: account_memberships
1385
+ external_references:
1386
+ foreign_key: external_reference_ids
1387
+ collection: external_references
1388
+
1389
+ vendors:
1390
+ attributes:
1391
+ - id
1392
+ - name
1393
+ - in_use
1394
+ create_attributes:
1395
+ - name
1396
+ update_attributes:
1397
+ - name
1398
+ validations:
1399
+ name:
1400
+ presence: true
1401
+
1402
+ workspaces:
1403
+ validations:
1404
+ title:
1405
+ presence: true
1406
+ creator_role:
1407
+ inclusion:
1408
+ 'on': create
1409
+ in: [maven, buyer]
1410
+ allow_blank: false
1411
+ associations:
1412
+ primary_counterpart:
1413
+ foreign_key: primary_counterpart_id
1414
+ collection: users
1415
+ participants:
1416
+ foreign_key: participant_ids
1417
+ collection: users
1418
+ participations:
1419
+ foreign_key: participation_ids
1420
+ collection: participations
1421
+ creator:
1422
+ foreign_key: creator_id
1423
+ collection: users
1424
+ workspace_groups:
1425
+ foreign_key: workspace_group_ids
1426
+ collection: workspace_groups
1427
+ primary_maven:
1428
+ foreign_key: primary_maven_id
1429
+ collection: users
1430
+ external_references:
1431
+ foreign_key: external_reference_ids
1432
+ collection: external_references
1433
+ status_reports:
1434
+ foreign_key: status_report_ids
1435
+ collection: status_reports
1436
+ approver:
1437
+ foreign_key: approver_id
1438
+ collection: users
1439
+ attributes:
1440
+ - id # the internal expense ID
1441
+ - title # the title of the project
1442
+ - archived # whether the project is archived
1443
+ - description # the description of the project
1444
+ - due_date # the due date of the project
1445
+ - effective_due_date # effective due date of the project
1446
+ - budgeted # whether the project is budgeted
1447
+ - change_orders_enabled # whether change orders are enabled in the project
1448
+ - updated_at # the date the project was last updated
1449
+ - created_at # the date the project was created
1450
+ - consultant_role_name # the name of the provider role for the project
1451
+ - client_role_name # the name of the customer role for the project
1452
+ - can_create_line_items # whether you can create line items in this workspace
1453
+ - default_rate # the default billing rate for this project
1454
+ - currency_symbol # the currency symbol of the currency of this project
1455
+ - currency_base_unit # the currency base unit of the currency of this project (i.e. USD is 100)
1456
+ - can_invite # whether you can invite others to the workspace
1457
+ - has_budget_access # whether you have budget access in this project
1458
+ - price # the budget for this project, only included if the current user has financial access in the workspace
1459
+ - price_in_cents # the project budget in cents, only included if the current user has financial access in the workspace
1460
+ - budget_used # the amount of the project budget already burned, only included if the current user has financial access in the workspace
1461
+ - over_budget # whether the project is over budget, only included if the current user has financial access in the workspace
1462
+ - currency # the currency of the project, only included if the current user has financial access in the workspace
1463
+ - start_date # the start date of the project
1464
+ - status # a hash with information about the status of the project (color, message, key)
1465
+ - stories_are_fixed_fee_by_default # whether stories default to Fixed Fee or T&M
1466
+ - workspace_invoice_preference_id
1467
+ - require_expense_approvals
1468
+ - require_time_approvals
1469
+ - percentage_complete
1470
+ - access_level
1471
+ - status_key
1472
+ - workspace_group_ids
1473
+ - target_margin
1474
+ create_attributes:
1475
+ - title
1476
+ - creator_role
1477
+ - budgeted
1478
+ - description
1479
+ - currency
1480
+ - price
1481
+ - start_date
1482
+ - due_date
1483
+ - change_orders
1484
+ - consultant_role_name
1485
+ - client_role_name
1486
+ - access_level
1487
+ - project_tracker_template_id
1488
+ - change_orders_enabled
1489
+ - expenses_in_burn_rate
1490
+ - posts_require_privacy_decision
1491
+ - stories_are_fixed_fee_by_default
1492
+ - rate_card_id
1493
+ - custom_fields
1494
+ - require_expense_approvals
1495
+ - require_time_approvals
1496
+ - project_template_start_date
1497
+ - project_template_assignment_mappings
1498
+ - project_template_weekends_as_workdays
1499
+ - status_key
1500
+ - external_reference
1501
+ - workspace_group_ids
1502
+ - approver_id
1503
+ - target_margin
1504
+ - tasks_default_non_billable
1505
+ update_attributes:
1506
+ - title
1507
+ - budgeted
1508
+ - description
1509
+ - archived
1510
+ - access_level
1511
+ - price
1512
+ - start_date
1513
+ - due_date
1514
+ - posts_require_privacy_decision
1515
+ - tasks_default_non_billable
1516
+ - expenses_in_burn_rate
1517
+ - rate_card_id
1518
+ - client_role_name
1519
+ - consultant_role_name
1520
+ - stories_are_fixed_fee_by_default
1521
+ - currency
1522
+ - target_margin
1523
+ - approver_id
1524
+ - change_orders_enabled
1525
+ - project_template_start_date
1526
+ - project_template_assignment_mappings
1527
+ - project_template_weekends_as_workdays
1528
+ - project_tracker_template_id
1529
+ - project_template_before_story_id
1530
+ - status_key
1531
+ - external_reference
1532
+ - workspace_group_ids
1533
+
1534
+ workspace_invoice_preferences:
1535
+ attributes:
1536
+ - id
1537
+ - workspace_id
1538
+ - purchase_order
1539
+ - project_code
1540
+ - client_invoice_name
1541
+ - client_invoice_address
1542
+ - consultant_invoice_name
1543
+ - consultant_invoice_address
1544
+ create_attributes:
1545
+ - workspace_id # required
1546
+ - project_code # optional
1547
+ - purchase_order # optional
1548
+ - client_invoice_name # optional
1549
+ - client_invoice_address # optional
1550
+ - consultant_invoice_name # optional
1551
+ - consultant_invoice_address # optional
1552
+ update_attributes:
1553
+ - project_code # optional
1554
+ - purchase_order # optional
1555
+ - client_invoice_name # optional
1556
+ - client_invoice_address # optional
1557
+ - consultant_invoice_name # optional
1558
+ - consultant_invoice_address # optional
1559
+
1560
+ workspace_groups:
1561
+ attributes:
1562
+ - id # the internal workspace group ID
1563
+ - name # the name of the workspace group
1564
+ - company # whether the workspace group represents a company
1565
+ - contact_name
1566
+ - email
1567
+ - phone_number
1568
+ - address
1569
+ - website
1570
+ - notes
1571
+ create_attributes:
1572
+ - name
1573
+ - company
1574
+ - add_workspace_ids
1575
+ - company
1576
+ - contact_name
1577
+ - email
1578
+ - phone_number
1579
+ - address
1580
+ - website
1581
+ - notes
1582
+ - external_reference
1583
+ update_attributes:
1584
+ - name
1585
+ - company
1586
+ - add_workspace_ids
1587
+ - remove_workspace_ids
1588
+ - company
1589
+ - contact_name
1590
+ - email
1591
+ - phone_number
1592
+ - address
1593
+ - website
1594
+ - notes
1595
+ - external_reference
1596
+ validations:
1597
+ name:
1598
+ presence: true
1599
+ company:
1600
+ inclusion:
1601
+ in: [true, false]
1602
+ associations:
1603
+ workspaces:
1604
+ foreign_key: workspace_ids
1605
+ collection: workspaces
1606
+ external_references:
1607
+ foreign_key: external_reference_ids
1608
+ collection: external_references
1609
+
1610
+ workweeks:
1611
+ attributes:
1612
+ - default
1613
+ - start_date
1614
+ - end_date
1615
+ - sunday_minutes
1616
+ - monday_minutes
1617
+ - tuesday_minutes
1618
+ - wednesday_minutes
1619
+ - thursday_minutes
1620
+ - friday_minutes
1621
+ - saturday_minutes
1622
+ - total_minutes
1623
+ create_attributes:
1624
+ - start_date
1625
+ - sunday_minutes
1626
+ - monday_minutes
1627
+ - tuesday_minutes
1628
+ - wednesday_minutes
1629
+ - thursday_minutes
1630
+ - friday_minutes
1631
+ - saturday_minutes
1632
+ update_attributes:
1633
+ - start_date
1634
+ - sunday_minutes
1635
+ - monday_minutes
1636
+ - tuesday_minutes
1637
+ - wednesday_minutes
1638
+ - thursday_minutes
1639
+ - friday_minutes
1640
+ - saturday_minutes
1641
+
1642
+ workweek_memberships:
1643
+ attributes:
1644
+ - user_id
1645
+ - start_date
1646
+ - end_date
1647
+ create_attributes:
1648
+ - user_id
1649
+ - start_date
1650
+ - sunday_minutes
1651
+ - monday_minutes
1652
+ - tuesday_minutes
1653
+ - wednesday_minutes
1654
+ - thursday_minutes
1655
+ - friday_minutes
1656
+ - saturday_minutes
1657
+ update_attributes:
1658
+ - start_date
1659
+ - sunday_minutes
1660
+ - monday_minutes
1661
+ - tuesday_minutes
1662
+ - wednesday_minutes
1663
+ - thursday_minutes
1664
+ - friday_minutes
1665
+ - saturday_minutes