diff --git a/src/main/java/com/sasiedzi/event/domain/Transaction.java b/src/main/java/com/sasiedzi/event/domain/Transaction.java index 7fff91a..e38a23d 100644 --- a/src/main/java/com/sasiedzi/event/domain/Transaction.java +++ b/src/main/java/com/sasiedzi/event/domain/Transaction.java @@ -39,7 +39,7 @@ public class Transaction implements Serializable { private Event event; @OneToMany(fetch = FetchType.LAZY, mappedBy = "transaction", cascade = CascadeType.ALL, orphanRemoval = true) - @JsonIgnoreProperties(value = { "userAccount", "transaction", "event", "registration" }, allowSetters = true) + @JsonIgnoreProperties(value = { "transaction", "event", "registration" }, allowSetters = true) private Set transactionItems = new HashSet<>(); // jhipster-needle-entity-add-field - JHipster will add fields here diff --git a/src/main/java/com/sasiedzi/event/domain/TransactionItem.java b/src/main/java/com/sasiedzi/event/domain/TransactionItem.java index b474834..c3150ef 100644 --- a/src/main/java/com/sasiedzi/event/domain/TransactionItem.java +++ b/src/main/java/com/sasiedzi/event/domain/TransactionItem.java @@ -30,7 +30,7 @@ public class TransactionItem implements Serializable { @Column(name = "locked") private Boolean locked; - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) @JsonIgnoreProperties(value = { "users", "transactionItems" }, allowSetters = true) private UserAccount userAccount; diff --git a/src/main/java/com/sasiedzi/event/repository/TransactionRepository.java b/src/main/java/com/sasiedzi/event/repository/TransactionRepository.java index d683297..1f9d5d4 100644 --- a/src/main/java/com/sasiedzi/event/repository/TransactionRepository.java +++ b/src/main/java/com/sasiedzi/event/repository/TransactionRepository.java @@ -35,7 +35,9 @@ public interface TransactionRepository extends JpaRepository @Query("select transaction from Transaction transaction left join fetch transaction.event") List findAllWithToOneRelationships(); - @Query("select transaction from Transaction transaction left join fetch transaction.event where transaction.id =:id") + @Query( + "select transaction from Transaction transaction left join fetch transaction.event left join fetch transaction.transactionItems where transaction.id =:id" + ) Optional findOneWithToOneRelationships(@Param("id") Long id); @Query( diff --git a/src/main/java/com/sasiedzi/event/web/rest/TransactionResource.java b/src/main/java/com/sasiedzi/event/web/rest/TransactionResource.java index d8ecb96..d06232b 100644 --- a/src/main/java/com/sasiedzi/event/web/rest/TransactionResource.java +++ b/src/main/java/com/sasiedzi/event/web/rest/TransactionResource.java @@ -272,6 +272,10 @@ public class TransactionResource { public ResponseEntity getTransaction(@PathVariable("id") Long id) { LOG.debug("REST request to get Transaction : {}", id); Optional transaction = transactionRepository.findOneWithEagerRelationships(id); + // if (transaction.isPresent()) { + // transaction.get().getTransactionItems().stream().sorted(); + // transaction.get().getTransactionItems().sort(Comparator.comparing(item -> item.getUserAccount().getName())); + // } return ResponseUtil.wrapOrNotFound(transaction); } diff --git a/src/main/webapp/app/entities/transaction/transaction-details.component.ts b/src/main/webapp/app/entities/transaction/transaction-details.component.ts index 458cbcd..622c41a 100644 --- a/src/main/webapp/app/entities/transaction/transaction-details.component.ts +++ b/src/main/webapp/app/entities/transaction/transaction-details.component.ts @@ -11,7 +11,8 @@ export default defineComponent({ setup() { const transactionService = inject('transactionService', () => new TransactionService()); const alertService = inject('alertService', () => useAlertService(), true); - + const hasAnyAuthorityValues: Ref = ref({}); + const accountService = inject('accountService'); const route = useRoute(); const router = useRouter(); @@ -34,8 +35,19 @@ export default defineComponent({ return { alertService, transaction, - + accountService, + hasAnyAuthorityValues, previousState, }; }, + methods: { + hasAnyAuthority(authorities: any): boolean { + this.accountService.hasAnyAuthorityAndCheckAuth(authorities).then(value => { + if (this.hasAnyAuthorityValues[authorities] !== value) { + this.hasAnyAuthorityValues = { ...this.hasAnyAuthorityValues, [authorities]: value }; + } + }); + return this.hasAnyAuthorityValues[authorities] ?? false; + }, + }, }); diff --git a/src/main/webapp/app/entities/transaction/transaction-details.vue b/src/main/webapp/app/entities/transaction/transaction-details.vue index 9dfc257..bacb7bd 100644 --- a/src/main/webapp/app/entities/transaction/transaction-details.vue +++ b/src/main/webapp/app/entities/transaction/transaction-details.vue @@ -1,6 +1,6 @@ diff --git a/src/main/webapp/app/entities/transaction/transaction-update.component.ts b/src/main/webapp/app/entities/transaction/transaction-update.component.ts index 8952716..1e5f5fd 100644 --- a/src/main/webapp/app/entities/transaction/transaction-update.component.ts +++ b/src/main/webapp/app/entities/transaction/transaction-update.component.ts @@ -10,6 +10,8 @@ import EventService from '@/entities/event/event.service'; import { type IEvent } from '@/shared/model/event.model'; import { type ITransaction, Transaction } from '@/shared/model/transaction.model'; import { TransactionType } from '@/shared/model/enumerations/transaction-type.model'; +import { type IUserAccount } from '@/shared/model/user-account.model'; +import UserAccountService from '@/entities/user-account/user-account.service'; export default defineComponent({ compatConfig: { MODE: 3 }, @@ -20,7 +22,11 @@ export default defineComponent({ const transaction: Ref = ref(new Transaction()); + transaction.value.transactionItems = []; + const dictUserAccounts = ref([]) as Ref; + const eventService = inject('eventService', () => new EventService()); + const userAccountService = inject('userAccountService', () => new UserAccountService()); const events: Ref = ref([]); const transactionTypeValues: Ref = ref(Object.keys(TransactionType)); @@ -34,13 +40,37 @@ export default defineComponent({ const retrieveTransaction = async transactionId => { try { + const res2 = await userAccountService().retrieve(); + console.log('got accounts' + res2); + dictUserAccounts.value = res2.data; const res = await transactionService().find(transactionId); transaction.value = res; + // console.log('len'+transaction.value.transactionItems?.length); + // console.log('len'+dictUserAccounts.value.length); + // console.log('id'+transaction.value.transactionItems[0].userAccount.id); + // console.log('id'+(dictUserAccounts.value.find(account => account.id === transaction.value.transactionItems[0].userAccount.id) || null)); + // transaction.value.transactionItems[0].userAccount = dictUserAccounts.value.find(account => account.id === transaction.value.transactionItems[0].userAccount.id) || null; + transaction.value.transactionItems.forEach((item, index) => { + const matchingAccount = dictUserAccounts.value.find(account => account.id === item.userAccount.id); + transaction.value.transactionItems[index].userAccount = matchingAccount || null; + }); } catch (error) { alertService.showHttpError(error.response); } }; + // const retrieveUserAccounts = async () => { + // try { + // const res = await userAccountService().retrieve(); + // console.log('got accounts'+ res); + // dictUserAccounts.value = res.data; + // } catch (error) { + // alertService.showHttpError(error.response); + // } + // }; + // + // retrieveUserAccounts(); + if (route.params?.transactionId) { retrieveTransaction(route.params.transactionId); } @@ -61,10 +91,36 @@ export default defineComponent({ date: {}, comment: {}, event: {}, + // transactionItems: { + // $each: { + // amount: { required: validations.required, minValue: validations.minValue(0.01) }, + // comment: {}, + // locked: {}, + // userAccount: {}, + // }, + // }, }; const v$ = useVuelidate(validationRules, transaction as any); v$.value.$validate(); + const addTransactionItem = () => { + transaction.value.transactionItems.push({ + amount: 0, + comment: '', + locked: false, + userAccount: null, + }); + }; + + const removeTransactionItem = (index: number) => { + transaction.value.transactionItems.splice(index, 1); + }; + + const calculateUnsettledBalance = (): string => { + const balance = transaction.value.transactionItems.reduce((sum, item) => sum + item.amount, 0); + return balance.toFixed(2); + }; + return { transactionService, alertService, @@ -75,9 +131,12 @@ export default defineComponent({ currentLanguage, events, v$, + dictUserAccounts, + addTransactionItem, + removeTransactionItem, + calculateUnsettledBalance, }; }, - created(): void {}, methods: { save(): void { this.isSaving = true; diff --git a/src/main/webapp/app/entities/transaction/transaction-update.vue b/src/main/webapp/app/entities/transaction/transaction-update.vue index 234546d..fd6025e 100644 --- a/src/main/webapp/app/entities/transaction/transaction-update.vue +++ b/src/main/webapp/app/entities/transaction/transaction-update.vue @@ -76,6 +76,52 @@ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
LockedAccountAmountComment
+ {{ item.id }} + + + + + + + + + + +
+
+
+
+ + +
- {{ item.amount }} + {{ item.amount }}
diff --git a/src/main/webapp/app/shared/model/transaction.model.ts b/src/main/webapp/app/shared/model/transaction.model.ts index c21fba8..47ef4f8 100644 --- a/src/main/webapp/app/shared/model/transaction.model.ts +++ b/src/main/webapp/app/shared/model/transaction.model.ts @@ -8,7 +8,7 @@ export interface ITransaction { date?: Date | null; comment?: string | null; event?: IEvent | null; - items?: ITransactionItem[] | []; + transactionItems?: ITransactionItem[] | []; } export class Transaction implements ITransaction { @@ -18,7 +18,7 @@ export class Transaction implements ITransaction { public date?: Date | null, public comment?: string | null, public event?: IEvent | null, - public items?: ITransactionItem[] | [], + public transactionItems?: ITransactionItem[] | [], ) {} }