Merge branch 'master' into 1342-New-standard-text-for-Creations

This commit is contained in:
Alexander Friedland 2022-01-27 11:42:11 +01:00 committed by GitHub
commit b7a4b43f43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 154 additions and 66 deletions

View File

@ -28,12 +28,12 @@
"babel-plugin-component": "^1.1.1", "babel-plugin-component": "^1.1.1",
"babel-preset-env": "^1.7.0", "babel-preset-env": "^1.7.0",
"babel-preset-vue": "^2.0.2", "babel-preset-vue": "^2.0.2",
"bootstrap": "^5.1.3", "bootstrap": "4.3.1",
"bootstrap-vue": "^2.21.2", "bootstrap-vue": "^2.21.2",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"dotenv-webpack": "^7.0.3", "dotenv-webpack": "^7.0.3",
"graphql": "^15.6.1",
"express": "^4.17.1", "express": "^4.17.1",
"graphql": "^15.6.1",
"identity-obj-proxy": "^3.0.0", "identity-obj-proxy": "^3.0.0",
"jest": "26.6.3", "jest": "26.6.3",
"moment": "^2.29.1", "moment": "^2.29.1",

View File

@ -3,9 +3,11 @@
{{ $t('creation_form.form') }} {{ $t('creation_form.form') }}
<div class="shadow p-3 mb-5 bg-white rounded"> <div class="shadow p-3 mb-5 bg-white rounded">
<b-form ref="creationForm"> <b-form ref="creationForm">
<b-row class="m-4"> <div class="ml-4">
<label>{{ $t('creation_form.select_month') }}</label> <label>{{ $t('creation_form.select_month') }}</label>
<b-col class="text-left"> </div>
<b-row class="ml-4">
<b-col>
<b-form-radio <b-form-radio
id="beforeLastMonth" id="beforeLastMonth"
v-model="radioSelected" v-model="radioSelected"
@ -33,7 +35,7 @@
</label> </label>
</b-form-radio> </b-form-radio>
</b-col> </b-col>
<b-col class="text-right"> <b-col>
<b-form-radio <b-form-radio
id="currentMonth" id="currentMonth"
v-model="radioSelected" v-model="radioSelected"
@ -49,7 +51,7 @@
</b-col> </b-col>
</b-row> </b-row>
<b-row class="m-4" v-show="createdIndex != null"> <div class="m-4" v-show="createdIndex != null">
<label>{{ $t('creation_form.select_value') }}</label> <label>{{ $t('creation_form.select_value') }}</label>
<div> <div>
<b-input-group prepend="GDD" append=".00"> <b-input-group prepend="GDD" append=".00">
@ -71,8 +73,8 @@
></b-form-input> ></b-form-input>
</b-input-group> </b-input-group>
</div> </div>
</b-row> </div>
<b-row class="m-4"> <div class="m-4">
<label>{{ $t('creation_form.enter_text') }}</label> <label>{{ $t('creation_form.enter_text') }}</label>
<div> <div>
<b-form-textarea <b-form-textarea
@ -83,9 +85,9 @@
rows="3" rows="3"
></b-form-textarea> ></b-form-textarea>
</div> </div>
</b-row> </div>
<b-row class="m-4"> <b-row class="m-4">
<b-col class="text-center"> <b-col class="text-left">
<b-button type="reset" variant="danger" @click="$refs.creationForm.reset()"> <b-button type="reset" variant="danger" @click="$refs.creationForm.reset()">
{{ $t('creation_form.reset') }} {{ $t('creation_form.reset') }}
</b-button> </b-button>

View File

