@projectcaluma/ember-distribution 11.0.0-beta.29 → 11.0.0-beta.31

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. package/addon/abilities/distribution.js +9 -0
  2. package/addon/abilities/inquiry.js +1 -1
  3. package/addon/components/cd-document-header.hbs +3 -12
  4. package/addon/components/cd-inquiry-answer-form.hbs +140 -57
  5. package/addon/components/cd-inquiry-answer-form.js +20 -2
  6. package/addon/components/cd-inquiry-dialog/inquiry-deadline.hbs +5 -10
  7. package/addon/components/cd-inquiry-dialog/inquiry-deadline.js +14 -0
  8. package/addon/components/cd-inquiry-dialog/inquiry-part.hbs +116 -89
  9. package/addon/components/cd-inquiry-dialog.js +11 -15
  10. package/addon/components/cd-inquiry-edit-form.hbs +12 -4
  11. package/addon/components/cd-inquiry-edit-form.js +2 -2
  12. package/addon/components/cd-inquiry-new-form/bulk-edit.hbs +20 -0
  13. package/addon/components/cd-inquiry-new-form/bulk-edit.js +116 -0
  14. package/addon/components/cd-inquiry-new-form/select.hbs +71 -0
  15. package/addon/components/cd-inquiry-new-form/select.js +76 -0
  16. package/addon/components/cd-inquiry-new-form.hbs +29 -86
  17. package/addon/components/cd-inquiry-new-form.js +1 -100
  18. package/addon/components/cd-navigation/controls.hbs +112 -66
  19. package/addon/components/cd-navigation/controls.js +29 -14
  20. package/addon/components/cd-navigation/item.hbs +22 -11
  21. package/addon/components/cd-navigation/section.hbs +15 -21
  22. package/addon/components/cd-navigation/section.js +5 -13
  23. package/addon/components/cd-navigation.hbs +4 -9
  24. package/addon/config.js +19 -0
  25. package/addon/gql/fragments/inquiry-answer.graphql +57 -0
  26. package/addon/gql/fragments/inquiry-request.graphql +26 -0
  27. package/addon/gql/mutations/complete-inquiry-work-item.graphql +24 -13
  28. package/addon/gql/mutations/reopen-inquiry.graphql +3 -13
  29. package/addon/gql/queries/{control-work-items.graphql → controls.graphql} +18 -1
  30. package/addon/gql/queries/incomplete-inquiries.graphql +1 -1
  31. package/addon/gql/queries/inquiry-answer.graphql +5 -1
  32. package/addon/gql/queries/inquiry-dialog.graphql +31 -2
  33. package/addon/gql/queries/inquiry-form.graphql +26 -0
  34. package/addon/gql/queries/{inquiry-navigation.graphql → navigation.graphql} +24 -6
  35. package/addon/routes/application.js +7 -0
  36. package/addon/routes/index.js +15 -28
  37. package/addon/routes/inquiry/index.js +1 -4
  38. package/addon/routes/new.js +1 -5
  39. package/addon/services/distribution.js +81 -9
  40. package/addon/templates/application.hbs +7 -5
  41. package/addon/templates/index.hbs +1 -5
  42. package/addon/templates/inquiry/index.hbs +1 -5
  43. package/addon/templates/new.hbs +0 -1
  44. package/addon/utils/inquiry-deadline.js +3 -1
  45. package/app/components/cd-inquiry-new-form/bulk-edit.js +1 -0
  46. package/app/components/cd-inquiry-new-form/select.js +1 -0
  47. package/app/styles/_answer-form.scss +4 -0
  48. package/package.json +17 -17
  49. package/translations/de.yaml +31 -9
  50. package/translations/en.yaml +31 -10
  51. package/translations/fr.yaml +31 -9
  52. package/addon/components/cd-navigation.js +0 -53
  53. package/addon/gql/fragments/inquiry.graphql +0 -117
  54. package/addon/modifiers/pikaday.js +0 -2
