001// --------------------------------------------------------------------------------
002// Copyright 2002-2025 Echo Three, LLC
003//
004// Licensed under the Apache License, Version 2.0 (the "License");
005// you may not use this file except in compliance with the License.
006// You may obtain a copy of the License at
007//
008//     http://www.apache.org/licenses/LICENSE-2.0
009//
010// Unless required by applicable law or agreed to in writing, software
011// distributed under the License is distributed on an "AS IS" BASIS,
012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013// See the License for the specific language governing permissions and
014// limitations under the License.
015// --------------------------------------------------------------------------------
016
017package com.echothree.model.control.accounting.server.graphql;
018
019import com.echothree.model.control.graphql.server.graphql.AmountObject;
020import com.echothree.model.control.graphql.server.graphql.BaseObject;
021import com.echothree.model.control.party.server.graphql.PartyObject;
022import com.echothree.model.control.party.server.graphql.PartySecurityUtils;
023import com.echothree.model.data.accounting.server.entity.TransactionGlEntry;
024import graphql.annotations.annotationTypes.GraphQLDescription;
025import graphql.annotations.annotationTypes.GraphQLField;
026import graphql.annotations.annotationTypes.GraphQLName;
027import graphql.annotations.annotationTypes.GraphQLNonNull;
028import graphql.schema.DataFetchingEnvironment;
029
030@GraphQLDescription("transaction GL entry object")
031@GraphQLName("TransactionGlEntry")
032public class TransactionGlEntryObject
033        extends BaseObject {
034
035    private final TransactionGlEntry transactionGlEntry; // Always Present
036
037    public TransactionGlEntryObject(TransactionGlEntry transactionGlEntry) {
038        this.transactionGlEntry = transactionGlEntry;
039    }
040
041    @GraphQLField
042    @GraphQLDescription("transaction")
043    @GraphQLNonNull
044    public TransactionObject getTransaction(final DataFetchingEnvironment env) {
045        return AccountingSecurityUtils.getHasTransactionAccess(env) ?
046                new TransactionObject(transactionGlEntry.getTransaction()) :
047                null;
048    }
049
050    @GraphQLField
051    @GraphQLDescription("transaction GL entry sequence")
052    @GraphQLNonNull
053    public int getTransactionGlEntrySequence() {
054        return transactionGlEntry.getTransactionGlEntrySequence();
055    }
056
057    @GraphQLField
058    @GraphQLDescription("group party")
059    @GraphQLNonNull
060    public PartyObject getGroupParty(final DataFetchingEnvironment env) {
061        var groupParty = transactionGlEntry.getGroupParty();
062
063        return PartySecurityUtils.getHasPartyAccess(env, groupParty) ?
064                new PartyObject(groupParty) :
065                null;
066    }
067
068    @GraphQLField
069    @GraphQLDescription("transaction GL account category")
070    public TransactionGlAccountCategoryObject getTransactionGlAccountCategory(final DataFetchingEnvironment env) {
071        var transactionGlAccountCategory = transactionGlEntry.getTransactionGlAccountCategory();
072
073        return transactionGlAccountCategory == null ? null :
074                AccountingSecurityUtils.getHasTransactionGlAccountCategoryAccess(env) ?
075                new TransactionGlAccountCategoryObject(transactionGlAccountCategory) :
076                null;
077    }
078
079    @GraphQLField
080    @GraphQLDescription("GL account")
081    @GraphQLNonNull
082    public GlAccountObject getGlAccount(final DataFetchingEnvironment env) {
083        return AccountingSecurityUtils.getHasGlAccountAccess(env) ?
084                new GlAccountObject(transactionGlEntry.getGlAccount()) :
085                null;
086    }
087
088    @GraphQLField
089    @GraphQLDescription("original currency")
090    @GraphQLNonNull
091    public CurrencyObject getOriginalCurrency(final DataFetchingEnvironment env) {
092        return AccountingSecurityUtils.getHasCurrencyAccess(env) ?
093                new CurrencyObject(transactionGlEntry.getOriginalCurrency()) :
094                null;
095    }
096
097    @GraphQLField
098    @GraphQLDescription("original debit")
099    public AmountObject getOriginalDebit() {
100        var originalDebit = transactionGlEntry.getOriginalDebit();
101
102        return originalDebit == null ? null :
103                new AmountObject(transactionGlEntry.getOriginalCurrency(), transactionGlEntry.getOriginalDebit());
104    }
105
106    @GraphQLField
107    @GraphQLDescription("original credit")
108    public AmountObject getOriginalCredit() {
109        var originalCredit = transactionGlEntry.getOriginalCredit();
110
111        return originalCredit == null ? null :
112                new AmountObject(transactionGlEntry.getOriginalCurrency(), transactionGlEntry.getOriginalCredit());
113    }
114
115    @GraphQLField
116    @GraphQLDescription("original debit")
117    public AmountObject getDebit() {
118        var debit = transactionGlEntry.getDebit();
119
120        return debit == null ? null :
121                new AmountObject(transactionGlEntry.getGlAccount().getLastDetail().getCurrency(), transactionGlEntry.getDebit());
122    }
123
124    @GraphQLField
125    @GraphQLDescription("original credit")
126    public AmountObject getCredit() {
127        var credit = transactionGlEntry.getCredit();
128
129        return credit == null ? null :
130                new AmountObject(transactionGlEntry.getGlAccount().getLastDetail().getCurrency(), transactionGlEntry.getCredit());
131    }
132
133}