diff --git a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue index 71b091754..232d7c307 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -104,21 +104,24 @@ export default { }, }, data() { + const localInputResubmissionDate = this.inputResubmissionDate + ? new Date(this.inputResubmissionDate) + : null + return { form: { text: '', memo: this.contributionMemo, }, loading: false, - resubmissionDate: this.inputResubmissionDate, - resubmissionTime: this.inputResubmissionDate - ? new Date(this.inputResubmissionDate).toLocaleTimeString('de-DE', { + resubmissionDate: localInputResubmissionDate, + resubmissionTime: localInputResubmissionDate + ? localInputResubmissionDate.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', }) : '00:00', - showResubmissionDate: - this.inputResubmissionDate !== undefined && this.inputResubmissionDate !== null, + showResubmissionDate: localInputResubmissionDate !== null, tabindex: 0, // 0 = Chat, 1 = Notice, 2 = Memo messageType: { DIALOG: 'DIALOG', @@ -128,20 +131,30 @@ export default { }, methods: { combineResubmissionDateAndTime() { + // getTimezoneOffset const formattedDate = new Date(this.resubmissionDate) const [hours, minutes] = this.resubmissionTime.split(':') formattedDate.setHours(parseInt(hours)) formattedDate.setMinutes(parseInt(minutes)) return formattedDate }, + utcResubmissionDateTime() { + if (!this.resubmissionDate) return null + const localResubmissionDateAndTime = this.combineResubmissionDateAndTime() + return new Date( + localResubmissionDateAndTime.getTime() + + localResubmissionDateAndTime.getTimezoneOffset() * 60000, + ) + }, onSubmit() { this.loading = true let mutation let updateOnlyResubmissionAt = false + const resubmissionAtDate = this.showResubmissionDate + ? this.combineResubmissionDateAndTime() + : null const variables = { - resubmissionAt: this.showResubmissionDate - ? this.combineResubmissionDateAndTime().toString() - : null, + resubmissionAt: resubmissionAtDate ? resubmissionAtDate.toString() : null, } // update only resubmission date? if (this.form.text === '' && this.form.memo === this.contributionMemo) { @@ -162,13 +175,19 @@ export default { variables.memo = this.form.memo variables.id = this.contributionId } + if (this.showResubmissionDate && resubmissionAtDate < new Date()) { + this.toastError(this.$t('contributionMessagesForm.resubmissionDateInPast')) + this.loading = false + return + } this.$apollo .mutate({ mutation, variables }) .then((result) => { if ( - this.hideResubmission && - this.showResubmissionDate && - this.combineResubmissionDateAndTime() > new Date() + (this.hideResubmission && + this.showResubmissionDate && + resubmissionAtDate > new Date()) || + this.tabindex === 2 ) { this.$emit('update-contributions') } else { @@ -178,10 +197,6 @@ export default { if (!updateOnlyResubmissionAt) { this.$emit('update-status', this.contributionId) } - // only by updating memo it make sense to reload contribution - if (this.tabindex === 2) { - this.$emit('reload-contribution', this.contributionId) - } } this.toastSuccess(this.$t('message.request')) this.loading = false diff --git a/admin/src/locales/de.json b/admin/src/locales/de.json index 618720040..7cc0affac 100644 --- a/admin/src/locales/de.json +++ b/admin/src/locales/de.json @@ -32,6 +32,9 @@ "validFrom": "Startdatum", "validTo": "Enddatum" }, + "contributionMessagesForm": { + "resubmissionDateInPast": "Wiedervorlage Datum befindet sich in der Vergangenheit!" + }, "contributions": { "all": "Alle", "confirms": "BestÃĪtigt", diff --git a/admin/src/locales/en.json b/admin/src/locales/en.json index 7f4acfbac..084e2104f 100644 --- a/admin/src/locales/en.json +++ b/admin/src/locales/en.json @@ -32,6 +32,9 @@ "validFrom": "Start-date", "validTo": "End-Date" }, + "contributionMessagesForm": { + "resubmissionDateInPast": "Resubmission date is in the past!" + }, "contributions": { "all": "All", "confirms": "Confirmed", diff --git a/backend/src/graphql/resolver/util/findContributions.ts b/backend/src/graphql/resolver/util/findContributions.ts index ab3435ef8..e929cdc10 100644 --- a/backend/src/graphql/resolver/util/findContributions.ts +++ b/backend/src/graphql/resolver/util/findContributions.ts @@ -54,7 +54,7 @@ export const findContributions = async ( ...(filter.noHashtag && { memo: Not(Like(`%#%`)) }), }) if (filter.hideResubmission) { - const now = new Date() + const now = new Date(new Date().toUTCString()) queryBuilder.andWhere( new Brackets((qb) => { qb.where({ resubmissionAt: IsNull() }).orWhere({ resubmissionAt: LessThanOrEqual(now) })