<#--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<div>
    <#if glAcctgTrialBalanceList?has_content>
        <div>
            <form name="glAccountTrialBalanceReport" id="glAccountTrialBalanceReport">
                <div>
                    <a href="<@ofbizUrl>GlAccountTrialBalanceReportPdf.pdf?organizationPartyId=${organizationPartyId}&amp;timePeriod=${parameters.timePeriod}&amp;isPosted=${parameters.isPosted}&amp;glAccountId=${parameters.glAccountId}</@ofbizUrl>" target="_BLANK" class="buttontext">${uiLabelMap.AccountingInvoicePDF}</a>
                </div>
                <h3>${uiLabelMap.AccountingSubsidiaryLedger}</h3>
                <h3>${uiLabelMap.FormFieldTitle_companyName} : ${(currentOrganization.groupName)!}</h3>
                <h3>${uiLabelMap.AccountingTimePeriod} : <#if currentTimePeriod?has_content>${(currentTimePeriod.fromDate)!} ${uiLabelMap.CommonTo} ${(currentTimePeriod.thruDate)!}</#if></h3>
                <h3>${uiLabelMap.AccountingGlAccountNameAndGlAccountCode} : ${(glAccount.accountCode)!} - ${(glAccount.accountName)!}</h3>
                <div style="width: 1210px;">
                    <table border=2>
                        <tr>
                            <td align="left"><b>${uiLabelMap.FormFieldTitle_transactionDate}</b></td>
                            <td align="left"><b>${uiLabelMap.AccountingAccountTransactionId}</b></td>
                            <td align="left"><b>${uiLabelMap.CommonDescription}</b></td>
                            <td align="left"><b>${uiLabelMap.AccountingTypeOfTheCurrency}</b></td>
                            <td align="left"><b>${uiLabelMap.AccountingOriginalCurrency}</b></td>
                            <td align="right"><b>${uiLabelMap.AccountingDebitAmount}</b></td>
                            <td align="right"><b>${uiLabelMap.AccountingCreditAmount}</b></td>
                            <td align="right"><b>${uiLabelMap.AccountingDebitOrCreditOfBalance}</b></td>
                            <td align="right"><b>${uiLabelMap.AccountingBalanceOfTheAccount}</b></td>
                        </tr>
                        <tr class="header-row">
                            <td colspan=2></td>
                            <td colspan=3 align="center"><b>${uiLabelMap.AccountingTheBalanceOfLastYear}</b></td>
                            <td colspan=2></td>
                            <td ALIGN="right"><b><#if (isDebitAccount)>${uiLabelMap.AccountingDebitFlag}<#else>${uiLabelMap.AccountingCreditFlag}</#if></b></td>
                            <td ALIGN="right">${(openingBalance)!}</td>
                        </tr>
                        <#list glAcctgTrialBalanceList as glAcctgTrialBalance>
                        
                            <#assign acctgTransAndEntries = glAcctgTrialBalance.acctgTransAndEntries/>
                            <#if acctgTransAndEntries?has_content>
                                <#list acctgTransAndEntries as acctgTransAndEntry>
                                <tr>
                                    <td ALIGN="left">${(acctgTransAndEntry.transactionDate)!}</td>
                                    <td ALIGN="left">${(acctgTransAndEntry.acctgTransId)!}</td>
                                    <td ALIGN="left">${(acctgTransAndEntry.transDescription)!}</td>
                                    <td ALIGN="left">${(acctgTransAndEntry.currencyUomId)!}</td>
                                    <td ALIGN="left">${(acctgTransAndEntry.origCurrencyUomId)!}</td>
                                    <td ALIGN="right"><#if (acctgTransAndEntry.debitCreditFlag)! == "D">${(acctgTransAndEntry.amount)!}<#else>0</#if></td>
                                    <td ALIGN="right"><#if (acctgTransAndEntry.debitCreditFlag)! == "C">${(acctgTransAndEntry.amount)!}<#else>0</#if></td>
                                    <td ALIGN="right"></td>
                                    <td ALIGN="right"></td>
                                </tr>
                                </#list>
                                <tr class="header-row">
                                    <td colspan=2></td>
                                    <td colspan=3 ALIGN="center"><b>${uiLabelMap.AccountingTotalOfTheCurrentMonth}</b></td>
                                    <td ALIGN="right" colspan=1><b>${(glAcctgTrialBalance.debitTotal)!}</b></td>
                                    <td ALIGN="right" colspan=1><b>${(glAcctgTrialBalance.creditTotal)!}</b></td>
                                    <td ALIGN="right" colspan=1><b><#if (isDebitAccount)>${uiLabelMap.AccountingDebitFlag}<#else>${uiLabelMap.AccountingCreditFlag}</#if></b></td>
                                    <td ALIGN="right" colspan=1><b>${(glAcctgTrialBalance.balance)!}</b></td>
                                </tr>
                                <tr class="header-row">
                                    <td colspan=2></td>
                                    <td ALIGN="center" colspan=3><b>${uiLabelMap.AccountingTotalOfYearToDate}</b></td>
                                    <td ALIGN="right"><b>${glAcctgTrialBalance.totalOfYearToDateDebit}</b></td>
                                    <td ALIGN="right"><b>${glAcctgTrialBalance.totalOfYearToDateCredit}</b></td>
                                    <td ALIGN="right"><b><#if (isDebitAccount)>${uiLabelMap.AccountingDebitFlag}<#else>${uiLabelMap.AccountingCreditFlag}</#if></b></td>
                                    <td ALIGN="right"><b>${(glAcctgTrialBalance.balanceOfTheAcctgForYear)!}</b></td>
                                </tr>
                            </#if>
                        </#list>
                    </table>
                </div>
            </form>
        </div>
    <#else>
        ${uiLabelMap.CommonNoRecordFound}
    </#if>
</div>