@ -2,8 +2,10 @@
<div class="component-edit-creation-formular"> <div class="component-edit-creation-formular">
<div class="shadow p-3 mb-5 bg-white rounded"> <div class="shadow p-3 mb-5 bg-white rounded">
<b-form ref="updateCreationForm"> <b-form ref="updateCreationForm">
<b-row class="m-4"> <div class="ml-4">
<label>{{ $t('creation_form.select_month') }}</label> <label>{{ $t('creation_form.select_month') }}</label>
</div>
<b-row class="m-4">
<b-col class="text-left"> <b-col class="text-left">
<b-form-radio <b-form-radio
id="beforeLastMonth" id="beforeLastMonth"
@ -63,7 +65,7 @@
</b-col> </b-col>
</b-row> </b-row>
<b-row class="m-4"> <div class="m-4">
<label>{{ $t('creation_form.select_value') }}</label> <label>{{ $t('creation_form.select_value') }}</label>
<div> <div>
<b-input-group prepend="GDD" append=".00"> <b-input-group prepend="GDD" append=".00">
@ -85,8 +87,8 @@
></b-form-input> ></b-form-input>
</b-input-group> </b-input-group>
</div> </div>
</b-row> </div>
<b-row class="m-4"> <div class="m-4">
<label>{{ $t('creation_form.enter_text') }}</label> <label>{{ $t('creation_form.enter_text') }}</label>
<div> <div>
<b-form-textarea <b-form-textarea
@ -97,9 +99,9 @@
rows="3" rows="3"
></b-form-textarea> ></b-form-textarea>
</div> </div>
</b-row> </div>
<b-row class="m-4"> <b-row class="m-4">
<b-col class="text-center"> <b-col class="text-left">
<b-button type="reset" variant="danger" @click="$refs.updateCreationForm.reset()"> <b-button type="reset" variant="danger" @click="$refs.updateCreationForm.reset()">
{{ $t('creation_form.reset') }} {{ $t('creation_form.reset') }}
</b-button> </b-button>

View File