@@ -1,4 +1,33 @@
1
- #import InquiryAnswerButtons, InquiryDialog, InquiryDeadlineDocument, InquiryStatusDocument, InquiryRequest from '../fragments/inquiry.graphql'
1
+ # import InquiryAnswer, InquiryAnswerButtons, InquiryAnswerStatus from '../fragments/inquiry-answer.graphql'
2
+ # import InquiryRequest, InquiryRequestDeadline from '../fragments/inquiry-request.graphql'
3
+
4
+ fragment DialogInquiry on WorkItem {
5
+ id
6
+ addressedGroups
7
+ controllingGroups
8
+ assignedUsers
9
+ createdAt
10
+ closedAt
11
+ status
12
+ isRedoable
13
+ task {
14
+ id
15
+ slug
16
+ }
17
+ meta
18
+ document {
19
+ id
20
+ ...InquiryRequest
21
+ }
22
+ childCase {
23
+ id
24
+ ...InquiryAnswerButtons
25
+ document {
26
+ id
27
+ ...InquiryAnswer
28
+ }
29
+ }
30
+ }
2
31
 
3
32
  query InquiryDialog(
4
33
  $task: ID!
@@ -22,7 +51,7 @@ query InquiryDialog(
22
51
  ) {
23
52
  edges {
24
53
  node {
25
- ...InquiryDialog
54
+ ...DialogInquiry
26
55
  }
27
56
  }
28
57
  }
@@ -0,0 +1,26 @@
1
+ # import FieldQuestion, FieldTableQuestion, SimpleQuestion from '@projectcaluma/ember-form/gql/fragments/field.graphql'
2
+
3
+ query InquiryForm($inquiryTask: String!) {
4
+ allTasks(filter: [{ slug: $inquiryTask }], first: 1) {
5
+ edges {
6
+ node {
7
+ id
8
+ ... on CompleteTaskFormTask {
9
+ form {
10
+ id
11
+ slug
12
+ name
13
+ meta
14
+ questions {
15
+ edges {
16
+ node {
17
+ ...FieldQuestion
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
@@ -1,12 +1,30 @@
1
- #import Inquiry, InquiryDeadlineDocument, InquiryStatusDocument from '../fragments/inquiry.graphql'
1
+ # import InquiryAnswerStatus from '../fragments/inquiry-answer.graphql'
2
+ # import InquiryRequestDeadline from '../fragments/inquiry-request.graphql'
2
3
 
3
- query InquiryNavigation(
4
+ fragment NavigationInquiry on WorkItem {
5
+ id
6
+ status
7
+ addressedGroups
8
+ controllingGroups
9
+ document {
10
+ id
11
+ ...InquiryRequestDeadline
12
+ }
13
+ childCase {
14
+ id
15
+ document {
16
+ id
17
+ ...InquiryAnswerStatus
18
+ }
19
+ }
20
+ }
21
+
22
+ query Navigation(
4
23
  $task: ID!
5
24
  $statusQuestion: ID
6
25
  $deadlineQuestion: ID
7
26
  $currentGroup: String!
8
27
  $caseId: ID!
9
- $includeNavigationData: Boolean!
10
28
  ) {
11
29
  controlling: allWorkItems(
12
30
  filter: [
@@ -19,7 +37,7 @@ query InquiryNavigation(
19
37
  ) {
20
38
  edges {
21
39
  node {
22
- ...Inquiry
40
+ ...NavigationInquiry
23
41
  }
24
42
  }
25
43
  }
@@ -35,7 +53,7 @@ query InquiryNavigation(
35
53
  ) {
36
54
  edges {
37
55
  node {
38
- ...Inquiry
56
+ ...NavigationInquiry
39
57
  }
40
58
  }
41
59
  }
@@ -52,7 +70,7 @@ query InquiryNavigation(
52
70
  ) {
53
71
  edges {
54
72
  node {
55
- ...Inquiry
73
+ ...NavigationInquiry
56
74
  }
57
75
  }
58
76
  }
@@ -1,7 +1,14 @@
1
1
  import Route from "@ember/routing/route";
2
+ import { inject as service } from "@ember/service";
2
3
 
3
4
  export default class ApplicationRoute extends Route {
5
+ @service distribution;
6
+
4
7
  model(params) {
5
8
  return params.case;
6
9
  }
10
+
11
+ afterModel(model) {
12
+ this.distribution.caseId = model;
13
+ }
7
14
  }
@@ -1,41 +1,28 @@
1
1
  import Route from "@ember/routing/route";
2
2
  import { inject as service } from "@ember/service";
3
- import { queryManager } from "ember-apollo-client";
4
-
5
- import config from "@projectcaluma/ember-distribution/config";
6
- import inquiryNavigationQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-navigation.graphql";
7
- import uniqueByGroups from "@projectcaluma/ember-distribution/utils/unique-by-groups";
8
3
 
9
4
  export default class IndexRoute extends Route {
5
+ @service("-scheduler") scheduler;
6
+ @service distribution;
10
7
  @service router;
11
- @service calumaOptions;
12
8
 
13
- @config config;
9
+ async redirect() {
10
+ // trigger resource
11
+ this.distribution.navigation.value;
14
12
 
15
- @queryManager apollo;
13
+ // wait for navigation request and group resolver
14
+ await this.distribution.fetchNavigation.last;
15
+ await this.scheduler.resolveGroup.last;
16
16
 
17
- async redirect(model) {
18
- const response = await this.apollo.query({
19
- query: inquiryNavigationQuery,
20
- variables: {
21
- caseId: model,
22
- task: this.config.inquiry.task,
23
- currentGroup: String(this.calumaOptions.currentGroupId),
24
- includeNavigationData: false,
25
- },
26
- });
17
+ const inquiries = this.distribution.inquiries;
27
18
 
28
- const models = Object.entries(response).flatMap(([, objects]) => {
29
- return uniqueByGroups(objects.edges.map((edge) => edge.node)).map(
30
- (inquiry) => ({
31
- from: inquiry.controllingGroups[0],
32
- to: inquiry.addressedGroups[0],
33
- })
34
- );
35
- }, {});
19
+ const firstInquiry = inquiries.addressed[0] ?? inquiries.controlling[0];
36
20
 
37
- if (models.length) {
38
- return this.router.replaceWith("inquiry", models[0]);
21
+ if (firstInquiry) {
22
+ return this.router.replaceWith("inquiry", {
23
+ from: firstInquiry.controllingGroups[0],
24
+ to: firstInquiry.addressedGroups[0],
25
+ });
39
26
  }
40
27
  }
41
28
  }
@@ -2,9 +2,6 @@ import Route from "@ember/routing/route";
2
2
 
3
3
  export default class InquiryIndexRoute extends Route {
4
4
  model() {
5
- return {
6
- ...this.modelFor("inquiry"),
7
- case: this.modelFor("application"),
8
- };
5
+ return this.modelFor("inquiry");
9
6
  }
10
7
  }
@@ -1,7 +1,3 @@
1
1
  import Route from "@ember/routing/route";
2
2
 
3
- export default class NewRoute extends Route {
4
- model() {
5
- return this.modelFor("application");
6
- }
7
- }
3
+ export default class NewRoute extends Route {}
@@ -1,14 +1,17 @@
1
- import { getOwner } from "@ember/application";
2
1
  import Service, { inject as service } from "@ember/service";
2
+ import { tracked } from "@glimmer/tracking";
3
3
  import { queryManager, getObservable } from "ember-apollo-client";
4
4
  import { dropTask } from "ember-concurrency";
5
5
  import { trackedTask } from "ember-resources/util/ember-concurrency";
6
+ import { cached } from "tracked-toolbox";
6
7
 
7
8
  import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
8
9
  import config from "@projectcaluma/ember-distribution/config";
9
10
  import createInquiryMutation from "@projectcaluma/ember-distribution/gql/mutations/create-inquiry.graphql";
10
- import controlWorkItemsQuery from "@projectcaluma/ember-distribution/gql/queries/control-work-items.graphql";
11
- import inquiryNavigationQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-navigation.graphql";
11
+ import controlsQuery from "@projectcaluma/ember-distribution/gql/queries/controls.graphql";
12
+ import inquiryDialogQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-dialog.graphql";
13
+ import navigationQuery from "@projectcaluma/ember-distribution/gql/queries/navigation.graphql";
14
+ import uniqueByGroups from "@projectcaluma/ember-distribution/utils/unique-by-groups";
12
15
 
13
16
  export default class DistributionService extends Service {
14
17
  @service("-scheduler") scheduler;
@@ -21,8 +24,14 @@ export default class DistributionService extends Service {
21
24
 
22
25
  @config config;
23
26
 
24
- get caseId() {
25
- return getOwner(this).lookup("route:application").currentModel;
27
+ @tracked caseId;
28
+
29
+ get hasInquiries() {
30
+ return (
31
+ this.navigation.value?.addressed.edges.length > 0 ||
32
+ this.navigation.value?.controlling.edges.length > 0 ||
33
+ this.navigation.value?.more.edges.length > 0
34
+ );
26
35
  }
27
36
 
28
37
  controls = trackedTask(this, this.fetchControls, () => [this.caseId]);
@@ -44,13 +53,14 @@ export default class DistributionService extends Service {
44
53
  @dropTask
45
54
  *fetchControls(caseId) {
46
55
  return yield this.apollo.watchQuery({
47
- query: controlWorkItemsQuery,
56
+ query: controlsQuery,
48
57
  variables: {
49
58
  caseId,
50
59
  currentGroup: String(this.calumaOptions.currentGroupId),
51
60
  createTask: this.config.controls.createTask,
52
61
  completeTask: this.config.controls.completeTask,
53
62
  inquiryTask: this.config.inquiry.task,
63
+ checkTask: this.config.controls.checkTask,
54
64
  },
55
65
  });
56
66
  }
@@ -58,14 +68,13 @@ export default class DistributionService extends Service {
58
68
  @dropTask
59
69
  *fetchNavigation(caseId) {
60
70
  const response = yield this.apollo.watchQuery({
61
- query: inquiryNavigationQuery,
71
+ query: navigationQuery,
62
72
  variables: {
63
73
  caseId,
64
74
  task: this.config.inquiry.task,
65
75
  currentGroup: String(this.calumaOptions.currentGroupId),
66
76
  statusQuestion: this.config.inquiry.answer.statusQuestion,
67
77
  deadlineQuestion: this.config.inquiry.deadlineQuestion,
68
- includeNavigationData: true,
69
78
  },
70
79
  });
71
80
 
@@ -93,20 +102,38 @@ export default class DistributionService extends Service {
93
102
  }
94
103
 
95
104
  @dropTask
96
- *createInquiry(groups) {
105
+ *createInquiry(groups, context = {}) {
97
106
  try {
98
107
  // get create inquiry work item to complete
99
108
  const createId = decodeId(this.controls.value?.create.edges[0].node.id);
100
109
 
110
+ // refetch dialog queries of the groups that will have a new inquiry
111
+ const refetchQueries = groups.map((group) => ({
112
+ query: inquiryDialogQuery,
113
+ variables: {
114
+ from: String(this.calumaOptions.currentGroupId),
115
+ to: String(group),
116
+ caseId: this.caseId,
117
+ task: this.config.inquiry.task,
118
+ infoQuestion: this.config.inquiry.infoQuestion,
119
+ deadlineQuestion: this.config.inquiry.deadlineQuestion,
120
+ statusQuestion: this.config.inquiry.answer.statusQuestion,
121
+ answerInfoQuestions: this.config.inquiry.answer.infoQuestions,
122
+ buttonTasks: Object.keys(this.config.inquiry.answer.buttons),
123
+ },
124
+ }));
125
+
101
126
  // create new inquiries
102
127
  yield this.apollo.mutate({
103
128
  mutation: createInquiryMutation,
104
129
  variables: {
105
130
  id: createId,
106
131
  context: JSON.stringify({
132
+ ...context,
107
133
  addressed_groups: groups.map(String),
108
134
  }),
109
135
  },
136
+ refetchQueries,
110
137
  });
111
138
 
112
139
  // refetch navigation and controls data
@@ -117,4 +144,49 @@ export default class DistributionService extends Service {
117
144
  );
118
145
  }
119
146
  }
147
+
148
+ @cached
149
+ get inquiries() {
150
+ const findGroupName = (identifiers) => {
151
+ const group = this.scheduler.groupCache.find((group) =>
152
+ identifiers
153
+ .map(String)
154
+ .includes(String(group[this.calumaOptions.groupIdentifierProperty]))
155
+ );
156
+
157
+ return group?.[this.calumaOptions.groupNameProperty] ?? "";
158
+ };
159
+
160
+ return Object.entries(this.navigation.value ?? {}).reduce(
161
+ (inquiries, [key, objects]) => {
162
+ return {
163
+ ...inquiries,
164
+ // Don't return any data until the internal scheduler has cached
165
+ // groups since we don't want to render empty navigation items
166
+ [key]: this.scheduler.groupCache.length
167
+ ? uniqueByGroups(
168
+ objects.edges.map((edge) => ({
169
+ ...edge.node,
170
+ // Populate the work item with the names of the involved
171
+ // groups so the <DistributionNavigation::Section /> component
172
+ // can sort by them
173
+ addressedGroupName: findGroupName(edge.node.addressedGroups),
174
+ controllingGroupName: findGroupName(
175
+ edge.node.controllingGroups
176
+ ),
177
+ }))
178
+ ).sort((a, b) => {
179
+ const sortProperty =
180
+ key === "addressed"
181
+ ? "controllingGroupName"
182
+ : "addressedGroupName";
183
+
184
+ return a[sortProperty].localeCompare(b[sortProperty]);
185
+ })
186
+ : [],
187
+ };
188
+ },
189
+ {}
190
+ );
191
+ }
120
192
  }
@@ -8,11 +8,13 @@
8
8
  </div>
9
9
  {{else}}
10
10
  <div uk-grid class={{if this.config.ui.stack "uk-grid-small"}}>
11
- <div class={{if this.config.ui.stack "uk-width-1-1" "uk-width-1-3"}}>
12
- <CdNavigation @caseId={{@model}} />
13
- </div>
14
- {{#if this.config.ui.stack}}<div class="uk-width-1-1"><hr /></div>{{/if}}
15
- <div class={{if this.config.ui.stack "uk-width-1-1" "uk-width-2-3"}}>
11
+ {{#if this.distribution.hasInquiries}}
12
+ <div class={{if this.config.ui.stack "uk-width-1-1" "uk-width-1-3"}}>
13
+ <CdNavigation />
14
+ </div>
15
+ {{#if this.config.ui.stack}}<div class="uk-width-1-1"><hr /></div>{{/if}}
16
+ {{/if}}
17
+ <div class="uk-width-expand">
16
18
  {{outlet}}
17
19
  </div>
18
20
  </div>
@@ -3,9 +3,5 @@
3
3
  <p class="uk-margin-medium uk-margin-remove-horizontal">
4
4
  {{t "caluma.distribution.empty"}}
5
5
  </p>
6
- {{#if (can "create inquiry of distribution")}}
7
- <LinkTo @route="new" class="uk-button uk-button-primary">
8
- {{t "caluma.distribution.start"}}
9
- </LinkTo>
10
- {{/if}}
6
+ <CdNavigation::Controls @useButtons={{true}} />
11
7
  </div>
@@ -1,5 +1 @@
1
- <CdInquiryDialog
2
- @from={{@model.from}}
3
- @to={{@model.to}}
4
- @caseId={{@model.case}}
5
- />
1
+ <CdInquiryDialog @from={{@model.from}} @to={{@model.to}} />
@@ -1,7 +1,6 @@
1
1
  <CdInquiryNewForm
2
2
  @selectedTypes={{this.selectedTypes}}
3
3
  @search={{this.search}}
4
- @caseId={{@model}}
5
4
  @onChangeSelectedTypes={{fn (mut this.selectedTypes)}}
6
5
  @onChangeSearch={{fn (mut this.search)}}
7
6
  />
@@ -19,7 +19,9 @@ function decorator(
19
19
  get() {
20
20
  const inquiry = get(this, inquiryProperty);
21
21
  const value = inquiry.document?.deadline.edges[0]?.node.value;
22
- const isDone = ["COMPLETED", "SKIPPED"].includes(inquiry.status);
22
+ const isDone = ["COMPLETED", "SKIPPED", "CANCELED"].includes(
23
+ inquiry.status
24
+ );
23
25
 
24
26
  const diff = DateTime.fromISO(value).diffNow("days").days;
25
27
 
@@ -0,0 +1 @@
1
+ export { default } from "@projectcaluma/ember-distribution/components/cd-inquiry-new-form/bulk-edit";
@@ -0,0 +1 @@
1
+ export { default } from "@projectcaluma/ember-distribution/components/cd-inquiry-new-form/select";
@@ -2,3 +2,7 @@
2
2
  border-left: 5px solid $global-border;
3
3
  padding-left: $global-gutter - 5px;
4
4
  }
5
+
6
+ .inquiry-answer-form__side-bar {
7
+ max-width: 25%;
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-distribution",
3
- "version": "11.0.0-beta.29",
3
+ "version": "11.0.0-beta.31",
4
4
  "description": "Ember engine for the Caluma distribution module.",
5
5
  "keywords": [
6
6
  "ember-addon",
@@ -10,7 +10,7 @@
10
10
  "homepage": "https://docs.caluma.io/ember-caluma",
11
11
  "repository": "github:projectcaluma/ember-caluma",
12
12
  "scripts": {
13
- "test": "npm-run-all test:*",
13
+ "test": "npm-run-all --print-name \"lint\" \"test:*\"",
14
14
  "test:ember": "ember test",
15
15
  "test:ember-compatibility": "ember try:each"
16
16
  },
@@ -20,40 +20,40 @@
20
20
  "dependencies": {
21
21
  "@ember/legacy-built-in-components": "^0.4.1",
22
22
  "@ember/string": "^3.0.0",
23
- "@embroider/macros": "^1.8.3",
23
+ "@embroider/macros": "^1.9.0",
24
24
  "@glimmer/component": "^1.1.2",
25
25
  "@glimmer/tracking": "^1.1.2",
26
- "@projectcaluma/ember-core": "^11.0.0-beta.29",
27
- "@projectcaluma/ember-form": "^11.0.0-beta.29",
28
- "@projectcaluma/ember-workflow": "^11.0.0-beta.29",
26
+ "@projectcaluma/ember-core": "^11.0.0-beta.31",
27
+ "@projectcaluma/ember-form": "^11.0.0-beta.31",
28
+ "@projectcaluma/ember-workflow": "^11.0.0-beta.31",
29
29
  "ember-apollo-client": "~4.0.2",
30
- "ember-auto-import": "^2.4.2",
30
+ "ember-auto-import": "^2.4.3",
31
31
  "ember-can": "^4.2.0",
32
32
  "ember-cli-babel": "^7.26.11",
33
33
  "ember-cli-htmlbars": "^6.1.1",
34
34
  "ember-concurrency": "^2.3.7",
35
35
  "ember-engines-router-service": "^0.3.0",
36
36
  "ember-fetch": "^8.1.2",
37
+ "ember-flatpickr": "^3.2.3",
37
38
  "ember-intl": "^5.7.2",
38
- "ember-pikaday": "^4.0.0",
39
39
  "ember-resources": "^5.4.0",
40
- "ember-svg-jar": "^2.3.4",
40
+ "ember-svg-jar": "^2.4.1",
41
41
  "ember-test-selectors": "^6.0.0",
42
42
  "ember-uikit": "^6.1.0",
43
43
  "graphql": "^15.8.0",
44
44
  "graphql-tag": "^2.12.6",
45
45
  "lodash.merge": "^4.6.2",
46
- "luxon": "^3.0.3",
46
+ "luxon": "^3.0.4",
47
47
  "tracked-toolbox": "^1.2.3"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@ember/optional-features": "2.0.0",
51
51
  "@ember/test-helpers": "2.7.0",
52
52
  "@embroider/test-setup": "1.8.3",
53
- "@faker-js/faker": "7.5.0",
54
- "@projectcaluma/ember-testing": "11.0.0-beta.29",
53
+ "@faker-js/faker": "7.6.0",
54
+ "@projectcaluma/ember-testing": "11.0.0-beta.31",
55
55
  "broccoli-asset-rev": "3.0.0",
56
- "ember-cli": "4.7.0",
56
+ "ember-cli": "4.8.0",
57
57
  "ember-cli-code-coverage": "1.0.3",
58
58
  "ember-cli-dependency-checker": "3.3.1",
59
59
  "ember-cli-inject-live-reload": "2.1.0",
@@ -64,21 +64,21 @@
64
64
  "ember-disable-prototype-extensions": "1.1.3",
65
65
  "ember-engines": "0.8.23",
66
66
  "ember-load-initializers": "2.1.2",
67
- "ember-qunit": "5.1.5",
67
+ "ember-qunit": "6.0.0",
68
68
  "ember-resolver": "8.0.3",
69
- "ember-source": "4.7.0",
69
+ "ember-source": "4.8.0",
70
70
  "ember-source-channel-url": "3.0.0",
71
71
  "ember-try": "2.0.0",
72
72
  "loader.js": "4.7.0",
73
73
  "miragejs": "0.1.45",
74
74
  "npm-run-all": "4.1.5",
75
- "qunit": "2.19.1",
75
+ "qunit": "2.19.2",
76
76
  "qunit-dom": "2.0.0",
77
77
  "sass": "1.55.0",
78
78
  "webpack": "5.74.0"
79
79
  },
80
80
  "engines": {
81
- "node": "14.* || >= 16"
81
+ "node": "14.* || 16.* || >= 18"
82
82
  },
83
83
  "ember": {
84
84
  "edition": "octane"
@@ -1,16 +1,20 @@
1
1
  caluma:
2
2
  distribution:
3
3
  empty: "Es wurden noch keine Anfragen erstellt."
4
- start: "Starten"
4
+ start: "Zirkulation starten"
5
5
  send: "Offene Anfragen versenden"
6
6
  complete: "Zirkulation abschliessen"
7
7
  skip: "Zirkulation überspringen"
8
8
  reopen: "Zirkulation wiedereröffnen"
9
- send-confirm: "Wollen Sie wirklich alle offenen Anfragen versenden?"
9
+ check-inquiries: "Stellungnahmen als geprüft markieren"
10
+ send-confirm:
11
+ "Wollen Sie wirklich <b>{count, plural, =1 {eine offene Anfrage} other
12
+ {{count} offene Anfragen}}</b> versenden?"
10
13
  complete-confirm:
11
- "Es gibt noch <b>{count} offene {count, plural, =1 {Anfrage} other {Anfragen}}</b>
12
- in der aktuellen Zirkulation. Wenn Sie die Zirkulation abschliessen, werden
13
- alle verbleibenden offenen Anfragen abgebrochen. Möchten Sie fortfahren?"
14
+ "Es gibt noch <b>{count, plural, =1 {eine offene Anfrage} other {{count}
15
+ offene Anfragen}}</b> in der aktuellen Zirkulation. Wenn Sie die
16
+ Zirkulation abschliessen, werden alle verbleibenden offenen Anfragen
17
+ abgebrochen. Möchten Sie fortfahren?"
14
18
  complete-confirm-empty: "Möchten Sie die Zirkulation wirklich abschliessen?"
15
19
  skip-confirm: "Wollen Sie die Zirkulation wirklich überspringen?"
16
20
  reopen-confirm: "Wollen Sie die Zirkulation wirklich wiedereröffnen?"
@@ -18,21 +22,33 @@ caluma:
18
22
  complete-error: "Fehler beim Abschliessen der Zirkulation"
19
23
  skip-error: "Fehler beim Überspringen der Zirkulation"
20
24
  reopen-error: "Fehler beim Wiedereröffnen der Zirkulation"
25
+ check-inquiries-error: "Fehler beim Markieren der Stellungnahmen als geprüft"
26
+
27
+ attention-to: "{abbr, select, true {z. H.} other {zu Handen}} {subject}"
21
28
 
22
29
  more: "mehr"
23
30
  less: "weniger"
24
31
 
25
- last-modified: "Zuletzt bearbeitet von {user} am {date} um {time}"
26
32
  details: "Details"
27
33
  not-allowed-hint:
28
34
  "Sie können jedoch das Formular bearbeiten und die Eingabedaten werden
29
35
  automatisch gespeichert."
30
36
 
37
+ inquiry:
38
+ created-at: "Erstellt am"
39
+ closed-at: "Beantwortet am"
40
+ deadline: "Frist"
41
+ assigned-user: "Verantwortliche Person"
42
+
31
43
  edit:
32
44
  link: "Bearbeiten"
33
45
  send: "Aktuelle Anfrage versenden"
34
46
  send-error: "Fehler beim Senden der Anfrage"
35
47
  send-not-allowed: "Sie sind nicht berechtigt diese Anfrage zu versenden."
48
+ edit-sent:
49
+ "<b>Achtung:</b> Sie bearbeiten eine Anfrage, die bereits versendet
50
+ wurde. Falls Sie die Details grundlegend ändern, kann es sein, dass die
51
+ adressierte Stelle dies nicht bemerkt, da sie nicht informiert wird."
36
52
 
37
53
  answer:
38
54
  link: "Beantworten"
@@ -53,6 +69,10 @@ caluma:
53
69
  revise:
54
70
  label: "Überarbeiten"
55
71
 
72
+ details:
73
+ show: "Details anzeigen"
74
+ hide: "Details verstecken"
75
+
56
76
  new:
57
77
  title: "Neue Anfrage"
58
78
  search: "Suchen..."
@@ -62,6 +82,8 @@ caluma:
62
82
  selected: "{count, plural, other {ausgewählt}}"
63
83
  reset: "Zurücksetzen"
64
84
  create-draft: "Entwurf erstellen"
85
+ continue: "Weiter"
86
+ back: "Zurück"
65
87
  error: "Fehler beim Erstellen der {count, plural, =1 {Anfragen} other {Anfrage}}"
66
88
 
67
89
  reminder:
@@ -73,9 +95,9 @@ caluma:
73
95
  error: "Fehler beim Versenden der Erinnerung"
74
96
 
75
97
  types:
76
- controlling: "Angefordert"
77
- addressed: "Zu beantworten"
78
- more: "Weitere"
98
+ controlling: "Angeforderte Stellungnahmen"
99
+ addressed: "Eigene Stellungnahmen"
100
+ more: "Weitere Stellungnahmen"
79
101
 
80
102
  status:
81
103
  draft: "Entwurf"