mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Merge pull request #2212 from gradido/2198-adminarea-more-dates-on-created-transaction
2198 adminarea more dates on created transaction
This commit is contained in:
commit
d7dfa22134
@ -20,7 +20,7 @@ describe('ContributionMessagesListItem', () => {
|
|||||||
|
|
||||||
const propsData = {
|
const propsData = {
|
||||||
contributionId: 42,
|
contributionId: 42,
|
||||||
state: 'PENDING0',
|
state: 'PENDING',
|
||||||
message: {
|
message: {
|
||||||
id: 111,
|
id: 111,
|
||||||
message: 'asd asda sda sda',
|
message: 'asd asda sda sda',
|
||||||
|
|||||||
@ -6,30 +6,29 @@ const localVue = global.localVue
|
|||||||
|
|
||||||
const apolloQueryMock = jest.fn().mockResolvedValue({
|
const apolloQueryMock = jest.fn().mockResolvedValue({
|
||||||
data: {
|
data: {
|
||||||
creationTransactionList: [
|
creationTransactionList: {
|
||||||
{
|
contributionCount: 2,
|
||||||
id: 1,
|
contributionList: [
|
||||||
amount: 100,
|
{
|
||||||
balanceDate: 0,
|
id: 1,
|
||||||
creationDate: new Date(),
|
amount: 5.8,
|
||||||
memo: 'Testing',
|
createdAt: '2022-09-21T11:09:51.000Z',
|
||||||
linkedUser: {
|
confirmedAt: null,
|
||||||
firstName: 'Gradido',
|
contributionDate: '2022-08-01T00:00:00.000Z',
|
||||||
lastName: 'Akademie',
|
memo: 'für deine Hilfe, Fräulein Rottenmeier',
|
||||||
|
state: 'PENDING',
|
||||||
},
|
},
|
||||||
},
|
{
|
||||||
{
|
id: 2,
|
||||||
id: 2,
|
amount: '47',
|
||||||
amount: 200,
|
createdAt: '2022-09-21T11:09:28.000Z',
|
||||||
balanceDate: 0,
|
confirmedAt: '2022-09-21T11:09:28.000Z',
|
||||||
creationDate: new Date(),
|
contributionDate: '2022-08-01T00:00:00.000Z',
|
||||||
memo: 'Testing 2',
|
memo: 'für deine Hilfe, Frau Holle',
|
||||||
linkedUser: {
|
state: 'CONFIRMED',
|
||||||
firstName: 'Gradido',
|
|
||||||
lastName: 'Akademie',
|
|
||||||
},
|
},
|
||||||
},
|
],
|
||||||
],
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -43,7 +42,7 @@ const mocks = {
|
|||||||
|
|
||||||
const propsData = {
|
const propsData = {
|
||||||
userId: 1,
|
userId: 1,
|
||||||
fields: ['date', 'balance', 'name', 'memo', 'decay'],
|
fields: ['createdAt', 'contributionDate', 'confirmedAt', 'amount', 'memo'],
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('CreationTransactionList', () => {
|
describe('CreationTransactionList', () => {
|
||||||
@ -63,7 +62,7 @@ describe('CreationTransactionList', () => {
|
|||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
variables: {
|
variables: {
|
||||||
currentPage: 1,
|
currentPage: 1,
|
||||||
pageSize: 25,
|
pageSize: 10,
|
||||||
order: 'DESC',
|
order: 'DESC',
|
||||||
userId: 1,
|
userId: 1,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,7 +1,44 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="component-creation-transaction-list">
|
<div class="component-creation-transaction-list">
|
||||||
<div class="h3">{{ $t('transactionlist.title') }}</div>
|
<div class="h3">{{ $t('transactionlist.title') }}</div>
|
||||||
<b-table striped hover :fields="fields" :items="items"></b-table>
|
<b-table striped hover :fields="fields" :items="items">
|
||||||
|
<template #cell(contributionDate)="data">
|
||||||
|
<div class="font-weight-bold">
|
||||||
|
{{ $d(new Date(data.item.contributionDate), 'month') }}
|
||||||
|
</div>
|
||||||
|
<div>{{ $d(new Date(data.item.contributionDate)) }}</div>
|
||||||
|
</template>
|
||||||
|
</b-table>
|
||||||
|
<div>
|
||||||
|
<b-pagination
|
||||||
|
pills
|
||||||
|
size="lg"
|
||||||
|
v-model="currentPage"
|
||||||
|
:per-page="perPage"
|
||||||
|
:total-rows="rows"
|
||||||
|
align="center"
|
||||||
|
:hide-ellipsis="true"
|
||||||
|
></b-pagination>
|
||||||
|
<b-button v-b-toggle.collapse-1 variant="light" size="sm">{{ $t('help.help') }}</b-button>
|
||||||
|
<b-collapse id="collapse-1" class="mt-2">
|
||||||
|
<div>
|
||||||
|
{{ $t('transactionlist.submitted') }} {{ $t('math.equals') }}
|
||||||
|
{{ $t('help.transactionlist.submitted') }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{{ $t('transactionlist.period') }} {{ $t('math.equals') }}
|
||||||
|
{{ $t('help.transactionlist.periods') }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{{ $t('transactionlist.confirmed') }} {{ $t('math.equals') }}
|
||||||
|
{{ $t('help.transactionlist.confirmed') }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{{ $t('transactionlist.state') }} {{ $t('math.equals') }}
|
||||||
|
{{ $t('help.transactionlist.state') }}
|
||||||
|
</div>
|
||||||
|
</b-collapse>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@ -13,14 +50,37 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
items: [],
|
||||||
|
rows: 0,
|
||||||
|
currentPage: 1,
|
||||||
|
perPage: 10,
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
key: 'creationDate',
|
key: 'createdAt',
|
||||||
label: this.$t('transactionlist.date'),
|
label: this.$t('transactionlist.submitted'),
|
||||||
formatter: (value, key, item) => {
|
formatter: (value, key, item) => {
|
||||||
return this.$d(new Date(value))
|
return this.$d(new Date(value))
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'contributionDate',
|
||||||
|
label: this.$t('transactionlist.period'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'confirmedAt',
|
||||||
|
label: this.$t('transactionlist.confirmed'),
|
||||||
|
formatter: (value, key, item) => {
|
||||||
|
if (value) {
|
||||||
|
return this.$d(new Date(value))
|
||||||
|
} else {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'state',
|
||||||
|
label: this.$t('transactionlist.state'),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: 'amount',
|
key: 'amount',
|
||||||
label: this.$t('transactionlist.amount'),
|
label: this.$t('transactionlist.amount'),
|
||||||
@ -28,23 +88,8 @@ export default {
|
|||||||
return `${value} GDD`
|
return `${value} GDD`
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
key: 'linkedUser',
|
|
||||||
label: this.$t('transactionlist.community'),
|
|
||||||
formatter: (value, key, item) => {
|
|
||||||
return `${value.firstName} ${value.lastName}`
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{ key: 'memo', label: this.$t('transactionlist.memo') },
|
{ key: 'memo', label: this.$t('transactionlist.memo') },
|
||||||
{
|
|
||||||
key: 'balanceDate',
|
|
||||||
label: this.$t('transactionlist.balanceDate'),
|
|
||||||
formatter: (value, key, item) => {
|
|
||||||
return this.$d(new Date(value))
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
items: [],
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -53,14 +98,15 @@ export default {
|
|||||||
.query({
|
.query({
|
||||||
query: creationTransactionList,
|
query: creationTransactionList,
|
||||||
variables: {
|
variables: {
|
||||||
currentPage: 1,
|
currentPage: this.currentPage,
|
||||||
pageSize: 25,
|
pageSize: this.perPage,
|
||||||
order: 'DESC',
|
order: 'DESC',
|
||||||
userId: parseInt(this.userId),
|
userId: parseInt(this.userId),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
this.items = result.data.creationTransactionList
|
this.rows = result.data.creationTransactionList.contributionCount
|
||||||
|
this.items = result.data.creationTransactionList.contributionList
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
this.toastError(error.message)
|
this.toastError(error.message)
|
||||||
@ -70,5 +116,10 @@ export default {
|
|||||||
created() {
|
created() {
|
||||||
this.getTransactions()
|
this.getTransactions()
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
currentPage() {
|
||||||
|
this.getTransactions()
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -8,14 +8,15 @@ export const creationTransactionList = gql`
|
|||||||
order: $order
|
order: $order
|
||||||
userId: $userId
|
userId: $userId
|
||||||
) {
|
) {
|
||||||
id
|
contributionCount
|
||||||
amount
|
contributionList {
|
||||||
balanceDate
|
id
|
||||||
creationDate
|
amount
|
||||||
memo
|
createdAt
|
||||||
linkedUser {
|
confirmedAt
|
||||||
firstName
|
contributionDate
|
||||||
lastName
|
memo
|
||||||
|
state
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,10 +75,20 @@
|
|||||||
"submit": "Senden"
|
"submit": "Senden"
|
||||||
},
|
},
|
||||||
"GDD": "GDD",
|
"GDD": "GDD",
|
||||||
|
"help": {
|
||||||
|
"help": "Hilfe",
|
||||||
|
"transactionlist": {
|
||||||
|
"confirmed": "Wann wurde es von einem Moderator / Admin bestätigt.",
|
||||||
|
"periods": "Für welchen Zeitraum wurde vom Mitglied eingereicht.",
|
||||||
|
"state": "[PENDING = eingereicht, DELETED = gelöscht, IN_PROGRESS = im Dialog mit Moderator, DENIED = abgelehnt, CONFIRMED = bestätigt]",
|
||||||
|
"submitted": "Wann wurde es vom Mitglied eingereicht"
|
||||||
|
}
|
||||||
|
},
|
||||||
"hide_details": "Details verbergen",
|
"hide_details": "Details verbergen",
|
||||||
"lastname": "Nachname",
|
"lastname": "Nachname",
|
||||||
"math": {
|
"math": {
|
||||||
"colon": ":",
|
"colon": ":",
|
||||||
|
"equals": "=",
|
||||||
"exclaim": "!",
|
"exclaim": "!",
|
||||||
"pipe": "|",
|
"pipe": "|",
|
||||||
"plus": "+"
|
"plus": "+"
|
||||||
@ -134,10 +144,11 @@
|
|||||||
},
|
},
|
||||||
"transactionlist": {
|
"transactionlist": {
|
||||||
"amount": "Betrag",
|
"amount": "Betrag",
|
||||||
"balanceDate": "Schöpfungsdatum",
|
"confirmed": "Bestätigt",
|
||||||
"community": "Gemeinschaft",
|
|
||||||
"date": "Datum",
|
|
||||||
"memo": "Nachricht",
|
"memo": "Nachricht",
|
||||||
|
"period": "Zeitraum",
|
||||||
|
"state": "Status",
|
||||||
|
"submitted": "Eingereicht",
|
||||||
"title": "Alle geschöpften Transaktionen für den Nutzer"
|
"title": "Alle geschöpften Transaktionen für den Nutzer"
|
||||||
},
|
},
|
||||||
"undelete_user": "Nutzer wiederherstellen",
|
"undelete_user": "Nutzer wiederherstellen",
|
||||||
|
|||||||
@ -75,10 +75,20 @@
|
|||||||
"submit": "Send"
|
"submit": "Send"
|
||||||
},
|
},
|
||||||
"GDD": "GDD",
|
"GDD": "GDD",
|
||||||
|
"help": {
|
||||||
|
"help": "Help",
|
||||||
|
"transactionlist": {
|
||||||
|
"confirmed": "When was it confirmed by a moderator / admin.",
|
||||||
|
"periods": "For what period was it submitted by the member.",
|
||||||
|
"state": "[PENDING = submitted, DELETED = deleted, IN_PROGRESS = in dialogue with moderator, DENIED = denied, CONFIRMED = confirmed]",
|
||||||
|
"submitted": "When was it submitted by the member"
|
||||||
|
}
|
||||||
|
},
|
||||||
"hide_details": "Hide details",
|
"hide_details": "Hide details",
|
||||||
"lastname": "Lastname",
|
"lastname": "Lastname",
|
||||||
"math": {
|
"math": {
|
||||||
"colon": ":",
|
"colon": ":",
|
||||||
|
"equals": "=",
|
||||||
"exclaim": "!",
|
"exclaim": "!",
|
||||||
"pipe": "|",
|
"pipe": "|",
|
||||||
"plus": "+"
|
"plus": "+"
|
||||||
@ -134,10 +144,11 @@
|
|||||||
},
|
},
|
||||||
"transactionlist": {
|
"transactionlist": {
|
||||||
"amount": "Amount",
|
"amount": "Amount",
|
||||||
"balanceDate": "Creation date",
|
"confirmed": "Confirmed",
|
||||||
"community": "Community",
|
|
||||||
"date": "Date",
|
|
||||||
"memo": "Message",
|
"memo": "Message",
|
||||||
|
"period": "Period",
|
||||||
|
"state": "State",
|
||||||
|
"submitted": "Submitted",
|
||||||
"title": "All creation-transactions for the user"
|
"title": "All creation-transactions for the user"
|
||||||
},
|
},
|
||||||
"undelete_user": "Undelete User",
|
"undelete_user": "Undelete User",
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { User } from '@entity/User'
|
|||||||
|
|
||||||
@ObjectType()
|
@ObjectType()
|
||||||
export class Contribution {
|
export class Contribution {
|
||||||
constructor(contribution: dbContribution, user: User) {
|
constructor(contribution: dbContribution, user?: User | null) {
|
||||||
this.id = contribution.id
|
this.id = contribution.id
|
||||||
this.firstName = user ? user.firstName : null
|
this.firstName = user ? user.firstName : null
|
||||||
this.lastName = user ? user.lastName : null
|
this.lastName = user ? user.lastName : null
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import { AdminCreateContributions } from '@model/AdminCreateContributions'
|
|||||||
import { AdminUpdateContribution } from '@model/AdminUpdateContribution'
|
import { AdminUpdateContribution } from '@model/AdminUpdateContribution'
|
||||||
import { ContributionLink } from '@model/ContributionLink'
|
import { ContributionLink } from '@model/ContributionLink'
|
||||||
import { ContributionLinkList } from '@model/ContributionLinkList'
|
import { ContributionLinkList } from '@model/ContributionLinkList'
|
||||||
|
import { Contribution } from '@model/Contribution'
|
||||||
import { RIGHTS } from '@/auth/RIGHTS'
|
import { RIGHTS } from '@/auth/RIGHTS'
|
||||||
import { UserRepository } from '@repository/User'
|
import { UserRepository } from '@repository/User'
|
||||||
import AdminCreateContributionArgs from '@arg/AdminCreateContributionArgs'
|
import AdminCreateContributionArgs from '@arg/AdminCreateContributionArgs'
|
||||||
@ -23,12 +24,10 @@ import SearchUsersArgs from '@arg/SearchUsersArgs'
|
|||||||
import ContributionLinkArgs from '@arg/ContributionLinkArgs'
|
import ContributionLinkArgs from '@arg/ContributionLinkArgs'
|
||||||
import { Transaction as DbTransaction } from '@entity/Transaction'
|
import { Transaction as DbTransaction } from '@entity/Transaction'
|
||||||
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
|
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
|
||||||
import { Transaction } from '@model/Transaction'
|
|
||||||
import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink'
|
import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink'
|
||||||
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
|
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
|
||||||
import { TransactionRepository } from '@repository/Transaction'
|
|
||||||
import { calculateDecay } from '@/util/decay'
|
import { calculateDecay } from '@/util/decay'
|
||||||
import { Contribution } from '@entity/Contribution'
|
import { Contribution as DbContribution } from '@entity/Contribution'
|
||||||
import { hasElopageBuys } from '@/util/hasElopageBuys'
|
import { hasElopageBuys } from '@/util/hasElopageBuys'
|
||||||
import { User as dbUser } from '@entity/User'
|
import { User as dbUser } from '@entity/User'
|
||||||
import { User } from '@model/User'
|
import { User } from '@model/User'
|
||||||
@ -40,7 +39,6 @@ import { Decay } from '@model/Decay'
|
|||||||
import Paginated from '@arg/Paginated'
|
import Paginated from '@arg/Paginated'
|
||||||
import TransactionLinkFilters from '@arg/TransactionLinkFilters'
|
import TransactionLinkFilters from '@arg/TransactionLinkFilters'
|
||||||
import { Order } from '@enum/Order'
|
import { Order } from '@enum/Order'
|
||||||
import { communityUser } from '@/util/communityUser'
|
|
||||||
import { findUserByEmail, activationLink, printTimeDuration } from './UserResolver'
|
import { findUserByEmail, activationLink, printTimeDuration } from './UserResolver'
|
||||||
import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail'
|
import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail'
|
||||||
import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver'
|
import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver'
|
||||||
@ -66,6 +64,7 @@ import { ContributionMessageType } from '@enum/MessageType'
|
|||||||
import { ContributionMessage } from '@model/ContributionMessage'
|
import { ContributionMessage } from '@model/ContributionMessage'
|
||||||
import { sendContributionConfirmedEmail } from '@/mailer/sendContributionConfirmedEmail'
|
import { sendContributionConfirmedEmail } from '@/mailer/sendContributionConfirmedEmail'
|
||||||
import { sendAddedContributionMessageEmail } from '@/mailer/sendAddedContributionMessageEmail'
|
import { sendAddedContributionMessageEmail } from '@/mailer/sendAddedContributionMessageEmail'
|
||||||
|
import { ContributionListResult } from '../model/Contribution'
|
||||||
|
|
||||||
// const EMAIL_OPT_IN_REGISTER = 1
|
// const EMAIL_OPT_IN_REGISTER = 1
|
||||||
// const EMAIL_OPT_UNKNOWN = 3 // elopage?
|
// const EMAIL_OPT_UNKNOWN = 3 // elopage?
|
||||||
@ -248,7 +247,7 @@ export class AdminResolver {
|
|||||||
const creationDateObj = new Date(creationDate)
|
const creationDateObj = new Date(creationDate)
|
||||||
logger.trace('creationDateObj:', creationDateObj)
|
logger.trace('creationDateObj:', creationDateObj)
|
||||||
validateContribution(creations, amount, creationDateObj)
|
validateContribution(creations, amount, creationDateObj)
|
||||||
const contribution = Contribution.create()
|
const contribution = DbContribution.create()
|
||||||
contribution.userId = emailContact.userId
|
contribution.userId = emailContact.userId
|
||||||
contribution.amount = amount
|
contribution.amount = amount
|
||||||
contribution.createdAt = new Date()
|
contribution.createdAt = new Date()
|
||||||
@ -259,7 +258,7 @@ export class AdminResolver {
|
|||||||
contribution.contributionStatus = ContributionStatus.PENDING
|
contribution.contributionStatus = ContributionStatus.PENDING
|
||||||
|
|
||||||
logger.trace('contribution to save', contribution)
|
logger.trace('contribution to save', contribution)
|
||||||
await Contribution.save(contribution)
|
await DbContribution.save(contribution)
|
||||||
return getUserCreation(emailContact.userId)
|
return getUserCreation(emailContact.userId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,7 +316,7 @@ export class AdminResolver {
|
|||||||
|
|
||||||
const moderator = getUser(context)
|
const moderator = getUser(context)
|
||||||
|
|
||||||
const contributionToUpdate = await Contribution.findOne({
|
const contributionToUpdate = await DbContribution.findOne({
|
||||||
where: { id, confirmedAt: IsNull() },
|
where: { id, confirmedAt: IsNull() },
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -350,7 +349,7 @@ export class AdminResolver {
|
|||||||
contributionToUpdate.moderatorId = moderator.id
|
contributionToUpdate.moderatorId = moderator.id
|
||||||
contributionToUpdate.contributionStatus = ContributionStatus.PENDING
|
contributionToUpdate.contributionStatus = ContributionStatus.PENDING
|
||||||
|
|
||||||
await Contribution.save(contributionToUpdate)
|
await DbContribution.save(contributionToUpdate)
|
||||||
const result = new AdminUpdateContribution()
|
const result = new AdminUpdateContribution()
|
||||||
result.amount = amount
|
result.amount = amount
|
||||||
result.memo = contributionToUpdate.memo
|
result.memo = contributionToUpdate.memo
|
||||||
@ -367,7 +366,7 @@ export class AdminResolver {
|
|||||||
const contributions = await getConnection()
|
const contributions = await getConnection()
|
||||||
.createQueryBuilder()
|
.createQueryBuilder()
|
||||||
.select('c')
|
.select('c')
|
||||||
.from(Contribution, 'c')
|
.from(DbContribution, 'c')
|
||||||
.leftJoinAndSelect('c.messages', 'm')
|
.leftJoinAndSelect('c.messages', 'm')
|
||||||
.where({ confirmedAt: IsNull() })
|
.where({ confirmedAt: IsNull() })
|
||||||
.getMany()
|
.getMany()
|
||||||
@ -399,7 +398,7 @@ export class AdminResolver {
|
|||||||
@Authorized([RIGHTS.ADMIN_DELETE_CONTRIBUTION])
|
@Authorized([RIGHTS.ADMIN_DELETE_CONTRIBUTION])
|
||||||
@Mutation(() => Boolean)
|
@Mutation(() => Boolean)
|
||||||
async adminDeleteContribution(@Arg('id', () => Int) id: number): Promise<boolean> {
|
async adminDeleteContribution(@Arg('id', () => Int) id: number): Promise<boolean> {
|
||||||
const contribution = await Contribution.findOne(id)
|
const contribution = await DbContribution.findOne(id)
|
||||||
if (!contribution) {
|
if (!contribution) {
|
||||||
logger.error(`Contribution not found for given id: ${id}`)
|
logger.error(`Contribution not found for given id: ${id}`)
|
||||||
throw new Error('Contribution not found for given id.')
|
throw new Error('Contribution not found for given id.')
|
||||||
@ -416,7 +415,7 @@ export class AdminResolver {
|
|||||||
@Arg('id', () => Int) id: number,
|
@Arg('id', () => Int) id: number,
|
||||||
@Ctx() context: Context,
|
@Ctx() context: Context,
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
const contribution = await Contribution.findOne(id)
|
const contribution = await DbContribution.findOne(id)
|
||||||
if (!contribution) {
|
if (!contribution) {
|
||||||
logger.error(`Contribution not found for given id: ${id}`)
|
logger.error(`Contribution not found for given id: ${id}`)
|
||||||
throw new Error('Contribution not found to given id.')
|
throw new Error('Contribution not found to given id.')
|
||||||
@ -481,7 +480,7 @@ export class AdminResolver {
|
|||||||
contribution.confirmedBy = moderatorUser.id
|
contribution.confirmedBy = moderatorUser.id
|
||||||
contribution.transactionId = transaction.id
|
contribution.transactionId = transaction.id
|
||||||
contribution.contributionStatus = ContributionStatus.CONFIRMED
|
contribution.contributionStatus = ContributionStatus.CONFIRMED
|
||||||
await queryRunner.manager.update(Contribution, { id: contribution.id }, contribution)
|
await queryRunner.manager.update(DbContribution, { id: contribution.id }, contribution)
|
||||||
|
|
||||||
await queryRunner.commitTransaction()
|
await queryRunner.commitTransaction()
|
||||||
logger.info('creation commited successfuly.')
|
logger.info('creation commited successfuly.')
|
||||||
@ -506,24 +505,29 @@ export class AdminResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Authorized([RIGHTS.CREATION_TRANSACTION_LIST])
|
@Authorized([RIGHTS.CREATION_TRANSACTION_LIST])
|
||||||
@Query(() => [Transaction])
|
@Query(() => ContributionListResult)
|
||||||
async creationTransactionList(
|
async creationTransactionList(
|
||||||
@Args()
|
@Args()
|
||||||
{ currentPage = 1, pageSize = 25, order = Order.DESC }: Paginated,
|
{ currentPage = 1, pageSize = 25, order = Order.DESC }: Paginated,
|
||||||
@Arg('userId', () => Int) userId: number,
|
@Arg('userId', () => Int) userId: number,
|
||||||
): Promise<Transaction[]> {
|
): Promise<ContributionListResult> {
|
||||||
const offset = (currentPage - 1) * pageSize
|
const offset = (currentPage - 1) * pageSize
|
||||||
const transactionRepository = getCustomRepository(TransactionRepository)
|
const [contributionResult, count] = await getConnection()
|
||||||
const [userTransactions] = await transactionRepository.findByUserPaged(
|
.createQueryBuilder()
|
||||||
userId,
|
.select('c')
|
||||||
pageSize,
|
.from(DbContribution, 'c')
|
||||||
offset,
|
.leftJoinAndSelect('c.user', 'u')
|
||||||
order,
|
.where(`user_id = ${userId}`)
|
||||||
true,
|
.limit(pageSize)
|
||||||
)
|
.offset(offset)
|
||||||
|
.orderBy('c.created_at', order)
|
||||||
|
.getManyAndCount()
|
||||||
|
|
||||||
const user = await dbUser.findOneOrFail({ id: userId })
|
return new ContributionListResult(
|
||||||
return userTransactions.map((t) => new Transaction(t, new User(user), communityUser))
|
count,
|
||||||
|
contributionResult.map((contribution) => new Contribution(contribution, contribution.user)),
|
||||||
|
)
|
||||||
|
// return userTransactions.map((t) => new Transaction(t, new User(user), communityUser))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Authorized([RIGHTS.SEND_ACTIVATION_EMAIL])
|
@Authorized([RIGHTS.SEND_ACTIVATION_EMAIL])
|
||||||
@ -744,7 +748,7 @@ export class AdminResolver {
|
|||||||
await queryRunner.startTransaction('REPEATABLE READ')
|
await queryRunner.startTransaction('REPEATABLE READ')
|
||||||
const contributionMessage = DbContributionMessage.create()
|
const contributionMessage = DbContributionMessage.create()
|
||||||
try {
|
try {
|
||||||
const contribution = await Contribution.findOne({
|
const contribution = await DbContribution.findOne({
|
||||||
where: { id: contributionId },
|
where: { id: contributionId },
|
||||||
relations: ['user'],
|
relations: ['user'],
|
||||||
})
|
})
|
||||||
@ -773,7 +777,7 @@ export class AdminResolver {
|
|||||||
contribution.contributionStatus === ContributionStatus.PENDING
|
contribution.contributionStatus === ContributionStatus.PENDING
|
||||||
) {
|
) {
|
||||||
contribution.contributionStatus = ContributionStatus.IN_PROGRESS
|
contribution.contributionStatus = ContributionStatus.IN_PROGRESS
|
||||||
await queryRunner.manager.update(Contribution, { id: contributionId }, contribution)
|
await queryRunner.manager.update(DbContribution, { id: contributionId }, contribution)
|
||||||
}
|
}
|
||||||
|
|
||||||
await sendAddedContributionMessageEmail({
|
await sendAddedContributionMessageEmail({
|
||||||
|
|||||||
@ -14,8 +14,8 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis
|
|||||||
\`type\` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
\`type\` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
\`user_id\` int(10) unsigned NOT NULL,
|
\`user_id\` int(10) unsigned NOT NULL,
|
||||||
\`email\` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL UNIQUE,
|
\`email\` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL UNIQUE,
|
||||||
\`email_verification_code\` bigint(20) unsigned NOT NULL UNIQUE,
|
\`email_verification_code\` bigint(20) unsigned DEFAULT NULL UNIQUE,
|
||||||
\`email_opt_in_type_id\` int NOT NULL,
|
\`email_opt_in_type_id\` int DEFAULT NULL,
|
||||||
\`email_resend_count\` int DEFAULT '0',
|
\`email_resend_count\` int DEFAULT '0',
|
||||||
\`email_checked\` tinyint(4) NOT NULL DEFAULT 0,
|
\`email_checked\` tinyint(4) NOT NULL DEFAULT 0,
|
||||||
\`phone\` varchar(255) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
|
\`phone\` varchar(255) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
|
||||||
@ -41,47 +41,13 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis
|
|||||||
|
|
||||||
// merge values from login_email_opt_in table with users.email in new user_contacts table
|
// merge values from login_email_opt_in table with users.email in new user_contacts table
|
||||||
await queryFn(`
|
await queryFn(`
|
||||||
INSERT INTO user_contacts
|
INSERT INTO user_contacts
|
||||||
(type, user_id, email, email_verification_code, email_opt_in_type_id, email_resend_count, email_checked, created_at, updated_at, deleted_at)
|
(type, user_id, email, email_verification_code, email_opt_in_type_id, email_resend_count, email_checked, created_at, updated_at, deleted_at)
|
||||||
SELECT
|
SELECT 'EMAIL', users.id, users.email, optin.verification_code, optin.email_opt_in_type_id, optin.resend_count, users.email_checked, users.created, null, users.deletedAt
|
||||||
'EMAIL',
|
FROM users LEFT JOIN
|
||||||
u.id as user_id,
|
(SELECT le.id, le.user_id, le.verification_code, le.email_opt_in_type_id, le.resend_count, le.created, le.updated,
|
||||||
u.email,
|
ROW_NUMBER() OVER (PARTITION BY le.user_id ORDER BY le.created DESC) AS row_num
|
||||||
e.verification_code as email_verification_code,
|
FROM login_email_opt_in as le) AS optin ON users.id = optin.user_id AND row_num = 1;`)
|
||||||
e.email_opt_in_type_id,
|
|
||||||
e.resend_count as email_resend_count,
|
|
||||||
u.email_checked,
|
|
||||||
e.created as created_at,
|
|
||||||
e.updated as updated_at,
|
|
||||||
u.deletedAt as deleted_at\
|
|
||||||
FROM
|
|
||||||
users as u,
|
|
||||||
login_email_opt_in as e
|
|
||||||
WHERE
|
|
||||||
u.id = e.user_id AND
|
|
||||||
e.id in (
|
|
||||||
WITH opt_in AS (
|
|
||||||
SELECT
|
|
||||||
le.id, le.user_id, le.created, le.updated, ROW_NUMBER() OVER (PARTITION BY le.user_id ORDER BY le.created DESC) AS row_num
|
|
||||||
FROM
|
|
||||||
login_email_opt_in as le
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
opt_in.id
|
|
||||||
FROM
|
|
||||||
opt_in
|
|
||||||
WHERE
|
|
||||||
row_num = 1);`)
|
|
||||||
/*
|
|
||||||
// SELECT
|
|
||||||
// le.id
|
|
||||||
// FROM
|
|
||||||
// login_email_opt_in as le
|
|
||||||
// WHERE
|
|
||||||
// le.user_id = u.id
|
|
||||||
// ORDER BY
|
|
||||||
// le.updated DESC, le.created DESC LIMIT 1);`)
|
|
||||||
*/
|
|
||||||
|
|
||||||
// insert in users table the email_id of the new created email-contacts
|
// insert in users table the email_id of the new created email-contacts
|
||||||
const contacts = await queryFn(`SELECT c.id, c.user_id FROM user_contacts as c`)
|
const contacts = await queryFn(`SELECT c.id, c.user_id FROM user_contacts as c`)
|
||||||
@ -113,11 +79,13 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom
|
|||||||
)
|
)
|
||||||
|
|
||||||
// reconstruct the previous email back from contacts to users table
|
// reconstruct the previous email back from contacts to users table
|
||||||
const contacts = await queryFn(`SELECT c.id, c.email, c.user_id FROM user_contacts as c`)
|
const contacts = await queryFn(
|
||||||
|
`SELECT c.id, c.email, c.user_id, c.email_checked FROM user_contacts as c`,
|
||||||
|
)
|
||||||
for (const id in contacts) {
|
for (const id in contacts) {
|
||||||
const contact = contacts[id]
|
const contact = contacts[id]
|
||||||
await queryFn(
|
await queryFn(
|
||||||
`UPDATE users SET email = "${contact.email}" WHERE id = "${contact.user_id}" and email_id = "${contact.id}"`,
|
`UPDATE users SET email = "${contact.email}", email_checked="${contact.email_checked}" WHERE id = "${contact.user_id}" and email_id = "${contact.id}"`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
await queryFn('ALTER TABLE users MODIFY COLUMN email varchar(255) NOT NULL UNIQUE;')
|
await queryFn('ALTER TABLE users MODIFY COLUMN email varchar(255) NOT NULL UNIQUE;')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user