@projectcaluma/ember-distribution 11.0.0-beta.33 → 11.0.0-beta.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon/abilities/inquiry.js +79 -49
- package/addon/components/cd-document-header.hbs +2 -2
- package/addon/components/cd-inquiry-dialog/inquiry-part.hbs +8 -7
- package/addon/components/cd-inquiry-dialog/inquiry-part.js +20 -0
- package/addon/components/cd-inquiry-dialog.js +7 -1
- package/addon/components/cd-navigation/status-indicator.js +4 -1
- package/addon/config.js +6 -1
- package/addon/gql/fragments/inquiry-answer.graphql +2 -0
- package/addon/gql/queries/navigation.graphql +4 -1
- package/addon/services/distribution.js +1 -18
- package/addon/utils/inquiry-answer-status.js +3 -1
- package/addon/utils/inquiry-status.js +39 -2
- package/package.json +8 -8
- package/translations/de.yaml +1 -0
- package/translations/en.yaml +1 -0
- package/translations/fr.yaml +5 -4
@@ -4,101 +4,131 @@ import { DateTime } from "luxon";
|
|
4
4
|
|
5
5
|
import config from "@projectcaluma/ember-distribution/config";
|
6
6
|
|
7
|
+
/**
|
8
|
+
* This class contains all permission definitions for inquiries. To improve
|
9
|
+
* performance there are a few helpers and rules for optimal permission
|
10
|
+
* computation. The permissions need to be ordered by how expensive their
|
11
|
+
* computation is: the least expensive first and the most expensive last and so
|
12
|
+
* on:
|
13
|
+
*
|
14
|
+
* 1. Static config properties (e.g. `enableReminders`)
|
15
|
+
* 2. Base permission which checks for the correct task and the readonly config
|
16
|
+
* 3. Simple work item property checks (e.g. `isReady` or `isSuspended`)
|
17
|
+
* 4. Addressed / controlling group affiliation (e.g. `isAddressed` or `isControlling`)
|
18
|
+
* 5. All other computations (e.g. whether the deadline is overdue)
|
19
|
+
* 6. Custom permissions served by the host app (using `hasCustomPermission`)
|
20
|
+
*/
|
7
21
|
export default class InquiryAbility extends Ability {
|
8
22
|
@service calumaOptions;
|
9
23
|
|
10
24
|
@config config;
|
11
25
|
|
12
|
-
|
26
|
+
hasCustomPermission(permissionName, ...args) {
|
27
|
+
return this.config.permissions[permissionName]?.(...args) ?? true;
|
28
|
+
}
|
29
|
+
|
30
|
+
get hasBasePermission() {
|
13
31
|
return (
|
14
32
|
!this.config.ui.readonly &&
|
15
|
-
this.model?.task.slug === this.config.inquiry.task
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
33
|
+
this.model?.task.slug === this.config.inquiry.task
|
34
|
+
);
|
35
|
+
}
|
36
|
+
|
37
|
+
get isReady() {
|
38
|
+
return this.model.status === "READY";
|
39
|
+
}
|
40
|
+
|
41
|
+
get isSuspended() {
|
42
|
+
return this.model.status === "SUSPENDED";
|
43
|
+
}
|
44
|
+
|
45
|
+
get isAddressed() {
|
46
|
+
return this.model.addressedGroups
|
47
|
+
.map(String)
|
48
|
+
.includes(String(this.calumaOptions.currentGroupId));
|
49
|
+
}
|
50
|
+
|
51
|
+
get isControlling() {
|
52
|
+
return this.model.controllingGroups
|
53
|
+
.map(String)
|
54
|
+
.includes(String(this.calumaOptions.currentGroupId));
|
55
|
+
}
|
56
|
+
|
57
|
+
get canEdit() {
|
58
|
+
return (
|
59
|
+
this.hasBasePermission &&
|
60
|
+
// Since editing in the status ready has the same character as sending an
|
61
|
+
// inquiry, we need to make sure that permission would be given
|
62
|
+
(this.isSuspended ||
|
63
|
+
(this.isReady &&
|
64
|
+
this.hasCustomPermission("sendInquiry", this.model))) &&
|
65
|
+
this.isControlling
|
20
66
|
);
|
21
67
|
}
|
22
68
|
|
23
69
|
get canSend() {
|
24
70
|
return (
|
25
|
-
|
26
|
-
this.
|
27
|
-
this.
|
28
|
-
|
29
|
-
this.model?.controllingGroups
|
30
|
-
.map(String)
|
31
|
-
.includes(String(this.calumaOptions.currentGroupId))
|
71
|
+
this.hasBasePermission &&
|
72
|
+
this.isSuspended &&
|
73
|
+
this.isControlling &&
|
74
|
+
this.hasCustomPermission("sendInquiry", this.model)
|
32
75
|
);
|
33
76
|
}
|
34
77
|
|
35
78
|
get canWithdraw() {
|
36
79
|
return (
|
37
|
-
|
38
|
-
this.
|
39
|
-
this.
|
40
|
-
|
41
|
-
this.model?.controllingGroups
|
42
|
-
.map(String)
|
43
|
-
.includes(String(this.calumaOptions.currentGroupId))
|
80
|
+
this.hasBasePermission &&
|
81
|
+
this.isSuspended &&
|
82
|
+
this.isControlling &&
|
83
|
+
this.hasCustomPermission("withdrawInquiry", this.model)
|
44
84
|
);
|
45
85
|
}
|
46
86
|
|
47
87
|
get canAnswer() {
|
48
|
-
return
|
49
|
-
!this.config.ui.readonly &&
|
50
|
-
this.model?.task.slug === this.config.inquiry.task &&
|
51
|
-
this.model?.status === "READY" &&
|
52
|
-
this.model?.addressedGroups
|
53
|
-
.map(String)
|
54
|
-
.includes(String(this.calumaOptions.currentGroupId))
|
55
|
-
);
|
88
|
+
return this.hasBasePermission && this.isReady && this.isAddressed;
|
56
89
|
}
|
57
90
|
|
58
91
|
get canEditAnswerForm() {
|
59
92
|
return (
|
60
|
-
!this.config.ui.readonly &&
|
61
93
|
this.canAnswer &&
|
62
|
-
this.model
|
63
|
-
(edge) =>
|
94
|
+
this.model.childCase.workItems.edges.some(
|
95
|
+
(edge) =>
|
96
|
+
edge.node.status === "READY" &&
|
97
|
+
edge.node.task.__typename === "CompleteWorkflowFormTask"
|
64
98
|
)
|
65
99
|
);
|
66
100
|
}
|
67
101
|
|
68
102
|
get canCompleteChildWorkItem() {
|
69
103
|
return (
|
70
|
-
this.
|
104
|
+
this.hasBasePermission &&
|
105
|
+
this.hasCustomPermission(
|
106
|
+
"completeInquiryChildWorkItem",
|
71
107
|
this.model,
|
72
108
|
this.task
|
73
|
-
)
|
109
|
+
)
|
74
110
|
);
|
75
111
|
}
|
76
112
|
|
77
113
|
get canReopen() {
|
78
114
|
return (
|
115
|
+
this.hasBasePermission &&
|
79
116
|
this.model.isRedoable &&
|
80
|
-
this.
|
81
|
-
|
82
|
-
.includes(String(this.calumaOptions.currentGroupId)) &&
|
83
|
-
(this.config.permissions.reopenInquiry?.(this.model) ?? true)
|
117
|
+
this.isControlling &&
|
118
|
+
this.hasCustomPermission("reopenInquiry", this.model)
|
84
119
|
);
|
85
120
|
}
|
86
121
|
|
87
122
|
get canSendReminder() {
|
88
|
-
const deadline = DateTime.fromISO(
|
89
|
-
this.model.document?.deadline.edges[0]?.node.value
|
90
|
-
);
|
91
|
-
|
92
123
|
return (
|
93
|
-
!this.config.ui.readonly &&
|
94
124
|
this.config.enableReminders &&
|
95
|
-
this.
|
96
|
-
this.
|
97
|
-
this.
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
125
|
+
this.hasBasePermission &&
|
126
|
+
this.isReady &&
|
127
|
+
this.isControlling &&
|
128
|
+
DateTime.fromISO(
|
129
|
+
this.model.document?.deadline.edges[0]?.node.value
|
130
|
+
).diffNow("days").days <= 0 &&
|
131
|
+
this.hasCustomPermission("sendReminder", this.model)
|
102
132
|
);
|
103
133
|
}
|
104
134
|
}
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<div class="uk-text-large uk-flex uk-flex-middle" data-test-document-header>
|
2
|
-
<div class="uk-width-expand">
|
2
|
+
<div class="uk-width-expand uk-flex-inline uk-flex-middle">
|
3
3
|
{{@name}}
|
4
4
|
{{#if @group}}
|
5
5
|
({{group-name @group}})
|
6
6
|
{{/if}}
|
7
7
|
{{#if @status}}
|
8
|
-
<UkLabel @label={{@status}} class="uk-margin-left" />
|
8
|
+
<UkLabel @label={{@status}} class="uk-margin-left uk-text-default" />
|
9
9
|
{{/if}}
|
10
10
|
</div>
|
11
11
|
{{yield}}
|
@@ -2,14 +2,15 @@
|
|
2
2
|
<div class="uk-flex uk-flex-middle uk-text-large" data-test-title>
|
3
3
|
{{#if (eq @type "request")}}
|
4
4
|
<UkIcon @icon="forward" class="uk-margin-small-right" />
|
5
|
-
<div
|
5
|
+
<div
|
6
|
+
class="uk-width-expand uk-margin-small-right uk-flex-inline uk-flex-middle"
|
7
|
+
>
|
6
8
|
{{group-name @inquiry.controllingGroups}}
|
7
|
-
{{#if
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
<UkLabel @label={{this.answerStatus}} class="uk-margin-left" />
|
9
|
+
{{#if this.status}}
|
10
|
+
<UkLabel
|
11
|
+
@label={{this.status}}
|
12
|
+
class="uk-margin-left uk-text-default"
|
13
|
+
/>
|
13
14
|
{{/if}}
|
14
15
|
</div>
|
15
16
|
{{else if (eq @type "answer")}}
|
@@ -18,6 +18,7 @@ export default class CdInquiryDialogInquiryPartComponent extends Component {
|
|
18
18
|
@service router;
|
19
19
|
@service intl;
|
20
20
|
@service calumaOptions;
|
21
|
+
@service abilities;
|
21
22
|
|
22
23
|
@queryManager apollo;
|
23
24
|
|
@@ -25,6 +26,25 @@ export default class CdInquiryDialogInquiryPartComponent extends Component {
|
|
25
26
|
|
26
27
|
@inquiryAnswerStatus answerStatus;
|
27
28
|
|
29
|
+
get status() {
|
30
|
+
if (!this.args.type === "request" || this.args.disabled) {
|
31
|
+
return null;
|
32
|
+
}
|
33
|
+
|
34
|
+
const inquiry = this.args.inquiry;
|
35
|
+
|
36
|
+
if (
|
37
|
+
inquiry.status === "SUSPENDED" &&
|
38
|
+
this.abilities.can("edit inquiry", inquiry)
|
39
|
+
) {
|
40
|
+
return this.intl.t("caluma.distribution.status.draft");
|
41
|
+
} else if (this.abilities.can("answer inquiry", inquiry)) {
|
42
|
+
return this.answerStatus;
|
43
|
+
}
|
44
|
+
|
45
|
+
return null;
|
46
|
+
}
|
47
|
+
|
28
48
|
get date() {
|
29
49
|
const key = this.args.type === "request" ? "createdAt" : "closedAt";
|
30
50
|
|
@@ -24,7 +24,12 @@ export default class CdInquiryDialogComponent extends Component {
|
|
24
24
|
}
|
25
25
|
|
26
26
|
get inquiries() {
|
27
|
-
return this._inquiries.value?.allWorkItems.edges
|
27
|
+
return this._inquiries.value?.allWorkItems.edges
|
28
|
+
.map((edge) => edge.node)
|
29
|
+
.filter(
|
30
|
+
// suspended inquiries should only be visible to its creator
|
31
|
+
(node) => this.currentGroupIsCreator || node.status !== "SUSPENDED"
|
32
|
+
);
|
28
33
|
}
|
29
34
|
|
30
35
|
_inquiries = trackedTask(this, this.fetchDialog, () => [
|
@@ -38,6 +43,7 @@ export default class CdInquiryDialogComponent extends Component {
|
|
38
43
|
*fetchDialog(from, to, caseId, config) {
|
39
44
|
const response = yield this.apollo.watchQuery({
|
40
45
|
query: inquiryDialogQuery,
|
46
|
+
fetchPolicy: "cache-and-network",
|
41
47
|
variables: {
|
42
48
|
from,
|
43
49
|
to,
|
@@ -14,6 +14,9 @@ export default class CdNavigationStatusIndicatorComponent extends Component {
|
|
14
14
|
@inquiryDeadline deadline;
|
15
15
|
|
16
16
|
get showDeadlineIndicator() {
|
17
|
-
return
|
17
|
+
return (
|
18
|
+
["addressed", "controlling"].includes(this.args.type) &&
|
19
|
+
(this.deadline.isOverdue || this.deadline.isWarning)
|
20
|
+
);
|
18
21
|
}
|
19
22
|
}
|
package/addon/config.js
CHANGED
@@ -6,6 +6,7 @@ export const INQUIRY_STATUS = {
|
|
6
6
|
DRAFT: "draft",
|
7
7
|
SKIPPED: "skipped",
|
8
8
|
SENT: "sent",
|
9
|
+
IN_PROGRESS: "in-progress",
|
9
10
|
POSITIVE: "positive",
|
10
11
|
NEGATIVE: "negative",
|
11
12
|
NEEDS_INTERACTION: "needs-interaction",
|
@@ -45,7 +46,11 @@ export default function config(target, property) {
|
|
45
46
|
"confirm-inquiry-answer": {
|
46
47
|
color: "primary",
|
47
48
|
label: "caluma.distribution.answer.buttons.confirm.label",
|
48
|
-
status:
|
49
|
+
status: {
|
50
|
+
label: "caluma.distribution.answer.buttons.confirm.status",
|
51
|
+
color: { addressed: "muted", controlling: "emphasis" },
|
52
|
+
icon: "user",
|
53
|
+
},
|
49
54
|
willCompleteInquiry: true,
|
50
55
|
},
|
51
56
|
"revise-inquiry-answer": {
|
@@ -28,6 +28,7 @@ fragment InquiryAnswerButtons on Case {
|
|
28
28
|
id
|
29
29
|
status
|
30
30
|
closedAt
|
31
|
+
closedByUser
|
31
32
|
task {
|
32
33
|
id
|
33
34
|
slug
|
@@ -39,6 +40,7 @@ fragment InquiryAnswerButtons on Case {
|
|
39
40
|
|
40
41
|
fragment InquiryAnswer on Document {
|
41
42
|
...InquiryAnswerStatus
|
43
|
+
modifiedContentAt
|
42
44
|
info: answers(filter: [{ questions: $answerInfoQuestions }]) {
|
43
45
|
edges {
|
44
46
|
node {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# import InquiryAnswerStatus from '../fragments/inquiry-answer.graphql'
|
1
|
+
# import InquiryAnswerStatus, InquiryAnswerButtons from '../fragments/inquiry-answer.graphql'
|
2
2
|
# import InquiryRequestDeadline from '../fragments/inquiry-request.graphql'
|
3
3
|
|
4
4
|
fragment NavigationInquiry on WorkItem {
|
@@ -14,8 +14,10 @@ fragment NavigationInquiry on WorkItem {
|
|
14
14
|
id
|
15
15
|
document {
|
16
16
|
id
|
17
|
+
modifiedContentAt
|
17
18
|
...InquiryAnswerStatus
|
18
19
|
}
|
20
|
+
...InquiryAnswerButtons
|
19
21
|
}
|
20
22
|
}
|
21
23
|
|
@@ -25,6 +27,7 @@ query Navigation(
|
|
25
27
|
$deadlineQuestion: ID
|
26
28
|
$currentGroup: String!
|
27
29
|
$caseId: ID!
|
30
|
+
$buttonTasks: [String]!
|
28
31
|
) {
|
29
32
|
controlling: allWorkItems(
|
30
33
|
filter: [
|
@@ -9,7 +9,6 @@ import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
|
|
9
9
|
import config from "@projectcaluma/ember-distribution/config";
|
10
10
|
import createInquiryMutation from "@projectcaluma/ember-distribution/gql/mutations/create-inquiry.graphql";
|
11
11
|
import controlsQuery from "@projectcaluma/ember-distribution/gql/queries/controls.graphql";
|
12
|
-
import inquiryDialogQuery from "@projectcaluma/ember-distribution/gql/queries/inquiry-dialog.graphql";
|
13
12
|
import navigationQuery from "@projectcaluma/ember-distribution/gql/queries/navigation.graphql";
|
14
13
|
import uniqueByGroups from "@projectcaluma/ember-distribution/utils/unique-by-groups";
|
15
14
|
|
@@ -75,6 +74,7 @@ export default class DistributionService extends Service {
|
|
75
74
|
currentGroup: String(this.calumaOptions.currentGroupId),
|
76
75
|
statusQuestion: this.config.inquiry.answer.statusQuestion,
|
77
76
|
deadlineQuestion: this.config.inquiry.deadlineQuestion,
|
77
|
+
buttonTasks: Object.keys(this.config.inquiry.answer.buttons),
|
78
78
|
},
|
79
79
|
});
|
80
80
|
|
@@ -107,22 +107,6 @@ export default class DistributionService extends Service {
|
|
107
107
|
// get create inquiry work item to complete
|
108
108
|
const createId = decodeId(this.controls.value?.create.edges[0].node.id);
|
109
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
|
-
|
126
110
|
// create new inquiries
|
127
111
|
yield this.apollo.mutate({
|
128
112
|
mutation: createInquiryMutation,
|
@@ -133,7 +117,6 @@ export default class DistributionService extends Service {
|
|
133
117
|
addressed_groups: groups.map(String),
|
134
118
|
}),
|
135
119
|
},
|
136
|
-
refetchQueries,
|
137
120
|
});
|
138
121
|
|
139
122
|
// refetch navigation and controls data
|
@@ -26,7 +26,9 @@ function decorator(
|
|
26
26
|
this.config.inquiry.answer.buttons
|
27
27
|
).find(([task]) => readyWorkItems.includes(task))?.[1];
|
28
28
|
|
29
|
-
return buttonConfig?.status
|
29
|
+
return buttonConfig?.status
|
30
|
+
? this.intl.t(buttonConfig.status.label ?? buttonConfig.status)
|
31
|
+
: null;
|
30
32
|
},
|
31
33
|
};
|
32
34
|
}
|
@@ -8,6 +8,7 @@ export const ICON_MAP = {
|
|
8
8
|
[INQUIRY_STATUS.DRAFT]: "commenting",
|
9
9
|
[INQUIRY_STATUS.SKIPPED]: "lock",
|
10
10
|
[INQUIRY_STATUS.SENT]: "comment",
|
11
|
+
[INQUIRY_STATUS.IN_PROGRESS]: "file-edit",
|
11
12
|
[INQUIRY_STATUS.POSITIVE]: "check",
|
12
13
|
[INQUIRY_STATUS.NEGATIVE]: "close",
|
13
14
|
[INQUIRY_STATUS.NEEDS_INTERACTION]: "file-text",
|
@@ -17,6 +18,7 @@ export const COLOR_MAP = {
|
|
17
18
|
[INQUIRY_STATUS.DRAFT]: "muted",
|
18
19
|
[INQUIRY_STATUS.SKIPPED]: "muted",
|
19
20
|
[INQUIRY_STATUS.SENT]: "emphasis",
|
21
|
+
[INQUIRY_STATUS.IN_PROGRESS]: { addressed: "muted", controlling: "emphasis" },
|
20
22
|
[INQUIRY_STATUS.POSITIVE]: "success",
|
21
23
|
[INQUIRY_STATUS.NEGATIVE]: "danger",
|
22
24
|
[INQUIRY_STATUS.NEEDS_INTERACTION]: "warning",
|
@@ -41,16 +43,51 @@ function decorator(
|
|
41
43
|
return {
|
42
44
|
get() {
|
43
45
|
const inquiry = get(this, inquiryProperty);
|
44
|
-
const
|
46
|
+
const inquiryType = get(this, inquiryTypeProperty);
|
47
|
+
const isAddressed = inquiryType === "addressed";
|
48
|
+
const isControlling = inquiryType === "controlling";
|
49
|
+
|
45
50
|
const isDraft = isAddressed
|
46
51
|
? inquiry.status === "READY"
|
47
52
|
: inquiry.status === "SUSPENDED";
|
48
53
|
const isSent = !isAddressed && inquiry.status === "READY";
|
49
54
|
const isSkipped = inquiry.status === "SKIPPED";
|
55
|
+
const isInProgress =
|
56
|
+
(isAddressed || isControlling) &&
|
57
|
+
inquiry.status === "READY" &&
|
58
|
+
inquiry.childCase?.document?.modifiedContentAt;
|
59
|
+
|
60
|
+
const buttonConfig = this.config.inquiry.answer.buttons;
|
61
|
+
const inquiryAnswerStatus =
|
62
|
+
buttonConfig &&
|
63
|
+
(isAddressed || isControlling) &&
|
64
|
+
inquiry.status === "READY"
|
65
|
+
? inquiry?.childCase?.workItems.edges
|
66
|
+
.filter((edge) => edge.node.status === "READY")
|
67
|
+
.map((edge) => {
|
68
|
+
const config = buttonConfig[edge.node.task.slug]?.status;
|
69
|
+
if (!config?.icon) {
|
70
|
+
return null;
|
71
|
+
}
|
72
|
+
|
73
|
+
return {
|
74
|
+
...config,
|
75
|
+
label: this.intl.t(config.label),
|
76
|
+
color: config.color[inquiryType] ?? config.color,
|
77
|
+
};
|
78
|
+
})
|
79
|
+
.filter(Boolean)[0]
|
80
|
+
: null;
|
81
|
+
|
82
|
+
if (inquiryAnswerStatus) {
|
83
|
+
return inquiryAnswerStatus;
|
84
|
+
}
|
50
85
|
|
51
86
|
const answer = inquiry.childCase?.document.status.edges[0]?.node;
|
52
87
|
const slug = isSkipped
|
53
88
|
? INQUIRY_STATUS.SKIPPED
|
89
|
+
: isInProgress
|
90
|
+
? INQUIRY_STATUS.IN_PROGRESS
|
54
91
|
: isDraft
|
55
92
|
? INQUIRY_STATUS.DRAFT
|
56
93
|
: isSent
|
@@ -63,7 +100,7 @@ function decorator(
|
|
63
100
|
!isSkipped && !isDraft && !isSent
|
64
101
|
? answer?.selectedOption.label
|
65
102
|
: this.intl.t(`caluma.distribution.status.${slug}`),
|
66
|
-
color: COLOR_MAP[slug],
|
103
|
+
color: COLOR_MAP[slug][inquiryType] ?? COLOR_MAP[slug],
|
67
104
|
icon: ICON_MAP[slug],
|
68
105
|
};
|
69
106
|
},
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@projectcaluma/ember-distribution",
|
3
|
-
"version": "11.0.0-beta.
|
3
|
+
"version": "11.0.0-beta.35",
|
4
4
|
"description": "Ember engine for the Caluma distribution module.",
|
5
5
|
"keywords": [
|
6
6
|
"ember-addon",
|
@@ -23,9 +23,9 @@
|
|
23
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.
|
27
|
-
"@projectcaluma/ember-form": "^11.0.0-beta.
|
28
|
-
"@projectcaluma/ember-workflow": "^11.0.0-beta.
|
26
|
+
"@projectcaluma/ember-core": "^11.0.0-beta.35",
|
27
|
+
"@projectcaluma/ember-form": "^11.0.0-beta.35",
|
28
|
+
"@projectcaluma/ember-workflow": "^11.0.0-beta.35",
|
29
29
|
"ember-apollo-client": "~4.0.2",
|
30
30
|
"ember-auto-import": "^2.4.3",
|
31
31
|
"ember-can": "^4.2.0",
|
@@ -36,8 +36,8 @@
|
|
36
36
|
"ember-fetch": "^8.1.2",
|
37
37
|
"ember-flatpickr": "^3.2.3",
|
38
38
|
"ember-intl": "^5.7.2",
|
39
|
-
"ember-resources": "^5.
|
40
|
-
"ember-svg-jar": "^2.4.
|
39
|
+
"ember-resources": "^5.5.0",
|
40
|
+
"ember-svg-jar": "^2.4.2",
|
41
41
|
"ember-test-selectors": "^6.0.0",
|
42
42
|
"ember-uikit": "^6.1.0",
|
43
43
|
"graphql": "^15.8.0",
|
@@ -51,7 +51,7 @@
|
|
51
51
|
"@ember/test-helpers": "2.7.0",
|
52
52
|
"@embroider/test-setup": "1.8.3",
|
53
53
|
"@faker-js/faker": "7.6.0",
|
54
|
-
"@projectcaluma/ember-testing": "11.0.0-beta.
|
54
|
+
"@projectcaluma/ember-testing": "11.0.0-beta.35",
|
55
55
|
"broccoli-asset-rev": "3.0.0",
|
56
56
|
"ember-cli": "4.8.0",
|
57
57
|
"ember-cli-code-coverage": "1.0.3",
|
@@ -72,7 +72,7 @@
|
|
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.
|
75
|
+
"qunit": "2.19.3",
|
76
76
|
"qunit-dom": "2.0.0",
|
77
77
|
"sass": "1.55.0",
|
78
78
|
"webpack": "5.74.0"
|
package/translations/de.yaml
CHANGED
package/translations/en.yaml
CHANGED
package/translations/fr.yaml
CHANGED
@@ -15,7 +15,7 @@ caluma:
|
|
15
15
|
demandes ouvertes}} </b> sur la circulation actuelle. Si vous clôturez la
|
16
16
|
circulation, toutes les demandes ouvertes seront annulées. Voulez-vous
|
17
17
|
continuer ?"
|
18
|
-
complete-confirm-empty: "Vous voulez vraiment
|
18
|
+
complete-confirm-empty: "Vous voulez vraiment clore la circulation ?"
|
19
19
|
skip-confirm: "Vous voulez vraiment sauter la circulation ?"
|
20
20
|
reopen-confirm: "Vous voulez vraiment rouvrir la circulation ?"
|
21
21
|
send-error: "Erreur lors de l'envoi des demandes ouvertes"
|
@@ -77,11 +77,11 @@ caluma:
|
|
77
77
|
title: "Nouvelle demande"
|
78
78
|
search: "Chercher..."
|
79
79
|
suggestions: "Propositions"
|
80
|
-
empty: "Aucune
|
80
|
+
empty: "Aucune service n'a été trouvée"
|
81
81
|
groups: "{count} {count, plural, =1 {service} other {services}}"
|
82
82
|
selected: "{count, plural, =1 {sélectionné} other {sélectionnés}}"
|
83
83
|
reset: "Réinitialiser"
|
84
|
-
create-draft: "Créer
|
84
|
+
create-draft: "Créer le brouillon"
|
85
85
|
continue: "Continuer"
|
86
86
|
back: "Retour"
|
87
87
|
error: "Error lors de la création {count, plural, =1 {de la demande} other {des demandes}}"
|
@@ -90,7 +90,7 @@ caluma:
|
|
90
90
|
link: "Envoyer un rappel"
|
91
91
|
confirm: "Voulez-vous vraiment envoyer un rappel pour cette demande ?"
|
92
92
|
title: "Rappels envoyés"
|
93
|
-
no-reminders: Aucun rappel n'a encore été envoyé pour cette demande.
|
93
|
+
no-reminders: "Aucun rappel n'a encore été envoyé pour cette demande."
|
94
94
|
success: "Le rappel a été envoyé avec succès"
|
95
95
|
error: "Erreur lors de l'envoi du rappel"
|
96
96
|
|
@@ -103,6 +103,7 @@ caluma:
|
|
103
103
|
draft: "Brouillon"
|
104
104
|
skipped: "Terminé prématurément"
|
105
105
|
sent: "Envoyé"
|
106
|
+
in-progress: "En cours"
|
106
107
|
positive: "Positif"
|
107
108
|
negative: "Negatif"
|
108
109
|
needs-interaction: "Action nécessaire"
|