@ -39,7 +39,7 @@
"overlay": { "overlay": {
"confirm": { "confirm": {
"no": "Nein, nicht speichern.", "no": "Nein, nicht speichern.",
"question": "Willst du diese vorgespeicherte Schöpfung wirklich vollziehen und entgültig speichern?", "question": "Willst du diese vorgespeicherte Schöpfung wirklich vollziehen und endgültig speichern?",
"text": "Nach dem Speichern ist der Datensatz nicht mehr änderbar und kann auch nicht mehr gelöscht werden. Bitte überprüfe genau, dass alles stimmt.", "text": "Nach dem Speichern ist der Datensatz nicht mehr änderbar und kann auch nicht mehr gelöscht werden. Bitte überprüfe genau, dass alles stimmt.",
"title": "Schöpfung bestätigen!", "title": "Schöpfung bestätigen!",
"yes": "Ja, Schöpfung bestätigen und speichern!" "yes": "Ja, Schöpfung bestätigen und speichern!"

View File

@ -3634,16 +3634,16 @@ bootstrap-vue@^2.21.2:
portal-vue "^2.1.7" portal-vue "^2.1.7"
vue-functional-data-merge "^3.1.0" vue-functional-data-merge "^3.1.0"
bootstrap@4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac"
integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==
"bootstrap@>=4.5.3 <5.0.0": "bootstrap@>=4.5.3 <5.0.0":
version "4.6.0" version "4.6.0"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7"
integrity sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw== integrity sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==
bootstrap@^5.1.3:
version "5.1.3"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.3.tgz#ba081b0c130f810fa70900acbc1c6d3c28fa8f34"
integrity sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==
brace-expansion@^1.1.7: brace-expansion@^1.1.7:
version "1.1.11" version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"

View File

@ -1,8 +1,11 @@
# Server
PORT=4000 PORT=4000
JWT_SECRET=secret123 JWT_SECRET=secret123
JWT_EXPIRES_IN=10m JWT_EXPIRES_IN=10m
GRAPHIQL=false GRAPHIQL=false
GDT_API_URL=https://gdt.gradido.net GDT_API_URL=https://gdt.gradido.net
# Database
DB_HOST=localhost DB_HOST=localhost
DB_PORT=3306 DB_PORT=3306
DB_USER=root DB_USER=root
@ -10,29 +13,34 @@ DB_PASSWORD=
DB_DATABASE=gradido_community DB_DATABASE=gradido_community
TYPEORM_LOGGING_RELATIVE_PATH=typeorm.backend.log TYPEORM_LOGGING_RELATIVE_PATH=typeorm.backend.log
#EMAIL=true # Klicktipp
#EMAIL_USERNAME= KLICKTIPP=false
#EMAIL_SENDER= KLICKTTIPP_API_URL=https://api.klicktipp.com
#EMAIL_PASSWORD= KLICKTIPP_USER=gradido_test
#EMAIL_SMTP_URL= KLICKTIPP_PASSWORD=secret321
#EMAIL_SMTP_PORT=587 KLICKTIPP_APIKEY_DE=SomeFakeKeyDE
#RESEND_TIME=1 minute, 60 => 1hour, 1440 (60 minutes * 24 hours) => 24 hours KLICKTIPP_APIKEY_EN=SomeFakeKeyEN
#RESEND_TIME=
RESEND_TIME=10
#EMAIL_LINK_VERIFICATION=http://localhost/checkEmail/{code} # Community
#EMAIL_LINK_SETPASSWORD=http://localhost/reset/{code} COMMUNITY_NAME=Gradido Entwicklung
COMMUNITY_URL=http://localhost/
COMMUNITY_REGISTER_URL=http://localhost/register
COMMUNITY_DESCRIPTION=Die lokale Entwicklungsumgebung von Gradido.
#KLICKTIPP_USER= # Login Server
#KLICKTIPP_PASSWORD=
#KLICKTIPP_APIKEY_DE=
#KLICKTIPP_APIKEY_EN=
#KLICKTIPP=true
COMMUNITY_NAME=
COMMUNITY_URL=
COMMUNITY_REGISTER_URL=
COMMUNITY_DESCRIPTION=
LOGIN_APP_SECRET=21ffbbc616fe LOGIN_APP_SECRET=21ffbbc616fe
LOGIN_SERVER_KEY=a51ef8ac7ef1abf162fb7a65261acd7a LOGIN_SERVER_KEY=a51ef8ac7ef1abf162fb7a65261acd7a
# EMail
EMAIL=false
EMAIL_USERNAME=gradido_email
EMAIL_SENDER=info@gradido.net
EMAIL_PASSWORD=xxx
EMAIL_SMTP_URL=gmail.com
EMAIL_SMTP_PORT=587
EMAIL_LINK_VERIFICATION=http://localhost/checkEmail/{code}
EMAIL_LINK_SETPASSWORD=http://localhost/reset/{code}
RESEND_TIME=10
# Webhook
WEBHOOK_ELOPAGE_SECRET=secret WEBHOOK_ELOPAGE_SECRET=secret

View File

@ -1,8 +1,10 @@
PORT=4000 # Server
JWT_SECRET=$JWT_SECRET JWT_SECRET=$JWT_SECRET
JWT_EXPIRES_IN=10m JWT_EXPIRES_IN=10m
GRAPHIQL=false GRAPHIQL=false
GDT_API_URL=$GDT_API_URL GDT_API_URL=$GDT_API_URL
# Database
DB_HOST=localhost DB_HOST=localhost
DB_PORT=3306 DB_PORT=3306
DB_USER=$DB_USER DB_USER=$DB_USER
@ -10,26 +12,35 @@ DB_PASSWORD=$DB_PASSWORD
DB_DATABASE=gradido_community DB_DATABASE=gradido_community
TYPEORM_LOGGING_RELATIVE_PATH=$TYPEORM_LOGGING_RELATIVE_PATH TYPEORM_LOGGING_RELATIVE_PATH=$TYPEORM_LOGGING_RELATIVE_PATH
# Klicktipp
KLICKTIPP=$KLICKTIPP
KLICKTTIPP_API_URL=https://api.klicktipp.com
KLICKTIPP_USER=$KLICKTIPP_USER
KLICKTIPP_PASSWORD=$KLICKTIPP_PASSWORD
KLICKTIPP_APIKEY_DE=$KLICKTIPP_APIKEY_DE
KLICKTIPP_APIKEY_EN=$KLICKTIPP_APIKEY_EN
# Community
COMMUNITY_NAME=$COMMUNITY_NAME
COMMUNITY_URL=$COMMUNITY_URL
COMMUNITY_REGISTER_URL=$COMMUNITY_REGISTER_URL
COMMUNITY_DESCRIPTION=$COMMUNITY_DESCRIPTION
# Login Server
LOGIN_APP_SECRET=21ffbbc616fe
LOGIN_SERVER_KEY=a51ef8ac7ef1abf162fb7a65261acd7a
# EMail
RESEND_TIME=10
EMAIL=$EMAIL EMAIL=$EMAIL
EMAIL_USERNAME=$EMAIL_USERNAME EMAIL_USERNAME=$EMAIL_USERNAME
EMAIL_SENDER=$EMAIL_SENDER EMAIL_SENDER=$EMAIL_SENDER
EMAIL_PASSWORD=$EMAIL_PASSWORD EMAIL_PASSWORD=$EMAIL_PASSWORD
EMAIL_SMTP_URL=$EMAIL_SMTP_URL EMAIL_SMTP_URL=$EMAIL_SMTP_URL
EMAIL_SMTP_PORT=587 EMAIL_SMTP_PORT=587
#RESEND_TIME=1 minute, 60 => 1hour, 1440 (60 minutes * 24 hours) => 24 hours
RESEND_TIME=10
EMAIL_LINK_VERIFICATION=$EMAIL_LINK_VERIFICATION EMAIL_LINK_VERIFICATION=$EMAIL_LINK_VERIFICATION
EMAIL_LINK_SETPASSWORD=$EMAIL_LINK_SETPASSWORD EMAIL_LINK_SETPASSWORD=$EMAIL_LINK_SETPASSWORD
RESEND_TIME=10
#KLICKTIPP_USER= # Webhook
#KLICKTIPP_PASSWORD=
#KLICKTIPP_APIKEY_DE=
#KLICKTIPP_APIKEY_EN=
#KLICKTIPP=true
COMMUNITY_NAME=$COMMUNITY_NAME
COMMUNITY_URL=$COMMUNITY_URL
COMMUNITY_REGISTER_URL=$COMMUNITY_REGISTER_URL
COMMUNITY_DESCRIPTION=$COMMUNITY_DESCRIPTION
WEBHOOK_ELOPAGE_SECRET=$WEBHOOK_ELOPAGE_SECRET WEBHOOK_ELOPAGE_SECRET=$WEBHOOK_ELOPAGE_SECRET

View File

@ -43,6 +43,7 @@ const loginServer = {
LOGIN_SERVER_KEY: process.env.LOGIN_SERVER_KEY || 'a51ef8ac7ef1abf162fb7a65261acd7a', LOGIN_SERVER_KEY: process.env.LOGIN_SERVER_KEY || 'a51ef8ac7ef1abf162fb7a65261acd7a',
} }
// TODO: Hannes if I find you... this looks like blasphemy
const resendTime = parseInt(process.env.RESEND_TIME ? process.env.RESEND_TIME : 'null') const resendTime = parseInt(process.env.RESEND_TIME ? process.env.RESEND_TIME : 'null')
const email = { const email = {
EMAIL: process.env.EMAIL === 'true' || false, EMAIL: process.env.EMAIL === 'true' || false,

View File

@ -23,6 +23,7 @@ import { UserTransactionRepository } from '../../typeorm/repository/UserTransact
import { BalanceRepository } from '../../typeorm/repository/Balance' import { BalanceRepository } from '../../typeorm/repository/Balance'
import { calculateDecay } from '../../util/decay' import { calculateDecay } from '../../util/decay'
import { LoginUserRepository } from '../../typeorm/repository/LoginUser' import { LoginUserRepository } from '../../typeorm/repository/LoginUser'
import { LoginPendingTasksAdmin } from '@entity/LoginPendingTasksAdmin'
@Resolver() @Resolver()
export class AdminResolver { export class AdminResolver {
@ -113,22 +114,32 @@ export class AdminResolver {
const user = await userRepository.findByEmail(email) const user = await userRepository.findByEmail(email)
const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository) const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository)
const updatedCreation = await loginPendingTasksAdminRepository.findOneOrFail({ id }) const pendingCreationToUpdate = await loginPendingTasksAdminRepository.findOneOrFail({ id })
if (updatedCreation.userId !== user.id) if (pendingCreationToUpdate.userId !== user.id) {
throw new Error('user of the pending creation and send user does not correspond') throw new Error('user of the pending creation and send user does not correspond')
}
updatedCreation.amount = BigInt(amount * 10000) const creationDateObj = new Date(creationDate)
updatedCreation.memo = memo let creations = await getUserCreations(user.id)
updatedCreation.date = new Date(creationDate) if (pendingCreationToUpdate.date.getMonth() === creationDateObj.getMonth()) {
updatedCreation.moderator = moderator creations = updateCreations(creations, pendingCreationToUpdate)
}
await loginPendingTasksAdminRepository.save(updatedCreation) if (!isCreationValid(creations, amount, creationDateObj)) {
throw new Error('Creation is not valid')
}
pendingCreationToUpdate.amount = BigInt(amount * 10000)
pendingCreationToUpdate.memo = memo
pendingCreationToUpdate.date = new Date(creationDate)
pendingCreationToUpdate.moderator = moderator
await loginPendingTasksAdminRepository.save(pendingCreationToUpdate)
const result = new UpdatePendingCreation() const result = new UpdatePendingCreation()
result.amount = parseInt(amount.toString()) result.amount = parseInt(amount.toString())
result.memo = updatedCreation.memo result.memo = pendingCreationToUpdate.memo
result.date = updatedCreation.date result.date = pendingCreationToUpdate.date
result.moderator = updatedCreation.moderator result.moderator = pendingCreationToUpdate.moderator
result.creation = await getUserCreations(user.id) result.creation = await getUserCreations(user.id)
return result return result
@ -322,6 +333,28 @@ async function getUserCreations(id: number): Promise<number[]> {
] ]
} }
function updateCreations(creations: number[], pendingCreation: LoginPendingTasksAdmin): number[] {
const dateMonth = moment().format('YYYY-MM')
const dateLastMonth = moment().subtract(1, 'month').format('YYYY-MM')
const dateBeforeLastMonth = moment().subtract(2, 'month').format('YYYY-MM')
const creationDateMonth = moment(pendingCreation.date).format('YYYY-MM')
switch (creationDateMonth) {
case dateMonth:
creations[2] += parseInt(pendingCreation.amount.toString())
break
case dateLastMonth:
creations[1] += parseInt(pendingCreation.amount.toString())
break
case dateBeforeLastMonth:
creations[0] += parseInt(pendingCreation.amount.toString())
break
default:
throw new Error('UpdatedCreationDate is not in the last three months')
}
return creations
}
function isCreationValid(creations: number[], amount: number, creationDate: Date) { function isCreationValid(creations: number[], amount: number, creationDate: Date) {
const dateMonth = moment().format('YYYY-MM') const dateMonth = moment().format('YYYY-MM')
const dateLastMonth = moment().subtract(1, 'month').format('YYYY-MM') const dateLastMonth = moment().subtract(1, 'month').format('YYYY-MM')

View File

@ -37,6 +37,12 @@ COMMUNITY_URL=https://stage1.gradido.net/
COMMUNITY_REGISTER_URL=https://stage1.gradido.net/register COMMUNITY_REGISTER_URL=https://stage1.gradido.net/register
COMMUNITY_DESCRIPTION=Gradido Development Stage1 Test Community COMMUNITY_DESCRIPTION=Gradido Development Stage1 Test Community
KLICKTIPP=false
KLICKTIPP_USER=
KLICKTIPP_PASSWORD=
KLICKTIPP_APIKEY_DE=
KLICKTIPP_APIKEY_EN=
# frontend # frontend
GRAPHQL_URI=https://stage1.gradido.net/graphql GRAPHQL_URI=https://stage1.gradido.net/graphql
ADMIN_AUTH_URL=https://stage1.gradido.net/admin/authenticate?token={token} ADMIN_AUTH_URL=https://stage1.gradido.net/admin/authenticate?token={token}

View File

@ -0,0 +1,25 @@
# Releaseplan V1.6.0
Die folgenden Schritte dienen zur Vorbereitung und Durchführung der Inbetriebnahme von Release V-1.6.0.
| LfdNr. | Aktion | verantwortlich | Status<br />(Ok / Err / Ongoing) | Startzeit | Dauer in min | Endezeit |
| ------ | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | -------------------------------- | --------- | ------------ | -------- |
| 1 | Finish all PRs & Finally merge everything | **@Hannes** **@ogerly** **@moriz** **@ulfgebh** | | | | |
| 2 | Make a new version 1.6.0 | **@Developer** | | | | |
| 2a | Deploy V1.6.0 on Stage 2 and make Tests to confirm a working release build | **@Developer @Bernd von Gradido** | | | | |
| 3 | Setup Klicktip settings from old production on new production (?)Make a new version 1.6.0 | ****@ulfgebhardt** **@einhornimmon**** | | | | |
| 4 | Deploy 1.6.0 on gdd.gradido.net and make sure things work as expected(rudimentary) | **@ulfgebhardt** | | | | |
| 5a | Disable Klicktipp Hook to current production gdd1.gradido.com | **@einhornimmond** | | | | |
| 5b | Disable Elopage Hook to current production gdd1.gradido.com | **@einhornimmond** | | | | |
| 6 | Deploy Maintenance page to current production & enable it | **@einhornimmond** | | | | |
| 7 | Shut down current production servers except mariadb & nginx serving the maintenance page | **@einhornimmond** | | | | |
| 8 | Create backup from production (correct format & correct data) | **@einhornimmond** | | | | |
| 9 | Shut down mariadb server | **@einhornimmond** | | | | |
| 10 | Transmit backup to new production | **@ulfgebhardt** | | | | |
| 11 | Import production data on new production | **@ulfgebhardt** | | | | |
| 12a | Enable new Klicktipp hook to new production | **@einhornimmond** **@ulfgebhard** | | | | |
| 12b | Enable new Elopage hooks to new production | **@einhornimmond** **@ulfgebhard** | | | | |
| 13 | Do extended tests on the new production | **@Team** | | | | |
| 14 | Have a permanent redirect from all old urls to the new production server:<br />Which one?<br />- URL1<br />- URL2<br />- etc. | **@einhornimmond** | | | | |
| 15 | Update links on Wordpress to the new production server | **@Bernd von Gradido** | | | | |