diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 8c2f5d96c..b21d0d355 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -470,7 +470,7 @@ jobs:
report_name: Coverage Admin Interface
type: lcov
result_path: ./coverage/lcov.info
- min_coverage: 77
+ min_coverage: 78
token: ${{ github.token }}
##############################################################################
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d207d309..2f9487b4c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,164 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+#### [1.6.0](https://github.com/gradido/gradido/compare/1.5.1...1.6.0)
+
+- fix updatePendingCreation method [`#1346`](https://github.com/gradido/gradido/pull/1346)
+- klicktipp_config [`#1348`](https://github.com/gradido/gradido/pull/1348)
+- 1351 form to create incorrect due to change of bootstrap version [`#1352`](https://github.com/gradido/gradido/pull/1352)
+- first draft of releaseplan [`#1349`](https://github.com/gradido/gradido/pull/1349)
+- Rechtschreibfehler behoben, entgültig zu endgültig [`#1354`](https://github.com/gradido/gradido/pull/1354)
+- production_deployment [`#1341`](https://github.com/gradido/gradido/pull/1341)
+- import_production_data [`#1324`](https://github.com/gradido/gradido/pull/1324)
+- remove division / 100 for GDT [`#1339`](https://github.com/gradido/gradido/pull/1339)
+- fix: Language Set Correctly after Page Reload in Admin Interface [`#1334`](https://github.com/gradido/gradido/pull/1334)
+- fix: Set Locale after Login [`#1328`](https://github.com/gradido/gradido/pull/1328)
+- deployment_community_parameters [`#1331`](https://github.com/gradido/gradido/pull/1331)
+- bold text if acive page [`#1337`](https://github.com/gradido/gradido/pull/1337)
+- 1303 thanks page after set password [`#1335`](https://github.com/gradido/gradido/pull/1335)
+- Changed the toasted message for successful creating a creation. [`#1332`](https://github.com/gradido/gradido/pull/1332)
+- Added a required to the password repeat field, errors are shown immed… [`#1333`](https://github.com/gradido/gradido/pull/1333)
+- fix_rejected_login [`#1329`](https://github.com/gradido/gradido/pull/1329)
+- defined fields for Transactionlist in UserSearch in Adminarea, add Lo… [`#1322`](https://github.com/gradido/gradido/pull/1322)
+- fix: Render Localized Balance in NavBar [`#1321`](https://github.com/gradido/gradido/pull/1321)
+- 1227 vergaenglichkeit besser darstellen [`#1312`](https://github.com/gradido/gradido/pull/1312)
+- 1300 gray out register button further when disabled [`#1316`](https://github.com/gradido/gradido/pull/1316)
+- change Admin Gradido-Logo font color to white [`#1315`](https://github.com/gradido/gradido/pull/1315)
+- 1299 remove text from register publisher [`#1317`](https://github.com/gradido/gradido/pull/1317)
+- 1249 gdd gdt values look displaced or cut off [`#1318`](https://github.com/gradido/gradido/pull/1318)
+- 1307 admin rename wallet to my account [`#1314`](https://github.com/gradido/gradido/pull/1314)
+- 1011 visualize and refine the register process [`#1136`](https://github.com/gradido/gradido/pull/1136)
+- New roadmap [`#1219`](https://github.com/gradido/gradido/pull/1219)
+- fix: Redirect after Email Confirmation [`#1308`](https://github.com/gradido/gradido/pull/1308)
+- fix_docker_logging [`#1309`](https://github.com/gradido/gradido/pull/1309)
+- feat: Paginate User Table [`#1293`](https://github.com/gradido/gradido/pull/1293)
+- Adding button, to link back to the login page from the error not activated page. [`#1297`](https://github.com/gradido/gradido/pull/1297)
+- [WIP] new_deployment_stage2 [`#1290`](https://github.com/gradido/gradido/pull/1290)
+- add icons in menu and navbarmenu [`#1298`](https://github.com/gradido/gradido/pull/1298)
+- Withdrew horrizontal scrollbar [`#1295`](https://github.com/gradido/gradido/pull/1295)
+- transactionCount false or transactionCount error text hide [`#1259`](https://github.com/gradido/gradido/pull/1259)
+- 1265 mouse hovering over pencil in settings [`#1270`](https://github.com/gradido/gradido/pull/1270)
+- Fix redirect to /logout, now redirects to the wallet login. [`#1285`](https://github.com/gradido/gradido/pull/1285)
+- feat: Test and Refactor Send Email [`#1224`](https://github.com/gradido/gradido/pull/1224)
+- new_deployment [`#1220`](https://github.com/gradido/gradido/pull/1220)
+- Withdrew space at the end of an locale definition. [`#1283`](https://github.com/gradido/gradido/pull/1283)
+- Fix removing from masscreationlist now gives right item to the left l… [`#1284`](https://github.com/gradido/gradido/pull/1284)
+- onboarding process document [`#1148`](https://github.com/gradido/gradido/pull/1148)
+- Don't show the language-switch on the /register page. [`#1282`](https://github.com/gradido/gradido/pull/1282)
+- language_updates_bernd [`#1260`](https://github.com/gradido/gradido/pull/1260)
+- Admin Logout redirectes to the wallet login page. [`#1271`](https://github.com/gradido/gradido/pull/1271)
+- fix: Admin Creation List [`#1276`](https://github.com/gradido/gradido/pull/1276)
+- fix: Override Existing Token in Response Header [`#1278`](https://github.com/gradido/gradido/pull/1278)
+- fix: Pass Language to Admin Interface [`#1280`](https://github.com/gradido/gradido/pull/1280)
+- feat: Seed Garrick Ollivander [`#1277`](https://github.com/gradido/gradido/pull/1277)
+- fix: Fix Update of Open Creations [`#1273`](https://github.com/gradido/gradido/pull/1273)
+- fix: Change Password in User Profile [`#1266`](https://github.com/gradido/gradido/pull/1266)
+- Wallet shows the wrong gdt sum (gdtSum * 100) [`#1269`](https://github.com/gradido/gradido/pull/1269)
+- 1240 account not activated needs a button to login page [`#1261`](https://github.com/gradido/gradido/pull/1261)
+- reverse filter for unregistered emails [`#1256`](https://github.com/gradido/gradido/pull/1256)
+- close row-details automatically when switching to multiple creation page [`#1245`](https://github.com/gradido/gradido/pull/1245)
+- change creationdatas if change pending creation [`#1244`](https://github.com/gradido/gradido/pull/1244)
+- 1230 details für wiederholte email bestaetigen versenden [`#1255`](https://github.com/gradido/gradido/pull/1255)
+- 1221 month names of the open creation in multiple creation [`#1222`](https://github.com/gradido/gradido/pull/1222)
+- Documentation Template-Overview-2021 PDF [`#1194`](https://github.com/gradido/gradido/pull/1194)
+- Admin create multiple pending creations [`#1203`](https://github.com/gradido/gradido/pull/1203)
+- feat: Catch No Cookies Allowed [`#1187`](https://github.com/gradido/gradido/pull/1187)
+- Remove confirmation of own pending creation [`#1215`](https://github.com/gradido/gradido/pull/1215)
+- feat: Test Create User Mutation [`#1217`](https://github.com/gradido/gradido/pull/1217)
+- #751 Änderungen auf Federation und Community-Erstellprozess [`#969`](https://github.com/gradido/gradido/pull/969)
+- 1055 concept of operations requirements [`#1129`](https://github.com/gradido/gradido/pull/1129)
+- Admin Translations German English [`#1218`](https://github.com/gradido/gradido/pull/1218)
+- Roadmap [`#1213`](https://github.com/gradido/gradido/pull/1213)
+- pr_admin_refactor [`#1214`](https://github.com/gradido/gradido/pull/1214)
+- 1197 admin interface created transactions list [`#1202`](https://github.com/gradido/gradido/pull/1202)
+- migration_0006_login_users_collation [`#1207`](https://github.com/gradido/gradido/pull/1207)
+- wrong_login_is_not_password_reset [`#1179`](https://github.com/gradido/gradido/pull/1179)
+- Moved reverse of the getPendingCreations to the AdminResolver instead… [`#1185`](https://github.com/gradido/gradido/pull/1185)
+- Withdrew password argument of createUser. [`#1206`](https://github.com/gradido/gradido/pull/1206)
+- fix_optin_code_regeneration [`#1195`](https://github.com/gradido/gradido/pull/1195)
+- 1057 display gdd balance when sending [`#1149`](https://github.com/gradido/gradido/pull/1149)
+- 1145 refactor admin resolver from master [`#1164`](https://github.com/gradido/gradido/pull/1164)
+- Error handling in GddTransactionList.vue [`#1183`](https://github.com/gradido/gradido/pull/1183)
+- state-balance balanceDate can't get the date of the last transaction [`#1182`](https://github.com/gradido/gradido/pull/1182)
+- feat: Frontend Refactor and Tests [`#1186`](https://github.com/gradido/gradido/pull/1186)
+- fix: No Nodemon in Database Scripts [`#1167`](https://github.com/gradido/gradido/pull/1167)
+- feat: Test Creation in Admin Interface [`#1172`](https://github.com/gradido/gradido/pull/1172)
+- 533 refactor menu remove tim [`#1162`](https://github.com/gradido/gradido/pull/1162)
+- database_docker_fixes [`#1176`](https://github.com/gradido/gradido/pull/1176)
+- naming_conventions_pending_tasks [`#1184`](https://github.com/gradido/gradido/pull/1184)
+- fix_i18n [`#1180`](https://github.com/gradido/gradido/pull/1180)
+- fix_corrupted_sender_balance [`#1178`](https://github.com/gradido/gradido/pull/1178)
+- Withdrew * 10000 and / 10000 since we need to store the full value. [`#1181`](https://github.com/gradido/gradido/pull/1181)
+- catch error Client certificate revoked and pass error.session-expired… [`#1152`](https://github.com/gradido/gradido/pull/1152)
+- feat: Test Apollo Provider in Frontend [`#1161`](https://github.com/gradido/gradido/pull/1161)
+- fix: Pending Creations are Updated Without Page Reload [`#1160`](https://github.com/gradido/gradido/pull/1160)
+- Error on upgrade database after downgrade [`#1119`](https://github.com/gradido/gradido/pull/1119)
+- Login fix creation validation [`#1159`](https://github.com/gradido/gradido/pull/1159)
+- login_call_resetPassword [`#1130`](https://github.com/gradido/gradido/pull/1130)
+- register add tabindex-1 on password show [`#1158`](https://github.com/gradido/gradido/pull/1158)
+- feat: Seed Transaction Creations [`#1146`](https://github.com/gradido/gradido/pull/1146)
+- Admin confirm pending creation [`#1153`](https://github.com/gradido/gradido/pull/1153)
+- Admin delete pending creation query [`#1141`](https://github.com/gradido/gradido/pull/1141)
+- fix: Catch Expired Session when Coming from Admin Interface [`#1151`](https://github.com/gradido/gradido/pull/1151)
+- docu_release [`#1138`](https://github.com/gradido/gradido/pull/1138)
+- feat: Verify Login in Admin Interface [`#1150`](https://github.com/gradido/gradido/pull/1150)
+- Admin pending creation queries [`#1140`](https://github.com/gradido/gradido/pull/1140)
+- 1137 publisher id as input field on register [`#1147`](https://github.com/gradido/gradido/pull/1147)
+- Admin pending creation [`#1135`](https://github.com/gradido/gradido/pull/1135)
+- feat: Setup Data Seeding [`#1121`](https://github.com/gradido/gradido/pull/1121)
+- fix_admin_token_renewal [`#1139`](https://github.com/gradido/gradido/pull/1139)
+- backend_rights [`#1126`](https://github.com/gradido/gradido/pull/1126)
+- Login admin interface [`#1125`](https://github.com/gradido/gradido/pull/1125)
+- Adminbereich first step [`#1116`](https://github.com/gradido/gradido/pull/1116)
+- Login hook elopage [`#1112`](https://github.com/gradido/gradido/pull/1112)
+- Since we don't make a request to the login_server we need to catch if… [`#1131`](https://github.com/gradido/gradido/pull/1131)
+- feat: Add Server Users Entity [`#1127`](https://github.com/gradido/gradido/pull/1127)
+- Stale: 1002-language-selection-register [`#1113`](https://github.com/gradido/gradido/pull/1113)
+- Error for removing coin animation [`#1120`](https://github.com/gradido/gradido/pull/1120)
+- Adding a check that the user is activated before letting them login. [`#1099`](https://github.com/gradido/gradido/pull/1099)
+- Changed the Auto increment so that it is done after the rollback and … [`#1128`](https://github.com/gradido/gradido/pull/1128)
+- Login call unsecure login [`#1095`](https://github.com/gradido/gradido/pull/1095)
+- feat: Setup Admin Interface [`#1045`](https://github.com/gradido/gradido/pull/1045)
+- login_call_updateUserInfos [`#1084`](https://github.com/gradido/gradido/pull/1084)
+- fix: Await Resolved Promises in Backend Unit Tests [`#1079`](https://github.com/gradido/gradido/pull/1079)
+- feat: Raise Test Coverage Frontend [`#1102`](https://github.com/gradido/gradido/pull/1102)
+- login_call_logout [`#1096`](https://github.com/gradido/gradido/pull/1096)
+- login_call_hasElopage [`#1083`](https://github.com/gradido/gradido/pull/1083)
+- login_call_create_user [`#1070`](https://github.com/gradido/gradido/pull/1070)
+- 1036 register page breaks without community [`#1043`](https://github.com/gradido/gradido/pull/1043)
+- Apollo create transactions without signation [`#1044`](https://github.com/gradido/gradido/pull/1044)
+- change getCustomRepository to createUser function [`#1046`](https://github.com/gradido/gradido/pull/1046)
+- fresh_install_instructions [`#1065`](https://github.com/gradido/gradido/pull/1065)
+- login_call_check_username [`#1037`](https://github.com/gradido/gradido/pull/1037)
+- feat: Setup Unit Tests for Resolvers in Backend [`#951`](https://github.com/gradido/gradido/pull/951)
+- Login hotfixes 1.5.1 [`#1075`](https://github.com/gradido/gradido/pull/1075)
+- vscode_suggest_extensions [`#1073`](https://github.com/gradido/gradido/pull/1073)
+- Documentation on the coin creation and the steps to have the accounts… [`#1052`](https://github.com/gradido/gradido/pull/1052)
+- fix open community server user account creation [`#1072`](https://github.com/gradido/gradido/pull/1072)
+- when creating the register page, everything in the form is set to blank [`#1025`](https://github.com/gradido/gradido/pull/1025)
+- Spelling error fixed 'Berechnungsformel' [`#1048`](https://github.com/gradido/gradido/pull/1048)
+- checkEmail.vue page text is displayed correctly now [`#1051`](https://github.com/gradido/gradido/pull/1051)
+- Adminarea old [`#1058`](https://github.com/gradido/gradido/pull/1058)
+- migrate_login_database [`#1031`](https://github.com/gradido/gradido/pull/1031)
+- Text changes for german and english. [`#1041`](https://github.com/gradido/gradido/pull/1041)
+- refactor: Transaction Component [`#1026`](https://github.com/gradido/gradido/pull/1026)
+- 1017 fixe dashboard layout safari [`#1038`](https://github.com/gradido/gradido/pull/1038)
+- 707 separate account overview and send [`#970`](https://github.com/gradido/gradido/pull/970)
+- Link to the funding contributions of gradido.net memberships [`#984`](https://github.com/gradido/gradido/pull/984)
+- fix: Decay Rounded to Ceil [`#1021`](https://github.com/gradido/gradido/pull/1021)
+- fix: Flaky Dashboard Layout Test on Logout [`#1024`](https://github.com/gradido/gradido/pull/1024)
+- Move Entity models into database [`#956`](https://github.com/gradido/gradido/pull/956)
+- Text 'No decay' replaced by the number 0.00 [`#1023`](https://github.com/gradido/gradido/pull/1023)
+- change text 'eingetraten' to 'eingetragen' [`#1022`](https://github.com/gradido/gradido/pull/1022)
+- fix: Test Default Publisher ID in Sidebar Menu [`#987`](https://github.com/gradido/gradido/pull/987)
+- increase_frontend_coverage [`#1020`](https://github.com/gradido/gradido/pull/1020)
+- analyse_bundle [`#1019`](https://github.com/gradido/gradido/pull/1019)
+- release_issue_template [`#1013`](https://github.com/gradido/gradido/pull/1013)
+- fix_changelog [`#1014`](https://github.com/gradido/gradido/pull/1014)
+- removed incorrect mnemonic lists [`08200f4`](https://github.com/gradido/gradido/commit/08200f49f2ceb5ac121534a19ad2a8347c900145)
+- update jest, install transform-require-context [`165ed18`](https://github.com/gradido/gradido/commit/165ed1801ba1aba862d0b0006d8c17e322c4b7ff)
+- rework roadmap [`b337bcd`](https://github.com/gradido/gradido/commit/b337bcd850423e67b2119c562575b0ec692dddf2)
+
#### [1.5.1](https://github.com/gradido/gradido/compare/1.5.0...1.5.1)
> 15 October 2021
diff --git a/admin/package.json b/admin/package.json
index 93fbed8ae..362c35fc7 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -3,7 +3,7 @@
"description": "Administraion Interface for Gradido",
"main": "index.js",
"author": "Moriz Wahl",
- "version": "0.1.0",
+ "version": "1.6.0",
"license": "MIT",
"private": false,
"scripts": {
@@ -28,12 +28,12 @@
"babel-plugin-component": "^1.1.1",
"babel-preset-env": "^1.7.0",
"babel-preset-vue": "^2.0.2",
- "bootstrap": "^5.1.3",
+ "bootstrap": "4.3.1",
"bootstrap-vue": "^2.21.2",
"core-js": "^3.6.5",
"dotenv-webpack": "^7.0.3",
- "graphql": "^15.6.1",
"express": "^4.17.1",
+ "graphql": "^15.6.1",
"identity-obj-proxy": "^3.0.0",
"jest": "26.6.3",
"moment": "^2.29.1",
diff --git a/admin/src/components/CreationFormular.spec.js b/admin/src/components/CreationFormular.spec.js
index 5b0ac09f5..b3807b16f 100644
--- a/admin/src/components/CreationFormular.spec.js
+++ b/admin/src/components/CreationFormular.spec.js
@@ -1,5 +1,7 @@
import { mount } from '@vue/test-utils'
import CreationFormular from './CreationFormular.vue'
+import { createPendingCreation } from '../graphql/createPendingCreation'
+import { createPendingCreations } from '../graphql/createPendingCreations'
const localVue = global.localVue
@@ -145,10 +147,14 @@ describe('CreationFormular', () => {
describe('with single creation', () => {
beforeEach(async () => {
jest.clearAllMocks()
- await wrapper.setProps({ type: 'singleCreation', creation: [200, 400, 600] })
- await wrapper.setData({ rangeMin: 180 })
- await wrapper.setData({ text: 'Test create coins' })
- await wrapper.setData({ value: 90 })
+ await wrapper.setProps({
+ type: 'singleCreation',
+ creation: [200, 400, 600],
+ item: { email: 'benjamin@bluemchen.de' },
+ })
+ await wrapper.findAll('input[type="radio"]').at(1).setChecked()
+ await wrapper.find('textarea').setValue('Test create coins')
+ await wrapper.find('input[type="number"]').setValue(90)
})
describe('first radio button', () => {
@@ -156,12 +162,8 @@ describe('CreationFormular', () => {
await wrapper.findAll('input[type="radio"]').at(0).setChecked()
})
- it('sets rangeMin to 0', () => {
- expect(wrapper.vm.rangeMin).toBe(0)
- })
-
it('sets rangeMax to 200', () => {
- expect(wrapper.vm.rangeMax).toBe(200)
+ expect(wrapper.vm.rangeMax).toBe(400)
})
describe('sendForm', () => {
@@ -170,7 +172,18 @@ describe('CreationFormular', () => {
})
it('sends ... to apollo', () => {
- expect(apolloMutateMock).toBeCalled()
+ expect(apolloMutateMock).toBeCalledWith(
+ expect.objectContaining({
+ mutation: createPendingCreation,
+ variables: {
+ email: 'benjamin@bluemchen.de',
+ creationDate: 'YYYY-MM-01',
+ amount: 90,
+ memo: 'Test create coins',
+ moderator: 0,
+ },
+ }),
+ )
})
})
@@ -359,6 +372,47 @@ describe('CreationFormular', () => {
})
})
})
+
+ describe('with mass creation', () => {
+ beforeEach(async () => {
+ jest.clearAllMocks()
+ await wrapper.setProps({
+ type: 'massCreation',
+ creation: [200, 400, 600],
+ items: [{ email: 'bob@baumeister.de' }, { email: 'bibi@bloxberg.de' }],
+ })
+ await wrapper.findAll('input[type="radio"]').at(1).setChecked()
+ await wrapper.find('textarea').setValue('Test mass create coins')
+ await wrapper.find('input[type="number"]').setValue(200)
+ await wrapper.find('.test-submit').trigger('click')
+ })
+
+ it('calls the API', () => {
+ expect(apolloMutateMock).toBeCalledWith(
+ expect.objectContaining({
+ mutation: createPendingCreations,
+ variables: {
+ pendingCreations: [
+ {
+ email: 'bob@baumeister.de',
+ creationDate: 'YYYY-MM-01',
+ amount: 200,
+ memo: 'Test mass create coins',
+ moderator: 0,
+ },
+ {
+ email: 'bibi@bloxberg.de',
+ creationDate: 'YYYY-MM-01',
+ amount: 200,
+ memo: 'Test mass create coins',
+ moderator: 0,
+ },
+ ],
+ },
+ }),
+ )
+ })
+ })
})
})
})
diff --git a/admin/src/components/CreationFormular.vue b/admin/src/components/CreationFormular.vue
index 49993d14a..3c8c914e2 100644
--- a/admin/src/components/CreationFormular.vue
+++ b/admin/src/components/CreationFormular.vue
@@ -3,9 +3,11 @@
{{ $t('creation_form.form') }}
-
+
-
+
+
+
-
+
-
+
@@ -71,8 +73,8 @@
>
-
-
+
+
-
+
-
+
{{ $t('creation_form.reset') }}
diff --git a/admin/src/components/EditCreationFormular.vue b/admin/src/components/EditCreationFormular.vue
index 172ae5509..2fa45dd8e 100644
--- a/admin/src/components/EditCreationFormular.vue
+++ b/admin/src/components/EditCreationFormular.vue
@@ -2,8 +2,10 @@
-
+
+
+
-
+
@@ -85,8 +87,8 @@
>
-
-
+
+
-
+
-
+
{{ $t('creation_form.reset') }}
diff --git a/admin/src/components/UserTable.spec.js b/admin/src/components/UserTable.spec.js
index e26a548cc..4910c7e80 100644
--- a/admin/src/components/UserTable.spec.js
+++ b/admin/src/components/UserTable.spec.js
@@ -192,8 +192,10 @@ describe('UserTable', () => {
expect(wrapper.findAll('tr:nth-child(1) > td').length).toBe(7)
})
- it('click button on fifth column', () => {
- wrapper.find('tbody tr td[aria-colindex="5"] button').trigger('click')
+ it('find button on fifth column', () => {
+ expect(
+ wrapper.findAll('tr:nth-child(1) > td').at(5).find('button').isVisible(),
+ ).toBeTruthy()
})
})
})
diff --git a/admin/src/components/UserTable.vue b/admin/src/components/UserTable.vue
index 3f8dface3..c0c288e25 100644
--- a/admin/src/components/UserTable.vue
+++ b/admin/src/components/UserTable.vue
@@ -47,7 +47,13 @@
-
+
@@ -161,8 +167,6 @@ import ConfirmRegisterMailFormular from '../components/ConfirmRegisterMailFormul
import CreationTransactionListFormular from '../components/CreationTransactionListFormular.vue'
import RowDetails from '../components/RowDetails.vue'
-import { confirmPendingCreation } from '../graphql/confirmPendingCreation'
-
const slotNames = ['show-creation', 'show-register-mail', 'show-transaction-list']
export default {
@@ -272,7 +276,7 @@ export default {
this.bookmarkRemove(item)
}
if (bookmarkType === 'confirm') {
- this.bookmarkConfirm(item)
+ this.$emit('confirm-creation', item)
}
this.overlay = false
},
@@ -288,24 +292,9 @@ export default {
}
if (this.type === 'PageCreationConfirm') {
- this.$emit('remove-confirm-result', item, 'remove')
+ this.$emit('remove-creation', item)
}
},
- bookmarkConfirm(item) {
- this.$apollo
- .mutate({
- mutation: confirmPendingCreation,
- variables: {
- id: item.id,
- },
- })
- .then(() => {
- this.$emit('remove-confirm-result', item, 'confirmed')
- })
- .catch((error) => {
- this.$toasted.error(error.message)
- })
- },
updateCreationData(data) {
this.creationUserData.amount = data.amount
this.creationUserData.date = data.date
diff --git a/admin/src/locales/de.json b/admin/src/locales/de.json
index b1a008eaf..ff1a453ce 100644
--- a/admin/src/locales/de.json
+++ b/admin/src/locales/de.json
@@ -39,7 +39,7 @@
"overlay": {
"confirm": {
"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.",
"title": "Schöpfung bestätigen!",
"yes": "Ja, Schöpfung bestätigen und speichern!"
diff --git a/admin/src/pages/Creation.vue b/admin/src/pages/Creation.vue
index 0de804288..11b098ba4 100644
--- a/admin/src/pages/Creation.vue
+++ b/admin/src/pages/Creation.vue
@@ -126,6 +126,7 @@ export default {
currentPage: this.currentPage,
pageSize: this.perPage,
},
+ fetchPolicy: 'network-only',
})
.then((result) => {
this.rows = result.data.searchUsers.userCount
@@ -162,8 +163,8 @@ export default {
}
},
removeAllBookmark() {
- this.itemsMassCreation.forEach((item) => this.itemsList.push(item))
this.itemsMassCreation = []
+ this.getUsers()
},
},
watch: {
diff --git a/admin/src/pages/CreationConfirm.spec.js b/admin/src/pages/CreationConfirm.spec.js
index cc0a096da..cd854fb19 100644
--- a/admin/src/pages/CreationConfirm.spec.js
+++ b/admin/src/pages/CreationConfirm.spec.js
@@ -1,6 +1,7 @@
import { mount } from '@vue/test-utils'
import CreationConfirm from './CreationConfirm.vue'
import { deletePendingCreation } from '../graphql/deletePendingCreation'
+import { confirmPendingCreation } from '../graphql/confirmPendingCreation'
const localVue = global.localVue
@@ -26,7 +27,7 @@ const apolloQueryMock = jest.fn().mockResolvedValue({
lastName: 'Hotzenplotz',
email: 'raeuber@hotzenplotz.de',
amount: 1000000,
- memo: 'Gut Ergatert',
+ memo: 'Gut Ergattert',
date: new Date(),
moderator: 0,
},
@@ -73,6 +74,10 @@ describe('CreationConfirm', () => {
expect(wrapper.find('div.creation-confirm').exists()).toBeTruthy()
})
+ it('has two pending creations', () => {
+ expect(wrapper.vm.pendingCreations).toHaveLength(2)
+ })
+
describe('store', () => {
it('commits resetOpenCreations to store', () => {
expect(storeCommitMock).toBeCalledWith('resetOpenCreations')
@@ -82,37 +87,9 @@ describe('CreationConfirm', () => {
})
})
- describe('delete creation delete with success', () => {
+ describe('remove creation with success', () => {
beforeEach(async () => {
- apolloQueryMock.mockResolvedValue({
- data: {
- getPendingCreations: [
- {
- id: 1,
- firstName: 'Bibi',
- lastName: 'Bloxberg',
- email: 'bibi@bloxberg.de',
- amount: 500,
- memo: 'Danke für alles',
- date: new Date(),
- moderator: 0,
- },
- {
- id: 2,
- firstName: 'Räuber',
- lastName: 'Hotzenplotz',
- email: 'raeuber@hotzenplotz.de',
- amount: 1000000,
- memo: 'Gut Ergatert',
- date: new Date(),
- moderator: 0,
- },
- ],
- },
- })
- await wrapper
- .findComponent({ name: 'UserTable' })
- .vm.$emit('remove-confirm-result', { id: 1 }, 'remove')
+ await wrapper.findComponent({ name: 'UserTable' }).vm.$emit('remove-creation', { id: 1 })
})
it('calls the deletePendingCreation mutation', () => {
@@ -131,12 +108,10 @@ describe('CreationConfirm', () => {
})
})
- describe('delete creation delete with error', () => {
+ describe('remove creation with error', () => {
beforeEach(async () => {
apolloMutateMock.mockRejectedValue({ message: 'Ouchhh!' })
- await wrapper
- .findComponent({ name: 'UserTable' })
- .vm.$emit('remove-confirm-result', { id: 1 }, 'remove')
+ await wrapper.findComponent({ name: 'UserTable' }).vm.$emit('remove-creation', { id: 1 })
})
it('toasts an error message', () => {
@@ -144,43 +119,16 @@ describe('CreationConfirm', () => {
})
})
- describe('confirm creation delete with success', () => {
+ describe('confirm creation with success', () => {
beforeEach(async () => {
- apolloQueryMock.mockResolvedValue({
- data: {
- getPendingCreations: [
- {
- id: 1,
- firstName: 'Bibi',
- lastName: 'Bloxberg',
- email: 'bibi@bloxberg.de',
- amount: 500,
- memo: 'Danke für alles',
- date: new Date(),
- moderator: 0,
- },
- {
- id: 2,
- firstName: 'Räuber',
- lastName: 'Hotzenplotz',
- email: 'raeuber@hotzenplotz.de',
- amount: 1000000,
- memo: 'Gut Ergatert',
- date: new Date(),
- moderator: 0,
- },
- ],
- },
- })
- await wrapper
- .findComponent({ name: 'UserTable' })
- .vm.$emit('remove-confirm-result', { id: 1 }, 'confirmed')
+ apolloMutateMock.mockResolvedValue({})
+ await wrapper.findComponent({ name: 'UserTable' }).vm.$emit('confirm-creation', { id: 2 })
})
- it('calls the deletePendingCreation mutation', () => {
- expect(apolloMutateMock).not.toBeCalledWith({
- mutation: deletePendingCreation,
- variables: { id: 1 },
+ it('calls the confirmPendingCreation mutation', () => {
+ expect(apolloMutateMock).toBeCalledWith({
+ mutation: confirmPendingCreation,
+ variables: { id: 2 },
})
})
@@ -193,19 +141,18 @@ describe('CreationConfirm', () => {
})
})
- describe('delete creation delete with error', () => {
+ describe('confirm creation with error', () => {
beforeEach(async () => {
- await wrapper
- .findComponent({ name: 'UserTable' })
- .vm.$emit('remove-confirm-result', { id: 1 }, 'confirm')
+ apolloMutateMock.mockRejectedValue({ message: 'Ouchhh!' })
+ await wrapper.findComponent({ name: 'UserTable' }).vm.$emit('confirm-creation', { id: 2 })
})
it('toasts an error message', () => {
- expect(toastedErrorMock).toBeCalledWith('creation_form.toasted_default')
+ expect(toastedErrorMock).toBeCalledWith('Ouchhh!')
})
})
- describe('server response is error', () => {
+ describe('server response for get pending creations is error', () => {
beforeEach(() => {
jest.clearAllMocks()
apolloQueryMock.mockRejectedValue({
diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue
index bfb3100aa..202133460 100644
--- a/admin/src/pages/CreationConfirm.vue
+++ b/admin/src/pages/CreationConfirm.vue
@@ -3,9 +3,10 @@
@@ -13,6 +14,7 @@
import UserTable from '../components/UserTable.vue'
import { getPendingCreations } from '../graphql/getPendingCreations'
import { deletePendingCreation } from '../graphql/deletePendingCreation'
+import { confirmPendingCreation } from '../graphql/confirmPendingCreation'
export default {
name: 'CreationConfirm',
@@ -21,8 +23,65 @@ export default {
},
data() {
return {
- showArrays: false,
- fields: [
+ pendingCreations: [],
+ }
+ },
+ methods: {
+ removeCreation(item) {
+ this.$apollo
+ .mutate({
+ mutation: deletePendingCreation,
+ variables: {
+ id: item.id,
+ },
+ })
+ .then((result) => {
+ this.updatePendingCreations(item.id)
+ this.$toasted.success(this.$t('creation_form.toasted_delete'))
+ })
+ .catch((error) => {
+ this.$toasted.error(error.message)
+ })
+ },
+ confirmCreation(item) {
+ this.$apollo
+ .mutate({
+ mutation: confirmPendingCreation,
+ variables: {
+ id: item.id,
+ },
+ })
+ .then((result) => {
+ this.updatePendingCreations(item.id)
+ this.$toasted.success(this.$t('creation_form.toasted_created'))
+ })
+ .catch((error) => {
+ this.$toasted.error(error.message)
+ })
+ },
+ getPendingCreations() {
+ this.$apollo
+ .query({
+ query: getPendingCreations,
+ fetchPolicy: 'network-only',
+ })
+ .then((result) => {
+ this.$store.commit('resetOpenCreations')
+ this.pendingCreations = result.data.getPendingCreations
+ this.$store.commit('setOpenCreations', result.data.getPendingCreations.length)
+ })
+ .catch((error) => {
+ this.$toasted.error(error.message)
+ })
+ },
+ updatePendingCreations(id) {
+ this.pendingCreations = this.pendingCreations.filter((obj) => obj.id !== id)
+ this.$store.commit('openCreationsMinus', 1)
+ },
+ },
+ computed: {
+ fields() {
+ return [
{ key: 'bookmark', label: 'löschen' },
{ key: 'email', label: 'Email' },
{ key: 'firstName', label: 'Vorname' },
@@ -45,56 +104,7 @@ export default {
{ key: 'moderator', label: 'Moderator' },
{ key: 'edit_creation', label: 'ändern' },
{ key: 'confirm', label: 'speichern' },
- ],
- confirmResult: [],
- }
- },
- methods: {
- removeConfirmResult(e, event) {
- let index = 0
- const findArr = this.confirmResult.find((arr) => arr.id === e.id)
- switch (event) {
- case 'remove':
- this.$apollo
- .mutate({
- mutation: deletePendingCreation,
- variables: {
- id: findArr.id,
- },
- })
- .then((result) => {
- index = this.confirmResult.indexOf(findArr)
- this.confirmResult.splice(index, 1)
- this.$store.commit('openCreationsMinus', 1)
- this.$toasted.success(this.$t('creation_form.toasted_delete'))
- })
- .catch((error) => {
- this.$toasted.error(error.message)
- })
- break
- case 'confirmed':
- this.confirmResult.splice(index, 1)
- this.$store.commit('openCreationsMinus', 1)
- this.$toasted.success(this.$t('creation_form.toasted_created'))
- break
- default:
- this.$toasted.error(this.$t('creation_form.toasted_default', { event }))
- }
- },
- getPendingCreations() {
- this.$apollo
- .query({
- query: getPendingCreations,
- fetchPolicy: 'network-only',
- })
- .then((result) => {
- this.$store.commit('resetOpenCreations')
- this.confirmResult = result.data.getPendingCreations
- this.$store.commit('setOpenCreations', result.data.getPendingCreations.length)
- })
- .catch((error) => {
- this.$toasted.error(error.message)
- })
+ ]
},
},
async created() {
diff --git a/admin/yarn.lock b/admin/yarn.lock
index 46b5aaa93..99768d3a2 100644
--- a/admin/yarn.lock
+++ b/admin/yarn.lock
@@ -3634,16 +3634,16 @@ bootstrap-vue@^2.21.2:
portal-vue "^2.1.7"
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":
version "4.6.0"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7"
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:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
diff --git a/backend/.env.dist b/backend/.env.dist
index 785b2c15d..b1b16972f 100644
--- a/backend/.env.dist
+++ b/backend/.env.dist
@@ -1,8 +1,11 @@
+# Server
PORT=4000
JWT_SECRET=secret123
JWT_EXPIRES_IN=10m
GRAPHIQL=false
GDT_API_URL=https://gdt.gradido.net
+
+# Database
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
@@ -10,29 +13,34 @@ DB_PASSWORD=
DB_DATABASE=gradido_community
TYPEORM_LOGGING_RELATIVE_PATH=typeorm.backend.log
-#EMAIL=true
-#EMAIL_USERNAME=
-#EMAIL_SENDER=
-#EMAIL_PASSWORD=
-#EMAIL_SMTP_URL=
-#EMAIL_SMTP_PORT=587
-#RESEND_TIME=1 minute, 60 => 1hour, 1440 (60 minutes * 24 hours) => 24 hours
-#RESEND_TIME=
-RESEND_TIME=10
+# Klicktipp
+KLICKTIPP=false
+KLICKTTIPP_API_URL=https://api.klicktipp.com
+KLICKTIPP_USER=gradido_test
+KLICKTIPP_PASSWORD=secret321
+KLICKTIPP_APIKEY_DE=SomeFakeKeyDE
+KLICKTIPP_APIKEY_EN=SomeFakeKeyEN
-#EMAIL_LINK_VERIFICATION=http://localhost/checkEmail/{code}
-#EMAIL_LINK_SETPASSWORD=http://localhost/reset/{code}
+# Community
+COMMUNITY_NAME=Gradido Entwicklung
+COMMUNITY_URL=http://localhost/
+COMMUNITY_REGISTER_URL=http://localhost/register
+COMMUNITY_DESCRIPTION=Die lokale Entwicklungsumgebung von Gradido.
-#KLICKTIPP_USER=
-#KLICKTIPP_PASSWORD=
-#KLICKTIPP_APIKEY_DE=
-#KLICKTIPP_APIKEY_EN=
-#KLICKTIPP=true
-COMMUNITY_NAME=
-COMMUNITY_URL=
-COMMUNITY_REGISTER_URL=
-COMMUNITY_DESCRIPTION=
+# Login Server
LOGIN_APP_SECRET=21ffbbc616fe
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
\ No newline at end of file
diff --git a/backend/.env.template b/backend/.env.template
index 6507692b8..b3a5eb4c6 100644
--- a/backend/.env.template
+++ b/backend/.env.template
@@ -1,8 +1,10 @@
-PORT=4000
+# Server
JWT_SECRET=$JWT_SECRET
JWT_EXPIRES_IN=10m
GRAPHIQL=false
GDT_API_URL=$GDT_API_URL
+
+# Database
DB_HOST=localhost
DB_PORT=3306
DB_USER=$DB_USER
@@ -10,26 +12,35 @@ DB_PASSWORD=$DB_PASSWORD
DB_DATABASE=gradido_community
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_USERNAME=$EMAIL_USERNAME
EMAIL_SENDER=$EMAIL_SENDER
EMAIL_PASSWORD=$EMAIL_PASSWORD
EMAIL_SMTP_URL=$EMAIL_SMTP_URL
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_SETPASSWORD=$EMAIL_LINK_SETPASSWORD
+RESEND_TIME=10
-#KLICKTIPP_USER=
-#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
WEBHOOK_ELOPAGE_SECRET=$WEBHOOK_ELOPAGE_SECRET
\ No newline at end of file
diff --git a/backend/package.json b/backend/package.json
index 630d1cb15..049e921d8 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "gradido-backend",
- "version": "1.5.1",
+ "version": "1.6.0",
"description": "Gradido unified backend providing an API-Service for Gradido Transactions",
"main": "src/index.ts",
"repository": "https://github.com/gradido/gradido/backend",
diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts
index 7ca55eba1..5d5324808 100644
--- a/backend/src/config/index.ts
+++ b/backend/src/config/index.ts
@@ -43,6 +43,7 @@ const loginServer = {
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 email = {
EMAIL: process.env.EMAIL === 'true' || false,
diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts
index 8a7e034a5..e02d23b4c 100644
--- a/backend/src/graphql/resolver/AdminResolver.ts
+++ b/backend/src/graphql/resolver/AdminResolver.ts
@@ -23,6 +23,7 @@ import { UserTransactionRepository } from '../../typeorm/repository/UserTransact
import { BalanceRepository } from '../../typeorm/repository/Balance'
import { calculateDecay } from '../../util/decay'
import { LoginUserRepository } from '../../typeorm/repository/LoginUser'
+import { LoginPendingTasksAdmin } from '@entity/LoginPendingTasksAdmin'
@Resolver()
export class AdminResolver {
@@ -60,7 +61,10 @@ export class AdminResolver {
): Promise
{
const userRepository = getCustomRepository(UserRepository)
const user = await userRepository.findByEmail(email)
-
+ const isActivated = await hasActivatedEmail(user.email)
+ if (!isActivated) {
+ throw new Error('Creation could not be saved, Email is not activated')
+ }
const creations = await getUserCreations(user.id)
const creationDateObj = new Date(creationDate)
if (isCreationValid(creations, amount, creationDateObj)) {
@@ -113,22 +117,32 @@ export class AdminResolver {
const user = await userRepository.findByEmail(email)
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')
+ }
- updatedCreation.amount = BigInt(amount * 10000)
- updatedCreation.memo = memo
- updatedCreation.date = new Date(creationDate)
- updatedCreation.moderator = moderator
+ const creationDateObj = new Date(creationDate)
+ let creations = await getUserCreations(user.id)
+ if (pendingCreationToUpdate.date.getMonth() === creationDateObj.getMonth()) {
+ 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()
result.amount = parseInt(amount.toString())
- result.memo = updatedCreation.memo
- result.date = updatedCreation.date
- result.moderator = updatedCreation.moderator
+ result.memo = pendingCreationToUpdate.memo
+ result.date = pendingCreationToUpdate.date
+ result.moderator = pendingCreationToUpdate.moderator
result.creation = await getUserCreations(user.id)
return result
@@ -322,6 +336,28 @@ async function getUserCreations(id: number): Promise {
]
}
+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) {
const dateMonth = moment().format('YYYY-MM')
const dateLastMonth = moment().subtract(1, 'month').format('YYYY-MM')
diff --git a/database/package.json b/database/package.json
index 515fbcd74..b30f7699c 100644
--- a/database/package.json
+++ b/database/package.json
@@ -1,6 +1,6 @@
{
"name": "gradido-database",
- "version": "0.0.1",
+ "version": "1.6.0",
"description": "Gradido Database Tool to execute database migrations",
"main": "src/index.ts",
"repository": "https://github.com/gradido/gradido/database",
diff --git a/deployment/bare_metal/.env.dist b/deployment/bare_metal/.env.dist
index 6634284da..f69ce862e 100644
--- a/deployment/bare_metal/.env.dist
+++ b/deployment/bare_metal/.env.dist
@@ -37,6 +37,12 @@ COMMUNITY_URL=https://stage1.gradido.net/
COMMUNITY_REGISTER_URL=https://stage1.gradido.net/register
COMMUNITY_DESCRIPTION=Gradido Development Stage1 Test Community
+KLICKTIPP=false
+KLICKTIPP_USER=
+KLICKTIPP_PASSWORD=
+KLICKTIPP_APIKEY_DE=
+KLICKTIPP_APIKEY_EN=
+
# frontend
GRAPHQL_URI=https://stage1.gradido.net/graphql
ADMIN_AUTH_URL=https://stage1.gradido.net/admin/authenticate?token={token}
diff --git a/docu/ReleasePlaning/2022-01-27_V-1.6.0_Releaseplan.md b/docu/ReleasePlaning/2022-01-27_V-1.6.0_Releaseplan.md
new file mode 100644
index 000000000..3f555e464
--- /dev/null
+++ b/docu/ReleasePlaning/2022-01-27_V-1.6.0_Releaseplan.md
@@ -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
(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:
Which one?
- URL1
- URL2
- etc. | **@einhornimmond** | | | | |
+| 15 | Update links on Wordpress to the new production server | **@Bernd von Gradido** | | | | |
diff --git a/frontend/package.json b/frontend/package.json
index cfa7be87c..b78804c09 100755
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "bootstrap-vue-gradido-wallet",
- "version": "1.5.1",
+ "version": "1.6.0",
"private": true,
"scripts": {
"start": "node run/server.js",
diff --git a/package.json b/package.json
index aa302350d..ee27b858b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "gradido",
- "version": "1.5.1",
+ "version": "1.6.0",
"description": "Gradido",
"main": "index.js",
"repository": "git@github.com:gradido/gradido.git",