@projectcaluma/ember-distribution 11.0.0-beta.27 → 11.0.0-beta.28
Sign up to get free protection for your applications and to get access to all the features.
- package/addon/abilities/inquiry.js +19 -0
- package/addon/components/cd-inquiry-dialog/inquiry-part.hbs +33 -0
- package/addon/components/cd-inquiry-dialog/inquiry-part.js +40 -0
- package/addon/components/cd-navigation/controls.js +2 -0
- package/addon/config.js +2 -0
- package/addon/gql/fragments/inquiry.graphql +1 -0
- package/addon/gql/mutations/update-inquiry-meta.graphql +8 -0
- package/addon/utils/inquiry-deadline.js +1 -1
- package/package.json +9 -9
- package/translations/de.yaml +8 -0
- package/translations/en.yaml +8 -0
- package/translations/fr.yaml +8 -0
@@ -1,5 +1,6 @@
|
|
1
1
|
import { inject as service } from "@ember/service";
|
2
2
|
import { Ability } from "ember-can";
|
3
|
+
import { DateTime } from "luxon";
|
3
4
|
|
4
5
|
import config from "@projectcaluma/ember-distribution/config";
|
5
6
|
|
@@ -66,4 +67,22 @@ export default class InquiryAbility extends Ability {
|
|
66
67
|
(this.config.permissions.reopenInquiry?.(this.model) ?? true)
|
67
68
|
);
|
68
69
|
}
|
70
|
+
|
71
|
+
get canSendReminder() {
|
72
|
+
const deadline = DateTime.fromISO(
|
73
|
+
this.model.document?.deadline.edges[0]?.node.value
|
74
|
+
);
|
75
|
+
|
76
|
+
return (
|
77
|
+
!this.config.ui.readonly &&
|
78
|
+
this.config.enableReminders &&
|
79
|
+
this.model?.task.slug === this.config.inquiry.task &&
|
80
|
+
this.model?.status === "READY" &&
|
81
|
+
this.model?.controllingGroups
|
82
|
+
.map(String)
|
83
|
+
.includes(String(this.calumaOptions.currentGroupId)) &&
|
84
|
+
deadline.diffNow("days").days <= 0 &&
|
85
|
+
(this.config.permissions.sendReminder?.(this.model) ?? true)
|
86
|
+
);
|
87
|
+
}
|
69
88
|
}
|
@@ -85,6 +85,39 @@
|
|
85
85
|
</li>
|
86
86
|
{{/if}}
|
87
87
|
{{/unless}}
|
88
|
+
{{#if (can "send reminder inquiry" @inquiry)}}
|
89
|
+
<li>
|
90
|
+
<a
|
91
|
+
data-test-send-reminder
|
92
|
+
href=""
|
93
|
+
{{on "click" (perform this.sendReminder)}}
|
94
|
+
>
|
95
|
+
{{t "caluma.distribution.reminder.link"}}
|
96
|
+
</a>
|
97
|
+
<div
|
98
|
+
uk-dropdown="mode: hover; pos: bottom"
|
99
|
+
class="uk-padding-small uk-width-small"
|
100
|
+
>
|
101
|
+
<div class="uk-text-center uk-text-bold uk-margin-small-bottom">
|
102
|
+
{{t "caluma.distribution.reminder.title"}}
|
103
|
+
</div>
|
104
|
+
{{#if @inquiry.meta.reminders}}
|
105
|
+
<div class="uk-height-max-small uk-overflow-auto">
|
106
|
+
{{#each @inquiry.meta.reminders as |reminder|}}
|
107
|
+
<div class="uk-text-center uk-text-small uk-text-muted">
|
108
|
+
{{format-date reminder}}
|
109
|
+
{{format-time reminder hour="2-digit" minute="2-digit"}}
|
110
|
+
</div>
|
111
|
+
{{/each}}
|
112
|
+
</div>
|
113
|
+
{{else}}
|
114
|
+
<div class="uk-text-center">
|
115
|
+
{{t "caluma.distribution.reminder.no-reminders"}}
|
116
|
+
</div>
|
117
|
+
{{/if}}
|
118
|
+
</div>
|
119
|
+
</li>
|
120
|
+
{{/if}}
|
88
121
|
</ul>
|
89
122
|
|
90
123
|
{{#if this.requestInfo}}
|
@@ -4,10 +4,12 @@ import Component from "@glimmer/component";
|
|
4
4
|
import { queryManager } from "ember-apollo-client";
|
5
5
|
import { dropTask } from "ember-concurrency";
|
6
6
|
import { confirm } from "ember-uikit";
|
7
|
+
import { DateTime } from "luxon";
|
7
8
|
|
8
9
|
import { decodeId } from "@projectcaluma/ember-core/helpers/decode-id";
|
9
10
|
import config from "@projectcaluma/ember-distribution/config";
|
10
11
|
import reopenInquiryMutation from "@projectcaluma/ember-distribution/gql/mutations/reopen-inquiry.graphql";
|
12
|
+
import updateInquiryMetaMutation from "@projectcaluma/ember-distribution/gql/mutations/update-inquiry-meta.graphql";
|
11
13
|
import withdrawInquiryMutation from "@projectcaluma/ember-distribution/gql/mutations/withdraw-inquiry.graphql";
|
12
14
|
import inquiryAnswerStatus from "@projectcaluma/ember-distribution/utils/inquiry-answer-status";
|
13
15
|
|
@@ -15,6 +17,7 @@ export default class CdInquiryDialogInquiryPartComponent extends Component {
|
|
15
17
|
@service notification;
|
16
18
|
@service router;
|
17
19
|
@service intl;
|
20
|
+
@service calumaOptions;
|
18
21
|
|
19
22
|
@queryManager apollo;
|
20
23
|
|
@@ -103,4 +106,41 @@ export default class CdInquiryDialogInquiryPartComponent extends Component {
|
|
103
106
|
);
|
104
107
|
}
|
105
108
|
}
|
109
|
+
|
110
|
+
@dropTask
|
111
|
+
*sendReminder(e) {
|
112
|
+
e.preventDefault();
|
113
|
+
|
114
|
+
if (!(yield confirm(this.intl.t("caluma.distribution.reminder.confirm")))) {
|
115
|
+
return;
|
116
|
+
}
|
117
|
+
|
118
|
+
try {
|
119
|
+
yield this.calumaOptions.sendReminderDistributionInquiry(
|
120
|
+
decodeId(this.args.inquiry.id)
|
121
|
+
);
|
122
|
+
|
123
|
+
this.notification.success(
|
124
|
+
this.intl.t("caluma.distribution.reminder.success")
|
125
|
+
);
|
126
|
+
|
127
|
+
yield this.apollo.mutate({
|
128
|
+
mutation: updateInquiryMetaMutation,
|
129
|
+
variables: {
|
130
|
+
inquiry: decodeId(this.args.inquiry.id),
|
131
|
+
meta: JSON.stringify({
|
132
|
+
...this.args.inquiry.meta,
|
133
|
+
reminders: [
|
134
|
+
DateTime.now().toISO(),
|
135
|
+
...(this.args.inquiry.meta.reminders ?? []),
|
136
|
+
],
|
137
|
+
}),
|
138
|
+
},
|
139
|
+
});
|
140
|
+
} catch (error) {
|
141
|
+
this.notification.danger(
|
142
|
+
this.intl.t("caluma.distribution.reminder.error")
|
143
|
+
);
|
144
|
+
}
|
145
|
+
}
|
106
146
|
}
|
package/addon/config.js
CHANGED
@@ -21,7 +21,7 @@ function decorator(
|
|
21
21
|
const value = inquiry.document?.deadline.edges[0]?.node.value;
|
22
22
|
const isDone = ["COMPLETED", "SKIPPED"].includes(inquiry.status);
|
23
23
|
|
24
|
-
const
|
24
|
+
const diff = DateTime.fromISO(value).diffNow("days").days;
|
25
25
|
|
26
26
|
const isOverdue = !isDone && diff <= 0;
|
27
27
|
const isWarning = !isDone && diff <= this.config.warningPeriod;
|
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.28",
|
4
4
|
"description": "Ember engine for the Caluma distribution module.",
|
5
5
|
"keywords": [
|
6
6
|
"ember-addon",
|
@@ -22,20 +22,20 @@
|
|
22
22
|
"@embroider/macros": "^1.8.3",
|
23
23
|
"@glimmer/component": "^1.1.2",
|
24
24
|
"@glimmer/tracking": "^1.1.2",
|
25
|
-
"@projectcaluma/ember-core": "^11.0.0-beta.
|
26
|
-
"@projectcaluma/ember-form": "^11.0.0-beta.
|
27
|
-
"@projectcaluma/ember-workflow": "^11.0.0-beta.
|
25
|
+
"@projectcaluma/ember-core": "^11.0.0-beta.28",
|
26
|
+
"@projectcaluma/ember-form": "^11.0.0-beta.28",
|
27
|
+
"@projectcaluma/ember-workflow": "^11.0.0-beta.28",
|
28
28
|
"ember-apollo-client": "~4.0.2",
|
29
29
|
"ember-auto-import": "^2.4.2",
|
30
30
|
"ember-can": "^4.2.0",
|
31
31
|
"ember-cli-babel": "^7.26.11",
|
32
|
-
"ember-cli-htmlbars": "^6.1.
|
33
|
-
"ember-concurrency": "^2.3.
|
32
|
+
"ember-cli-htmlbars": "^6.1.1",
|
33
|
+
"ember-concurrency": "^2.3.7",
|
34
34
|
"ember-engines-router-service": "^0.3.0",
|
35
35
|
"ember-fetch": "^8.1.2",
|
36
36
|
"ember-intl": "^5.7.2",
|
37
37
|
"ember-pikaday": "^4.0.0",
|
38
|
-
"ember-resources": "^5.3.
|
38
|
+
"ember-resources": "^5.3.2",
|
39
39
|
"ember-svg-jar": "^2.3.4",
|
40
40
|
"ember-test-selectors": "^6.0.0",
|
41
41
|
"ember-uikit": "^6.0.0",
|
@@ -50,7 +50,7 @@
|
|
50
50
|
"@ember/test-helpers": "2.8.1",
|
51
51
|
"@embroider/test-setup": "1.8.3",
|
52
52
|
"@faker-js/faker": "7.5.0",
|
53
|
-
"@projectcaluma/ember-testing": "11.0.0-beta.
|
53
|
+
"@projectcaluma/ember-testing": "11.0.0-beta.28",
|
54
54
|
"broccoli-asset-rev": "3.0.0",
|
55
55
|
"ember-cli": "3.28.5",
|
56
56
|
"ember-cli-code-coverage": "1.0.3",
|
@@ -75,7 +75,7 @@
|
|
75
75
|
"npm-run-all": "4.1.5",
|
76
76
|
"qunit": "2.19.1",
|
77
77
|
"qunit-dom": "2.0.0",
|
78
|
-
"sass": "1.54.
|
78
|
+
"sass": "1.54.9",
|
79
79
|
"webpack": "5.74.0"
|
80
80
|
},
|
81
81
|
"engines": {
|
package/translations/de.yaml
CHANGED
@@ -61,6 +61,14 @@ caluma:
|
|
61
61
|
create-draft: "Entwurf erstellen"
|
62
62
|
error: "Fehler beim Erstellen der {count, plural, =1 {Anfragen} other {Anfrage}}"
|
63
63
|
|
64
|
+
reminder:
|
65
|
+
link: "Erinnerung versenden"
|
66
|
+
confirm: "Wollen Sie wirklich eine Erinnerung für diese Anfrage versenden?"
|
67
|
+
title: "Versendete Erinnerungen"
|
68
|
+
no-reminders: "Es wurden noch keine Erinnerungen für diese Anfrage versendet."
|
69
|
+
success: "Die Erinnerung wurde erfolgreich versendet"
|
70
|
+
error: "Fehler beim Versenden der Erinnerung"
|
71
|
+
|
64
72
|
types:
|
65
73
|
controlling: "Angefordert"
|
66
74
|
addressed: "Zu beantworten"
|
package/translations/en.yaml
CHANGED
@@ -62,6 +62,14 @@ caluma:
|
|
62
62
|
create-draft: "Create draft"
|
63
63
|
error: "Error while creating the {count, plural, =1 {inquiry} other {inquiries}}"
|
64
64
|
|
65
|
+
reminder:
|
66
|
+
link: "Send reminder"
|
67
|
+
confirm: "Do you really want to send a reminder for this inquiry?"
|
68
|
+
title: "Sent reminders"
|
69
|
+
no-reminders: "No reminders have been sent for this inquiry yet."
|
70
|
+
success: "The reminder has been sent successfully"
|
71
|
+
error: "Error while sending the reminder"
|
72
|
+
|
65
73
|
types:
|
66
74
|
controlling: "Requested"
|
67
75
|
addressed: "To answer"
|
package/translations/fr.yaml
CHANGED
@@ -61,6 +61,14 @@ caluma:
|
|
61
61
|
create-draft: "Créer un brouillon"
|
62
62
|
error: "Error lors de la création {count, plural, =1 {de la demande} other {des demandes}}"
|
63
63
|
|
64
|
+
reminder:
|
65
|
+
link: "Envoyer un rappel"
|
66
|
+
confirm: "Voulez-vous vraiment envoyer un rappel pour cette demande ?"
|
67
|
+
title: "Rappels envoyés"
|
68
|
+
no-reminders: Aucun rappel n'a encore été envoyé pour cette demande.
|
69
|
+
success: "Le rappel a été envoyé avec succès"
|
70
|
+
error: "Erreur lors de l'envoi du rappel"
|
71
|
+
|
64
72
|
types:
|
65
73
|
controlling: "Demandé"
|
66
74
|
addressed: "A répondre"
|